SQL中的集合运算有必要存在的几个例子
原文地址:http://mis.blogbus.com/logs/11754651.html
原来集合运算在删选条件为非唯一属性时才显的那么重要
-------------------------------------
-- SQL集合运算——查询的差集 --
-------------------------------------
--求没有选择课号为‘c01’的学生学号
/*以下语句不正确,原因是cid不是独立主键,并不能函数决定sid,
意味着选择了'c01'的某一sid,可能会同时选择非'c01'的其他cid,
因此,并不能通过仅排除'c01',而将所有的曾选择过'c01'的该sid排除在外。
该查询的目标范围将比实际的大。
*/
select sid from learning
where cid<>'c01'
/*正确语句*/
select sid from learning
except (
select sid from learning where cid='c01'
)
--求没有选择课号为‘c01’的学生的学号和课号
/*不正确。因为sid与cid的同时存在于子查询中,使得要减去的部分将比原来的小,
排除了该sid同时选择其他cid而被排除的可能性。其结果范围将比没有cid的大。
*/
select sid,cid from learning
except (
select sid,cid from learning where cid='c01'
)
--正确:
select sid,cid from learning
where sid in (
select sid from learning
except (
select sid from learning where cid='c01'
)
)
-------------------------------------
-- SQL集合运算——查询的交集 --
-------------------------------------
--求同时选了课号为'c01'和'c02'的学生学号
/*以下语句不正确。其结果将是空值,因为一个属性在一个元组中只能有一个值,不会有两个值。
select运行时只会一行一行地(逐个元组)进行,不会跨行进行比较。
*/
select sid from learning where cid='c01' and cid='c02'
/*以下语句正确:*/
select sid from learning where cid='c01'
intersect (
select sid from learning where cid='c02'
)
/*以下语句正确:通过自连接将cid的一个属性,变成两个名义属性,再逐行进行比较:*/
select l1.sid from learning l1,learning l2
where l1.sid=l2.sid and l1.cid='c01' and l2.cid='c02'
--问题:求同时选了课号为'c01'和‘c02’的学生学号和课号。
-------------------------------------
-- SQL集合运算——查询的并集 --
-------------------------------------
--求计算机系学生的学号和选了'c03'课程且成绩在分以上的学生学号
select sid from student where department='计算机系'
union (
select sid from learning
where cid='c03' and score>80
)
--分解分析,两个子查询自动将重复出现的记录合并
select sid from student where department='计算机系'
select sid from learning
where cid='c03' and score>70
SQL中的集合运算有必要存在的几个例子相关推荐
- SQL进阶之集合运算
SQL进阶之集合运算 用SQL进行集合运算 越前须知(雾) 概述 具体用法 比较两表是否相等 用差集实现关系除法运算 在同一张表中寻找相同子集 用SQL进行集合运算 越前须知(雾) 本系列参考< ...
- SQL中使用的运算符号详解
文章目录 前言 1. 算术运算符 加法与减法运算符 乘法与除法运算符 求模(求余)运算符 2. 比较运算符 1.等号运算符 2.安全等于运算符 3.不等于运算符 4. 空运算符 5. 非空运算符 6. ...
- SQL学习之“集合运算”
本篇文章记录学习SQL集合运算的过程与心得. 对于集合这个概念,印象最深的就是数学课里学的,简单的说就是把研究对象当做元素,则一些元素组成的整体就叫集合. 而在数据库领域,则表示记录的集合,具体来说, ...
- sql中的并、交、差
⑸ 集合运算连接 有时候,用户希望在SQL查询中利用关系代数中的集合运算(并.交.差)来组合关系,SQL为此提供了相应的运算符:UNION.INTERSECT.EXCEPT(oracle的minus? ...
- c语言集合运算有菜单,怎样用C语言实现集合运算
[转]STL算法-合并(集合) hechao322514692017-02-24 R:集合运算 thoixy29792014-10-27 C++ STL 集合运算 weixin_42993054605 ...
- mysql 交并差_mysql学习笔记:集合运算并交差,其他
总结一下今天数据库课堂上的所学2333 1. 在SQL语言实践中,集合运算的实现方法,推荐顺序如下: 并运算:union 交运算:in, exists, intersect(很多DBMS基本上不支持i ...
- oracle union all写法,【oracle】-集合运算:UNION,UNION ALL...
在Oracle中提供了三种类型的集合操作: 并(UNION).交(INTERSECT).差(MINUS) UNION:求并,重复记录只显示一次. UNION ALL:求并集,显示所有记录信息. INT ...
- Oracle集合运算
SQL> --什么是集合运算? SQL> --查询10号部门和20号部门的员工 SQL> --第一种 SQL> select * 2 from emp 3 wher ...
- python中 zip()的使用和pandas中的列运算(map apply等)
map()函数语法: map(function,iterable-) -> function – 函数 iterable – 一个或多个序列 案例 s1 = [1,2,3,4,5] s2 = [ ...
- SQL中SELECT语句详解
本篇文章讲述SQL语句中的SELECT查询语句,以供参考,如有错误或不当之处还望大神们告知. 简单查询SELECT-FROM 用于无条件查询单张表中的行或列 假设有表如图所示 查询名字叫 '叶清逸' ...
最新文章
- 总监说,20、30岁年轻人面临人生抉择,早点知道这个法则,会少一些遗憾!
- php 域名验证系统_PHP授权验证系统(域名+IP双重验证一键更新授权系统)
- maven配置环境变量失败解决办法
- Redis 是属于多线程还是单线程?
- ip camera芯片级解决方案
- jQuery图表插件 JS Charts
- maven报错Non-resolvable parent POM for com.wpbxin:springboot2-first-example:0.0.1-SNAPSHOT: Could not
- CSS选择器种类及使用方法
- SQL Server 2008 Service Broker
- 小身材大能耐,面向物联网开发的 ACRN Hypervisor开源啦!
- 少儿编程孩子的学习路线
- 使用moviepy为视频添加字幕
- 一个简洁的PNG ICO转换工具 支持多分辨率的ICO生成
- 利用Python爬取音乐资源,小白福音
- 关于卫星伪距残差的理解
- EntityFramework之领域驱动设计实践(五)
- Access Violation(非法访问)问题解析
- linux主机又又中木马了
- vulnhub_ODIN: 1靶机
- oracle sql时间排序函数,sql的rank函数