SELECT文

準備

この単元で使用するので、以下のテーブルを作成してください。

「fruits(商品)」表 (※()内は論理名、型)

code(商品コード、INT)name(商品名、VARCHAR(20 CHAR))price(単価、INT)
101メロン800
102いちご150
103りんご120
104レモン200
999NULL100

比較演算子

WHERE句には=以外にも以下の比較演算子が使用できます。

比較演算子意味例の意味
=等しいID = 10IDが10と等しい
<>等しくないID <> 10IDが10と等しくない
<より小さいID < 10IDが10より小さい
>より大きいID > 10IDが10より大きい
<=以下ID <= 10IDが10以下
>=以上ID >= 10IDが10以上

例文
SELECT * FROM fruits WHERE price >= 200 ;
(単価が200以上のデータを取得します。)

算術演算子

検索した結果に計算を加えたり、また計算結果を元に検索することができます。

比較演算子意味例の意味
+加算ID + 10IDに10を足す
減算ID – 10IDから10を引く
*積算ID * 10IDに10を掛ける
/乗算ID / 10IDを10で割る
%剰余ID % 2IDを2で割った余り

例文
SELECT name, price * 1.08 FROM fruits ;
SELECT * FROM fruits WHERE price * 1.08 > 150 ;

別名(AS)

ASを使って取得結果の列名を別名で置き換えることができます。(ASは省略も可能)

SELECT name, price * 1.08 AS tax_inc FROM fruits ;
SELECT name, price * 1.08 tax_inc FROM fruits ;

論理演算子

SELECT文で取得する条件を複数指定するには、「論理演算子」と呼ばれる記号を使用して条件を作成します。

論理演算子意味例の意味
ANDAかつBID >= 10 AND 年齢 = 20IDが10以上でかつ年齢が20である
ORAまたはBID >= 10 OR 年齢 = 20IDが10以上かまたは年齢が20である
NOTAではないNOT 年齢 = 20年齢が20ではない

例文
SELECT * FROM fruits WHERE price >= 200 AND name <> 'メロン' ;
(単価が200以上かつ名前がメロンではないデータを取得します。)

あいまい検索(部分一致、%)

WHERE句に「LIKE」と「%」や「_ 」という文字(ワイルドカード)を使用して条件を作成すると、曖昧検索(部分一致)を行うことができます。
曖昧な部分をワイルドカードに置き換えて、部分的に指定した文字列と一致する値を検索します。

SELECT * FROM fruits WHERE name LIKE '%ン' ;
ここでは、商品名の末尾に「ン」が付くデータを検索しています。

SQLで使われるワイルドカード

ワイルドカード意味パターン例マッチする例
%任意の数の文字にマッチする%ン
ブ%
%ン%
メロ レモ
ドウ ルーベリー
ズ マゴー
_1文字にマッチするユ_
_モ
ス__


モモ


「NOT LIKE」で不一致のものを検索することもできます。
SELECT * FROM fruits WHERE name NOT LIKE '%ン' ;

データの並び替え(ORDER BY)

SELECT文で「ORDER BY」句を使用すると、指定した条件でのデータの並べ替え(ソート)が可能です。

SELECT * FROM fruits ORDER BY price ASC ;
( SELECT * FROM テーブル名 ORDER BY カラム名 [ASC | DESC] ; )
この例では商品テーブルの全データを単価の昇順で並べ替えて取得します。

「ASC」は昇順(値の小さい順1,2,3)で、「DESC」にすると降順(値の大きい順3,2,1)に並べ替えます。

その他の検索方法

範囲に含まれるデータの取得(BETWEEN、NOT BETWEEN)

BETWEEN演算子を使って「BETWEEN~AND~」という書き方で、値の範囲を指定することが出来ます。

SELECT * FROM fruits WHERE price BETWEEN 150 AND 200 ;
単価が150以上200以下の商品が抽出されます。

SELECT * FROM 商品 WHERE price NOT BETWEEN 150 AND 200 ;
NOTを追加しているので、単価が150以上200以下ではない(150より小さいか200より大きい)商品が抽出されます。

一致するデータの取得(IN、NOT IN)

IN演算子を使用すると、指定した値のいずれかと一致するデータを取得できます。

SELECT * FROM fruits WHERE name IN ('メロン', 'いちご') ;
名前が「いちご」または「メロン」の商品が抽出されます。

SELECT * FROM fruits WHERE name NOT IN ('メロン', 'いちご') ;
名前が「いちご」または「メロン」ではない商品が抽出されます。

NULLのデータを取得(IS NULL、IS NOT NULL)

空値を持つ行を検索する際には、IS NULL という指定を使うことができます。

SELECT * FROM fruits WHERE name IS NULL ;
名前が空値となっている商品が抽出されます。

SELECT * FROM fruits WHERE name IS NOT NULL ;
名前が空値ではない商品が抽出されます。

練習問題

次の表を作成し、様々な条件を使用したSQL文を書いてみましょう。

「輸出先」表 ( 人口の単位は[ 万人 ] )

輸出先コード輸出先名人口地方
12ミナンミ王国100南洋
15パローヌ国200中部
22トカンタ国150北洋
23アルファ帝国80北洋
30NULL110中部

問1: 人口が100万人以上である国を抽出してください。

問2: 人口が100万人未満の国を抽出してください。

問3: 輸出先コードが20未満でかつ人口が150万人より多い国を調べてください。

問4: 輸出先コードが20以上の国と、人口が200万人以上の国を同時に調べてください。

問5: トカンタ国の人口を調べてください。

問6: 国名に「ン」を含む国を調べてください。

問7:輸出先名がNULLでない国を調べてください。

タイトルとURLをコピーしました