Ezio's Blog
Posts Categories Tags Music Mood About
Ezio's Blog· Light
☰ Menu
Posts Categories Tags Music Mood About
Expand all Back to top Go to bottom

MySQL数据库多表查询

Author: Ezio Date: September 3, 2019  11:17:32 Category: MySQL

内连接(一种场景)

inner join 或者 join

例:

1
2
3
SELECT a.*,b.* FROM a
INNER JOIN b
ON a.id=b.id

应用场景:

inner-join

满足某一条件的A,B内部的数据,得到内部共有数据,相当于求交集。


外连接(六种场景)

场景一:

left join 或者left outer join

例:

1
2
3
SELECT a.*,b.* FROM a
LEFT JOIN b
ON a.id=b.id

应用场景:

left-join

得到的是A的所有数据和满足某一条件的B的数据。


场景二:

[left join] + [where b.column is null]

1
2
3
4
SELECT a.id aid,a.age,b.id bid,b.name FROM tablea a
LEFT JOIN tableb b
ON a.id = b.id
WHERE b.id is NULL

应用场景:

left-join+where-b.column-is-null

该场景得到的是A中的所有数据减去“与B满足统一条件的数据”,然后得到A剩下的数据。


场景三:

right join 或者right outher join

1
2
3
SELECT a.id aid,a.age,b.id bid,b.name FROM a
RIGHT JOIN b
ON a.id = b.id

应用场景:

right-join

该场景下得到B的所有数据和满足某一条件的A的数据。


场景四:

[right join] + [where A.column is null]

1
2
3
4
SELECT a.id aid,a.age,b.id bid,b.name FROM a
RIGHT JOIN b
ON a.id=b.id
WHERE a.id is NULL

应用场景:

right-join+where

该场景下得到的是B中的所有数据减去“与A满足统一条件的数据”,然后得到B的剩余数据。


场景五:

full join(mysql不支持,但可以用left join union right join代替)

1
2
3
4
5
6
7
SELECT a.id aid,a.age,b.id bid,b.name FROM a
LEFT JOIN b
ON a.id = b.id
UNION
SELECT a.id aid,a.age,b.id bid,b.name FROM a
RIGHT JOIN b
ON a.id = b.id

union会将重复的记录合并

应用场景:

full-join

该场景得到的是满足某一条件的公有数据和独有数据,类似并集。


场景六:

full join + is null(mysql不支持,但可以用(left join+is null)union(right join+is null)

1
2
3
4
5
6
7
8
9
SELECT a.id aid,a.age,b.id bid,b.name FROM a
LEFT JOIN b
ON a.id = b.id
WHERE b.id is NULL
UNION
SELECT a.id aid,a.age,b.id bid,b.name FROM a
RIGHT JOIN b
ON a.id = b.id
WHERE a.id is NULL

应用场景:

full-join+is-null

该场景下得到的是A,B中不满足某一条件的记录之和。


该文章借鉴参考于https://www.cnblogs.com/yuzhanhong/p/9286910.html

Author: Ezio

Permalink: https://ezioy.cn/2019/09/03/MySQL%E6%95%B0%E6%8D%AE%E5%BA%93%E5%A4%9A%E8%A1%A8%E6%9F%A5%E8%AF%A2/

License: Copyright (c) 2019 CC-BY-NC-4.0 LICENSE

Slogan: Nothing is true,Everything is permitted

Tag(s): # MySQL
back · home
MySQL数据库索引原理及类型 Git上传远程仓库命令组
Ezio © 2019 - 2026 | Powered by Hexo & Chic | 访客数量:   浏览次数: | 渝公网安备50011302222043 | 渝ICP备2023013933号-1