sql中的并、交、差
⑸ 集合运算连接
有时候,用户希望在SQL查询中利用关系代数中的集合运算(并、交、差)来组合关系,SQL为此提供了相应的运算符:UNION、INTERSECT、EXCEPT(oracle的minus?),分别对应于集合运算的∪、∩、-。它们用于两个查询之间,对每个查询都要用圆括号括起来。对于不同的DBMS,支持的集合运算有所不同,如ACCESS,SQLSERVER都不支持集合的交运算和差运算。
【例3-40】 查询选修了180101号或180102号课程或二者都选修了的学生学号、课程号和成绩。
(SELECT 学号, 课程号, 成绩
FROM 学习
WHERE 课程号='180101')
UNION
(SELECT 学号, 课程号, 成绩
FROM 学习
WHERE 课程号='180102')
输出结果:
学号 |
课程号 |
成绩 |
090101 |
180101 |
59 |
090101 |
180102 |
56 |
090102 |
180101 |
70 |
090102 |
180102 |
65 |
… |
… |
… |
与SELECT子句不同,UNION运算自动去除重复。因此,在本例中,若只输出学生的学号,则相同的学号只出现一次。如果想保留所有的重复,则必须用UNION ALL代替UNION,且查询结果中出现的重复元组数等于两个集合中出现的重复元组数的和。
【例3-41】查询同时选修了180101和180102号课程的学生学号、课程号和成绩。
(SELECT 学号, 课程号, 成绩
FROM 学习
WHERE 课程号='180101')
INTERSECT
(SELECT 学号, 课程号, 成绩
FROM 学习
WHERE 课程号='180102')
INTERSECT运算自动去除重复,如果想保留所有的重复,必须用INTERSECT ALL代替INTERSECT,结果中出现的重复元组数等于两集合出现的重复元组数里较少的那个。
或者多次的子查询
补充:
1、intersect运算
返回查询结果中相同的部分既他们的交集
SQL> select * from abc
2 intersect
3 select * from abc2 ;
2、minus运算
返回在第一个查询结果中与第二个查询结果不相同的那部分行记录,
即两个结果的差集
SQL> select * from abc2
2 minus
3 select * from abc ;
【例3-42】查询选修了180101号课程的学生中没有选修180102号课程的学生学号、课程号和成绩。
(SELECT 学号, 课程号, 成绩
FROM 学习
WHERE 课程号='180101')
EXCEPT
(SELECT 学号, 课程号, 成绩
FROM 学习
WHERE 课程号='180102')
EXCEPT运算自动去除重复,如果想保留所有的重复,必须用EXCEPT ALL代替EXCEPT,结果中出现的重复元组数等于两集合出现的重复元组数之差(前提是差是正值)。
在不支持INTERSECT和EXCEPT运算的DBMS中,必须使用其它方法实现,其中,嵌套查询是十分有效的一种方法。
转载于:https://www.cnblogs.com/sumsen/archive/2012/12/10/2811757.html
sql中的并、交、差相关推荐
- sql中当前日期加2个月_一文搞定Mysql日期时间函数
总第184篇/张俊红 日期和时间函数部分也是我们日常工作中使用频率比较高的一部分.这一篇我们主要讲讲Mysql里面的日期时间相关的函数,不同数据库之间基本相同,只会有个别函数的差异.大家掌握一个数据库 ...
- pl/sql 中关于exception的学习笔记
1.异常的优点 如果没有异常,在程序中,应当检查每个命令的成功还是失败,如 BEGIN SELECT ... -- check for 'no data found' error SELECT ... ...
- PL/Sql 中创建、调试、调用存储过程
存储过程 所用函数说明 功能:求和与差 原形:GetSumAndSub(p1 in number , p2 in number ,m out number , b out number) 参 ...
- sql中什么时候应用临时表_SQL数据仓库环境中的临时表应用程序
sql中什么时候应用临时表 Today the subject of investigation is the Temporal Table, which is a new feature in SQ ...
- 解决数据倾斜一:RDD执行reduceByKey或则Spark SQL中使用group by语句导致的数据倾斜
一:概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的 ...
- oracle求累积收益率,解决报表sql中的累计收益率问题?换个姿势,再来一次~
原标题:解决报表sql中的累计收益率问题?换个姿势,再来一次~ 最近在做券商资产分析业务的时候,碰到个报表需求,要求计算从20170301到20170831期间,大约40w客户(表数据量5000w)的 ...
- Hive Sql中六种面试题型总结
Hive Sql中六种面试题型总结 一.常用函数 二.N日留存 1.思路分析 三.连续登陆 1.数据准备 2.思路分析一 3.思路分析二 四.Top N 1.数据准备 2.思路分析 五.行列互转 1. ...
- sql中日期函数的用法
sql中日期函数的用法 <script src="http://blog.csdn.net/count.aspx?ID=1920773&Type=Rank" ty ...
- sql中两个时间类型相减得到的值
原文地址为: sql中两个时间类型相减得到的值 原文地址:http://my.oschina.net/zimingforever/blog/57504 sql中两个时间类型相减得到的值 今天有人把数据 ...
- sql中NVARCHAR(MAX) 性能和占空间分析 varchar(n),nvarchar(n) 长度性能及所占空间分析
sql中NVARCHAR(MAX) 性能和占空间分析 varchar(n),nvarchar(n) 长度性能及所占空间分析 观此文描述较为全面,故此转载.原地址: sql中NVARCHAR(MAX) ...
最新文章
- 推荐的 PHP 读物列表
- Http和Https对比
- Intel汇编语言程序设计学习-第三章 汇编语言基础-下
- 处理gateway service使用过程中遇到的400 error - Malformed URI literal syntax
- 算法设计与分析——动态规划——最长公共子序列
- git分支合并指定代码_git的几种实用操作(合并代码与暂存复原代码)
- ECCV 2020 oral | 基于语义流的快速而准确的场景解析,在Cityscapes上达到80.4%mIoU,26 FPS...
- jdk8新特性(二)Stream流式操作
- php json 小红点,关于PHP的json_encode的一个小技巧
- 安卓开发 登录用户信息缓存_Firefox 将向用户警告被泄露的登录信息
- 微软推补丁服务器,[图]微软再推稳定性补丁 为即将到来功能更新做准备
- 服务器ajax无响应时间,ajax 服务器响应时间
- 闲聊机器人实例三:python实现小姜机器人(检索式chatbot_sentence_vec_by_word_词向量句向量)
- 多线程练习(龟兔赛跑)
- linux安装Oracle11g详细教程(redhat6、Centos7)
- vue.js最新版获取QQ音乐播放源
- MySQL数据库的基本操作-创建(create database)、选择(use)、查看(shows database)、删除(drop database)
- 字节跳动(头条)月薪 18k 招的人,有多特别?
- finalcut剪切快捷键_final cut pro常用小技巧
- 重力加速度陀螺仪传感器MPU-…
热门文章
- 使用pymysql进行数据库的增删改查
- LeetCode 1921. 消灭怪物的最大数量(排序)
- LeetCode 1835. 所有数对按位与结果的异或和(位运算 (ab)^(ac) = a(b^c) )
- LeetCode 1713. 得到子序列的最少操作次数(最长上升子序DP nlogn)
- LeetCode 668. 乘法表中第k小的数(二分查找)
- 使用RNN预测文档归属作者
- LeetCode 445. 两数相加 II(链表大数加法)
- 冒泡排序和选择排序区别_你以为只是简单的排序?(一)
- 大型网站电商网站架构案例和技术架构的示例
- linux进程上下文切换的具体过程,Linux实验三 结合中断上下文切换和进程上下文切换分析Linux内核一般执行过程...