一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。
前言
上篇我们又学习了一部分多表查询。有兴趣的小伙伴可以阅读(# MySQL学习-多表查询(六))。
下面继续学习MySQL中的多表查询。
SQL99新特性
自然连接
示例一
写自然连接的概念前,先看个示例。
查询员工表和部门表中所有相同的字段,进行等值比较(也就是=)的数据。
SELECT e.employee_id, e.name, d.department_name
FROM employees e JOIN departments d
ON e.'department_id' = d.'department_id'
AND e.'manager_id' = d.'manager_id'
上述示例,可以使用SQL99新的写法:
SELECT e.employee_id, e.name, d.department_name
FROM employees e NATURAL JOIN departments d
上面的写法就是自然连接,是使用‘NATURAL JOIN’来实现的。它会自动查询两张连接表中所有相同的字段,然后进行等值连接。
USING使用
示例二
SELECT e.employee_id, e.name, d.department_name
FROM employees e JOIN departments d
ON e.'department_id' = d.'department_id'
以上示例可以使用USING简化:
SELECT e.employee_id, e.name, d.department_name
FROM employees e JOIN departments d
USING (department_id)
当进行连接的时候,USING可以指定数据表里的同名字段进行等值连接,但是只能配合JOIN一起使用。
多表连接总结
表连接的约束条件可以有三种方式:WHERE,ON,USING
- WHERE:适用于所有的关联查询。
- ON:只能和JOIN一起使用,只能写关联条件。虽然关联条件可以并到WHERE中和其他条件一起写,但分开写可读性更好。
- USING:只能和JOIN一起使用,而且要求两个关联字段在关联表中名称一致,而且只能表示关联字段值相等。
扩展
多表连接时,也可以使用以下写法:
SELECT e.employee_id, e.name, d.department_name, j.job_title
FROM employees e JOIN departments d JOIN jobs j
ON e.'department_id' = d.'department_id'
AND e.'job_id' = j.'job_id'
三张表连续使用JOIN,后面跟着一个ON。但是不太建议使用这种方式,还是JOIN ON后面接着JOIN ON的方式更好一点。
注意
在进行多表查询的时候,我们要控制连接表的数量。多表连接就相当于嵌套for循环一样,非常消耗资源,会让SQL查询性能下降的很严重,因此不要连接不必要的表。在许多DBMS中,也都会有最大连接表的限制。
到这里,我们就把多表查询全部学完了。
今天先学习到这里,明天继续。