| 内部結合 | 
	
		| BASE と OPTION の内部結合の結果を以下に示します。(下部に SQL を記す)
 
	| ID | NAME | AGE | EXT | UPDATE | NICKNAME |  
	| 2 | じろう | 35 | 5002 | 1 | じー |  
	| 3 | さぶろう | 26 | 5003 | 1 | サブちゃん |  
	| 3 | さぶろう | 26 | 5003 | 2 | サブブ |  select  BASE.ID,
        BASE.NAME,
        BASE.AGE,
        BASE.EXT,
        OPTION.CLASSUP,
        OPTION.NICKNAME
from    BASE
join    OPTION  on  BASE.EXT=OPTION.EXT
; ※JOIN を使わない旧式の記述。
 FROM にテーブル名をカンマ「,」区切りで並べる。
 WHERE に結合条件を記述する。 select  BASE.ID,
        BASE.NAME,
        BASE.AGE,
        BASE.EXT,
        OPTION.CLASSUP,
        OPTION.NICKNAME
from    BASE, OPTION
where   BASE.EXT=OPTION.EXT
; | 以下に内部結合のルールを示します。また、ルールによる動きを右に示します。 
	| ・ | 内部結合の場合 FROM 文で指定したテーブルを基準に結合する。 | BASE テーブルが基準。 |  
	| ・ | 結合条件の列の値が一致するレコード同士を結合する。 | BASE テーブルのレコード 2 と 3 の 5002 と 5003 が OPTION テーブルに存在。よって以下のようになる。 BASE テーブルのレコード 2 と OPTION テーブルのレコード 2 を結合。(BASE テーブルのレコード 3 は次のルールを参照)
 |  
	| ・ | 結合条件の列の値が複数一致する場合、それぞれと結合する。 | OPTION テーブルのレコード 3 ~ 4 と BASE テーブルのレコード 3 をそれぞれ結合。よって以下のようになる。 OPTION テーブルのレコード 3 と BASE テーブルのレコード 3 を結合。OPTION テーブルのレコード 4 と BASE テーブルのレコード 3 を結合。
 |  
	| ・ | 結合条件の列の値が NULL もしくは一致するレコードが存在しない場合は除外する。 | BASE テーブルのレコード 1 は EXT が NULL のため除外。BASE テーブルのレコード 4 の EXT 5004 は OPTION テーブルの EXT 列には存在しないため除外。
 |  | 
	
		| 左 外部結合 | 
	
		| BASE と OPTION の左外部結合の結果を以下に示します。(下部に SQL を記す)
 
	| ID | NAME | AGE | EXT | UPDATE | NICKNAME |  
	| 2 | じろう | 35 | 5002 | 1 | じー |  
	| 3 | さぶろう | 26 | 5003 | 1 | サブちゃん |  
	| 3 | さぶろう | 26 | 5003 | 2 | サブブ |  
	| 1 | いちろう | 48 | (NULL) | (NULL) | (NULL) |  
	| 4 | しろう | 18 | 5004 | (NULL) | (NULL) |  select     BASE.ID,
           BASE.NAME,
           BASE.AGE,
           BASE.EXT,
           OPTION.CLASSUP,
           OPTION.NICKNAME
