FULL OUTER JOIN
LEFT OUTER JOIN
片方だけ
共通部分を除く
CROSS JOIN
SQLの「LEFT JOIN」やら「INNER JOIN」ってなんじゃろ?という方にとっても参考になりそうなサイトのご紹介。それぞれの命令をベン図で良い感じに表現しちゃっていますよ。とってもわかりやすいです。
Table AとTable Bが「name」というフィールドでつながっているという設定です。
- INNER JOIN
まずはINNER JOIN。共通部分だけとってきます。
SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name
図だとこんな感じ。

次に重複部分はひとつだけにして、あと全部。
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
図だとこんな感じね。

左側だけいっときます。
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
図。

上のから共通部分だけ除きます。
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null
図ね。

次に全体から共通部分を除くにはこうします。
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableA.id IS null OR TableB.id IS null
図でいうとこんな感じ。

これは図にできないのですが、重複しているものも含めて全部とってくる命令です。
SELECT * FROM TableA CROSS JOIN TableB
いかがですかね。JOIN文を書くときには参考にしてみたいですね。なお、サンプルデータで抽出結果がどうなるかを知りたい方は元サイトをどうぞ。
SQLのJOIN文を視覚的に理解する - IDEA*IDEA ~ 百式管理人のライフハックブログ (via kens-notepad)(出典: kens-notepad)
リアクション
-
determinesek6がこの投稿を「スキ!」と言っています
-
repositoryyu8がこの投稿を「スキ!」と言っています
-
mildredbod8がこの投稿を「スキ!」と言っています
-
crexistumblrがこの投稿を「スキ!」と言っています
-
daikoalaがこの投稿を「スキ!」と言っています
-
tabasouがkens-notepadからリブログしました
-
tetokonがこの投稿を「スキ!」と言っています
-
zentooがこの投稿を「スキ!」と言っています
-
fatboy1972がこの投稿を「スキ!」と言っています
-
ratatatがこの投稿を「スキ!」と言っています
-
jun26がkens-notepadからリブログしました
-
kens-notepadの投稿です