【数据库(二)】嵌套子查询

嵌套子查询

  集合成员资格

  集合的比较

  空关系测试

  重复元组存在性测试

  from子句的子查询

  with子句

【例子】找出在2009年秋季,和2010年春季通识开课的所有课程

select distinct course_id from section

where semester = ‘Fall‘and year=2009 and course_id in

                           (select course_id from section where semester = ‘Spring‘ and year = 2010);

集合的比较

【例子】找出平均工资最高的系

select dept_name

from instructor

group by dept_name

having avg(salary) >= all(select avg(salary)

               from instructor

               group by dept_name)

空关系测试

判断一个集合是否为空集

exists

not exist

我们还可以使用not exists结构模拟集合包含(即超集)操作,可以将“关系A包含关系B“携程”not exists(B except A)“

B集差A不存在,意思是B是A的子集。

找出选修了Biology系开设的所有的课的学生

使用except结构,写该查询

select distinct S.ID, S.name

from student as S

where not exists ((select course_id from course where dept_name = ‘Biology‘) except (select T.course_id from  takes as T where S.ID = T.ID));

重复元祖存在性测试

找出所有在2009年最少开设2次的课程(》=2)

select T.course_id from course as T

where not unique (select R.course_id = R.course_id and R.year =2009);

注:unique, not unique 在oracle 8, sql server 7中不支持。

from子句中的子查询

例子,找出平均工资超过42000美元的那些系中的教师的平均工资

select dept_name,avg_salary

from(select dept_name, avg(salary) from instructor group by dept_name) as dept_avg(dept_name, avg_salary)//橙色部分,相当于局部子视图

where avg_salary > 42000;

with子句

找出最大预算的系

with max_budget(value) as(select max(budget)from department)--定义临时关系

select budget

from department, max_budget                   ---------------------使用临时关系

where department.budget = max_budget.value;

找出工资总额大于平均值的系

with dept_total (dept_name, value) as(select dept_name, sum(salary) from instructor group by dept_name)//每个系的工资总和

dept_total_avg(value)(select avg(value) from dept_total)//所有系的平均工资

select dept_name

from dept_total A, dept_total_avg B

where A.value>=B.value;

时间: 2024-08-28 16:33:22

【数据库(二)】嵌套子查询的相关文章

DBMS-SQL、聚集函数、嵌套子查询、数据库修改

SQL SQL:结构化查询语言,分为以下几个部分. ·数据定义语言(Data-Definition Language, DDL):SQL DDL提供定义定义关系模式.删除关系以及修改关系模式的命令. ·数据操纵语言(Data-Manipulation Language, DML):SQL DML包括查询语言,以及在数据库中插入元组.删除元组和修改元组的命令. ·完整性(integrity):SQL DDL包括定义完整性约束的命令,保存在数据库中的数据必须满足所定义的完整性约束,不允许破坏完整性约

Sql学习笔记4——嵌套子查询(下)

5)from子句中的子查询 因为SQL任何select-from-where表达式返回的都是关系,所以from子句中允许使用子查询表达式. 考虑查询“找出平均工资超过42000美元的那些系中教师的平均工资”,之前我们用having子句来书写该查询. 现在我们不用having子句,如下: select dept_name,avg_salary from(select dept_name,avg(salary) as avg_salary from instructor group by dept_

嵌套子查询和关联子查询

嵌套子查询:  1. 内部查询只处理一次 2. 与null比较,总得到null 3.先进行内部查询,然后再进行外部查询 关联子查询: 1.外部查询得到的每条记录传入到内部查询 2.内部查询基于外部查询传入的值 3.内部查询从其结果中把值传回到外部查询,外部查询使用这些值来完成其处理 什么时候使用? 外部查询返回较少记录时,关联子查询比嵌套子查询效率高; 内部查询返回较少记录时,嵌套子查询比关联子查询效率高. in和exists select * from A where cc in (selec

Sql学习笔记4——嵌套子查询(上)

嵌套子查询 子查询是嵌套在另一个查询中的select-from-where表达式.子查询嵌套在where子句中时,通常用于对集合的成员资格.集合的比较以及集合的基数进行检查. 1.集合成员资格 SQL允许测试元组在关系中的成员资格.连接词in测试元组是否是集合中的成员,集合是由select子句产生的一组值构成的.连接词not in测试元组是否不是集合中的成员. 考虑“找出在2009年秋季和2010年春季学期同时开课的所有课程.”按之前所学知识,可以通过对两个集合进行并运算来书写该查询.如下: (

SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)

SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提, 假设Books表如下: 类编号 图书名 出版社 价格 -------------------------------------------------------- 2 c#高级应用 圣通出版 23.00 2 Jsp开发应用 机械出版社 45.00 3 高等数学 济南出版社 25.00 3 疯狂英语 清华大学出版社 32.00 嵌套子查询的执行不依赖与外部的查询. 执行过程: (1)执行子查询,其结果不被显示,而是传递

Yii2.0ActiveRecord嵌套子查询(AR子查询)

yii2.0的ActiveRecord是可以嵌套子查询的. 比如从一个子查询里面筛选数据. 首先实例化出来一个Query对象,代表子查询. $subQuery = new \yii\db\Query(); $subQuery->from('tableA')->where(['>=', 'id', 10]); 假如UserModel是一个AR: $list = UserModel::find()->from(['tmpA' => $subQuery])->all(); f

数据库基础(子查询、设置主键外键)

子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数: 另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的数据表. 子查询示例: 练习一: 练习二: 练习三: 分页查询语句示例: 查看总共可以分为多少页: 主键        数据库主键是指表中一个列或列的组合,其值

数据库基础(子查询练习、链接查询(join on 、union)及其练习)

子查询练习一:查询销售部里的年龄大于35岁的人的所有信息 练习二:将haha表中部门的所有数字代码转换为bumen表中的字符串显示 练习三:将haha表中部门的所有数字代码转换为bumen表中的字符串显示,并且显示每个人的主管 连接查询:通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 常用的两个链接运算符: 1.join     on 2.union       在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实

SQL内外层嵌套子查询

先逐行扫描外部查询的每一行,让每一行与内部查询的表进行对比,满足内部查询where条件的返回真,不满足的返回假. 提醒:单独执行内部查询时会报错. 首先执行一次外部查询 对应外部查询的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值. 使用子查询的结果来确定外部查询的结果集. 例: 不同职工经手订单金额最大的订单信息 select a.* from 订购单 a where 金额 = (select max(金额) from 订购单 where 职工号=a.职工号) 不同