连接查询可以实现多个表的查询,一次取出多个表中的数据。
连接查询可分为四种:内连接,外连接,交叉连接,自然连接。
如果连接查询的不同表有同名字段,必须加表名或表名的别名来区分。
1.内连接[INNER] JOIN
数据库的默认查询方式,INNER可以省略不写。
从左表取出记录后,去匹配右表中的记录,如果满足条件则记录保留,否则舍弃。
语法:左表 INNER JOIN 右表 ON 左表.字段=右表.字段
ON后面跟的是条件,最终只保留满足条件的记录。可以用WHERE代替ON,但是ON效率更高。
2.外连接
以某张表为主,取表内所有记录,然后将每一条记录与另一张表进行连接,如果能匹配,则保留记录,如果不能匹配,则其他表的字段置空且保留记录(不管能不能匹配,主表对应的记录都会保留)。
外连接分为左连接(LEFT JOIN)和右连接(RIGHT JOIN)。
左连接和右连接可以互转,只要将左表和右表换位置,同时LEFT JOIN和RIGHT JOIN替换即可。
1.左连接
左表是主表,最终记录数至少不少于左表的记录数(匹配到多条记录时,最终记录数大于左表记录数)。
语法:左表 LEFT JOIN 右表 ON 左表.字段=右表.字段
2.右连接
右表是主表,最终记录数至少不少于右表的记录数(匹配到多条记录时,最终记录数大于右表记录数)。
语法:左表 RIGHT JOIN 右表 ON 左表.字段=右表.字段
3.交叉连接CROSS JOIN
没啥卵用。
交叉连接即笛卡儿积。最终得到表中所有记录的所有组合。
语法:左表 CROSS JOIN 右表
,等价于FROM 左表,右表
SELECT * FROM 左表 CROSS JOIN 右表;
4.自然连接NATURAL JOIN
实际项目很难保证字段名完全一致,所以一般不用。
系统用字段名作为匹配模式自动进行匹配。同名字段就是匹配条件。
自然连接分为自然内连接和自然外连接。
1.自然内连接
NATURAL INNER JOIN
默认就是自然内连接,INNER可以不写。
2.自然外连接
自然左外连接:NATURAL LEFT JOIN
自然右外连接:NATURAL RIGHT JOIN
3.用内/外连接模拟自然连接
LEFT/RIGHT/INNER JOIN USING(字段名);