WHCSRL 技术网

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
推荐阅读