四种join的区别已老生常谈:
- INNER JOIN(也可简写为JOIN): 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
那么问题来了,还有一种常见的写法是将表用逗号隔开,那这个又是怎么连接的呢。
先看这两张表。
使用逗号隔开的方法来连接表:
SELECT *
FROM employee,department
WHERE employee.DepartmentID = department.DepartmentID
输出结果:
可以很明显发现:这不就是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啊。