複数の表からデータを取り出す方法間違いやすいポイントを追え! Bronze SQL基礎I(6)(1/2 ページ)

Oracleデータベースエンジニアとしての基礎力を証明するORACLE MASTER Bronzeの取得を目指すITエンジニアは多い。本連載で間違いやすいポイントを確認し、合格に近づこう!

» 2008年08月14日 00時00分 公開

 前回「グループ関数を使用したデータの集計」では、グループ関数の特徴、GROUP BY句とHAVING句の記述方法などについて学習しました。

 今回は、以下の項目を確認します。

  • Oracle独自の結合
  • ANSI標準の結合

さまざまな結合の種類

例題1

次の結果と同じ結果となるSQL文を選択してください。

SQL> select ename,deptname from emp cross join dept;
ENAME                DEPTNAME
-------------------- ------------------
JONES                Administration
JONES                Marketing
JONES                Shipping
   ・
   ・
   ・
160行が選択されました。

a.select ename,deptname from emp natural join dept;

b.select e.ename,d.deptname from emp e,dept d

  where e.deptno=d.deptno;

c.select ename,deptname from emp,dept;

d.select e.ename,d.deptname from emp e left outer join dept d

  on e.deptno=d.deptno;

例題の範囲をおさらい

参考:「SQLで複数の表からデータを取り出す

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

 問題文で使用している結合はクロス結合と呼ばれ、 2つの表のすべての組み合わせを作成するものです。

正解

c

解説

選択肢a:この文で使用している結合は自然結合で、結果はクロス結合とは異なります。

ENAME                DEPTNAME
-------------------- ------------------------------------
Pat                  Marketing
William              Accounting
Neena                Executive
Lex                  Executive
Jonathon             Sales
  ・
  ・
  ・
12行が選択されました。

選択肢b:この文で使用している結合は等価結合で、結果はクロス結合とは異なります。

SQL> select e.ename,d.deptname from emp e,dept d
  2  where e.deptno=d.deptno;
ENAME                DEPTNAME
-------------------- ----------------------------------------
Jennifer             Administration
Michael              Marketing
Pat                  Marketing
Shelley              Accounting
William              Accounting
Steven               Executive
  ・
  ・
  ・
19行が選択されました。

選択肢c:この文で使用している結合は直積演算で、クロス結合と同じ結果を戻すことができます。

SQL> select ename,deptname from emp,dept;
ENAME                DEPTNAME
-------------------- --------------------------------
Jennifer             Administration
Michael              Administration
Pat                  Administration
Shelley              Administration
William              Administration
Steven               Administration
Neena                Administration
Lex                  Administration
Alexander            Administration
Bruce                Administration
  ・
  ・
  ・
160行が選択されました。

選択肢d:この文で使用している結合は左側外部結合で、結果はクロス結合とは異なります。

SQL> select e.ename,d.deptname from emp e left outer join dept d
  2  on e.deptno=d.deptno;
ENAME                DEPTNAME
-------------------- ------------------------------------------------
Jennifer             Administration
Pat                  Marketing
Michael              Marketing
Peter                Shipping
Randall              Shipping
Curtis               Shipping
  ・
  ・
  ・
20行が選択されました。
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。