SQL语言之复杂查询与视图

复杂查询

子查询:出现在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

猜你喜欢

转载自blog.csdn.net/weixin_38470851/article/details/80610143
今日推荐