SQL学习之组合查询(UNION)
1、大多数的SQL查询只包含从一个或多个表中返回数据的单条SELECT语句,但是,SQL也允许执行多个查询(多条SELECT语句),并将结果作为一个查询结果集返回。这些组合查询通常称为并或复合查询。
主要有两种情况需要使用组合查询:
(1)在一个查询中从不同的表返回结构数据
(2)对一个执行多个查询,按一个查询返回数据
2、使用UNION
使用UNION很简单,所要做的只是给出每条SELECT语句,然后再每条SELECT语句之间加上UNION关键字,这样所给出的SELECT结果集就能组合成一个结果集并返回。代码如下:
select * from dbo.Customers_1
现在有个需求,需要检索出位于浙江和上海,或者顾客名称为Fun4All的所有顾客,下面是通过WhERE子句完成的解决代码:
select *
from dbo.Customers_1
where Province in('浙江','上海') or Company='Fun4All'
ok,通过Where子句的OR操作符完成需求!
下面通过组合查询UNION操作符来完成需求,代码如下:
select *
from dbo.Customers_1
where Province in('浙江','上海')
select *
from dbo.Customers_1
where Company='Fun4All'
这是没有使用UNION的单独查询,一共有6条记录,如果是普通的结果集组合的话会出现6条记录,我们发现其中有两条记录是重复的
在看使用了UNION组合查询关键字的查询解决代码:
select *
from dbo.Customers_1
where Province in('浙江','上海')
UNION
select *
from dbo.Customers_1
where Company='Fun4All'
ok,完成需求,通过和上面没有使用UNION关键的分开查询相比,我们发现UNION(组合查询)从结果集中去除了重复的行。
这里我们可以使用UNION ALL,告诉DBMS不取消重复的行。那么效果就和上面没加UNION的一样
3、总结
分析上面完成需求的连个例子,我们发现对于上面的简单的例子使用UNION似乎比WHERE子句更加的复杂。但是这里你需要知道,如果对于较复杂的过滤条件,或者从多个表(而不是一个表)中检索数据的情形,使用UNION可能会使处理更加的简单。
4、使用UNION必须知道的规则(使用注意事项)
(1)使用UNION必须有两条或者两条以上的SELECT语句组成,语句之间用UNION关键字分割
(2)使用UNION关联的每个子查询必须包含相同的检索列、表达式或这聚集函数(次序可以不一样)
(3)列数据类型必须兼容;类型不必完全相同,但必须是DBMS可以隐含转换的类型(不同的数值类型或者不同的日期类型)
(4)UNION几乎总是完成与多个WHERE条件相同的工作,UNION ALL是UNION的一种形式,它完成WHERE子句完成不了的工作,因为他将返回每个条件的匹配行(包括重复行)
(5)使用组合查询,当需要对结果进行排序是,只能指定一条Order By语句,这条语句只能放在最后一天SELECT语句的后面.
- http加速器Varnish的vcl配置小记(lnmp环境)
- 关于网站图标favicon.ico那点事儿,你造吗?
- 跨平台 ListView 性能优化
- 打造“微信小程序”组件化开发框架
- 解决Linux下MySQL启动错误Starting MySQL.Manager of pid-file quit without updating file.[FAILED]
- 美团大众点评 Hybrid 化建设
- Linux系统date命令无法修改或同步时间的解决办法
- Redex 初探与 Interdex:Andorid 冷启动优化
- JS延时判断,改善中国博客联盟展示导航自动点击的灵敏度
- RecyclerView 必知必会
- Shell+Curl网站健康状态检查脚本,抓出中国博客联盟失联站点
- Android ImageView 正确使用姿势
- Go语言Goroutine与Channel内存模型
- Tile:一个崭新出炉的机器学习语言
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中awk的使用方法详解
- Django上线部署之Apache的方法
- centos7系统下python2与python3共存
- linux把一个文件的内容复制到另一个文件的末尾
- 详解linux下nohup日志输出过大问题解决方案
- K8S dashboard 2.0 安装配置并使用 ingress-nginx 访问
- linux模糊查找文件用什么命令比较好
- Ubuntu14.04服务器环境下配置PHP7.0+Apache2+Mysql5.7的方法
- Linux C 后台服务程序单进程控制的实现
- Linux下SSH免密码登录配置详解
- SSH端口转发实现内网穿透的实现
- 在linux中用同一个版本的R 同时安装 Seurat2 和 Seurat3的教程
- AUCell:在单细胞转录组中识别细胞对“基因集”的响应
- linux查看硬件配置命令的方法示例
- Ubuntu环境编译安装PHP和Nginx的方法