mysql 多表查询的几种情况

1、普通多表查询 

SELECT a.id, a.service_name, b.business_scope, c.phone

FROM ep_archive_service AS a, 
     ep_base_info AS b,
     ep_archive_contact AS c

WHERE a.credit_code = b.credit_code AND a.credit_code = c.credit_code;

(查询出三个表中满足 “where条件” 情况下的 “select中” 的数据)

 

2、联合查询

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

 union:联合的意思,即把两次或多次查询结果合并起来。

 要求:两次查询的列数必须一致

 推荐:列的类型可以不一样。但推荐查询的每一列,相对应的类型一样,的情况下再用union.

 可以来自多张表的数据:多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准

(就是类型不一样的话,查出来的数据列以第一个select语句为准,第二个select出来的数据,就按列的顺序,把数据拼在第一个查询出的数据后)

例子:

 SELECT id, service_name
 FROM ep_archive_service
 UNION 
 SELECT id, business_url
 FROM ep_base_info

155647_kFHh_2885163.png

如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行

如果不想去掉重复的行,可以使用union all

 SELECT id, service_name
 FROM ep_archive_service
 UNION ALL
 SELECT id, business_url
 FROM ep_base_info

从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。

如果子句里 有 order by | limit 需要 union 两边加小括号推荐放到所有子句之后,即对最终合并的结果来排序或筛选。

如:

(select * from a ) union (select * from b ) 

order by id limit 0,10 ;

在子句中,order by 需要配合limit使用才有意义。如果不配合limit使用,会被语法分析器优化分析时去除。

3、使用子查询

但是子查询一般效率太低,大部分情况下使用连接查询更好

161037_wnVl_2885163.png

4、使用连接查询

主要有以下几种

082743_yRo8_2885163.png

 关于连接查询本人之前总结过就不再写一遍了,(有道云笔记连接

转载于:https://my.oschina.net/zjllovecode/blog/1589290

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值