SQL JOIN 操作总结

2018-08-01  本文已影响38人  youthcity

前言

SQL中,JOIN 操作用于将多个表连接起来。我们工作中,常用的join方式有 INNER JOINLEFT JOIN。虽然 JOIN的方式有如下图所示的7种,实际上其实可以分为3种,分别是 INNER JOINLEFT JOINFULL OUTER JOIN,其余4种都是前三种的变种。

SQL JOINS

1)LEFT JOIN

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

SQL

SELECT column_name(s)
FROM table1
LEFT JOIN table2
WHERE table1.column_name = table2.column_name

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
WHERE table1.column_name = table2.column_name
LEFT JOIN 图示

2)INNER JOIN

INNER JOIN 关键字在表中存在至少一个匹配时返回行。

SQL

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
INNER JOIN

3)FULL OUTER JOIN (FULL JOIN) (MySQL 不支持)

FULL OUTER JOIN 结合了 LEFT JOINRIGHT JOIN的结果。

SQL

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
FULL OUTER JOIN

4) FULL OUTER JOIN BUT a.Key is null or b.Key is null

SELECT * FROM table_a
FULL OUTER JOIN table_b
on table_a.column_name = table_b.column_name
where table_a.column_name is null or table_b.column_name is null
FULL OUTER JOIN BUT a.key is null or b.key is null

5) LEFT JOIN BUT b.key is null

SELECT * from table_a
LEFT OUTER JOIN table_b
on table_a.column_name= table_b.column_name
where table_b.column_name is null
LEFT JOIN BUT b.key is null

6)RIGHT JOIN

SELECT * FROM table_a
RIGHT JOIN table_b
ON table_a.column_name = table_b.column_name
image.png

7)RIGHT JOIN BUT a.key is null

SELECT * FROM table_a
RIGHT JOIN table_b
ON table_a.column_name = table_b.column_name
WHERE table_a.column_name is null

总结

在平时的实践中,使用最多的还是 inner joinleft joinleft joinright join可以看作为同一类型的join操作。好比,乘数与被乘数。也就是说,我们完全可以使用 left join 替代 right join。在我们公司NodeJS项目中,使用到了一个ORMTypeORM),这库就只提供left join

关于joinwhere语句 与 ON 语句,我们常常困惑将什么条件放到 where 合适 还是放到 on 中合适。当为 inner join时,放在 whereON 中,查询结果都一样。当为 outer(left、right) join 时,放在 whereON 就有区别。当需要对交际做筛选时放在 where 中,当需要对单张表做筛选然后进行 join操作时,放在 ON 中。

参考资料

上一篇 下一篇

猜你喜欢

热点阅读