from       BASE
left join  OPTION  on  BASE.EXT=OPTION.EXT
; | 以下に左外部結合のルールを示します。また、ルールによる動きを右に示します。 
	
		| ・ | 外部結合(左)の場合 FROM 文で指定したテーブルを基準に結合する。 | BASE テーブルが基準。 |  
		| ・ | 結合条件の列の値が一致するレコード同士を結合する。 | BASE テーブルのレコード 2 と 3 の 5002 と 5003 が OPTION テーブルに存在。よって以下のようになる。 BASE テーブルのレコード 2 と OPTION テーブルのレコード 2 を結合。(BASE テーブルのレコード 3 は次のルールを参照)
 |  
		| ・ | 結合条件の列の値が複数一致する場合、それぞれと結合する。 | OPTION テーブルには EXT 5003 が 2 レコード存在。よって以下のようになる。 BASE テーブルのレコード 3 と OPTION テーブルのレコード 3 を結合。BASE テーブルのレコード 3 と OPTION テーブルのレコード 4 を結合。
 |  
		| ・ | 結合条件の列の値が NULL でも結合する。結合するレコードの列は全て NULL のレコード。 | BASE テーブルのレコード 1 は EXT が NULL のため列が全て NULL のレコードと結合。BASE テーブルのレコード 4(EXT 5004)は OPTION テーブルの EXT 列に存在しないため列が全て NULL のレコードと結合。
 |  | 
	| 右・外部結合 | 
	
		| BASE と OPTION の右外部結合の結果を以下に示します。(下部に SQL を記す)
 
	| ID | NAME | AGE | EXT | UPDATE | NICKNAME |  
	| 2 | じろう | 35 | 5002 | 1 | じー |  
	| 3 | さぶろう | 26 | 5003 | 1 | サブちゃん |  
	| 3 | さぶろう | 26 | 5003 | 2 | サブブ |  
	| (NULL) | (NULL) | (NULL) | 5001 | 1 | イチ |  select      BASE.ID,
            BASE.NAME,
            BASE.AGE,
            BASE.EXT,
            OPTION.CLASSUP,
            OPTION.NICKNAME
from        BASE
right join  OPTION  on  BASE.EXT=OPTION.EXT
; | 以下に外部結合(右)のルールを記す。 結合条件に指定した列が一致するレコード同士を結合する。(この例の場合、EXT 列)結合条件の列の値が複数存在する場合、それぞれと結合する。(この例の場合、EXT が 5003 の 2 レコードがそれぞれ結合する)結合条件の列が NULL でも結合する。存在しない ID と NAME、AGE は NULL となる。(この例の場合、EXT が 5001)
 
	
		| ・ | 右外部結合の場合 JOIN 文で指定したテーブルを基準に結合する。 | OPTION テーブルが基準。 |  
		| ・ | 結合条件の列の値が一致するレコード同士を結合する。 | OPTION テーブルのレコード 2 ~ 4 の 5002 と 5003 が BASE テーブルに存在。よって以下のようになる。 OPTION テーブルのレコード 2 と BASE テーブルのレコード 2 を結合。OPTION テーブルのレコード 3 と BASE テーブルのレコード 3 を結合。OPTION テーブルのレコード 4 と BASE テーブルのレコード 3 を結合。
 |  
		| ・ | 結合条件の列の値が複数一致する場合、それぞれと結合する。 | OPTION テーブルには EXT 5003 が 2 レコード存在。よって以下のようになる。 BASE テーブルのレコード 3 と OPTION テーブルのレコード 3 を結合。BASE テーブルのレコード 3 と OPTION テーブルのレコード 4 を結合。
 |  
		| ・ | 結合条件の列の値が NULL でも結合する。結合するレコードの列は全て NULL のレコード。 | BASE テーブルのレコード 1 は EXT が NULL のため列が全て NULL のレコードと結合。BASE テーブルのレコード 4(EXT 5004)は OPTION テーブルの EXT 列に存在しないため列が全て NULL のレコードと結合。
 |  | 
	| 左・外部結合 & 特定レコードに絞り込む | 
	
		| 
	| ID | NAME | AGE | EXT | UPDATE | NICKNAME |  
	| 2 | じろう | 35 | 5002 | 1 | じー |  
	| 3 | さぶろう | 26 | 5003 | 2 | サブブ |  
	| (NULL) | (NULL) | (NULL) | (NULL) | 1 | イチ |  with
    in2 as (select    EXT,
                      max(CLASSUP) CLASSUP
            from      OPTION
            group by  EXT),
    in3 as (select    OPTION.EXT,
                      OPTION.CLASSUP,
                      OPTION.NICKNAME
            from      OPTION
            join      in2 on     OPTION.EXT=in2.EXT
                             and OPTION.CLASSUP=in2.CLASSUP)
select      BASE.ID,
            BASE.AGE,
            BASE.EXT,
            in3.CLASSUP,
            BASE.NAME,
            in3.NICKNAME
from        BASE
right join  in3  on  BASE.EXT=in3.EXT
; |  |