SELECT MID
FROM Authors, Writes
WHERE Authors.ID=Writes.ID AND Name = ‘J. R. Hartley’;
SELECT MID
FROM Writes
WHERE W.ID IN (SELECT A.ID
FROM Authors A
WHERE A.Name = "J. R. Hartley");
如何设置数据库的图像
https://imgur.com/a/krkk5a7
答案是分数方案。底部是我的。我想他们会给你同样的结果,但我没有信心。他们的方式也更好吗?
谢谢
2条答案
按热度按时间camsedfj1#
是的,这两个查询产生相同的结果。
第一个查询使用旧式联接,如果您是从sql开始的,那么应该避免使用这种联接。
正确的书写方法是:
我更喜欢第二个查询,但您应该更改运算符
IN
与=
由于保证子查询只返回1行(或无):guicsvcw2#
这两个查询是不同的。让我从第二个问题开始:
此查询保证不会从中返回重复的行
Writes
.让我将第一个查询重写为
JOIN
(这是等效的,应该是您学习sql的方式):注意,我已经限定了列引用。这是一个区别。如果两个表都有
Name
列。这个IN
版本不会有此问题。更重要的区别是,这可能会复制
Writes
,如果id
在中复制Authors
. 您没有指定id
是唯一的或主键,所以这是可能的。在某些情况下,您编写的两个查询是等价的。但在其他情况下,一个运行,另一个返回错误。或者当它们不返回相同的结果集时。因此,二者并不等同。