第3章_关系数据库标准语言(SQL)_006_由元组关系演算到SQL Command_002_案例_03_以'数据库'和'JAVA'_教师姓名、编号为准,老师授课的4种选课情况

01:查询(至少)教授'数据库'和'JAVA'这两门课程的老师的姓名和编号(在老师教授的课程的课程编号集合中包含{'数据库'的编号, 'JAVA'的编号});

02:查询(至少)没有教授'数据库'和'JAVA'这两门课程中的一门的老师的姓名和编号(老师教授没有同时教授'数据库'和'JAVA');

03:查询(至少)教授了'数据库'和'JAVA'这两门课程中的一门的老师的姓名和编号;

04:查询没有教授'数据库'和'JAVA'这两门课程中的任意一门的老师的姓名和编号;

  

01_查询(至少)教授'数据库'和'JAVA'这两门课程的老师的姓名和编号(在老师教授的课程的课程编号集合中包含{'数据库'的编号, 'JAVA'的编号}) ===》
{new_t(2) |
  ∃t(
    t(T) Λ
    ∀c(
      c(C) Λ
      (c.CN = '数据库' ∨ c.CN = 'JAVA')
        → ∃tc(
            tc(TC) Λ
            t.TNo = tc.TNo Λ
            tc.CNo = c.CNo
          )
    ) Λ
    new_t[1] = t[1] Λ
    new_t[2] = t[2]
  )
}
  
经过化简得到:
{new_t(2) |
  ∃t(
    ¬【∃c(
      (c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
      ¬【∃tc(
        t.TNo = tc.TNo Λ
        tc.CNo = c.CNo
      )】
    )】
  )
}
    
按照简化后的“元组关系演算式”得出SQL语句:
SELECT TNo, TN
FROM T
WHERE
  NOT EXISTS (
    SELECT *
    FROM C
    WHERE
      (C.CN = '数据库' OR C.CN = 'JAVA') AND
      NOT EXISTS (
        SELECT *
        FROM TC
        WHERE
          T.TNo = TC.TNo AND
          TC.CNo = C.CNo
      )
  )
  
  
  
02_查询(至少)没有教授'数据库'和'JAVA'这两门课程中的一门的老师的姓名和编号(老师教授没有同时教授'数据库'和'JAVA') ===》
{new_t(2) |
  ∃t(
    t(T) Λ
    ∃c(
      c(C) Λ
      (c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
      ∀tc ¬(
        tc(TC) Λ
        t.TNo = tc.TNo Λ
        tc.CNo = c.CNo
      )
    ) Λ
    new_t[1] = t[1] Λ
    new_t[2] = t[2]
  )
}
  
经过化简得到:
{new_t(2) |
  ∃t(
    ∃c(
      (c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
      ¬【∃tc(
        t.TNo = tc.TNo Λ
        tc.CNo = c.CNo
      )】
    )
  )
}
  
按照简化后的“元组关系演算式”得出SQL语句:
SELECT TNo, TN
FROM T
WHERE
  EXISTS (
    SELECT *
    FROM C
    WHERE
      (C.CN = '数据库' OR C.CN = 'JAVA') AND
      NOT EXISTS (
        SELECT *
        FROM TC
        WHERE
          T.TNo = TC.TNo AND
          TC.CNo = C.CNo
      )
  )
  
  
    
03_查询(至少)教授了'数据库'和'JAVA'这两门课程中的一门的老师的姓名和编号 ===》
{new_t(2) |
  ∃t(
    t(T) Λ
    ∃c(
      c(C) Λ
      (c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
      ∃tc (
        tc(TC) Λ
        t.TNo = tc.TNo Λ
        tc.CNo = c.CNo
      )
    ) Λ
    new_t[1] = t[1] Λ
    new_t[2] = t[2]
  )
}
  
经过化简得到:
{new_t(2) |
  ∃t(
    ∃c(
      (c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
      ∃tc (
        t.TNo = tc.TNo Λ
        tc.CNo = c.CNo
      )
    )
  )
}
    
按照简化后的“元组关系演算式”得出SQL语句:
SELECT TNo, TN
FROM T
WHERE
  EXISTS (
    SELECT *
    FROM C
    WHERE
      (C.CN = '数据库' OR C.CN = 'JAVA') AND
      EXISTS (
        SELECT *
        FROM TC
        WHERE
          T.TNo = TC.TNo AND
          TC.CNo = C.CNo
      )
  )
  
  
  
04_查询没有教授'数据库'和'JAVA'这两门课程中的任意一门的老师的姓名和编号 ===》
{new_t(2) |
  ∃t(
    t(T) Λ
    ∀c(
      c(C) Λ
      (c.CN = '数据库' ∨ c.CN = 'JAVA') 
        → ∀tc ¬(
            tc(TC) Λ
            t.TNo = tc.TNo Λ
            tc.CNo = c.CNo
          )
    ) Λ
    new_t[1] = t[1] Λ
    new_t[2] = t[2]
  )
}
  
经过化简得到:
{new_t(2) |
  ∃t(
    ¬【∃c(
      (c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
      ∃tc (
        t.TNo = tc.TNo Λ
        tc.CNo = c.CNo
      )
    )】
  )
}
  
按照简化后的“元组关系演算式”得出SQL语句:
SELECT TNo, TN
FROM T
WHERE
  NOT EXISTS (
    SELECT *
    FROM C
    WHERE
      (C.CN = '数据库' OR C.CN = 'JAVA') AND
      EXISTS (
        SELECT *
        FROM TC
        WHERE
          T.TNo = TC.TNo AND
          TC.CNo = C.CNo
      )
  )

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