SQL语言之复杂查询与视图

SQL-SELECT : IN | NOT IN, SOME, ALL, Exists| NOT Exists
SQL-SELECT: 聚集函数,GROUP BY, HAVING
视图及其应用

IN
集合成员资格
某一元素是否是某一个集合的成员
集合之间的比较
某一个集合是否包含另外一个集合等
集合基数的测试
测试集合是否为空
测试集合是否存在重复元素

子查询: 出现在where子句中的select语句被称为子查询,子查询返回了一个集合,可以通过与这个集合的比较来确定另一个查询集合

三种类型的子查询: (NOT) IN-子查询; some /all 子查询; (NOT)Exists子查询

聚集函数
COUNT SUM AVG MAX NIN

分组查询 分组过滤
聚集函数是不允许用于where子句中的; where子句是对每一元组进行条件过滤,而不是对集合进行条件过滤
分组过滤:若要对集合(即分组)进行条件过滤,即满足条件的集合/分组留下,不满足条件的集合/分组剔除
Having子句,又称分组过滤子句。需要有group by子句支持,换句话说,没有group by子句,便不能有having子句

并 交 差 处理
子查询 {Union [ALL] | Intersect [ALL] | Except [ALL] 子查询};
通常情侣下自动删除重复元组,不带all。若要保留重复元组,则要带ALL

空值处理
空值检测
is [not] null
where Sage = null 错误的,空值是不能进行运算
除count(*)外,其他聚集函数,都会忽略null

内连接 外连接
select 列名 from 表名 [natural] [inner | {left | right | full} outer] join {on 连接条件 | using (colname)}
where 检索条件

视图——先定义后使用
如果视图select目标列包含聚集函数,则不能更新
如果视图的select子句使用了unique或distinct,则不能更新
如果视图中包括了group by子句,则不能更新
如果视图中包括了经算术表达式计算出来的列,则不能更新
如果视图是由单个表的列构成,但并没有包括主键,则不能更新
对于由单一table子集构成的视图,即如果视图是从单个基本表使用选择、投影操作导出的,并且包含了基本表的主键,则可以更新
撤销视图
Drop view 名

你可能感兴趣的:(SQL语言之复杂查询与视图)