码迷,mamicode.com
首页 > 数据库 > 详细

mySql多表连接查询与union与union all用法

时间:2017-11-15 10:47:12      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:筛选   推荐   mysql   2-2   第一个   合并   卡尔   join   显示   

1.准备两个表

表a

技术分享

 

表b

技术分享

 

 

2.进行连接查询测试:

(1)交叉连接(笛卡尔积)

 

SELECT * FROM a,b

  

技术分享

 

 (2)内连接

显示内连接

 

SELECT a.*,b.* FROM a INNER JOIN b ON a.age=b.ageB

 

技术分享

 

显示内连接过滤条件:

SELECT a.*,b.* FROM a INNER JOIN b ON a.age=b.ageB HAVING a.age=11

技术分享

技术分享

 

 

隐士内连接:

SELECT * FROM a,b WHERE a.age=b.ageB

技术分享

 

隐士内连接筛选结果:

SELECT * FROM a,b WHERE a.age=b.ageB HAVING a.age=11

技术分享

 

 

 (3)左外连接:

SELECT a.*,b.* FROM a LEFT JOIN b ON a.age=b.ageB 

  

技术分享

 

(4)右外连接:

SELECT a.*,b.* FROM a RIGHT JOIN b ON a.age=b.ageB 

  

技术分享

 

3.Union 和 union all

(1)   union:   去掉重复元素

SELECT * FROM a
UNION
SELECT * FROM b

  

技术分享

 

 总结:

union:联合的意思,即把两次或多次查询结果合并起来。
要求:两次查询的列数必须一致
推荐:列的类型可以不一样,但推荐查询的每一列,想对应的类型以一样
可以来自多张表的数据:多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准。
如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行。
如果不想去掉重复的行,可以使用union all。
如果子句中有order by,limit,需用括号()包起来。推荐放到所有子句之后,即对最终合并的结果来排序或筛选。

 

 

(2)    union all  保留重复元素

   UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。

SELECT * FROM a
UNION ALL
SELECT * FROM b

  

技术分享

 

 

 

总结:

  UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
  UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。
  同时,每条 SELECT 语句中的列的顺序必须相同.

  默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
  当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行

 注意:

1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名
2、UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同

mySql多表连接查询与union与union all用法

标签:筛选   推荐   mysql   2-2   第一个   合并   卡尔   join   显示   

原文地址:http://www.cnblogs.com/qlqwjy/p/7837529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!