数据库知识整理<七>
组合查询:
7.1使用子查询:
嵌套在其他查询中的查询,我们称之为子查询。子查询本身也可能包含一个子查询。子查询也称为内部查询,而包含子查询的语句也称为外部查询。
所有的子查询可以被分为两个类别:子查询和非相关子查询。
- 非相关子查询是独立于外部查询的子查询。子查询总共执行一次,执行完毕后将值传递给外部查询。
- 相关子查询的执行依赖于外部查询的数据,外部查询返回一行,子查询就执行一次。
- 子查询作为计算列:子查询的一个最简单的形式就是内部查询为外部查询的每行返回一个单值结果,他通常作为一个结果插入到一个计算列。select columnA ,(子查询)AS columnB from 表名;
- where子句中的子查询:select columnA from TableA where columnB = (子查询);比如在实际中:select examId,studentOn from exam where studentOn <= (select studentOn from exam where examId = 5) order by studentOn desc;
- 返回多个结果的子查询:当子查询返回多行时,我们可以用in关键字来解决上面出现的问题。select 列A,列B from table1 where 列C in (select 列D from table2);这种做法用起来相当复杂,实际上我们可以使用更简单的语法来执行得到同样的结果,就是使用多表联接join查询。当然子查询不仅仅是在select中使用,在其他的修改、删除、插入中也能使用子查询。
- 在子查询中使用运算符:上面我们学了使用子查询与in运算符来查找字段属于某一组值的行。当然除了in以外还可以使用exists、all、any(或者some。二者是同义词)等运算符。
- 其中exists(翻译为:‘存在’)用来测试子查询是否返回任何结果(不只是特定的结果):exists运算符允许我们查找满足特定条件的行。后面总是跟着一个子查询,只要子查询返回了行,exists的值就为真。比如:查询任何一次考试中分数低于40的学生姓名和id。select Id,Name from student s where exists (select Id from studentExam se where mark <40 and e.Id = es.Id);
- all测试子查询结果集的所有行是满足指定条件:all 运算符与子查询和比较运算符一起使用。如果子查询返回的所有值都满足比较运算,那么比较表达式就为真。如果不是所有值都满足比较运算或子查询没有给外部语句返回行,则返回假。如基本语法:select 列A from 表A where 列A > All (select 列B from 表B);实例:查找出enrollment表中总成绩大于同一个学生的最高考试分数的所有行。select Id,grade from enrollment e where grade > All (select mark from studentExam s where e.Id = s.Id);
- any测试子查询的结果集是否有一行或多行满足指定的条件:any 与 All 的工作方式大体相同,不同的地方在于:在子查询返回值中,只要满足比较运算,那么比较表达式就为真。如果所有值都不满足,则返回假。基本语法:select 列A from 表A where 列A > any (select 列B from 表B);这个查询的意思就是说,从表A中返回列A的值大于表中列B的任何一个值的所在行。也即是说返回比列B中最小值大的行。实例:查询出学生的考分和他们总成绩之间的差异。select Id,grade from enrollment e where grade < any(select mark/2 from studentExam s where e.Id = s.Id);
7.2组合查询数据:
如果我们需要使用多个表中的数据,然后将所有的这些数据或者数据子集组合成一个结果集返回,那么SQL提供了几种运算符允许我们组合多个SQL查询来实现这个用途。这些运算符分别是:union、unionall、intersect、difference。
使用这些的语法如:select 列A,列B from 表A <operator> select 列C,列D from 表B;
使用这些运算符的通用规则是:从一个表中获取的数据必须是和其他表中的数据具有相同的列数目,同时两个表中相对应的列必须是具有相同的数据类型或者至少两个数据类型之间必须存在可能的隐性数据转化,或者提供了显示转换。所以,这些运算符是被设计用来组合有相同结构的不同数据的多个表的内容,而从不同结构的组合数据则要用到变链接技术。
- 使用union运算符:select 列A,列B from 表A union select 列C,列D from 表B;通常union的结果集列名与union运算符中第一个select语句的结果集的列名相同。另一个select语句的结果集列名将被忽略。实际的例子中:比如查询从与某节课相关的professor表和student表中抽取姓名。Sql语句是:
select name,'教授' as role from professor where pId = (select pId from class where cId = 1) union select name,'学生' from student where sId in (select sId from enrollment where cId = 1);
使用union的意义就好比:{1,2,3,4} union {3,4,5,6};结果是:{1,2,3,4,5,6}
2. 保留重复行:SQL不管集合理论的通常规则,使用union all 运算符返回每个数据集的所有成员。而不考虑重复。
如:select 列A,列B from 表A union all select 列C,列D from 表B;如:{1,2,3,4} union all {3,4,5,6};最终的结果是:{1,2,3,4,3,4,5,6}
3. 理解交集和差分:最后的两个只能被oracle支持了。intersect运算符允许仅返回在两个查询都出现的行。如:{1234} intersect {3456} 结果是:{34}。difference 在oracle中使用minus ,此运算符允许返回在一个查询中出现但是不在另一个查询中出现的行。如:{1234} except(or minus){3456};结果是:{1256},排除重复的数,显示不重复的数据并且连重复出现的数据都抹掉。
数据库知识整理<七>的更多相关文章
- 数据库知识整理<六>
聚合函数与分组 6.1使用聚合函数进行数据统计: 聚合函数常见的有以下几种: count:返回该结果集中行的数目. sum:返回结果集中所有值的总和. avg:返回结果集中所有值的平均值. max:返 ...
- 数据库知识整理<一>
关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数 ...
- 数据库知识整理<八>
联接: 8.1理解简单的单联接: 基本上联接的结果是每个集合的笛卡尔积.例如:两个集合{a,b,c}和{a,b}的笛卡尔积是如下的成对集合:{(a,a),(a,b),(b,a),(b,b),(c,a) ...
- 数据库知识整理<五>
简单的数据查询: 5.1查询的基本结构: Sql语句:select [distinct] (* | column [alias],...) from table [where condition] [ ...
- 数据库知识整理<二>
又继续写的博客,希望自己能坚持每天写博客.分享自己的点滴,对自己成长有帮助.今天下午高强度打了三个小时篮球,小腿都抽筋了.很爽,失落的心情似乎变得开明了一些.想到了一句话:“像SB式的坚持总会有好的收 ...
- 数据库知识整理<三>
保证数据的完整性: 3.1数据完整性概述: 数据完整性的意义:我们知道数据库能防止储存垃圾数据,RDBMS实现该功能主要是通过维护数据完整性来实现的.根据数据完整性实施方法我们将其分为四类:实体完整性 ...
- 数据库知识整理<四>
使用DML语句更改数据: 所谓DML语句是指数据库操作语句,其中包括的是对数据库数据的修改.删除.插入. 4.1添加新数据: 插入单行的记录:基本的SQL语句为-insert into <表明& ...
- 【OGG】OGG基础知识整理
[OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...
- MySQL 索引知识整理(创建高性能的索引)
前言: 索引优化应该是对查询性能优化的最有效的手段了.索引能够轻易将查询性能提高几个数量级. // 固态硬盘驱动器有和机械硬盘启动器,有着完全不同的性能特性: 然而即使是固态硬盘,索引的原则依然成立, ...
随机推荐
- Linux:基础配置--备忘
1.网络 /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=08:00:27:77:F3:A1 TYPE=Ethernet UU ...
- 初探 performance – 监控网页与程序性能
使用 window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据. 配合上报一些客户端浏览器的设备类型等数据,就可以实现简单的统计啦! 额,先看下兼容性如何:h ...
- 通过微信分享链接,后面会被加上from=singlemessage&isappinstalled=1可能导致网页打不开
微信分享会根据分享的不同,为原始链接拼接如下参数: 朋友圈 from=timeline&isappinstalled=0 微信群 from=groupmessage&isapp ...
- JSP调用JAVA方法小例子
用JAVA编写的函数 package doc; //定义一个包 public class Dy { //定义一个类 public static int Sub(int x,int y){ //定义函数 ...
- Excel 数值转换为人民币大写金额字符串
把$B$27单元格中的数值转换为人民币大写金额字符串: 目标单元格填入以下公式: =IF($B$27=0,CONCATENATE(IF($B$27<=0,,TEXT(INT($B$27),&qu ...
- awk用法
目前虽然有很多工具可以代替awk,但是呢我还是认为awk还是非常重要,比如有时候load数据到hive,mysql发现数据有点问题,这样可以先对比文件和库中数据是否一致,这样awk就发挥用处了,还有从 ...
- VC++ CEdit
CEDIT _1, //selection pEdit1->SetSel(0,strBuffer - m_strInput,0); pEdit1->SetFocus(); //the se ...
- step6----->往工程中添加spring boot项目------->修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework
文章内容概述: spring项目组其实有多个projects,如spring IO platform用于管理external dependencies的版本,通过定义BOM(bill of mater ...
- SPI总线的特点、工作方式及常见错误解答
1.SPI总线简介 SPI(serial peripheral interface,串行外围设备接口)总线技术是Motorola公司推出的一种同步串行接口.它用于CPU与各种外围器件进行全双工.同步串 ...
- HDOJ 4508 湫湫系列故事——减肥记I (完全背包带优化)
完全背包的模版题.. 加了一个小优化 n^2的写法 O(V+N)在本题中复杂度较高 不采纳 完全背包问题有一个很简单有效的优化,是这样的:若两件物品i.j满足c[i]<=c[j]且w[i]&g ...