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多表联查总结的主要内容,如果未能解决你的问题,请参考以下文章