最近,突然想起来数据库有好些时间没用到,所以,想把数据库有关的知识回顾一下,所以接下来这个月,基本上会以数据库的帖子来写为主,首先,很多同学都会有个错觉,觉得学习数据库会sql语句的增删改查就够了,其实,这仅仅是片面的认知,掌握了这些还远远不够,sql是你作为谋求生计的基本功,不会也得会,但是,要想变得优秀,还得学习更多的,比如:存储器、索引、事务等等。今天先和大家聊聊面试时技术官常会问你的:你说说看左连接与右连接以及全连接的区别,这个问题不管你是面试开发岗、测试岗甚至是产品岗,都会问到,接下来的慢慢看,就当回顾一下旧知识
在具体的介绍之前,先准备两张表,拿我自己的举例:test001(看作左表) 、 test002(看作右表)
关键字:inner join
sql语句:select* from table_left(表名) inner jointable_right(表名) on table_left.id = table_right.id
注释说明:结合两张表的记录,返回相关的查询结果,返回的是两个表的交集部分(即阴影部分),见下图
用我刚刚上面举例的两张表查询一下:SELECT* FROM test001 INNER JOIN test002 ON test001.id=test002.id
两张表都有主键id,内连接的查询就是找出相同的主键以及主键附带的字段信息,这里咱们可以把sql再改进一下,让查询结果看起来不是那么累赘
sql语句 : SELECT test001.id AS ID ,test001.username,test002.job FROM test001 INNER JOIN test002 ON test001.id=test002.id
关键字:left join
sql语句:select* from table_left(表名)left jointable_right(表名) on table_left.id = table_right.id
注释说明:left join 是left outer join 的简写,全称其实是左外连接,属于外连接的一种,左连接查询,左表的信息全部展示出来,右表只会展示符合搜索条件的信息,不足的地方记为NULL
同样的,用我刚刚最上面准备好的两张表查询一下:SELECT test001.id AS ID ,test001.username,test002.job FROM test001 LEFT JOIN test002 ON test001.id=test002.id
关键字:right join
sql语句:select* from table_left(表名) right jointable_right(表名) on table_left.id = table_right.id
注释说明:right join 是right outer join 的简写,全称是右外连接,也属于外连接的一种,右连接查询,右表的信息全部展示出来,左表只会展示符合搜索条件的信息,不足的地方记为NULL
如出一辙,用我刚刚最上面准备好的两张表查询一下:SELECT test002.id AS ID ,test001.username,test002.job FROM test001 RIGHT JOIN test002 ON test001.id=test002.id
看上图的右连接查询结果:右表的信息都有,左表的信息,有的就展示,没有的有用NULL表示,很容易区别
关键字:union / union all
sql语句:(select colum1,colum2,colum3... from table_left)union(select colum1,colum2,colum3... from table_right)
(select colum1,colum2,colum3... from table_left)union all(select colum1,colum2,colum3... from table_right)
全连接:实际上就是把两张表合并,不管有的没的,都先给整上来。
注意事项:①用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并;通常采用union all 进行合并;
②被union 连接的sql 子句,单个子句中不用写order by ,因为不会有排序的效果。但可以对最终的结果集进行排序;
(select colum1,colum2....from A order by id) union all (select colum1,colum2... from B order by id); //没有排序效果
(selectcolum1,colum2... from A ) union all (selectcolum1,colum2... from B ) order by id; //有排序效果
同样的,我用最开始最上面准备的两张表,来进行全连接合并
查询结果看上图:左表的字段信息和右表的字段信息都全部显示,如果你想进行id排序也可以,加个order by id
(SELECT test001.id,test001.username FROM test001)UNION ALL (SELECT test002.id,test002.job FROM test002) ORDER BY id
友情提示:union会自动将完全重复的数据去除掉;union all会保留那些重复的数据;所以,建议大家合理使用,根据自己的需求进行sql查询。