赞
踩
我们在查询两张表时,可能会将连接条件设为相同的字段,如下:
比如我们想查询员工的id、姓名和所在部门,
会从员工表和部门表中,
根据部门id和管理id是否相等进行查询
这里的连接条件是两张表中共有的字段:部门id和管理id,
通过这两个字段是否分别相同来进行判断
mysql> SELECT employee_id,last_name,department_name
-> FROM employees e JOIN departments d
-> ON e.`department_id`=d.`department_id`
-> AND e.`manager_id`=d.`manager_id`;
而有了NATURAL JOIN
自然连接后,它会帮我们自动查询两张表中 所有相同的字段
,然后 进行等值连接
,这样就可以直接省略连接条件
mysql> SELECT employee_id,last_name,department_name
-> FROM employees NATURAL JOIN departments;
这两种写法效果相同,查询到的都是同一个结果
优点是简化了SQL语句,查询更便捷,缺点是不够灵活,如果我们只想根据一个相同字段进行查询的时候,这个时候就无法使用自然连接
在进行等值连接查询时,我们可能会写出下面的SQL语句:
SELECT employee_id,last_name,department_name
FROM employees e,departments d
WHERE e.department_id=d.department_id;
//在e和d两张表中 根据department_id是否相等查询出员工的id、姓名、部门
当比较的两个字段同名的时候,我们可以使用USING
,USING
可以将数据表里面的同名字段进行等值连接,需要搭配JOIN
一起使用.
SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
USING(department_id);
优点:简化了SQL语句,缺点:无法表示自连接
多表连接的约束条件有三种方式:
WHERE
:普遍适用JOIN...ON
:只能写关联条件JOIN...USING
:关联的字段在表中名称和字段值必须相等规范:
多表连接时,需要控制表的数量,不能太多,多表连接和for循环嵌套类似,太多了消耗资源,会导致SQL查询性能下降严重.
【 强制】超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致;多表关联查询时, 保证被关联的字段需要有索引。
说明:即使双表 join 也要注意表索引、SQL 性能。
来源:阿里巴巴《Java开发手册》
随着历史的发展,SQL出现了很多不同的版本,随之而来的就是不同版本的标准规范
我们使用的SQL有两个最主要的标准规范,分别是SQL92
和SQL99
,92和99就是标准提出的年份,除了92和99年的这两个标准外,还有其他很多的标准,但是由于其他标准内容过于复杂和庞大,很少有人能掌握所有的内容,所以标准流行范围不广。
SQL92语法简单,但是写出的SQL语句过长,可读性差,而SQL99语法可读性强,但是语法复杂.
SQL92
和SQL99
是经典的SQL标准,也被称为SQL-2
和SQL-3
标准.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。