SQL99中的natural join 和 using

简介: natural join 叫自然连接,是SQL99语法中支持的一种连接方式,mysql与oracle等主流数据库均支持这种语法。natural join 无需声明连接条件,sql执行器会自动寻找连接的两个表中相同的字段去生成连接条件,然后取数据的交集。

一、natural join 是什么



natural join 叫自然连接,是SQL99语法中支持的一种连接方式,mysql与oracle等主流数据库均支持这种语法。natural join 无需声明连接条件,sql执行器会自动寻找连接的两个表中相同的字段去生成连接条件,然后取数据的交集。


其实自然连接就是自动生成连接条件的内连接而已。他也不是什么新的连接,就是一个为了简化写法的语法糖而已(mysql中)。我们可以用下面的sql来证明下这个连接到底是怎么执行的。


原始sql:

select a.user_id from sys_user  a 
natural join sys_user_role ;


sql执行器优化真正执行的sql:

select `sunacwy_cockpit`.`a`.`user_id` AS `user_id` from `sunacwy_cockpit`.`sys_user` `a` 
join `sunacwy_cockpit`.`sys_user_role` where (`sunacwy_cockpit`.`a`.`user_id` = `sunacwy_cockpit`.`sys_user_role`.`user_id`)


从上面的例子中我们可以看到,当写出了自然连接时,真正执行的还是内连接的sql,只不过是省略了连接条件的书写而已。上面的自然连接的sql我们完全可以视作如下的sql:

select a.user_id from sys_user  a 
inner join sys_user_role b on a.user_id = b. user_id;


不过使用内连接必须有个前提条件,两个表的连接字段必须是同名的,这样才能正常使用自然连接。


二、using是什么



先看下下面三个意思完全一致的sql,就会明白usring是什么了。


sql一:

select a.user_id from sys_user  a 
inner join sys_user_role b on a.user_id = b. user_id;


sql二:

select a.user_id from sys_user   
inner join sys_user_role using(user_id);


sql三:

select a.user_id from sys_user   
natural join sys_user_role;


这样应该很直观就可以看出usring是干什么的了,usring()里面的字段就是连接条件,其实using在mysql中也是一个语法糖而已,sql执行优化器还是会把他翻译成where条件或者on条件的,此外using使用也是要求连接字段必须在两个表中同名才行。


三、总结natural join 和 using



其实无论是natural join 还是 using在mysql中都不是一个新的东西,他们都会被解析成现有的语法来执行,不使用他们没有丝毫的影响,他们的出现就是为了简化写法而已。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 关系型数据库 MySQL
SQL FULL OUTER JOIN 关键字
SQL FULL OUTER JOIN 关键字
209 2
|
SQL
SQL JOIN
【11月更文挑战第06天】
294 4
|
SQL 关系型数据库 MySQL
图解 SQL 里的各种 JOIN
用文氏图表示 SQL 里的各种 JOIN,一下子就理解了。
1004 2
|
SQL 分布式计算 Java
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
388 3
|
JSON 数据格式 SQL
SQL开发问题之直接使用join方法在处理字符串类型属性时可能会遇到性能问题如何解决
SQL开发问题之直接使用join方法在处理字符串类型属性时可能会遇到性能问题如何解决
247 8
|
SQL
SQL FULL OUTER JOIN 关键字
【7月更文挑战第17天】SQL FULL OUTER JOIN 关键字。
292 6
|
SQL
SQL INNER JOIN 关键字
【7月更文挑战第17天】SQL INNER JOIN 关键字。
217 5
|
SQL 数据库
SQL LEFT JOIN 关键字
【7月更文挑战第17天】SQL LEFT JOIN 关键字。
208 4
|
SQL
SQL JOIN
【7月更文挑战第17天】SQL JOIN。
230 3
|
SQL 数据库
SQL RIGHT JOIN 关键字
【7月更文挑战第17天】SQL RIGHT JOIN 关键字。
186 2