SQL多表联查总结

Posted

tags:

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

交叉连接:(不常用)
返回两个表的笛卡尔乘积(也即全组合排列)中符合查询条件的数据行。

内连接
返回连接表中符合连接条件和查询条件的数据行。

左外连接
返回符合连接条件和查询条件(即:内连接)的数据行,且还返回左表中不符合连接条件但符合查询条件的数据行。

右外连接
返回符合连接条件和查询条件(即:内连接)的数据行,且还返回右表中不符合连接条件但符合查询条件的数据行。

全外连接(不常用,mysql不支持)
返回符合连接条件和查询条件(即:内连接)的数据行,且还返回左表中不符合连接条件但符合查询条件的数据行以及右表中不符合连接条件但符合查询条件的数据行。

例子

表结构和数据:
users表

id name
1 李四
2 王五
4 张三

logs表

id user_id log
1 1 操作了A
2 1 操作了B
3 2 操作了C
4 2 操作了D
5 3 操作了E

 

交叉连接:
语句

SELECT
a.`id`,
a.`name`,
b.`log`
FROM
`users` AS a,
`logs` AS b

结果

id name log
1 李四 操作了A
2 王五 操作了A
4 张三 操作了A
1 李四 操作了B
2 王五 操作了B
4 张三 操作了B
1 李四 操作了C
2 王五 操作了C
4 张三 操作了C
1 李四 操作了D
2 王五 操作了D
4 张三 操作了D
1 李四 操作了E
2 王五 操作了E
4 张三 操作了E

 

内连接:
语句

SELECT
a.`id`,
a.`name`,
b.`log`
FROM
`users` AS a
INNER JOIN `logs` AS b ON a.`id` = b.`user_id`

结果

id name log
1 李四 操作了A
1 李四 操作了B
2 王五 操作了C
2 王五 操作了D

 

左外连接:
语句

SELECT
a.`id`,
a.`name`,
b.`log`
FROM
`users` AS a
LEFT JOIN `logs` AS b ON a.`id` = b.`user_id`

结果

id name log
1 李四 操作了A
1 李四 操作了B
2 王五 操作了C
2 王五 操作了D
4 张三 NULL

 

右外连接:
语句

SELECT
a.`id`,
a.`name`,
b.`log`
FROM
`users` AS a
RIGHT JOIN `logs` AS b ON a.`id` = b.`user_id`

结果

id name log
1 李四 操作了A
1 李四 操作了B
2 王五 操作了C
2 王五 操作了D
NULL NULL 操作了E

 

以上是关于SQL多表联查总结的主要内容,如果未能解决你的问题,请参考以下文章

SQL 经验总结

SQL进阶篇之多表联查

Citrix SQL数据如何进行多表联查

MyBatis关于多表联查 关联关系之一--------一对多(单条sql语句查询)

java 多表联查sql语句效率问题

多表联查--00---概述---SQL92,99语法