MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
テーブルの結合のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
テーブルの結合
📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは
2026年9月に閉鎖
いたします。
移転先は
https://mochiu.net/index.php?title=テーブルの結合
です。
新しい記事は移転先で追加しております。
(旧サイトでは記事を追加しておりません)
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == SQL Serverをはじめ、各データベースはテーブルをJOIN(結合)することがよくある。<br> ここでは代表的なJOINの種類について記載する。<br> * INNER JOIN(内部結合) * LEFT OUTER JOIN(左外部結合) * RIGHT OUTER JOIN(右外部結合) * FULL OUTER JOIN(完全外部結合) [[ファイル:Database Join 1.jpg|フレームなし|中央]] <br><br> == INNER JOIN(内部結合) == INNER JOIN(内部結合)は、両方のテーブルの結合条件に一致するものだけを取得する。<br> 外部結合のようにテーブルの優先度は存在しない。<br> <br> SQL Serverでは、INNER JOINをJOINと記述してもよい。<br> <br> ===== INNER JOIN句の使用方法 ===== SQL Serverで内部結合するには、INNER JOIN句の前後に結合するテーブルを記述する。<br> テーブル名の後にスペースを入れて別名を指定する。<br> ON句は結合する列を指定する。列はテーブル名の別名を必ず付ける。<br> <br> 内部結合は、INNER JOIN句を使用せずに、結合条件をWHERE句で記述することもできる。<br> <br> ===== サンプルデータ ===== <center> '''empテーブル'''<br> {| class="wikitable" |- ! no !! name |- | A001 || 佐藤花子 |- | A002 || 田中太郎 |- | A003 || 加藤一 |- | A004 || 青木花 |- | A005 || 藤田学 |} </center> <br> <center> '''tokyo_autテーブル''' {| class="wikitable" |- ! no |- | A001 |- | A005 |} </center> <br> <center> '''osaka_autテーブル''' {| class="wikitable" |- ! no |- | A001 |- | A002 |} </center> <br> ===== 例1 INNER JOIN句で結合する ===== empテーブルとtokyo_autテーブル、osaka_autテーブルの3つのテーブルをINNER JOIN句で内部結合する。<br> これら3つのテーブルに、noが存在するレコードであるA001のみ抽出される。<br> <source lang="sql"> --INNER JOIN SELECT e.no, e.name, t.no tokyo, o.no osaka FROM emp e JOIN tokyo_aut t ON e.no = t.no JOIN osaka_aut o ON t.no = o.no WHERE e.no < 'A100'; </source> <br> <center> {| class="wikitable" |- ! e.no !! e.name !! tokyo !! osaka |- | A001 || 佐藤花子 || A001 || A001 |} </center> <br> ===== 例2 WHERE句で結合する(INNER JOIN句を使用しないパターン) ===== <source lang="sql"> --INNER JOIN句を使用しない SELECT e.no, e.name, t.no tokyo, o.no osaka FROM emp e, tokyo_aut t, osaka_aut o WHERE e.no < 'A100' AND e.no = t.no AND t.no = o.no; </source> <br> <center> {| class="wikitable" |- ! e.no !! e.name !! tokyo !! osaka |- | A001 || 佐藤花子 || A001 || A001 |} </center> <br><br> == LEFT OUTER JOIN(左外部結合) == LEFT OUTER JOIN(左外部結合)は、SQL文のFROM句で、左側にあるテーブルを優先して全レコード取得する。<br> 結合される方のテーブルは、優先テーブルと一致する条件のレコードのみ取得する。<br> LEFT OUTER JOINは、最も利用される結合である。<br> <br> なお、SQL Serverでは、LEFT OUTER JOINをLEFT JOINと記述してもよい。<br> <br> ===== LEFT OUTER JOIN句の使用方法 ===== SQL Serverで左外部結合するには、LEFT OUTER JOIN句の前後に結合するテーブルを記述する。<br> テーブル名の後にスペースを入れて別名を指定する。<br> ON句は結合する列を指定する。列はテーブル名の別名を必ず付ける。<br> <br> ===== サンプルデータ ===== <center> '''empテーブル'''<br> {| class="wikitable" |- ! no !! name |- | A001 || 佐藤花子 |- | A002 || 田中太郎 |- | A003 || 加藤一 |- | A004 || 青木花 |- | A005 || 藤田学 |} </center> <br> <center> '''tokyo_autテーブル''' {| class="wikitable" |- ! no |- | A001 |- | A005 |- | A010 |} </center> <br> <center> '''osaka_autテーブル''' {| class="wikitable" |- ! no |- | A001 |- | A002 |- | A009 |} </center> <br> ===== 例 LEFT OUTER JOIN句で複数テーブルを結合する ===== LEFT OUTER JOIN句で優先されるテーブルは左側にあるempテーブルである。<br> empテーブルは優先されるテーブルなので、全レコードが抽出される。<br> 以下の例では、empテーブルは5レコードあるので、empテーブルのe.noとe.nameは全て表示される。<br> <br> tokyo_autテーブルとosaka_autテーブルは、ON句で指定された条件に一致する場合のみ抽出される。<br> tokyo_autテーブルは、noがA001とA005のみなので、この2レコードのみ表示される。A010は結合条件に一致しないため表示されない。<br> osaka_autテーブルは、noがA001とA002のみなので、この2レコードのみ表示される。A009は結合条件に一致しないため表示されない。<br> <source lang="sql"> --LEFT OUTER JOINの結合 SELECT e.no, e.name, t.no tokyo, o.no osaka FROM emp e LEFT JOIN tokyo_aut t ON e.no = t.no LEFT JOIN osaka_aut o ON e.no = o.no WHERE e.no < 'A100'; </source> <br> <center> {| class="wikitable" |- ! e.no !! e.name !! tokyo !! osaka |- | A001 || 佐藤花子 || A001 || A001 |- | A002 || 田中太郎 || || A002 |- | A003 || 佐藤花子 || || |- | A004 || 佐藤花子 || || |- | A005 || 藤田学 || A005 || |} </center> <br><br> == RIGHT OUTER JOIN(右外部結合) == RIGHT OUTER JOIN(右外部結合)は、LEFT OUTER JOINの左右の優先度を逆にした結合である。<br> SQL文のFROM句で、右側にあるテーブルを優先して全レコード取得する。<br> 結合される方のテーブルは、優先テーブルと一致する条件のレコードのみ取得する。<br> <br> SQL Serverでは、RIGHT OUTER JOINをRIGHT JOINと記述してもよい。<br> <br> 外部結合には、LEFT OUTER JOINとRIGHT OUTER JOINがあるが、LEFT OUTER JOINを使用するのが一般的なので、<br> ここでは、RIGHT OUTER JOINの例は省略する。<br> <br><br> == FULL OUTER JOIN(完全外部結合) == FULL OUTER JOIN(完全外部結合)は、両方のテーブルのどちらも優先で、<br> 結合条件で一致するレコードも一致しないレコードも全て取得する。<br> LEFT OUTER JOIN、RIGHT OUTER JOINのように、どちらかのテーブルを優先しない。<br> <br> SQL Serverでは、FULL OUTER JOINをFULL JOINと記述してもよい。<br> <br> ===== FULL OUTER JOIN句の使用方法 ===== SQL Serverで完全外部結合するには、FULL OUTER JOIN句の前後に結合するテーブルを記述する。<br> テーブル名の後にスペースを入れて別名を指定する。<br> ON句は、結合する列を指定する。列はテーブル名の別名を必ず付ける。<br> <br> ===== サンプルデータ ===== <center> '''empテーブル'''<br> {| class="wikitable" |- ! no !! name |- | A001 || 佐藤花子 |- | A002 || 田中太郎 |- | A003 || 加藤一 |- | A004 || 青木花 |- | A005 || 藤田学 |} </center> <br> <center> '''tokyo_autテーブル''' {| class="wikitable" |- ! no |- | A001 |- | A010 |} </center> <br> ===== 例 FULL OUTER JOIN句で結合する ===== empテーブルとtokyo_autテーブルをFULL OUTER JOINで完全外部結合する。<br> empテーブルにしか存在しないレコード、tokyo_autテーブルにしか存在しないレコードも含めて全て抽出される。<br> <source lang="sql"> --FULL JOIN SELECT e.no, e.name, t.no tokyo FROM emp e JOIN tokyo_aut t ON e.no = t.no WHERE e.no < 'A100' </source> <br> <center> {| class="wikitable" |- ! e.no !! e.name !! tokyo |- | A001 || 佐藤花子 || A001 |- | A002 || 田中太郎 || |- | A003 || 加藤一 || |- | A004 || 青木花 || |- | A005 || 藤田学 || |- | || || A010 |} </center> <br><br> __FORCETOC__ [[カテゴリ:SQL_Server]]
テーブルの結合
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse