talosのプログラミング教室

【基本・応用情報技術者】SQL ~SELECT文①~

スポンサーリンク

こんにちは。たろすです。

今回はSQLのSELECT文について説明します。

基本的な使い方

SELECT文はデータベースから特定のデータを取り出すときに使用します。

最も基本的な使い方は以下になります。

SELECT カラム名1, カラム名2,... FROM テーブル名;

これはテーブルから特定のカラム(列)のデータを取ってくる処理を行います。

例えば以下のようなテーブルがあるとします。

f:id:talosta:20210619103730p:plain

これに対し次のようなSQLを投げると、

SELECT 社員番号 FROM 社員;

以下のデータが取れます。

f:id:talosta:20210619103848p:plain

すべてのカラムを取りたい場合は*で取ることができます。

SELECT * FROM 社員;

f:id:talosta:20210619103627p:plain

WHERE句

先程のSQLは条件を絞っていないため、全件が出力されます。

条件で絞る場合はWHERE句を使います。

SELECT カラム名1, カラム名2,... FROM テーブル名 WHERE 条件1 [AND/OR 条件2...];

例えば先程の社員テーブルで役職が部長のレコードを取得したい場合、以下のようなSQLを使用します。

SELECT * FROM 社員 WHERE 役職 = '部長';

f:id:talosta:20210619120438p:plain

このように比較演算子を使えます。

比較演算子には以下があります。


= 等しい
<> 等しくない
< 左項より右項が大きい
<= 右項が左項以上
> 左項より右項が小さい
>= 右項が左項以下

複数の条件を使用したい場合はAND(かつ)やOR(または)を使用します。

SELECT * FROM 社員 WHERE 社員番号 = 1000 AND 役職 = '部長';

f:id:talosta:20210619120400p:plain

文字列の場合は' 'で囲みます。


さらに柔軟に条件を指定することもできます。

IN句

IN句では複数の値を指定することができます。

SELECT カラム名1, カラム名2,... FROM テーブル名 WHERE カラム名 [NOT] IN (値1, 値2,...);

社員テーブルから社員番号1000と1001のレコードを取得したい場合は以下のようになります。

SELECT * FROM 社員 WHERE 社員番号 IN (1000, 1001);

f:id:talosta:20210619120438p:plain

逆に社員番号1000と1001以外を取得したい場合はNOTを入れます。

SELECT * FROM 社員 WHERE 社員番号 NOT IN (1000, 1001);

f:id:talosta:20210619120529p:plain

LIKE句

部分一致で取得したい場合はLIKE句を使用します。

SELECT カラム名1, カラム名2,... FROM テーブル名 WHERE カラム名 [NOT] LIKE パターン;

例えば苗字が「山田」の人を全員取得したい場合は次のようなSQLになります。

SELECT * FROM 社員 WHERE 社員名 LIKE '山田%';

f:id:talosta:20210619120438p:plain

名前の最後が「郎」の人を全員取得したい場合は、

SELECT * FROM 社員 WHERE 社員名 LIKE '%郎';

f:id:talosta:20210619120636p:plain

名前の中に「藤」が入る人を取得したい場合は、

SELECT * FROM 社員 WHERE 社員名 LIKE '%藤%';

f:id:talosta:20210619120722p:plain

となります。

一文字だけを任意の文字で取得したい場合は_を使います。

SELECT * FROM 社員 WHERE 役職 LIKE '_長';

f:id:talosta:20210619120804p:plain

BETWEEN句

範囲を指定したいときはBETWEEN句を用います。

SELECT カラム名1, カラム名2,... FROM テーブル名 WHERE カラム名 [NOT] BETWEEN 最小値 AND 最高値;

例えば社員番号が1001から1003のレコードを取得したい場合は以下のようなSQLになります。

SELECT * FROM 社員 WHERE 社員番号 BETWEEN 1001 AND 1003;

f:id:talosta:20210619120847p:plain

IS NULL

値がNULLのものを取得したい場合はIS NULL を使用します。

SELECT カラム名1, カラム名2,... FROM テーブル名 WHERE カラム名 IS [NOT] NULL;

社員名がNULLのレコードを取得したい場合は以下のようなSQLになります。

SELECT * FROM 社員 WHERE 社員名 IS NULL;

社員名がNULLのデータはないのでこのSQLではなにも取れません。

おわりに

今回はSQLのSELECT文について説明しました。

午後問でデータベースを取る方は必須の知識なのでしっかり覚えておきましょう。