SQLでのデータ操作方法

問い合わせの構文

SELECT * FROM EMP WHERE EMP_ID = #EMP_ID;
 SELECT列リスト: 取り出す列のリストを指定
 FROM句: 問い合わせ対象の表を指定


 結合のタイプ

  SELECT文で結合を使用することで、1つの表または複数の表をリンクさせ、1つの結果として戻すことができる。

  結合する条件による分類
   結合条件の違いによって、等価結合と非等価結合に分類される。
    等価結合: 結合条件によって、特定の列の値が等しいものを結び付ける
    非等価結合: 結合条件によって、特定の列の値が特定の列の範囲内であるものを結び付ける

  結合する値による分類
   結合条件を満たすデータを戻すかどうかで、内部結合と外部結合に分類される。
    内部結合: 結合条件を満たすデータだけを戻す
    外部結合: 結合条件を満たさないデータも含めて戻す

   複数のテーブルからの問い合わせ結果を結合して取得する場合、次のような方式がある。

  • 等価結合

     各テーブルの結合条件が同じ値のみを戻す
     条件のどちらかのデータが存在しない場合、結果セットには含まれない

SQL> select
     受注番号,emp.品番 品番,demp.入庫数 入庫数
     from emp, demp
     where emp.品番 = demp.品番 ;

列の別名定義は、as を指定してもよい。
結合テーブルに同じ項目名が存在する場合は、どちらのテーブル項目か指定するため、テーブル名で修飾する。(emp.品番)
SQL> select
     受注番号,emp.品番 as 品番,demp.入庫数 as 入庫数
     from emp, demp
     where emp.品番 = demp.品番 ;

inner join を使用して、等価結合することもできる。(インナージョイン)
SQL> select
     受注番号,emp.品番 as 品番,demp.入庫数 as 入庫数
     from emp inner join demp
     on emp.品番 = demp.品番;

3 つ以上の結合を inner join で指定するには、次のようにする。
SQL> select *
     from (emp inner join demp on emp.品番 = demp.品番)
     inner join tableA on emp.得意先 = tableA.得意先;

  • 自己結合

     1つのテーブルを2つ以上のテーブルに見立てて結合する

  • 内部結合(単純結合)

     結合条件を満たす行のみを戻す

emp の各レコードに dept の全レコードが結合される。
emp のレコード数 x dept のレコード数の結果が問い合わされる。

SQL> SELECT * FROM emp, dept;

  • 外部結合

     結合条件を満たしていないデータも同時に戻す。
     外部結合では、結合構文の違いによって、左側外部結合、右側外部結合、完全外部結合の結合タイプが使用できる。

 左側外部結合
     内部結合結果に加え、LEFT OUTER JOIN句の左側の表(FROM表)のすべての行を戻す

SQL> SELECT e.empno, e.ename, d.deptno, d.dname FROM dept d
     LEFT OUTER JOIN emp e
  2 ON (e.deptno = d.deptno);

右側外部結合
     内部結合結果に加え、RIGHT OUTER JOIN句の右側の表(JOIN表)のすべての行を戻す

SQL> SELECT e.empno, e.ename, d.deptno, d.dname FROM emp e
     RIGHT OUTER JOIN dept d
  2 ON (e.deptno = d.deptno);

完全外部結合
     内部結合結果に加え、FROM表とJOIN表のすべての行を戻す

SQL> SELECT e.empno, e.ename, d.deptno, d.dname FROM [[span style="color:red"]]emp e##
     FULL OUTER JOIN [[span style="color:red"]]dept d##
  2 ON (e.deptno = d.deptno);


Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License