Xtr*_*eik 5 null relational-algebra
下面的查询的关系代数表达式是什么?我找不到"Is Null"的表达式.
SELECT reader.name
FROM reader LEFT JOIN book_borrow ON reader.cardid = book_borrow.cardid
WHERE book_borrow.cardid Is Null;
Run Code Online (Sandbox Code Playgroud)
SáT*_*SáT 13
这项任务需要一点创造力,而不是逐字翻译.
这个查询中发生了什么?首先,我们将book_borrow加入到读者手中.记住定义:即使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
Run Code Online (Sandbox Code Playgroud)
我们可以看到Alice已经借了两本书(ids 1和5),Bob借了一本(id 5),Charlie在他的book_borrow字段中得到了NULL,因为他没有借用.然后查询继续只获取book_borrow.cardid为NULL的行,因此查询只是说:"让所有未借用任何书籍的人".
像这样描述任务,编写关系代数表达式很容易:
在这里,释放我的乳胶:

故事的道德:尽管正如欧文所指出的那样,在最纯粹的关系代数形式中没有空(因为关系代数建立在一阶逻辑上),我们并不总是需要它来表达缺乏某种东西; 左连接可以由基本运算符表示; 左连接是为了提高计算效率而发明的:你可以很容易地看到采用左连接和选择空值是多么实用.
| 归档时间: |
|
| 查看次数: |
6403 次 |
| 最近记录: |