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

发布时间:2017-10-18 09:19 作者:独孤剑 阅读:316

一、内连接(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.条件列名;


微信打赏, 微信扫一扫

支付宝打赏, 支付宝扫一扫

如果文章对您有帮助,欢迎给作者打赏

作者最新文章
拜登称政府正调查燃油公司黑客攻击事件 确定该公司网络被勒索软件感染
云南大理森林消防直升机坠入洱海:4名机组人员不幸遇难
jquery $.ajax()方法参数详解
java 使用 itext 导出 PDF 文本绝对定位, itext 绝对定位的方法
杭州野生动物世界“金钱豹出逃”发布致歉声明
企业信息查询系统