遇见了这么一个SQL问题:
有一个名为team的数据表,只包含 name一列,有('a', 'b', 'c', 'd')四条记录,分别代表四只不同的球队。
要求:用一条SQL语句,来显示由2支球队组成的所有比赛组合。
自己刚刚学习了self_join所以就用了如下操作:
SELECT a.name, b.name
FROM team AS a
INNER JOIN team AS b
WHERE a.name < b.name;
问题是:例题给出的答案是不带JOIN的、《SQL必知必会》里也没提到过这种操作。我理解不了,但是它运行正确。代码如下:
SELECT a.name, b.name
from team a, team b
where a.name < b.name;
答案:
它们表达相同功能的不同SQL书写形式。带JOIN的是依照ANSI-92,例题答案是ANSI-89。
选取规则:使用更新版本的SQL规范。
一般情况下,新SQL兼容老SQL规则,从目的达成的角度看无差别;但是如 Gordon Linoff在问答下讲“ANSI-89(在JOIN功能上)属于古董级表达方法。就像你读莎士比亚之后,搞的说话上都跟他似得,只因为你学到了著作中的语句表达。JOINs是现阶段书写最广泛的标准,JOIN语句多明确、恰当啊,别用FROM。”
附注:stockoverflow论坛相关问答如下:问答一链接,问答二链接。
附注:如果你想免费合适地学习SQL,不妨参看一下网站:
1. SQL基础在线练习网站:https://www.sqlteaching.com;
2. Stanford公开课;
3.更多令人惊叹的免费公开课 Coursera 和 EdX。(学完后可以申领课程结业证书,支持加到LINKINED等招聘网站)