昨日に引き続きSQLの記事です。
データ取得の続きについて書きます。
#特定の文字や数値を含むデータの取得
以下のテーブルを例に挙げて考える。
テーブル名:menue
number | name | price | category |
---|---|---|---|
1 | ショートケーキ | 200 | デザート |
2 | チョコケーキ | 250 | デザート |
3 | コーヒー | 120 | ドリンク |
4 | チョコマフィン | 150 | |
5 | コーヒーゼリー | 150 | デザート |
##LIKE演算子とワイルドカード
###LIKE演算子
「ある文字を含むデータ」を取得したい場合に用いる。
「~のような」という意味を持つ。
「指定したカラムが〇〇を含むレコード」という条件となる。
###ワイルドカード
「どんな文字列にも一致することを指す記号」のこと
「%」を用いる。
以下の表に条件と記述法を表す。
|条件|記述|
|:---:|:---:|:---:|
|全一致|"%文字列%"|
|前方一致|"文字列%"|
|後方一致|"%文字列"|
SELECT カラム名
FROM テーブル名
WHERE カラム名 LIKE 文字列;
【全一致の場合】
SELECT *
FROM menue
WHERE name LIKE "%ケーキ%";
number | name | price | category |
---|---|---|---|
1 | ショートケーキ | 200 | デザート |
2 | チョコケーキ | 250 | デザート |
【前方一致の場合】
SELECT *
FROM menue
WHERE name LIKE "チョコ%";
number | name | price | category |
---|---|---|---|
2 | チョコケーキ | 250 | デザート |
4 | チョコマフィン | 150 |
【後方一致】
SELECT *
FROM menue
WHERE name LIKE "%ケーキ";
number | name | price | category |
---|---|---|---|
1 | ショートケーキ | 200 | デザート |
2 | チョコケーキ | 250 | デザート |
##条件を満たさないデータを取得
###NOT演算子
「〇〇を含まないデータ」や「〇〇に一致しないデータ」のような条件で
データを取得したい場合に用いる。「否定」を意味する。
SELECT カラム名
FROM テーブル名
WHERE NOT カラム名 LIKE 文字列;
SELECT *
FROM menue
WHERE NOT name LIKE "%ケーキ%";
number | name | price | category |
---|---|---|---|
3 | コーヒー | 120 | ドリンク |
4 | チョコマフィン | 150 | |
5 | コーヒーゼリー | 150 | デザート |
また、条件に比較演算子と数値を指定することも可能。
SELECT カラム名
FROM テーブル名
WHERE NOT カラム名 比較演算子 数値;
SELECT *
FROM menue
WHERE NOT price > 200;
このときの条件は、「priceが200より大きい (満たす)」を否定しているため
「priceが200より小さい(200以下)」という条件になる。
ちょっとややこしいですが...汗
number | name | price | category |
---|---|---|---|
1 | ショートケーキ | 200 | デザート |
3 | コーヒー | 120 | ドリンク |
4 | チョコマフィン | 150 | |
5 | コーヒーゼリー | 150 | デザート |
##カラムに何も保存されていないデータの取得
###NULL
「中身がなにか分からない状態」のこと
データベースでは「何のデータも保存されていない場合」に用いる。
###IS NULL
「指定したカラムがNULLであるデータ」を取得する場合に用いる。
「~がNULLである」という意味を持つ。
SELECT カラム名
FROM テーブル名
WHERE カラム名 IS NULL;
SELECT * FROM menue
WHERE category IS NULL;
number | name | price | category |
---|---|---|---|
4 | チョコマフィン | 150 |
###NOT IS NULL
「指定したカラムがNULLでないデータ」を取得する場合に用いる。
「~がNULLでない」という意味を持つ。
SELECT カラム名
FROM テーブル名
WHERE カラム名 NOT IS NULL;
SELECT * FROM menue
WHERE category NOT IS NULL;
number | name | price | category |
---|---|---|---|
1 | ショートケーキ | 200 | デザート |
2 | チョコケーキ | 250 | デザート |
3 | コーヒー | 120 | ドリンク |
5 | コーヒーゼリー | 150 | デザート |