当前位置:   article > 正文

SQL99中的natural join 和 using_sql natural join

sql natural join

一、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 ; 
  • 1
  • 2

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`)
  • 1
  • 2

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

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

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

二、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;
  • 1
  • 2

sql二:

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

sql三:

select a.user_id from sys_user   
natural join sys_user_role;
  • 1
  • 2

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

三、总结natural join 和 using

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/497332
推荐阅读
相关标签
  

闽ICP备14008679号