条件を指定せずに内部結合または外部結合を記述できますか? ON condition
結合条件の構文の一部ですか?
3 に答える
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
いいえ、 を指定する必要はありませON
んWHERE
。
SELECT *
FROM tableA, tableB
WHERE tableA.Id = tableB.Id
しかし、これはエラーが発生しやすく (簡単にCROSS JOIN
s になってしまう)、一般的に嫌われています。反論についてはこちらをご覧ください。
EDIT : より正確には、JOIN
上記の古いスタイルの構文を使用できます。これは を必要としませんが、etcON
を使用して明示的に参加する場合は、yesが構文の一部です。 正確な構文要件を含むMSDNページ。INNER | LEFT | FULL
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'