在对于关系型数据库中,联接是将多个表联系的方法。联接分为很多种,如:内联接、外联接、交叉联接,自然联接
一、内联接
1。1使用等值内联接
即两者是通过两列的值是相等的联接,称为相等联接
1.2使用等号以外的运算符的联接(<,>..)
1.3使用不等号运算符的联接(<>)
在SQL中表述为INNER JOIN ON (condition..)
二、外联接
外联接可以分为三种:左向外联接、右向外联接、完整外联接
2.1左向外联接:
其会将左边的所有通过where、Have检索出来的行添加进去,而对于联接的表只有满足了条件才会。
在SQL中表述为LEFT OUTER JOIN
2.2右向外联接
就是右边拉,这不用我说了
在SQL中表述为RIGHT OUTER JOIN
2.3完整外联接
就是对于左右两表所有的行都要
在SQL中表述为FULL OUTER JOIN
三、交叉联接
就是表的笛卡尔积,第一个表的行数乘以第二个表的行数,即结果集的大小。
在SQL 中表述为CROSS JOIN
四、自联接
五、在FROM 或WHERE子句中指定联接
在FROM或WHERE中指定联接往往会使结果不同。看下例。(注意:在WHERE中指定左联接使用*=,右联接使用=*)
USE pubs
SELECT t.title_id, t.title, s.qty
FROM titles AS t, sales AS s
WHERE t.title_id *= s.title_id
AND s.stor_id = '7066'
--------------------------------------------
USE pubs
SELECT t.title_id, t.title, s.qty
FROM titles AS t LEFT OUTER JOIN sales AS s
ON t.title_id = s.title_id
AND s.stor_id = '7066'
这两个结果集是一样的
但是将联接和搜索条件放在不同的位置结果就完全不同了
SELECT t.title_id, t.title, s.qty
FROM titles AS t INNER JOIN sales AS s ON
t.title_id = s.title_id
WHERE s.stor_id = '7066'