玩转 MySQL 表之间的各种连接查询
1 概述
为什么要进行连接查询?
因为不同表之间的数据具有不同的用途和字段,连接查询可以将我们需要用到的两个表的不同字段进行关联,从而找到我们有用的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。
2 连接类型
3 各种连接详解和示例
首先我们新建两张表,并设置好相应的字段和数据
建表
学生表(student)
用户表(user)
数据
3.1 交叉连接
(1)图示
即笛卡尔积:所有情况的组合,不推荐使用
(2)SQL 语句和关键字
SQL:
关键字:无
(3)示例
3.2 内连接
(1)图示
多张表通过相同字段进行匹配,只显示匹配成功的数据
(2)SQL 语句和关键字
SQL:
关键字:inner join
(3)示例
3.3 外连接
3.3.1 左外连接
(1)图示
左外连接:以左表为基准(左表数据全部显示),去匹配右表数据,如果匹配成功 则全部显示;匹配不成功,显示部分(无数据部分 用 NULL 填充)
(2)SQL 语句和关键字
SQL:
关键字:left outer、union
(3)示例
3.3.2 右外连接
(1)图示
右外连接:以右表为基准(右表数据全部显示),去匹配左表数据,如果匹配成功 则全部显示;匹配不成功,显示部分(无数据部分 用 NULL 填充)
(2)SQL 语句和关键字
SQL:
关键字:right outer join、union
(3)示例
3.3.3 全外连接
(1)图示
全外连接 = 左外连接+右外连接+去重
(2)SQL 语句和关键字
SQL:
注意:MySQL 是不支持全外的连接的,这里给出的写法适合 Oracle 和 DB2。但是可以通过左外和右外求合集来获取全外连接的查询结果。
左外和右外的合集:
关键字:right outer join、left outer join、union
(3)示例
3.4 自连接
(1)图示
将一张表 通过别名 “视为”不同的表
(2)SQL 语句和关键字
SQL:
关键字:无
(3)示例
4 小总结
在各种连接中还可以被分为等值连接和不等值连接,但是一般情况下只使用等值连接
select 语句尽量不要使用 select * ...,以上的演示只是为了方便
版权声明: 本文为 InfoQ 作者【Barry Yan】的原创文章。
原文链接:【http://xie.infoq.cn/article/8ba21671bd39735d9f0bec5db】。文章转载请联系作者。
评论