SQL
SQL JOIN
四种SQL JOIN 基本概念
-
INNER JOIN:如果表中有至少一个匹配,则返回行
-
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
-
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
-
FULL JOIN:只要其中一个表中存在匹配,则返回行
INNER JOIN
实际上是等值连接
等值连接:等值连接是指使用相等比较运算符(如=、<>, ! =, <, >, <=, >=等)来连接两个或多个表中列值相等的所有行。
只返回两个表根据指定列相匹配的行
LEFT JOIN
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
可以理解为 保留左表所有行 ,若右表有匹配左表的行就加上,如果没有匹配,则把对应的右表的列值设为null
没有匹配则置为null
SQL LEFT JOIN 语法
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
或:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
RIGHT JOIN 同理
FULL OUTER JOIN(mysql不支持)FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
SQL UNION
mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | www.google.cm/ | 1 | USA |
| 2 | 淘宝 | www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | www.runoob.com/ | 4689 | CN |
| 4 | 微博 | weibo.com/ | 20 | CN |
| 5 | Facebook | www.facebook.com/ | 3 | USA |
| 7 | stackoverflow | stackoverflow.com/ | 0 | IND |
+----+---------------+---------------------------+-------+---------+
mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name | url | country |
+----+------------+-------------------------+---------+
| 1 | QQ APP | im.qq.com/ | CN |
| 2 | 微博 APP | weibo.com/ | CN |
| 3 | 淘宝 APP | www.taobao.com/ | CN |
+----+------------+-------------------------+---------+
union
- Union:去除重复行,返回去重的结果集。
union all
- Union All:不去除重复行,返回包含所有行的结果集,包括重复的行。
在实际应用中,应根据需求选择合适的操作符。如果不需要保留重复的行,可以使用 UNION ALL 以获得更好的性能。如果需要保留重复的行,或者不确定是否存在重复数据,则应使用 UNION。