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
如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么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、使用子查询
但是子查询一般效率太低,大部分情况下使用连接查询更好
4、使用连接查询
主要有以下几种
关于连接查询本人之前总结过就不再写一遍了,(有道云笔记连接)