码迷,mamicode.com
首页 > 数据库 > 详细

MySQL常见连接查询

时间:2017-08-15 11:24:32      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:无法   png   左连接   images   实际应用   sql   学生   存储   常见   

在实际应用中,由于不同的业务需求,一般的select查询语句无法满足要求。所以就需要了解一些MySQL的高级查询方式

内连接 inner join

典型的连接查询,有相等(=)连接和不等(<>)连接。如:现在有产品表及供应商表

产品表:

技术分享

供应商表:

技术分享

如果现在有个需求:查询产品表中产品对应的供应商公司名称及地址。那么就可以根据产品表中的供应商ID进行连接查询

技术分享

 这样根据两个表中供应商ID相同的条件,就查询出想要的数据。注:连接查询默认为inner join,所以inner可省略不写

左连接 left join

left join 也可写成left outer join,是外连接的其中一种查询方式,其他的外连接还有右连接(right join | right outer join)、完整外部连接(full join | full outer join)

假设:有一张学生表,里面存储了学生的学号、名字、年龄、性别等相关信息。还有一张技能表,里面存储了学生的学号以及对应的特长

现在要查询学生的信息,并且展示他们所掌握的特长。但是并不是所有的学生都有特长,所以此时要用到left join而不能用inner join

表students:

技术分享

表skills:

技术分享

连接查询:

技术分享

这样就查询到所有的学生和他们掌握的技能,没有特长的显示为Null。

所以,左连接查询返回左表中符合条件的所有行,如果左表中的某行记录在右表中没有匹配,那么在结果集中,相关右表的列显示为空。

右连接 right join

右连接查询返回所有符合条件的右表记录,如果右表的记录在左表找不到匹配,那么相关左表的列显示为空。

还以上文中的students表和skills表为例。假设:需要找出所有拥有特长的学生。结果如下:

技术分享

 

完全连接 full join

完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。

由于MySQL好像不支持full join,可以使用union all来实现。如:

技术分享

结果集中将两个查询结果合并在一块,如果去除重复记录,可使用union来代替union all

技术分享

 

MySQL常见连接查询

标签:无法   png   左连接   images   实际应用   sql   学生   存储   常见   

原文地址:http://www.cnblogs.com/feanmy/p/7363391.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!