查询一个表中有,另一个表中没有的数据
1查询男朋友不在男神表的女神名
左外连接
SELECT
NAME
FROM
beauty
LEFT JOIN boys ON beauty.boyfriend_id = boys.id
where boys.id IS NULL
SELECT DISTINCT
NAME
FROM
beauty b,
boys
WHERE
b.boyfriend_id NOT IN (
SELECT
boyfriend_id
FROM
beauty,
boys
WHERE
beauty.boyfriend_id = boys.id
)
2查询哪个部门没有员工
右外
SELECT
d.*, e.employee_id,
e.department_id
FROM
employees e
RIGHT OUTER JOIN departments d ON d.department_id = e.department_id
WHERE
e.employee_id IS NULL
左外
SELECT
d.*, e.employee_id,
e.department_id
FROM
departments d
LEFT OUTER JOIN employees e ON d.department_id = e.department_id
WHERE
e.employee_id IS NULL

外连接:查询结果为主表中所有的记录
内连接:inner join
左外连接 left join左边是主表
右外连接 right join右边是主表
左外和右外可以交换两个表的顺序,可以实现同样的结果。

全外连接(mysql不支持)
全外连接 =内连接结果+表1中但表2中没有的+表2中有但表1中没有的
将全外连接转换为左外或者右外,只需把表1或者表2中主键变为is null即可
交叉连接 :笛卡尔乘积cross join
SELECT
beauty.*, boys.*
FROM
beauty
CROSS JOIN boys
3查询哪个城市没有部门
SELECT
city,
d.*
FROM
locations l
LEFT JOIN departments d ON l.location_id = d.location_id
WHERE
d.location_id IS NULL;
网友评论