美文网首页
数据库上基本笔记

数据库上基本笔记

作者: panda_say | 来源:发表于2017-04-12 15:39 被阅读0次

    SQl语言的复杂查询与视图

    主要内容:

    1. [not]IN
    2. some / all
    3. [not]exists
    4. 聚集函数
    5. group by
    6. having
    7. 视图

    子查询:

    • 出现在where子句中的select语句称为子查询(subquery),子查询返回一个集合,可以通过这个集合的比较来确定另一个查询集合。
    • 三种类型:[not]IN ; Some / All ; [not]Exists
      [not] in 子查询
    • 基本语法: 表达式 [not] in (子查询)
    • 表达式可以为列名或常数。
    • 语义:判断某表达式的值是否在子查询结果中。
    例子:求学过001又学过002号课程的学生学号?(无关子查询)
    Select S# From SC
    Where C# = '001' and
                S# in (Select S# From SC Where C# = '002');
    例子:没学过李明老师课程的所有同学的姓名?(无关子查询)
    Select Sname From Student
    Where S# not in (Select S# From SC.Course C,Teacher T
                                 Where T.Tname = '李明' and SC.C# = C.C#
                                              and T.T# = C.T#);
    

    非相关子查询与相关子查询
    外层查询的变量的作用域包含内层查询。

    • 非相关:
      内层查询独立进行,不涉及任何外层查询相关信息的子查询。
    • 相关:
      内层查询依靠外层查询的某些参量作为限定条件才能进行的子查询。
    例子:学过001号课程的同学名字
    Select Sname
    From Student Stud
    Where S# in (Select S#
                          From SC
                           Where S# = Stud.S# and C# = '001');
    

    some/all子查询

    • 基本语法:
      表达式 比较运算符 some/all(子查询)
    • 语义:
      将表达式的值与子查询结果相比较
    例子:找出所有课程多不及格的学生名字(相关子查询)
    Select Sname From Student
     Where 60 > all (Select From Score
                              where Score.S# = Sname.S#);
    例子:找出张三同学成绩最低的课程号?(相关子查询)
    Select C# From SC,Student S
    Where Sname = "张三" and S.S# = SC.S# and
                Score <= all (Select Score Form SC 
                                      Where S# = S.S#);
    

    等价与不等价

    • 表达式 in (子查询) 等价 表达式 some (子查询)
    • 表达式 not in (子查询) 等价 <>all (子查询)
    • 表达式 not in (子查询) 不等价 表达式<> some (子查询)
      Exists子查询

    相关文章

      网友评论

          本文标题:数据库上基本笔记

          本文链接:https://www.haomeiwen.com/subject/jojmattx.html