MySQL基础~NATURAL JOIN(自然连接) 和USING的使用(SQL99语法新特性)

NATURAL JOIN

我们在查询两张表时,可能会将连接条件设为相同的字段,如下:

比如我们想查询员工的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语句,查询更便捷,缺点是不够灵活,如果我们只想根据一个相同字段进行查询的时候,这个时候就无法使用自然连接

USING

在进行等值连接查询时,我们可能会写出下面的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、姓名、部门

当比较的两个字段同名的时候,我们可以使用USINGUSING可以将数据表里面的同名字段进行等值连接,需要搭配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开发手册》

SQL99标准了解

随着历史的发展,SQL出现了很多不同的版本,随之而来的就是不同版本的标准规范

我们使用的SQL有两个最主要的标准规范,分别是SQL92SQL99,92和99就是标准提出的年份,除了92和99年的这两个标准外,还有其他很多的标准,但是由于其他标准内容过于复杂和庞大,很少有人能掌握所有的内容,所以标准流行范围不广。

SQL92语法简单,但是写出的SQL语句过长,可读性差,而SQL99语法可读性强,但是语法复杂.
SQL92SQL99是经典的SQL标准,也被称为SQL-2SQL-3标准.

  • 14
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值