`

SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN)二

    博客分类:
  • sql
阅读更多

归纳

(一)内连接
  内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的
列值。内连接分三种:
  1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结
果中列出被连接表中的所有列,包括其中的重复列。
  例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
  SELECT *
  FROM authors AS a INNER JOIN publishers AS p
  ON a.city=p.city
  2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的
列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
  3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选
择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
  例,在选择列表中删除authors 和publishers 表中重复列(city和state):
  SELECT a.*,p.pub_id,p.pub_name,p.country
  FROM authors AS a INNER JOIN publishers AS p
  ON a.city=p.city
(二) 外连接  
  外连接,返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左
外连接或左连接))、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。
  left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录;
  right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录;
例如1:SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
   ON a.username=b.username
例如2:SELECT a.*,b.*
   FROM city as a FULL OUTER JOIN user as b
   ON a.username=b.username
(三) 交叉连接   
  交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到
结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查
询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下
列交叉连接检索到的记录数将等于6*8=48行。   
  例如:SELECT type,pub_name
   FROM titles CROSS JOIN publishers
   ORDER BY type

 

实例详解


内连接: 只连接匹配的行
左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
交叉连接  生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个

行都一一匹配

举个例子吧。
表A
id   name 
1    张
2    李
3    王

表B
id   address   A_id
1    北京      1
2    上海      3
3    南京      10
/******************************** left join  左连接*****************************************/
包容性:A表包容B表,左连接左表是全的.(left join 或 left outer join )
SQL语句如下:
SELECT A.name, B.address
FROM A
LEFT JOIN B ON A.id = B.A_id
查询结果为:
name     address
张     北京
李     NULL
王     上海
/******************************** right join  右连接*****************************************/
包容性:B表包容A表,右连接右表是全的.(right join 或 right outer join )
SQL语句如下:
SELECT A.name, B.address
FROM A
RIGHT JOIN B ON A.id = B.A_id
查询结果为:
name     address
张     北京
王     上海
NULL     南京
/******************************** inner join  内连接*****************************************/
排他性:A,B表中至少有1个匹配时,才返回行。两表的交集
SQL语句如下:
select A.name,B.address from A
inner join B
on A.id = B.A_id

查询结果为:
name     address
张     北京
王     上海
inner join  内连接等价于下面的sql:
SELECT A.name, B.address
FROM A, B
WHERE A.id = B.A_id
/******************************** full join  全连接*****************************************/
注释:全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于

对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集

。(full join 或 full outer join )
SQL语句如下:
select * from A
full join B
查询结果为:
id     name     id     address A_id
1     张     1     北京     1
2     李     1     北京     1
3     王     1     北京     1
1     张     2     上海     3
2     李     2     上海     3
3     王     2     上海     3
1     张     3     南京     10
2     李     3     南京     10
3     王     3     南京     10
/******************************** CROSS JOIN(不带条件where...)***********************************/
注释:返回3*3=9条记录,即笛卡尔积
SQL语句如下:
SELECT * FROM A
CROSS JOIN B
查询结果为:
id     name     id     address A_id
1     张     1     北京     1
2     李     1     北京     1
3     王     1     北京     1
1     张     2     上海     3
2     李     2     上海     3
3     王     2     上海     3
1     张     3     南京     10
2     李     3     南京     10
3     王     3     南京     10
CROSS JOIN等价于:
select * from A,B

注意:
1. on A.id = B.id 等同于 using(id)//这里字段名要相同
2. 当 MySQL 在从一个表中检索信息时,你可以提示它选择了哪一个索引。  
如果 EXPLAIN 显示 MySQL 使用了可能的索引列表中错误的索引,这个特性将是很有用的。  
通过指定 USE INDEX (key_list),你可以告诉 MySQL 使用可能的索引中最合适的一个索引在表中查找记录行。  
可选的二选一句法 IGNORE INDEX (key_list) 可被用于告诉 MySQL 不使用特定的索引。    

效率问题:
1.inner join比left join快
注:inner join  内连接等价于下面的sql: SELECT A.name, B.address FROM A, B WHERE A.id = B.A_id
所以一般要用一般的连接就可以了.
2.连接字段建索引

分享到:
评论

相关推荐

    SQL语句的并集UNION 交集JOIN(内连接,外连接)等介绍

    主要介绍了SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN) ,需要的朋友可以参考下

    数据库学习文档

    最后,基本的SQL语句格式,如笛卡尔积的FROM子句格式是&lt;关系名 1&gt; CROSS JOIN &lt;关系名 2&gt;,自然连接是&lt;关系名 1&gt; NATURAL JOIN &lt;关系名 2&gt;,等值连接则常使用INNER JOIN,配合ON子句指定连接条件。这些基本概念和...

    Oracle课程文档2

    - **交叉连接(Cross joins)**:相当于笛卡尔积。 - **自然连接(Natural joins)**:基于具有相同名字的列进行连接。 - **使用子句(Using clause)**:指定自然连接中需要用到的列。 - **全外连接(Full ...

    第1次数据库系统作业_1140320206_霍峻杰1

    在这些题目中,我们看到了与关系数据库查询相关的多个问题,主要涉及SQL语言中的选择(SELECT)、投影(PROJECT)、连接(JOIN)、并集(UNION)、差集(DIFFERENCE)以及笛卡尔积(CROSS JOIN)等操作。让我们逐一...

    数据仓库实践系列课程(1)——数据库基础与SQL.pptx

    SQL(Structured Query Language)是关系数据库的标准语言,它支持多种操作,包括选择(SELECT)、投影(PROJECTION)、并集(UNION)、差集(MINUS)、交集(INTERSECT)、笛卡尔积(CROSS JOIN),以及更复杂的...

    2021-2022计算机二级等级考试试题及答案No.14814.docx

    16. 集合运算:在数据库中,基本的集合运算包括并集(UNION)、交集(INTERSECT)、差集(MINUS)和笛卡尔积(CROSS JOIN)。 17. 字节定义:一个字节由8个二进制位组成,是计算机存储的基本单位。 18. 计算机安全...

    2021-2022计算机二级等级考试试题及答案No.15036.docx

    17. **关系运算符**:在数据库中,关系运算可以包括交集(INTERSECT)、并集(UNION)、差集(MINUS)和笛卡尔积(CROSS JOIN),题目中的R×S表示笛卡尔积。 18. **SQL查询类型**:选择查询(SELECT)、联合查询...

    2021-2022计算机二级等级考试试题及答案No.19881.docx

    12. 关系运算:在关系数据库中,合法的运算包括交集(INTERSECT)、并集(UNION)、差集(MINUS)和笛卡尔积(CROSS JOIN)。题目中的R×S表示R和S的笛卡尔积。 13. 测试方法:黑盒测试是一种不考虑程序内部结构,...

    2021-2022计算机二级等级考试试题及答案No.17223.docx

    13. 关系运算:在数据库中,可以对关系进行并集(UNION)、交集(INTERSECT)、差集(SET DIFFERENCE)和笛卡尔积(CROSS JOIN)运算,但题目中提到的R∩S并不是标准的SQL运算。 14. 用户界面交互:快捷键Ctrl+L可以直接...

    2021-2022计算机二级等级考试试题及答案No.14437.docx

    5. 关系运算:在关系数据库中,合法的运算包括交集(`INTERSECT`)、并集(`UNION`)、差集(`MINUS`)和笛卡尔积(`CROSS JOIN`)。题目中提到的`R∩S`是交集的非标准表示,通常使用`R INTERSECT S`。 6. SQL命令:在...

Global site tag (gtag.js) - Google Analytics