「SQLによる検索」を実践する:「データベーススペシャリスト試験」戦略的学習のススメ(12)(2/4 ページ)
あの“津崎さん”も保有する難関資格「データベーススペシャリスト」。本企画では、データベーススペシャリスト試験 午前/午後試験対策のための「基礎知識」を抜粋してお届けします。今回は、「SQLによる検索の基礎」を解説します。
SELECT文に関するその他のテクニック
(1)重複行を取り除くDISTINCT
所属部署が総務部の行は2件ありますが、以下のようにDISTINCTを指定すると、重複行を取り除き出力することができます。
SELECT DISTINCT 所属部署 FROM 社員
所属部署 | |
---|---|
営業部 | |
総務部 |
(2)NULLを置換できるCOALESCE関数
休暇日数にはNULLが格納されていますが、COALESCE関数を利用すると、NULLを指定した値に置き換えて出力することができます。
SELECT 社員名, COALESCE(休職日数, 0) FROM 社員
社員名 | 休職日数 | |
---|---|---|
安達 | 0 | |
伊藤 | 0 | |
宇部 | 0 |
(3)条件式を指定するCASE
CASEにより条件式を指定できます。以下では集約関数SUMにおいて「勤続年数が4より大きい場合は1として集計」という条件式を指定し、所属部署ごとに勤続年数が4より大きい行の数を求めています。
SELECT 所属部署, SUM(CASE WHEN 勤続年数 > '4' THEN 1 ELSE 0 END) AS 中堅社員数 FROM 社員 GROUP BY 所属部署
社員名 | 休職日数 | |
---|---|---|
安達 | 0 | |
伊藤 | 0 | |
宇部 | 0 |
(4)「問合せ結果」に問合せる副問合せ
SELECT文の実行結果を表と見なし、これに対し、問合せや条件指定を行います。
SELECT 列名1, 列名2,… FROM(SELECT文)
SELECT 列名1, 列名2,… FROM テーブル名 WHERE 条件 (SELECT文)
一見複雑そうに見えますが、上記(SELECT文)の箇所がどのような表になるかを描いてみるとイメージし易くなります。
演習11-1
二つの表“納品”、“顧客”に対する次のSQL文と同じ結果が得られるSQL文はどれか。
SELECT 顧客番号, 顧客名 FROM 顧客 WHERE 顧客番号 IN (SELECT 顧客番号 FROM 納品 WHERE 商品番号 = 'G1')
ア SELECT 顧客番号, 顧客名 FROM 顧客
WHERE 'G1' IN (SELECT 商品番号 FROM 納品)
イ SELECT 顧客番号, 顧客名 FROM 顧客
WHERE 商品番号 IN
(SELECT 商品番号 FROM 納品
WHERE 商品番号 = 'G1')
ウ SELECT 顧客番号, 顧客名 FROM 納品, 顧客
WHERE 商品番号 = 'G1'
エ SELECT 顧客番号, 顧客名 FROM 納品, 顧客
WHERE 納品.顧客番号 = 顧客.顧客番号 AND 商品番号 = 'G1'
(H17春DB午前問37)
解答 演習11-1 エ
*囲み内をクリックすると解答を表示します(表示後ページをリロードすると、再び非表示になります)
(5)集合演算子
SELECT文とSELECT文の間に「集合演算子」を用いることで、集合演算を行うことができます。次のSQL文は発注先と支払先のどちらかにある取引先コードを出力(和集合)します。
SELECT 取引先コード FROM 発注先 UNION ALL SELECT 取引先コード FROM 支払先
利用できる集合演算子 | UNION | 和集合 |
---|---|---|
EXCEPT | 差集合 | |
INTERSECT | 積集合 |
※集合演算子の後にALL を付与すると、重複する行も全て表示します
(ALL を付与しない場合は、重複行は1行にまとめられます)
※演算対象となる両SQL文において、列名の型と数を合わせる必要があります
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 春期試験の押さえどころを総ざらい!
本連載では、テクニカルエンジニア(データベース)試験に対応できる知識を確認していきます。多岐にわたる知識が問われる試験ですので、受験する方はもちろん、日常業務ではあまり使うことのない技術知識の確認にも役立ててください。 - データベーススペシャリスト試験(Database Specialist Examination)
ITエンジニアに必要な各種資格情報を解説する「@IT自分戦略研究所 資格辞典」。今回は、IPAが実施する情報処理技術者試験の「高度試験」9区分のうちの一つ「データベーススペシャリスト試験」を紹介する。 - 真のデータベースエンジニアを目指そう!
本連載は、ITシステム開発の現場でプログラミングやSQLのコーディングを行っているエンジニア(データベース利用者)が、データ管理者(DA)やデータベース管理者(DBA)へステップアップするための第一歩として有効な基礎知識を紹介する(編集局) - 【Oracle Database】忘れていませんか? 「アラートログ調査」に必要な、たった3つのキホン
データベース管理システムの運用でトラブルが発生したらどうするか。データベースサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は基本編として「アラートログの調査で押さえるべき3つのポイント」を解説します。【Oracle Database 12c対応版】