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_name)

  where avg_salary>42000;

我们还可以用 as子句给此子查询结果关系起个名字,并对属性进行重命名。如下:

  select dept_name, avg_salary

  from(select dept_name,avg(salary)

    from instructor

    group by dept_name)

    as dept_avg(dept_name,avg_salary)  /*as常用场合*/

  where avg_salary>42000;

另一例子,假设我们要找出所有系中工资总额最大的系,在此having子句则无能为力。但from嵌套子查询可以轻易写出:

  select max(tot_salary)

  from(select dept_name,sum(salary)

    from instructor

    group by dept_name)as dept_total(dept_name,tot_salary);

注:并非全部sql实现都支持在from子句中嵌套子查询。

from子句嵌套不允许使用来自from子句其他关系的相关变量。

6)with子句

with子句提供了定义临时关系的方法。这个定义只对包含with子句的查询有效。

考虑查询“找出具有最大预算值的系”。如下

  with max_budget(value) as

    (select max(budget)

    from department)

  select budget

  from department,max_budget

  where department.budget=max_budget.value;

with子句定义了临时关系max_budget,随后被使用。

7)标量子查询

sql允许子查询出现在返回单个值的表达式能够出现的任何地方,只要该子查询只返回单个属性的单个元组,称为标量子查询。它可以出现在select、where和having子句中。

考虑查询“列出所有的系以及它们拥有的教师数:

  select dept_name,(select count(*)

            from instructor

            where department.dept_name = instructor.dept_name)

            as num_instructors

  from department;

转载于:https://www.cnblogs.com/Dezhong-chen/p/4439557.html

引用\[1\]中的查询语句"not exists (B except A)"是一个SQL查询语句,用于判断集合B是否是集合A的子集。如果集合B中的元素在集合A中都存在,则返回False,否则返回True。 引用\[2\]中提到,SQL还支持其他比较操作符,如"<some", "<=some", ">=some", "=some"和"<>some"。其中,"=some"等价于"in"操作符,而"<>some"并不等价于"not in"操作符。 引用\[3\]中的查询语句"not exists (select course_id from course where dept_name='Biology' and course_id not in(Select T.course_id from takes as T where T.ID = S.ID))"与引用\[1\]中的查询语句类似,用于判断在课程表中是否存在某个学生没有选择的生物学课程。如果存在这样的课程,则返回True,否则返回False。 综上所述,"not exists (B except A)"是一个SQL查询语句,用于判断集合B是否是集合A的子集。而引用\[3\]中的查询语句是一个具体的例子,用于判断在课程表中是否存在某个学生没有选择的生物学课程。 #### 引用[.reference_title] - *1* *3* [《数据库概念》中不能再mysql上执行的句子的替换](https://blog.csdn.net/qq_33464595/article/details/109705185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Sql学习笔记4——嵌套子查询(上)](https://blog.csdn.net/arul8576/article/details/101339692)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值