第3章_关系数据库标准语言(SQL)_006_由元组关系演算到SQL Command_002_案例_04_以全部学生为准,课程被选的4种选课情况(只列举出2种)

01:查询被全校学生选修的课程的课程编号和课程名;

02_查询至少有一个学生没有选的课程的课程编号和课程名(没有被全部学生选的课程);

 

01_查询被全校学生选修的课程的课程编号和课程名 ===》
{new_c(2)
  ∃c (
    c(C) Λ
    ∀s (
      s(S)
        → ∃sc (
            sc(SC) Λ
            sc.SNo = s.SNo Λ
            sc.CNo = c.CNo
          )
    )
    new_c[1] = c[1] Λ
    new_c[2] = c[2]
  )
}

  

经过化简得到:
{new_c(2) |
  ∃c (
    ¬【∃s (
      ¬【∃sc (
        sc.SNo = s.SNo Λ
        sc.CNo = c.CNo
      )】
    )】
  )
}

  

按照简化后的“元组关系演算式”得出SQL语句:
SELECT CNo, CN
FROM C
WHERE
  NOT EXISTS (
    SELECT *
    FROM S
    WHERE
      NOT EXISTS (
        SELECT *
        FROM SC
        WHERE
          SC.CNo = C.CNo AND
          SC.SNo = S.SNo
      )
  )
  
  
  
02_查询至少有一个学生没有选的课程的课程编号和课程名(没有被全部学生选的课程) ===》
{new_c(2)
  ∃c (
    c(C) Λ
    ∃s (
      s(S) Λ
      ∀sc ¬(
        sc(SC) Λ
        sc.SNo = s.SNo Λ
        sc.CNo = c.CNo
      )
    )
    new_c[1] = c[1] Λ
    new_c[2] = c[2]
  )
}

  

经过化简得到:
{new_c(2)
  ∃c (
    ∃s (
      ¬【∃sc (
        sc.SNo = s.SNo Λ
        sc.CNo = c.CNo
      )】
    )
  )
}

  

按照简化后的“元组关系演算式”得出SQL语句:
SELECT CNo, CN
FROM C
WHERE
  EXISTS (
    SELECT *
    FROM S
    WHERE
      NOT EXISTS (
        SELECT *
        FROM SC
        WHERE
          SC.CNo = C.CNo AND
          SC.SNo = S.SNo
      )
  )


注释:其他的就和前面的几个实例差不多,不一一举例了。

posted @ 2020-04-06 09:10  BN2U  阅读(63)  评论(0编辑  收藏