その他

SQL入門: ステップ2 – 高度なSELECT文の活用

その他
この記事は約4分で読めます。

はじめに

株式会社インプルの奈良です。

前回は、SELECT文の基本的な用途である選択、射影、結合、合併について解説しました。

今回はさらに詳細な条件でデータをフィルタリングする方法を学びます。

解説で使用するテーブル構成(Peopleテーブル・Ordersテーブル)

Peopleテーブル

idnameage
1John20
2Alice25
3Bob30
4Carol22
5Dave18

Ordersテーブル

idcustomer_idproduct
12Apples
22Bananas
33Grapes
45Oranges
51Apples

全ての行及び列の検索(*)

全ての列を検索するには、列名の代わりにアスタリスク(*)を使用します。

SELECT *
FROM People;

実行結果:

idnameage
1John20
2Alice25
3Bob30
4Carol22
5Dave18

特定の列の検索

特定の列だけを検索するには、列名を指定します。複数列を検索する場合は、列名をカンマで区切ります。

SELECT name, age
FROM People;

実行結果:

nameage
John20
Alice25
Bob30
Carol22
Dave18

比較演算子の指定

比較演算子(=, !=, <, >, <=, >=)を使用して特定の条件を満たす行を選択できます。

SELECT *
FROM People
WHERE age > 20;

実行結果:

idnameage
2Alice25
3Bob30
4Carol22

論理演算子の指定

論理演算子(AND, OR, NOT)を使用して、複数の条件を組み合わせます。

SELECT *
FROM People
WHERE age > 20 AND name != 'John';

実行結果:

idnameage
2Alice25
3Bob30
4Carol22

BETWEENの使用

BETWEEN演算子を使用して、指定した範囲内にある値を選択します。

SELECT *
FROM People
WHERE age BETWEEN 20 AND 30;

実行結果:

idnameage
1John20
2Alice25
3Bob30
4Carol22

INの使用

IN演算子を使用して、特定のセット内にある値(複数の値との比較=一致するかどうか)を選択します。

SELECT *
FROM People
WHERE name IN ('John', 'Alice'); // nameカラムが、JohnとAliceのものを抽出

実行結果:

idnameage
1John20
2Alice25

LIKEの使用

LIKE演算子を使用して、特定のパターンに一致する値を選択します。ワイルドカード文字として ‘%’ と ‘_’ を使用できます。

% ・・・0文字以上の任意の文字列 例)’%impl%’・・・文字’impl’が含まれている文字列

_ ・・・任意の1文字 例)’____'(_4つ)・・・4文字を意味する

SELECT *
FROM People
WHERE name LIKE 'A%';

実行結果:

idnameage
2Alice25
奈良
奈良

前方一致なら、’A%’、後方一致なら、’%A’、部分一致なら、’%A%’のようになります。抽出したい条件によって上手く使い分けましょう!

NULLの使用

NULL値は特殊な値で、値が存在しないことを示します。NULL値を検索または除外するにはIS NULLまたはIS NOT NULLを使用します。

SELECT *
FROM People
WHERE age IS NOT NULL;

今回の実行結果はNULLがないので全ての行が表示されます。しかし実際にNULLが存在する場合は、その行は除外されます。(※IS NOT NULLでNULLが存在する行を除外という意味)

さいごに

今回は、詳細な条件でデータをフィルタリングする方法について解説しました。

次回は、スカラー関数、集約関数、グループ化(GROUP BY、HAVING)、行の並び替え(ORDER BY)についての記事をまとめたいと思います。