SQL 多表查询(内连接、外连接和交叉连接)

一、内连接(JOIN 或者 INNER JOIN )
概念:内连接就是用比较运算符比较要用连接列的值的连接
SELECT * FROM Table1 JOIN Table2 ON Table1.条件列名=Table2.条件列名;
返回符合匹配条件的两表列
等价于:
SELECT A.*, B* from Table1 A, Table2 B WHERE A.条件列名=B.条件列名;
SELECT * FROM Table1 CROSS JOIN Table2 WHERE Table1.条件列名=Table2.条件列名;--(注: CROSS JOIN 后面不能跟 ON 只能用 WHERE)

二、外连接:外连接分为左连接(LEFT JOIN 或 LEFT OUTER JOIN)、右连接(RIGHT JOIN 或者 RIGHT OUTER JOIN)、和完整外部连接(FULL JOIN 或者 FULL OUTER JOIN)
左连接(LEFT JOIN 或 LEFT OUTER JOIN)的结果就是LEFT JOIN子句中的左表的所有行,而不仅仅是链接列所匹配的行,如果左表中的某行在右表中没有匹配,则在相关联的结果行中右表的所有选择列均为空值(NULL)
SELECT * FROM Table1 LEFT JOIN Table2 ON Table1.条件列名 = Table2.条件列名;

右连接(RIGHT JOIN 或 RIGHT OUTER JOIN )在这里不做多说这左连接很象但是是相反的,只说一下语法

SELECT * FROM Table1 RIGHT JOIN Table2 ON Table1.条件列名 = Table2.条件列名;

完全外部连接(FULL JOIN 或 FULL OUTER JOIN)显示左右表中的所有行,当某一个表中没有匹配的行时,则另一个表的选择列表列包含空值(NULL)如果有则显示全部数据
SELECT * FROM Table1 FULL JOIN Table2 ON Table1.条件列名 = Table2.条件列名;

三、交叉连接(CROSS JOIN):也称迪卡尔积
概念:不带 WHERE 条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数第一个表的行数乘以第二个表的行数的乘积,如果带 WHERE,返回或显示的是匹配的行数。
SELECT * FROM Table1 CROSS JOIN Table2;
等价于
SELECT * FROM Table1, Table2;

如果有条件(WHERE)
SELECT * FROM Table1 CROSS JOIN Table2 WHERE Table1.条件列名=Table2.条件列名;
等价于
SELECT * FROM Table1, Table2 WHERE Table1.条件列名=Table2.条件列名;


热门推荐