Oracle Database テーブル同士を外部結合して抽出する

Oracle Database テーブル同士を外部結合して抽出する

Oracle Databaseで、テーブル同士を外部結合して抽出する手順を記述してます。

環境

  • OS windows11 home
  • Oracle Database 21c Express Edition
  • SQL Developer 21.2.1.204

手順

テーブル同士を外部結合しして抽出するには、「LEFT OUTER JOIN」「RIGHT OUTER JOIN」「FULL OUTER JOIN」を使用します。
※「FULL OUTER JOIN」以外は「OUTER」は省略できます。

SELECT * FROM テーブル1
LEFT JOIN テーブル2 ON テーブル1.列名 = テーブル2.列名;

or

SELECT * FROM テーブル1
RIGHT OUTER JOIN テーブル2 ON テーブル1.列名 = テーブル2.列名;

or

SELECT * FROM テーブル1
FULL OUTER JOIN テーブル2 ON テーブル1.列名 = テーブル2.列名;

実際に、以下の2つのテーブル「ORDERTBL」と「ORDERDETAILTBL」を内部結合してみます。

テーブル「ORDERTBL」

テーブル「ORDERDETAILTBL」

LEFT JOIN

左側のテーブル(ORDERTBL)全件と、条件が一致した右側のテーブル(ORDERDETAILTBL)のデータが抽出されます。

SELECT * FROM ORDERTBL
LEFT JOIN ORDERDETAILTBL ON ORDERTBL.DETAIL_ID = ORDERDETAILTBL.ORDER_DETAIL_ID;

実行結果を見ると、外部結合できていることが確認できます。

テーブルを逆にして実行すると、左側のテーブル(ORDERDETAILTBL)全件取得されます。

SELECT * FROM ORDERDETAILTBL
LEFT JOIN ORDERTBL ON ORDERTBL.DETAIL_ID = ORDERDETAILTBL.ORDER_DETAIL_ID;

実行結果

RIGHT JOIN

右側のテーブル(ORDERTBL)全件と、条件が一致した左側のテーブル(ORDERDETAILTBL)のデータが抽出されます。

SELECT * FROM ORDERTBL
RIGHT JOIN ORDERDETAILTBL ON ORDERTBL.DETAIL_ID = ORDERDETAILTBL.ORDER_DETAIL_ID;

実行結果

実行するテーブルを逆にしてみます。

SELECT * FROM ORDERDETAILTBL
RIGHT JOIN ORDERTBL ON ORDERTBL.DETAIL_ID = ORDERDETAILTBL.ORDER_DETAIL_ID;

実行結果

FULL OUTER JOIN

両テーブルを、データが一致しなかったものも含め結合します。

SELECT * FROM ORDERTBL
FULL OUTER JOIN ORDERDETAILTBL ON ORDERTBL.DETAIL_ID = ORDERDETAILTBL.ORDER_DETAIL_ID;

実行結果