MySQL常见连接查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL常见连接查询相关的知识,希望对你有一定的参考价值。

在实际应用中,由于不同的业务需求,一般的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常见连接查询的主要内容,如果未能解决你的问题,请参考以下文章

常见的DBCP连接池配置

MySQL中的各种查询

MySQL--5子查询与连接小结

mysql数据库关联查询lert join常见使用

MySQL数据库联合查询与连接查询

MySQL连接查询 内连接和外连接的区别