这两条SQL语句相同吗?或者至少给出同样的答案? 选择中间 作者,作者 其中Authors.ID=Writes.ID,Name='J.R.Hartley'; 选择中间 从写作 其中W.ID在“选择A.ID”中 作者A 式中,A.名称=J.R.Hartley;

这两条SQL语句相同吗?或者至少给出同样的答案? 选择中间 作者,作者 其中Authors.ID=Writes.ID,Name='J.R.Hartley'; 选择中间 从写作 其中W.ID在“选择A.ID”中 作者A 式中,A.名称=J.R.Hartley;,sql,database,Sql,Database,如何设置数据库的图像 Top是分数方案的答案。底部是我的。我想他们会给你同样的结果,但我没有信心。他们的方式也更好吗? 谢谢是的,这两个查询产生相同的结果。 第一个查询使用旧式联接,如果从SQL开始,则应该避免这种联接。 正确的书写方式是: SELECT MID FROM Writes w INNER JOIN Authors a ON a.ID = w.ID AND a.Name = 'J. R. Hartley'; 我更喜欢第二个查询,但您应该使用=更改运算符,因为可以保证子查

如何设置数据库的图像

Top是分数方案的答案。底部是我的。我想他们会给你同样的结果,但我没有信心。他们的方式也更好吗?
谢谢

是的,这两个查询产生相同的结果。 第一个查询使用旧式联接,如果从SQL开始,则应该避免这种联接。 正确的书写方式是:

SELECT MID  
FROM Writes w INNER JOIN Authors a   
ON a.ID = w.ID AND a.Name = 'J. R. Hartley';
我更喜欢第二个查询,但您应该使用=更改运算符,因为可以保证子查询只返回一行或不返回任何行:

SELECT MID  
FROM Writes  
WHERE ID = (SELECT ID FROM Authors WHERE Name = 'J. R. Hartley');

这两个查询不同。让我从第二个问题开始:

SELECT w.MID  
FROM Writes w 
WHERE W.ID IN (SELECT A.ID  
               FROM Authors A   
               WHERE A.Name = 'J. R. Hartley'
              );  
此查询保证不会从写入中返回重复的行

让我将第一个查询重写为一个连接,它是等效的,应该是您学习SQL的方式:

SELECT w.MID  
FROM Authors a JOIN
     Writes w  
     ON w.ID = a.ID AND a.Name = 'J. R. Hartley';   
注意,我已经限定了列引用。这是一个区别。如果两个表都有名称列,那么编写查询的方式将生成错误。版本中的不会有此问题

更重要的区别是,如果在作者中重复id,则这可能会从写入中复制行。您没有指定id是唯一的或主键,因此这是可能的


在某些情况下,您编写的两个查询是等效的。但在其他情况下,一个运行,另一个返回错误。或者当它们不返回相同的结果集时。因此,这两者并不等同。

数据库不是通过图像设置的。。。。请指定这是mysql还是sqlite,不能两者都是@Luuk我知道他们没有设置图像这是一个测试中的问题。此图显示了如何设置它。mysql和sqlite不使用相同的查询语言吗?SQL?或者至少非常相似,这就是我要问的。查询是否相等?请仅使用sql标记,因为问题是关于sql的标准使用。换句话说,您也没有添加Oracle、Postgresql、DB2,他们也使用sql…@Luuk okay Thank将其更改为删除其他标记如果您可以有同名的共同作者,则第一个将列出MID两次,而第二个不会。谢谢。我最初有一个=但担心这不是一个好的实践,因为它只适用于单一值很高兴看到我的讲师教我们过时的SQL。或者保持简单,因为我们只是第一年,当您希望返回超过1行时,您应该在中使用。例如:WHERE ID IN SELECT ID FROM Authors,其中名称“%John%”表示名称包含John的作者的ID。ID显然是作者的主键,而表Writes没有名称列。在发布此答案之前,您应该检查问题中的链接,在那里您可以看到模式,这是误导性的。