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

» 2008年08月14日 00時00分 公開
前のページへ 1|2       

Oracle独自の結合

例題2

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

select e.ename,d.deptname,e.sal from emp e,dept d
where e.deptno=d.deptno(+)
and e.sal>6000;

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

on e.deptno=d.deptno

where e.sal>6000;

b.select e.ename,d.deptname,e.sal from emp e right outer join dept d

on e.deptno=d.deptno

where e.sal>6000;

c.select ename,deptname,sal from emp e natural join dept d

where e.sal>6000;

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

on e.deptno=d.deptno

where e.sal>6000;

例題の範囲をおさらい

 Oracle8i以前の旧バージョンでは、(+)を使用した外部結合しか使用できませんでしたが、9i以降はANSIで規格化されたSQL1999構文も使用可能となりました。

正解

a、d

解説

 問題のSQL文では、DEPT表に(+)が付いています。

where e.deptno=d.deptno(+)

 選択肢aのように、DEPT表にleftと指定、もしくは選択肢dのようにEMP表にrightと指定することで、同じ結果を得られます。

 問題のSQL文、正解a正解dの結果は以下のようになります。

ENAME                DEPTNAME                    SAL
-------------------- -------------------- ----------
Michael              Marketing                 13000
Alexander            IT                         9000
Jonathon             Sales                      8600
Ellen                Sales                     11000
Eleni                Sales                     10500
Lex                  Executive                 17000
Neena                Executive                 17000
Steven               Executive                 24000
William              Accounting                 8300
Shelley              Accounting                12000
Kimberely                                       7000
11行が選択されました。

選択肢b:DEPT表にrightと指定しているため、結果は以下のようになります。

SQL> select e.ename,d.deptname,e.sal from emp e right outer join dept d
  2  on e.deptno=d.deptno
  3  where e.sal>6000;
ENAME                DEPTNAME                    SAL
-------------------- -------------------- ----------
Michael              Marketing                 13000
Shelley              Accounting                12000
William              Accounting                 8300
Steven               Executive                 24000
Neena                Executive                 17000
Lex                  Executive                 17000
Alexander            IT                         9000
Eleni                Sales                     10500
Ellen                Sales                     11000
Jonathon             Sales                      8600
10行が選択されました。

選択肢c:自然結合を行っているため、結果は以下のようになります。

SQL> select ename,deptname,sal from emp e natural join dept d
  2  where e.sal>6000;
ENAME                DEPTNAME                    SAL
-------------------- -------------------- ----------
William              Accounting                 8300
Neena                Executive                 17000
Lex                  Executive                 17000
Ellen                Sales                     11000
Jonathon             Sales                      8600

結合の特徴

例題3

自然結合について間違っているものを選択してください。

a.2つの表で同じ名前のすべての列に基づく

b.2つの表で一致するすべての列において、同じ値を持つ行を選択する

c.同じ名前を持つ列のデータ型が異なる場合、レコードは選択されない

d.複数の表のすべての行を使用したデカルト積の作成が可能

例題の範囲をおさらい

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

 自然結合は、同じ名前の列同士を等価結合します。

正解

c、d

解説

選択肢a、b:自然結合の説明文です。

選択肢c:同じ名前を持つ列のデータ型が異なる場合、エラーが戻るため、間違いです。

選択肢d:これはクロス結合の説明文であるため、間違いです。

 よって、間違っている選択肢はc、dです。

まとめ

 次の内容をチェックしましょう。

  • 結合の種類と特徴
  • 結合の構文

 今回学習した範囲は、「Bronze SQL基礎I」の中でも最も出題率が高い分野です。結合の種類は多く、内容も難しいため、一番の難関といえるでしょう。よく学習しておきましょう。

 次回は副問い合わせについて、間違いやすい点にポイントを絞って説明します。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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