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