时间:2021-07-01 10:21:17 帮助过:12人阅读
二、union的用法及注意事项
union:联合的意思,即把两次或多次查询结果合并起来。
要求:两次查询的列数必须一致
推荐:列的类型可以不一样,但推荐查询的每一列,想对应的类型以一样
可以来自多张表的数据:多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准。
如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行。
如果不想去掉重复的行,可以使用union
all。
如果子句中有order by,limit,需用括号()包起来。推荐放到所有子句之后,即对最终合并的结果来排序或筛选。
如:
在子句中,order by 需要配合limit使用才有意义。如果不配合limit使用,会被语法分析器优化分析时去除。
三、学习例子
下面的例子中使用的原始表:
Employees_China:
使用 UNION 命令实例
列出所有在中国和美国的不同的雇员名:
复制代码 代码如下: SELECT E_Name FROM Employees_China
使用 UNION ALL 命令实例
UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。
复制代码 代码如下: SQL Statement 1
实例:
列出在中国和美国的所有的雇员:
四、项目使用例子
web项目中经常会碰到整站搜索的问题,即客户希望在网站的搜索框中输入一个词语,然后在整个网站中只要包含这个词的页面都要出现在搜索结果中。由于一个web项目不可能用一张表就全部搞定的,所以这里一般都是要用union联合搜索来解决整个问题的。
下面列举一下本次使用的union联合搜索的sql语句:
复制代码 代码如下:
(SELECT `id`,`subject` FROM `article` WHERE `active`=‘1‘ AND `subject` LIKE ‘%调整图片%‘ ORDER BY `add_time` DESC)
as t1
union all
select * from
(SELECT `id`,`class_name` AS `subject` FROM `web_class` WHERE `active`=‘1‘ AND `class_name` LIKE ‘%调整图片%‘ ORDER BY `class_id` DESC)
as t2
union
select * from
(SELECT `id`,`subject` FROM `article` WHERE `active`=‘1‘ AND (`subject` LIKE ‘%调整%‘ OR `subject` LIKE ‘%图片%‘) ORDER BY `add_time` DESC)
as t3;
以上SQL语句的联合查询主要用到了union all和union,至于这两者的区别就是union all会列举所有符合条件的查询结果,而union会将所有符合条件的查询结果做一下去除重复结果的筛选。
对于以上SQL语句的解释就是由于article表和web_class表分属两个不同的表,所以这里不用去除重复结果。然而以上联合查询的第三个分支的sql查询语句是由分词然后组合出来的查询语句,这条sql语句查询的结果是肯定包含第一个分支sql语句的查询结果的,这里就显得没必要了,所以没有使用all而去掉重复的查询结果。
如对本文有疑问,请提交到交流社区,广大热心网友会为你解答!! 点击进入社区
SELECT ‘业务日期‘, ‘大区‘, ‘小区‘, ‘开单部门‘, ‘订单号‘, ‘运单号‘, ‘包裹号‘, ‘运输方式‘, ‘运费‘, ‘提包费‘, ‘中转费‘, ‘叉车费‘, ‘其他费‘, ‘代收货款‘, ‘折扣‘, ‘金额合计‘, ‘现付‘, ‘欠付‘, ‘提付‘, ‘送货费‘, ‘保价费‘, ‘备注‘, ‘操作人‘, ‘操作时间‘, ‘创建人‘, ‘创建时间‘, ‘运输方式名称‘
UNION
SELECT main.*,
trans_way.code_name AS trans_way_name
FROM tms.tms_settle_income_day main
LEFT JOIN
tms.cip_admin_codes trans_way ON
trans_way.domain_id = ‘product_type‘ AND
main.trans_way = trans_way.code_type
Mysql联合查询UNION和UNION ALL的使用介绍
标签:.net 条件 rom clear mit rod span 分析器 一个人