复杂查询
子查询:出现在Where子句中的Select语句被称为子查询(subquery),子查询返回了一个集合,可以通过与这个集合的比较来确定另一个查询的集合
(NOT IN)IN
- 语法: 表达式 [not] in (子查询)
- 语义:判断某一表达式的值是否在子查询的结果中
- eg:
Select * from Student Where Sname in ["张三",“王三”]
Some,All
- 语法: 表达式 西塔 some/all (子查询)
- 语义: 将表达式的值与子查询的结果进行比较
- eg:
Select Tname From Teacher Where Salary <=all(Select Salary From Teacher)
(Not)EXISTS
- 语法: [not] Exists (子查询)
- 语义:子查询结果中有无元组存在
- eg:
Select DISTINCT Sname From Student Where not exists (Select * From SC,Course,Teacher Where SC.C#=Course.C# and SC.S#= Student.S# and Course.T# =Teacher.T# and Tname='赵三')
结果计算|聚集计算
- 语法: Select 列名|expr|agfunc[列名] From 表名 where 检索条件
- expr: 可以是常量,列名,或由常量,列名,特殊函数及算数运算符构成的算数运算式
- agfunc():聚集函数,包括:COUNT,SUM,AVG,MAX,MIN
- eg1:
Select S.S# ,S.Sname,2015-S.Sage+1 as Syear From Student S;
- eg2:
Select Sum(Salary) From Teacher;
分组查询|分组过滤
- 语法:Select 列名|expr|agfunc[列名] From 表名 Where 检索条件 Group By 分组条件 [Having 分组过滤条件];
- 语义: 将检索到的元组按照某一条件进行分类,具有相同条件值的元组划到一个组或一个集合中
- eg1:
Select S#,AVG(Score) From SC Group By S#
- eg2:
Select S# From SC Where Score<60 Group by S# Having Count(*)>2;
视图(View)
视图对应外模式
定义视图
- 语法: create view view_name [列名] as 子查询 [with check option]
- eg:
create view CompStud AS (Select * From Student Where D# in (Select D# From Dept Where Dname='计算机'))
删除视图
- 语法:Drop view view_name