2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > SQL99中的natural join 和 using

SQL99中的natural join 和 using

时间:2022-05-01 15:19:28

相关推荐

SQL99中的natural join 和 using

一、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中都不是一个新的东西,他们都会被解析成现有的语法来执行,不使用他们没有丝毫的影响,他们的出现就是为了简化写法而已。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。