SQL进阶学习-mysql02_Jeffrey Yang
1、自连接
自连接即将表和自己连接,和将表与其他表连接大致相同,区别在于:两次引用要使用不同的别名
USE sql_hr;
SELECT e.employee_id,e.first_name,m.first_name AS manager
FROM employees e
JOIN employees m
ON e.reports_to = m.employee_id
- 1
- 2
- 3
- 4
- 5
- 6
查询结果:
2、复合连接条件
即多个列值作为主键条件进行连接
JOIN ....
ON oi.order_id = oin.order_id
AND oi.product_id = oin.product_id
- 1
- 2
- 3
3、内、外连接
内连接:JOIN
外连接:LEFT JOIN 、 RIGHT JOIN
其中:
LEFT JOIN:左边的表项全部显示,不只显示符合条件的
RIGHT JOIN:右边的表项全部显示,不只显示符合条件的
4、USING()可以代替ON …,但是只能用于两个表中列名相同的情况下, 使用USING对于组合列条件更简便,如:
USING(order_id,product_id)
- 1
注意:不管是几项,一定要加括号!
5、自然连接:不建议,会产生不可预估的结果(NATURAL JOIN)
6、交叉连接:一一对应,一列的某一项分别于另一列所有项组合,直到遍历整个列
隐式表示:
FROM shippers sh,products p
- 1
显式表示:
FROM shippers sh
CROSS JOIN products p
- 1
- 2
建议常用显式表示,更明显!
7、联合UNION
SELECT
order_id,
order_date,
'ACTIVE' AS status
FROM orders
WHERE order_date >= '2019-01-01'
UNION
SELECT
order_id,
order_date,
'Archived' AS status
FROM orders
WHERE order_date < '2019-01-01'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
推荐阅读