zoukankan      html  css  js  c++  java
  • 一条有意思的SQL语句分析

                         一条有意思的SQL语句分析

    这条语句,说实在的困扰了我很久了,以前由于工作忙及工作中很少用到此种写法,即使有碰到这种要求也用别的语句代替或用另外一种方案实现,所以一直没空理它。这次星期天闲着没事,认真地思考分析了一下这条语句,还真有点意思。

    学生表 S(SNO int pk,SN varchar(8))  --SNO为学号 ,SN为学生姓名。
    课程表 C(CNO int pk,CN varchar(50)) --CNO为课程号,CN为课程名
    选修表 SC(SNO int pk,CNO int pk,SCORE number(7,2),fk(SNO,CNO) )  --SCORE为成绩。

    --以下语句为求出选修了所有课程的学生姓名.
    SELECT SN
    FROM s
    WHERE (NOT EXISTS
              (SELECT *
             FROM c
             WHERE NOT EXISTS
                       (SELECT *
                      FROM sc
                      WHERE SNO = S.SNO AND CNO = C.CNO)))

    分析如下:
    [1]:
    SELECT *
    FROM c
    WHERE (NOT EXISTS
              (SELECT *
             FROM sc
             WHERE SNO = 10005 AND CNO = C.CNO))
    --求出学号为10005的学生没有选修的课程.
    [2]:
         select SN from s
         where (not exists ([1]:))
    --如果[1]:部份语句执行为空记录时,即not exists ([1]:)条件为真时表示
    --学号为10005的学生选修了所有的课程,以此类推如果[1]:部份语句中的
    --SNO=10005改成SNO=S.SNO表示求出选修了所有课程的学生姓名。

  • 相关阅读:
    新年新方向-斩获新职位
    专利之家:让灵感冒冒泡
    转帖:专利之家
    WPF:Localization 基础
    WPF教程.002
    有关XXX产品研发管理约定
    转帖:曲线路标北京前门上岗
    超出想象-超级终端显示器
    小e的每日一画 之 小男孩在太阳下敬礼 20080102
    小e的每日一画 之 飞毯旅行记 20071231
  • 原文地址:https://www.cnblogs.com/cyz1980/p/862172.html
Copyright © 2011-2022 走看看