4

条件を指定せずに内部結合または外部結合を記述できますか? ON condition結合条件の構文の一部ですか?

4

3 に答える 3

12

ANSI SQL-92構文を使用する場合、関係の条件がないONため、キーワードは を除いて結合の一部です。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

いいえ、 を指定する必要はありませONWHERE

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

しかし、これはエラーが発生しやすく (簡単にCROSS JOINs になってしまう)、一般的に嫌われています。反論についてはこちらをご覧ください。

EDIT : より正確には、JOIN上記の古いスタイルの構文を使用できます。これは を必要としませんが、etcONを使用して明示的に参加する場合は、yesが構文の一部です。 正確な構文要件を含むMSDNページ。INNER | LEFT | FULLON

于 2012-08-01T22:44:47.057 に答える
2

結合構文を使用せずに暗黙的な結合を行うことができます。

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 に答える