第13章 子查询和集合运算

本文介绍了SQL中的子查询及集合运算,包括子查询的基本用法、子查询与比较运算符的应用、集合运算如UNION、INTERSECT和MINUS的操作方式。同时探讨了子查询在实际场景中的应用技巧。
第13章 子查询和集合运算
标量子查询只返回一个值的查询:一行,一列。
子查询可以将任何常见子句用于投影和选择。
必须语句
select
from
可选子句
where
group by 
having
在from子查询中,可以嵌套无限级,在where子句中只能嵌套255级。可以在select from where having中使用子查询。
 
子查询的结果集用于比较
select * from emp where salary<(select avg(salary) from emp);
select department_name from departments where department_id in (select distinct(department_id) from emp);等价于select department_name from departments join emp on departments.department_id=emp.department_id grouo by department_name;
 
使用not in 会因为SQL处理null的方式而带来问题。除非确定结果集中不含有null.
子查询可以用来选择要插入的行,但它们不在insert的values子句中。
适用于单行子查询的比较运算符是:=,>,>=,<=,<>,!=
适用于多行子查询的是in,not in,any,all
 
union 合并,排序,删除重复行
union all合并所有
intersect 交集 排序,删除重复行
minus差集 排序 去重
 
子查询可以相互嵌套,嵌套等级没有限制
不能在group by和group by 子句中使用子查询。
复合查询的结果集通常取更高的精度。相关列的必须是相同的数据类型组。
 
关联子查询
如果子查询引用父查询中的列,那么其结果就依赖父查询。
关联子查询必须为外查询中的每一行都计算一次
 
select name tail_length,to_char(null) from cats
union all
select name,to_char(null),wing_span from birds;
使用to_char(null)生成遗漏的值
在复合查询中使用order by子句必须是第一个查询中的列的名称(或列别名)

转载于:https://www.cnblogs.com/zhangyuanbo12358/p/9184830.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值