sql⽤逗号连接多张表对应哪个join?
四种join的区别已⽼⽣常谈:
INNER JOIN(也可简写为JOIN): 如果表中有⾄少⼀个匹配,则返回⾏
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的⾏
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的⾏
FULL JOIN: 只要其中⼀个表中存在匹配,就返回⾏
那么问题来了,还有⼀种常见的写法是将表⽤逗号隔开,那这个⼜是怎么连接的呢。
sql left join 多表连接先看这两张表。
使⽤逗号隔开的⽅法来连接表:
SELECT *
FROM employee,department WHERE employee.DepartmentID = department.DepartmentID
输出结果:
可以很明显发现:这不就是inner join嘛!
没错,答案正是这样:sql⽤逗号连接多张表对应的是 inner join。
为了严谨性,我到处sql的官⽅⽂档来证实这⼀点。然⽽搜不出来sql的⽂档(谁知道⽹址请务必发我),最后还是在上到了可以当作论据的话。
SQL 定义了两种不同语法⽅式去表⽰"连接"。⾸先是"显式连接符号",它显式地使⽤关键字
JOIN
,
其次是"隐式连接符号",它使⽤所谓的"隐式连接符号"。隐式连接符号把需要连接的表放到
SELECT
语句的
FROM
部分,并⽤逗号隔开。这样就构成了⼀个"交叉连接",
WHERE
语句可能放置⼀些过滤谓词(过滤条件)。那些过滤谓词在功能上等价于显式连接符号. SQL 89标准只⽀持内部连接与交叉连接,因此只有隐式连接这种表达⽅式;SQL 92标准增加了对外部连接的⽀持,这才有了
JOIN
表达式。
也就是说,
SELECT *
FROM employee
INNER JOIN department ON employee.DepartmentID = department.DepartmentID
等价于:
SELECT *
FROM employee,department WHERE employee.DepartmentID = department.DepartmentID
⾄于哪个效率⾼⼀点,其实两者是⼀回事,没有区别。只是内连接是由SQL 1999规则定的书写⽅式⽽已。
另外,在写sql语句测试4种join的时候,发现mysql对于full join返回的结果和inner join⼀模⼀样。经查阅资料,才发现原来mysql不⽀持full join啊。
见:
参考资料:
1.
2.w3school
3.CSDN博客最后⼀段话
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论