4

是否可以在不指定条件的情况下编写内部联接或外部联接?是ON condition连接条件语法的一部分吗?

4

3 回答 3

12

使用ANSI SQL-92语法时,ON关键字是连接的一部分,除了 the,cross join因为您没有关系的条件。

前任。

内部联接

SELECT *
FROM tableA INNER JOIN tableB
       on tableA.ID = tableB.ID

交叉连接

SELECT *
FROM tableA CROSS JOIN tableB

ON应该在连接表之后(如INNER 和 OUTER连接),这样你就不会出现语法错误。但如果您使用ANSI SQL-89语法,ON则省略关键字,但您必须在where clause

前任。

内部联接

SELECT *
FROM tableA, tableB
WHERE tableA.ID = tableB.ID

交叉连接

SELECT *
FROM tableA, tableB

它很容易出错,因为如果您忘记了条件,它不会产生语法错误并且可能会cross join

于 2012-08-01T22:50:27.450 回答
4

不,您不必指定ON,您可以在 a 中这样做WHERE

SELECT *
FROM tableA, tableB
WHERE tableA.Id = tableB.Id

但这很容易出错(容易以CROSS JOINs 结尾)并且通常不受欢迎。有关反对它的论点,请参见此处

编辑:更准确地说,您可以JOIN使用上面显示的旧样式语法,它不需要ON,但如果您明确加入 usingINNER | LEFT | FULL等,那么yesON语法的一部分。 具有精确语法要求的MSDN页面。

于 2012-08-01T22:44:47.057 回答
2

您可以在不使用 join-on 语法的情况下进行隐式连接:

select a.fred, b.joe from tableApple as a, tableBread as b
where a.key1 = b.key1

但我很确定显式连接需要 on 。您将收到不正确的语法错误。显式连接含义:

select a.fred, b.joe 
from tableApple as a
left join tableBread as b
on a.key1 = b.key1
where a.key1 = 'sally'
于 2012-08-01T22:44:18.600 回答