跳到主要内容

条件表达式

关系条件表达式有哪些?​

表达式含义
EXISTS RR 非空时为真
s IN Rs 是 R 中的某个值时为真
s NOT IN Rs 不是 R 中的任何值时为真
s > ALL Rs 大于 R 中所有值时为真, 其余比较运算符同理
NOT (EXISTS/ALL/ANY)对外层结果取反

元组怎样比较?​

  • 写法: 用括号把原子值或属性组合成一个元组, 如 (title, year);
  • 比较规则: 按位置顺序依次比较, 全部对应相等才算相等;
  • 用途: 与子查询返回的元组集合做 IN、ANY 等判断;

多层嵌套子查询怎样求解?​

-- 目标: 找出 Harrison Ford 出演影片的制片人姓名
SELECT name
FROM MovieExec
WHERE cert = (
SELECT producerC
FROM Movies
WHERE (title, year) IN (
SELECT movieTitle, movieYear
FROM StarsIn
WHERE starName = 'Harrison Ford'
)
);
  • 最内层: 在 StarsIn 中找出 Harrison Ford 的 (movieTitle, movieYear) 集合;
  • 中间层: 在 Movies 中筛出 (title, year) 落在该集合里的元组, 取出 producerC;
  • 外层: 在 MovieExec 中找出 cert 等于该值的元组, 取 name;

(source: 050-sql.md §子查询/§关系的条件表达式/§元组的条件表达式)