mysql 多表union_mySql多表连接查询与union与union all用法

1.准备两个表

表a

7df3f8988aa0e988e85c4507c1751d53.png

表b

d84ffbbabaf9c76976c0436b982303dc.png

2.进行连接查询测试:

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

SELECT * FROM a,b

01697c8c1b30d058a7efafebfd2f7fdb.png

(2)内连接

显示内连接

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

03af8d9026f52c2ab51624755e1aaf9b.png

显示内连接过滤条件:

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

4453b01af9ffff656ea884d8f2bbbc6b.png

6b55aeadbcd3dd57db262177109f7879.png

隐士内连接:

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

d9aed5ef2a3bfd9df420eb8db26849f3.png

隐士内连接筛选结果:

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

a2c40f78b5589660addfdad56a5f26c9.png

(3)左外连接:

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

97047a182580db50c9d4da6e24d7ff14.png

(4)右外连接:

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

381aff57a3f34d1b98e8797ffbbd5ab9.png

3.Union 和 union all

(1)   union:   去掉重复元素

SELECT * FROM a

UNION

SELECT * FROM b

74efa4b1afca5504c1a0c0bf5d4935cb.png

总结:

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

f5ee2436d1d1857523bc8ec52718d895.png

总结:

UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。

UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。

同时,每条 SELECT 语句中的列的顺序必须相同.

默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行

注意:

1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名

2、UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值