四种join的区别已老生常谈:

  • INNER JOIN(也可简写为JOIN): 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

那么问题来了,还有一种常见的写法是将表用逗号隔开,那这个又是怎么连接的呢。

先看这两张表。


mysql 逗号间隔关联 sql逗号连接_SQL

使用逗号隔开的方法来连接表:

SELECT *  
FROM   employee,department 
WHERE  employee.DepartmentID = department.DepartmentID

输出结果:


mysql 逗号间隔关联 sql逗号连接_sql_02

可以很明显发现:这不就是inner join嘛!

没错,答案正是这样:sql用逗号连接多张表对应的是 inner join。

为了严谨性,我到处找sql的官方文档来证实这一点。然而搜不出来sql的文档(谁知道网址请务必发我),最后还是在维基百科上找到了可以当作论据的话。

JOIN
SELECT
FROM
WHERE
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啊。

mysql 逗号间隔关联 sql逗号连接_sql_03