1. 数据库表连接的几种方式:
用户表:
(1)left join左连接
返回左边表中的所有行,即使右边表中没有行与之匹配,左边的行依然显示,右边没有匹配尚的显示为null
如果查询左表独有,使用以下sql
# 左表独有
SELECT * FROM
user_info AS ur
LEFT JOIN
city_info AS ci
ON ur.city_id = ci.id
WHERE ci.id IS NULL;
(2)right join右连接
和左连接正好相反,返回右边表的所有行,即使左边没有行与之匹配,未匹配上的显示null
查询右边表独有的数据
# 右表独有
SELECT * FROM
user_info AS ur
RIGHT JOIN
city_info AS ci
ON ur.city_id = ci.id
WHERE ur.id IS NULL;
(3)inner join内连接
内连接查询两张表直接的交集部分,只保留两张表都有的字段。
(4)full join全连接(mysql没有,oracle有)
通俗理解,就是取两张表的并集;mysql中不支持该语法,但是可以采用UNION方式完成。
# FULL JOIN
SELECT * FROM user_info AS ur LEFT JOIN city_info AS ci ON ur.city_id = ci.id
UNION
SELECT * FROM user_info AS ur RIGHT JOIN city_info AS ci ON ur.city_id = ci.id;
(5)其他衍生join
自然连接
MySQL自行根据相同的字段名判断并完成连接,不需要指定条件;
- 自然内连接
取两张表的交集
SELECT * FROM t1 NATURAL JOIN t2;
- 自然左连接
包含左边表的所有字段
SELECT * FROM t1 NATURAL LEFT JOIN t2;
- 自然右连接
SELECT * FROM t1 NATURAL RIGHT JOIN t2;