SQL 连接(Join )

原地址:https://www.cnblogs.com/logon/p/3748020.html

对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章,通过文氏图 Venn diagrams 解释了SQL的Join。我觉得清楚易懂,转过来。

假设我们有两张表。Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的,如下所示:让我们看看不同JOIN的不同

1.INNER JOIN

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name

注:以 Inner join 左表为基准,根据 on 后面的连接条件左表的每一条记录和右表的所有记录相匹配,并将满足的记录显示出来

2.FULL [OUTER] JOIN

(1)

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

注:仍是以左表为基准,根据on 后面的条件来搜索右表,将先满足on条件的值,其余没有匹配的值用NULL显示

注:将左表的值全部显示出来

4.RIGHT [OUTER] JOIN

RIGHT OUTERJOIN 是后面的表为基础,与LEFT OUTER JOIN用法类似。这里不介绍了。

5.UNION  UNION ALL

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。UNION 只选取记录,而UNION ALL会列出所有记录。

(1)SELECT name FROM TableA UNION SELECT name FROM TableB

选取不同值

(2)SELECT name FROM TableA UNION ALL SELECT name FROM TableB

全部列出来

(3)注意:

SELECT * FROM TableA UNION SELECT * FROM TableB

由于 id 1 Pirate   与 id 2 Pirate 并不相同,不合并

还需要注册的是我们还有一个是“交差集” cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积。表达式如下:SELECT * FROM TableA CROSS JOIN TableB

这个笛卡尔乘积会产生 4 x 4 = 16 条记录,一般来说,我们很少用到这个语法。但是我们得小心,如果不是使用嵌套的select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候

关键字 on

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

在使用 left jion 时,on 和 where 条件的区别如下:

  • 1、 on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
  • 2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

原文地址:https://www.cnblogs.com/kacy/p/10647660.html

时间: 2024-10-09 23:42:53

SQL 连接(Join )的相关文章

SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)

SQL 连接 JOIN 例解.(左连接,右连接,全连接,内连接,交叉连接,自连接) 最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连接的问题,回答不尽理想-现在在这写写关于它们的作用假设有如下表: 一个为投票主表,一个为投票者信息表-记录投票人IP及对应投票类型,左右连接实际说是我们联合查询的结果以哪个表为准-1:如右接连 right join 或 right outer join:我们以右边voter表为准,则左表(voteMaster)中的记录只有当其ID在右边(voter)中存

[15]SQL 连接(JOIN)

[15]SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来. SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN). SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行. 下面是选自 "Websites" 表的数据: +----+--------------+---------------------------+-------+

SQL内连接-外连接join,left join,right join,full join

1.创建测试表test1及test2 SQL> CREATE TABLE TEST1(ID NUMBER,NAME VARCHAR2(20)); 表已创建. SQL> create table test2(id number, country varchar2(10)); 表已创建. INSERT INTO TEST1 VALUES(1,'name1'); INSERT INTO TEST1 VALUES(2,'name2'); INSERT INTO TEST1 VALUES(3,'name

SQL的各种连接Join详解

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN).SQL LEFT JOIN.SQL  RIGHT JOIN.SQL FULL JOIN,其中前一种是内连接,后三种是外链接. 假设我们有两张表,Table A是左边的表,Table B是右边的表. id name 1 Google 2 淘宝 3 微博 4 Facebook id address 1 美国 5 中国 3 中国 6 美国 一

【转】图解SQL的各种连接join

http://www.nowamagic.net/librarys/veda/detail/936 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams解释了SQL的Join.我觉得清楚易懂,转过来. 假设我们有两张表,Table

图解SQL的各种连接join[转]

对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams解释了SQL的Join.我觉得清楚易懂,转过来. 假设我们有两张表,Table A是左边的表,Table B是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示: 1 i

SQL的各种连接join

对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams解释了SQL的Join.我觉得清楚易懂,转过来. 假设我们有两张表,Table A是左边的表,Table B是右边的表.澳门威尼斯人是什么 其各有四条记录,其中有两条记录是相同的,

图解SQL的各种连接join

对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对 于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams解释了SQL的Join.我觉得清楚易懂,转过来. 假设我们有两张表,Table A是左边的表,Table B是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示: 1

[No000083]图解SQL的各种连接join让你对SQL的连接一目了然

对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过文氏图Venndiagrams解释了SQL的Join.我觉得清楚易懂,转过来. 假设我们有两张表,TableA是左边的表,TableB是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示: 1 id nam