我经常看到像这样编写SQL的人:
SELECT * from TableA LEFT OUTER JOIN TableB ON (ID1=I2)
我自己写的很简单:
SELECT * from TableA LEFT JOIN TableB ON (ID1=I2)
对我而言,“OUTER”关键字就像线路噪音一样 - 它不会增加额外的信息,只会使SQL混乱。在我所知道的大多数RDBMS中它甚至是可选的。那么......人们为什么还要写呢?这是习惯吗?可移植性? (你的SQL是否真的可移植?)还有其他我不知道的东西?
答案 0 :(得分:11)
OUTER
确实是多余的,因为所有OUTER
个联接都是LEFT
或RIGHT
,而且所有LEFT
或{{1联接是RIGHT
。从理论上讲,它主要是噪音,就像你说的那样。即使在ISO SQL中它也是可选的。至于人们使用它的原因,我想有些人认为需要坚持加入OUTER
,即使左右关键字已经这样说了。就此而言,OUTER
也是多余的!
答案 1 :(得分:5)
是
在我看来,这只是让事情变得更清晰 - 你更清楚,更明显地表明你的意图,更好(特别是对于其他人试图在以后阅读和理解你的代码)。
但这只是我的观点 - 技术上并不需要它,所以你可以使用它 - 或者保留它。
答案 2 :(得分:2)
没有。我用
对我来说没有歧义。
答案 3 :(得分:2)
Stackoverflow上几个月向我展示的一件事是,人们编写和/或维护了多少SQL,而之前没有接触过SQL或关系数据库。
出于这个原因,我认为在查看代码时,下一个程序员会更明确地表现出来。
答案 4 :(得分:1)
这只是一个品味问题,我猜人们会使用它,因为他们发现它会导致代码更易读。例如,我更喜欢使用也可选的AS关键字,因为SELECT ... FROM table AS t
看起来比SELECT ... FROM table t
更具可读性。
答案 5 :(得分:1)
我正在使用'内连接','左连接','右连接'和'全外连接'。没有'内在'的'加入'使我对我有些暧昧; 'left'和'right'是自我描述的,'full'是一种野兽,它应该得到特殊的语法:)
答案 6 :(得分:0)
我自己使用OUTER
关键字。我同意这只是一个品味的问题,但是省略它让我觉得有点草率但是没有那么糟糕的省略INNER
关键字(草率)或写小写的SQL关键字(非常草率)。
答案 7 :(得分:0)
我认为在2009年没有 portable SQL 这样的东西......在某些时候,你需要编写DBMS特定的语句(比如检索前N行)。
我个人觉得JOIN语法是多余的,而是用逗号分隔表名。