PREPARATION
受験対策

Silverの例題解説
「S3.1 SQL コマンド」

今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド」からの出題です。

例題

3.24

次のような2つのテーブル t1 と t2 がある。
=> select * from t1;

id | val
---- + -----
1 | aaa
2 | bbb
(2 行)
=> select * from t2;

id | val
---- + -----
1 | xxx
1 | yyy
3 | zzz
(3 行)
いずれも、id列はINTEGER型、val列はTEXT型である。

次のSELECT文を実行した時に返される行数はいくつか。
select * from t1 full join t2 using (id);

  1. 1行
  2. 2行

  3. 3行

  4. 4行

  5. 5行

※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2013年1月24日

解答と解説

RDBMSではデータを正規化して複数の表に分けて格納するのが普通です。データを検索するときには、これら複数の表を結合して、あたかも1つの表であるかのようにして扱います。このときに使われるのがJOIN句です。
JOIN句を使うSELECT文の基本的な構文は
SELECT column_list ←(表示したい列)
FROM table1 ←(検索対象の表)
JOIN table2 ←(結合対象の表)
ON condition ←(結合条件)
となります。例えば、上の例で、id列の値が同じデータを結合する場合、
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id;
などと記述することで結合できます。
これを実行した時の結果は、

id|val|id|val

----+-----+----+-----

1|aaa|1|xxx

1|aaa|1|yyy

(2 行)

となり、id=1の行だけが返されます。t1にはid=1の行が1つしかありませんが、t2には2つあります。この場合、id=1の行が2行になって返され、t1については同じ内容が繰り返し表示されることに注意してください。
一方で、t1にはid=2の行がありますが、結合できる行がt2にありませんから、これは返されません。同じようにt2のid=3の行も返されません。
このような一方のテーブルだけに存在する行も返して欲しい場合もあるでしょう。そんなときに使われるのが外部結合です。外部結合をするためには、JOINの前にLEFT/RIGHT/FULLの修飾を付加します。
SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id;
とすると、t1には存在するがt2に存在しない行(つまりid=2の行)も返され、結果は以下のようになります。

id|val|id|val

----+-----+----+-----

1   |aaa |1   |xxx

1   |aaa |1   |yyy

2   |bbb|      |

(3 行)

RIGHT JOINとすると、これとは逆にt2に存在するがt1に存在しない行(id=3の行)も返されます。FULL JOINとすると、これらの両方が返されます。
結合元と結合先の列名が同じ時は、ON句の代わりにUSING句を使って記述を簡略化することができます。USINGの後に結合に使う列名を括弧で括り、以下のように記述します。
SELECT * FROM t1 FULL JOIN t2 USING (id);
これを実行した時の結果は

id|val|val

----+-----+----

1   |aaa|xxx

1   |aaa|yyy

2   |bbb|

3   ||zzz

(4 行)

となりますので、正解は D です。

ON句を使った時とは結果として返される列の数が違う(id列が統合される)ということにも注意してください。
なお、USINGをさらに簡略化して、NATURAL JOINとする方法もありますが、この場合、結合元と結合先で名前が同じ列がすべて結合対象となることに注意が必要です。この例題の表では、t1とt2の両方にval列があるため、
SELECT * FROM t1 NATURAL FULL JOIN t2;
とすると、これは
SELECT * FROM t1 FULL JOIN t2 USING (id, val);
と同等になってしまいます。

 

今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。

※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システムでの
OSS-DBの採用がますます拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定資格になります

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

LPI-Japan
Platinum Sponsors