大多数人一般写多表查询会这样写select * from tbA ,tbB 没有用到JOIN关键字,太Low了,官网标准建议是用JOIN明确表间的关系,下面具体来讲。
连接类型:
交叉联接 得到所连接表的所有组合 (笛卡儿集)cross join
内联接得到连接表的满足条件的记录组合inner join on
外联接(左、右)得到一个表的所有行,及其余表满 足连接条件的行 full | left | right outer join on
交叉联接
在这类联接的结果集内,两个表中每两个可能成对的行占一行。
但是如果在交叉联接中加入where 子句就相当与是内联接
例:
SELECT title, pub_name
FROM titles Cross JOIN publishers
Where titles.pub_id = publishers.pub_id
这就相当于我们一最开始的写法:SELECT title, pub_name FROM titles , publishers Where titles.pub_id = publishers.pub_id
执行过程:
内联接
仅显示两个联接表中的匹配行的联接。(这是查询设计器中的默认联接类型。)
例:
SELECT title, pub_name
FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id
执行过程:
左向外联接
包括第一个命名表(”左”表,出现在 JOIN 子句的最左边)中的所有行。不包括右表中的不匹配行。
例:
SELECT titles.title_id,titles.title,publishers.pub_name
FROM titles LEFT OUTER JOIN publishers
ON titles.pub_id = publishers.pub_id
右向外联接
包括第二个命名表(”右”表,出现在 JOIN 子句的最右边)中的所有行。不包括左表中的不匹配行。
例:
SELECT titles.title_id, titles.title,publishers.pub_name
FROM titles RIGHT OUTER JOIN publishers
ON titles.pub_id = publishers.pub_id
执行过程: