1:mysql 自连接
SELECT emp.uid,emp.username,mar.uid,mar.username
FORM employees emp,employees mar, WHERE emp.super_id = mar.uid
mysql 自连接就是form 同一张表两次,然后起别名。进行判断
2:mysql 内连接 和 外连接
(1):mysql内连接
mysql 内连接就是把两个表中相等的数据查询出来
SELECT e.last_name,d.city
form employees e,departments d
WHERE e.department_id = d.deparment_id
或者:
SELECT e.last_name,d.city
form employees e JOIN departments d
ON e.department_id = d.deparment_id
(2):外连接(左外连接 和 右外连接)
mysql 左外连接就是吧 两个表相同的数据 加上 左表所有的数据 全部查询出来 右连接同理
SELECT e.last_name,d.city
form employees e LEFT JOIN departments d
ON e.department_id = d.deparment_id
SELECT e.last_name,d.city
form employees e RIGHT JOIN departments d
ON e.department_id = d.deparment_id
(3):显示左表所有 并且 不重复的
实现的原理就是利用左连接 查询出所有的数据来,然后加右表的条件 IS NULL 因为mysql 查询不到的会默认给 null
SELECT e.last_name,d.city
form employees e LEFT JOIN departments d
ON e.department_id = d.deparment_id
where d.deparment_id IS NULL
实现原理用上
SELECT e.last_name,d.city
FORM employees e RIGHT JOIN departments d
ON e.department_id = d.deparment_id
WHERE e.department_id IS NULL
(4):全连接 (满外连接)
有两种实现方式 UNION 和 UNION ALL
UNION 和 union all 的区别是 union 会返回两个查询结果的并集 但是会去除重复数据 效率比较底 不建议用union 推荐使用 union all 已提高mysql查询的效率
因此 要查询全连接 所有数据 可以使用下方的组合方式
m employees e LEFT JOIN departments d
ON e.department_id = d.deparment_id
UNION ALL
SELECT e.last_name,d.city
form employees e RIGHT JOIN departments d
ON e.department_id = d.deparment_id
WHERE e.department_id IS NULL