gpt4 book ai didi

null - "is null"的关系代数表达式

转载 作者:行者123 更新时间:2023-12-02 02:18:26 29 4
gpt4 key购买 nike

下面查询的关系代数表达式是什么?我找不到“Is Null”的表达式。

SELECT reader.name
FROM reader LEFT JOIN book_borrow ON reader.cardid = book_borrow.cardid
WHERE book_borrow.cardid Is Null;

最佳答案

这项任务需要一点创造力,而不是逐字翻译。

此查询中发生了什么?首先,我们将 book_borrow 加入 reader 中。记住definition :即使 ON 子句与最右表中的任何行都不匹配,连接仍将返回一行,使其在右表的字段中包含 NULL。我们的表如下所示:

reader.name | reader.cardid | book_borrow.cardid | book_borrow.book_id
Alice | 1 | 1 | 1
Alice | 1 | 1 | 5
Bob | 2 | 2 | 5
Charlie | 3 | NULL | NULL

我们可以看到 Alice 借了两本书(id 1 和 5),Bob 借了一本(id 5),而 Charlie 在他的 book_borrow 字段中得到了 NULL,因为他没有借过任何书。然后,查询继续仅获取 book_borrow.cardid 为 NULL 的行,因此查询只是说:“获取所有未借过任何书籍的人”。

像这样表述任务,编写关系代数表达式很容易:

  • 让我们自然地连接 reader 和 book_borrow,这将产生不需要的行,即借阅任何书籍的人的姓名。
  • 然后从所有人的集合中减去这些人,结果就是没有借过书的人的集合。

在这里,释放我的 latex :

π(name){ π(name, carddid){Reader} - π(name, cardid){Reader join Book_borrow} }

这个故事的寓意:尽管,正如欧文指出的,关系代数的最纯粹形式中不存在零(因为关系代数建立在一阶逻辑之上),但我们并不总是需要它来表达缺乏某物;左连接可以用基本运算符表示;左连接的发明是为了提高计算效率:您可以轻松地看到采用左连接并选择空值是如何更加实用的。

关于null - "is null"的关系代数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20481363/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com