在SQL

时间:2016-09-29 22:07:11

标签: sql

这些SQL之间的区别是什么:

SELECT *
FROM COURS NATURAL JOIN COMPOSITIONCOURS NATURAL JOIN PARCOURS; 

SELECT *
FROM COURS NATURAL JOIN (COMPOSITIONCOURS C JOIN PARCOURS P ON C.IDPARCOURS = P.IDPARCOURS) ;

SELECT *
FROM (COURS NATURAL JOIN COMPOSITIONCOURS C) JOIN PARCOURS P ON C.IDPARCOURS = P.IDPARCOURS ;

他们有不同的结果。

2 个答案:

答案 0 :(得分:1)

如果没有样本结果集,很难准确判断,但我会想象你对自然JOIN的使用,这通常是不好的做法。理由是:

我会避免使用自然连接,因为自然连接是:

  • 非标准SQL。
  • 没有提供信息。您没有参考架构,也没有指定要连接的列。
  • 您的条件容易受到架构更改的影响。如果有多个自然连接列并且从表中删除了一个此类列,则查询仍将执行,但可能不正确,并且此行为更改将保持静默。

答案 1 :(得分:0)

感谢你们所有人的回答!我终于发现问题是因为使用了自然的JoIn。 使用自然连接时,它将以相同的名称连接每个列!当我多次使用NATURAL JOIN时,可能会自动加入那些具有相同名称但您不希望组合的列! 这是一个例子, 表a(IDa,名称,年份,IDb) 表b(IDb,bonjour,敬礼,IDc) 表c(IDc,年份,merci) 如果我写的像From a Natural Join b Natural c,因为IDb和IDc是表a,b,c的通用名称。好像好了!但请注意! a.year和b.year也可以加入!这就是我们不想要的!