「SQLによる検索」を実践する「データベーススペシャリスト試験」戦略的学習のススメ(12)(3/4 ページ)

» 2017年07月11日 05時00分 公開

WHERE句の使用例

(1)範囲をあらわすBETWEEN

 WHERE句にBETWEENを用いることで勤続年数が2年から5年の間である行を選択することができます。逆の条件にする場合NOT BETWEENを用います。

SELECT 社員名FROM 社員
WHERE 勤続年数 BETWEEN '2' AND '5'

 これは、以下と同じ演算結果が得られます。

SELECT 社員名FROM 社員
WHERE 勤続年数 >= '2' AND勤続年数 <= '5'

(2)複数の値を指定するIN

 INを利用すると、「IN」の後に「複数指定した値のどれかに合致する場合」、という条件を指定することができます。逆の条件にする場合NOT INを用います。

SELECT * FROM 社員
WHERE 社員名 IN( '安達' , '伊藤')

※IN()の括弧内をSQL文にし、副問合せの形にすることも可能です

(3)文字列の部分一致を指定するLIKE

 WHERE句にLIKEを用いることで、部分一致検索を行うことができます。逆の条件にする場合NOT LIKEを用います。

WHERE 社員名 LIKE '安%'		先頭に「安」がつく任意の社員名
WHERE 社員名 LIKE '%安'		文字列の最後に「安」がつく任意の社員名
WHERE 社員名 LIKE '%安%'		文字列に「安」を含む任意の社員名
WHERE 社員名 LIKE '_安'		1文字目が任意の文字で、2文字目が「安」となる社員名

※ _は任意の文字、%は任意の文字列という意味です

(4)NULLであることを指定するIS NULL

 NULLであることを指定するためには「= NULL」とは記述しません。以下の通り「IS NULL」と記述します。逆の条件にする場合「IS NOT NULL」と記述します。

WHERE 休業日数 IS NULL

(5)「あるSQL文の結果に合致する場合」を示すEXISTS

 以上のように記述すると、「あるSQL文の実行結果と同じ行が存在する場合」、という意味になります。逆の条件にする場合NOT EXISTS (SQL文)を用います。

WHERE EXISTS(SQL文)

※ 上記のように括弧の中にSQL文を埋め込み、WHERE 句の条件式やFROM 句につなげることを副問合せと呼びます。

GROUP BY句の使用例

 GROUP BY句は、ある列について値が等しい行を全て集計します。GROUP BY句では、以下の集約関数を利用することができます。また、GROUP BYの後にHAVING句を使い、グループ化する条件を指定することができます。

集約関数 集約関数の説明
AVG(列名) ある列について、グループ化した範囲での平均値を求める
MAX(列名) ある列について、グループ化した範囲での最大値を求める
MIN(列名) ある列について、グループ化した範囲での最小値を求める
SUM(列名) ある列について、グループ化した範囲での合計値を求める
COUNT(列名) ある列について、グループ化した範囲での行数を求める

 以下の例では、所属部署ごとの社員の平均勤続年数を出力します。

SELECT 所属部署, AVG(勤続年数) AS 平均勤続年数
	GROUP BY 所属部署
検索結果
所属部署 平均勤続年数
営業部 9
総務部 4

 以下の例では、所属部署毎の平均勤続年数を集計し、平均勤続年数が5年より多い部署について出力します。

SELECT 所属部署, AVG(勤続年数) AS 平均勤続年数
	GROUP BY 所属部署
	HAVING 平均勤続年数 > 5
検索結果
所属部署 平均勤続年数
営業部 9

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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