📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

ページの作成:「== 概要 == SQL Serverをはじめ、各データベースはテーブルをJOIN(結合)することがよくある。<br> ここでは代表的なJOINの種類につい…」
 
 
(同じ利用者による、間の8版が非表示)
12行目: 12行目:
INNER JOIN(内部結合)は、両方のテーブルの結合条件に一致するものだけを取得する。<br>
INNER JOIN(内部結合)は、両方のテーブルの結合条件に一致するものだけを取得する。<br>
外部結合のようにテーブルの優先度は存在しない。<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>
<syntaxhighlight 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';
</syntaxhighlight>
<br>
<center>
{| class="wikitable"
|-
! e.no !! e.name !! tokyo !! osaka
|-
| A001 || 佐藤花子 || A001 || A001
|}
</center>
<br>
===== 例2  WHERE句で結合する(INNER JOIN句を使用しないパターン) =====
<syntaxhighlight 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;
</syntaxhighlight>
<br>
<center>
{| class="wikitable"
|-
! e.no !! e.name !! tokyo !! osaka
|-
| A001 || 佐藤花子 || A001 || A001
|}
</center>
<br><br>
<br><br>


20行目: 112行目:
<br>
<br>
なお、SQL Serverでは、LEFT OUTER JOINをLEFT JOINと記述してもよい。<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>
<syntaxhighlight 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';
</syntaxhighlight>
<br>
<center>
{| class="wikitable"
|-
! e.no !! e.name !! tokyo !! osaka
|-
| A001 || 佐藤花子 || A001 || A001
|-
| A002 || 田中太郎 ||  || A002
|-
| A003 || 佐藤花子 ||  ||
|-
| A004 || 佐藤花子 ||  ||
|-
| A005 || 藤田学 || A005 ||
|}
</center>
<br><br>
<br><br>


28行目: 206行目:
<br>
<br>
SQL Serverでは、RIGHT OUTER JOINをRIGHT JOINと記述してもよい。<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>
<br><br>


36行目: 217行目:
<br>
<br>
SQL Serverでは、FULL OUTER JOINをFULL JOINと記述してもよい。<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>
<syntaxhighlight 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'
</syntaxhighlight>
<br>
<center>
{| class="wikitable"
|-
! e.no !! e.name !! tokyo
|-
| A001 || 佐藤花子 || A001
|-
| A002 || 田中太郎 ||
|-
| A003 || 加藤一 ||
|-
| A004 || 青木花 ||
|-
| A005 || 藤田学 ||
|-
|  ||  || A010
|}
</center>
<br><br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:SQL_Server]]
[[カテゴリ:SQL_Server]]