複数の表からデータを取り出す方法:間違いやすいポイントを追え! Bronze SQL基礎I(6)(2/2 ページ)
Oracleデータベースエンジニアとしての基礎力を証明するORACLE MASTER Bronzeの取得を目指すITエンジニアは多い。本連載で間違いやすいポイントを確認し、合格に近づこう!
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」の中でも最も出題率が高い分野です。結合の種類は多く、内容も難しいため、一番の難関といえるでしょう。よく学習しておきましょう。
次回は副問い合わせについて、間違いやすい点にポイントを絞って説明します。
Copyright © ITmedia, Inc. All Rights Reserved.