最近SQLも触ることが増えてきました。
基本的なところから勉強しているので学びつつ。
今回は指定の文字列だけを抽出したいときに使えるLIKE句を使ったのでまとめます。
こちらのブログを参考にしました↓
【SQL】具体例でLIKE句を学ぶ(NOT LIKEや複数含む)
SQLに関して以下の教材がサンプルもあってわかりやすいかと思うのでおすすめです!
Table of Contents
LIKE句とは
sqlを書いていくうえで、あいまいな文字列を指定して抽出等を行いたい場合に利用します。
簡単な例で説明してみましょう。
↓こんなテーブルがあるとします。
userテーブル
ID | name | address | birth |
---|---|---|---|
1 | 山田 | 大阪 | 1997 |
2 | 中本 | 東京 | 1987 |
3 | 田口 | 東京 | 1990 |
4 | 今井 | 京都 | 1985 |
5 | 山下 | 兵庫 | 2000 |
ここで誕生月が90年代の人を抽出したいとします。
SELECT
ID,
name,
address,
birth
FROM
user
WHERE
birth LIKE '199_';
Code language: JavaScript (javascript)
すると下記の情報を取得することができます。
ID | name | address | birth |
---|---|---|---|
1 | 山田 | 大阪 | 1997 |
3 | 田口 | 東京 | 1990 |
- アンダースコア(_)は任意の一文字のマッチを意味します。
- バーセント記号(%)は0文字以上の文字列とのマッチを意味します。
今回の例でいうと、199X年の人がマッチするわけですね。アンダースコアを利用しているので、任意の一文字とのマッチを意味しています。
「1個の何かしらの文字列」ということですね。
では(%)を使うときはどんな時でしょうか?
試してみましょう!
SELECT
ID,
name,
address,
birth
FROM
user
WHERE
birth LIKE '1%';
Code language: JavaScript (javascript)
すると…
ID | name | address | birth |
---|---|---|---|
1 | 山田 | 大阪 | 1997 |
2 | 中本 | 東京 | 1987 |
3 | 田口 | 東京 | 1990 |
4 | 今井 | 京都 | 1985 |
1000年代に生まれた人が抽出できます。
パーセントはワイルドカードを意味していますね。ワイルドカードってのは「任意の文字列」の事を表しています。
今回でいうと「1」が最初に来れば後の文字列は何でも良いから全部抽出じゃ!
となっているわけです。
しかし2000年代に生まれた人とは…恐ろしい…
正規表現についてもう少し詳しく知りたい方はこの辺を確認すると良いと思います。↓
複数の条件をつける場合は?
ではここで複数の条件を付ける方法を紹介しましょう。
複数のあいまい条件を付けるのは簡単。ANDを使ってあげましょう。
userテーブル
ID | name | address | birth |
---|---|---|---|
1 | 山田 | 大阪 | 1997 |
2 | 中本 | 東京 | 1987 |
3 | 田口 | 東京 | 1990 |
4 | 今井 | 京都 | 1985 |
5 | 大前 | 和歌山 | 1979 |
6 | 瀧本 | 大阪 | 1975 |
このテーブルからあいまい条件を使って90年代と70年代の方を抽出してみます。
SELECT
ID,
name,
address,
birth
FROM
user
WHERE
birth LIKE '199_'
OR
birth LIKE '197_';
Code language: JavaScript (javascript)
そしたら
ID | name | address | birth |
---|---|---|---|
1 | 山田 | 大阪 | 1997 |
3 | 田口 | 東京 | 1990 |
5 | 大前 | 和歌山 | 1979 |
6 | 瀧本 | 大阪 | 1975 |
こんな風になるわけですね。
除外する場合は?
ではあいまい条件で除外する場合にはどうするのでしょうか?
これは簡単。notを付け足すだけです。
先ほどのテーブルを例にnotを使って紹介します。
userテーブル
ID | name | address | birth |
---|---|---|---|
1 | 山田 | 大阪 | 1997 |
2 | 中本 | 東京 | 1987 |
3 | 田口 | 東京 | 1990 |
4 | 今井 | 京都 | 1985 |
5 | 大前 | 和歌山 | 1979 |
6 | 瀧本 | 大阪 | 1975 |
SELECT
ID,
name,
address,
birth
FROM
user
WHERE
not birth LIKE '199_'
AND
not birth LIKE '197_';
Code language: JavaScript (javascript)
こんなSQLを書くと…
ID | name | address | birth |
---|---|---|---|
2 | 中本 | 東京 | 1987 |
4 | 今井 | 京都 | 1985 |
5 | 大前 | 和歌山 | 1979 |
6 | 瀧本 | 大阪 | 1975 |
90年代の人と、70年代の人が除外されましたね。
まとめ
SQLは今後もたくさん使う機会があるので自分でしっかり書きながらどんな事ができるのか等覚えていきたいです。
やり方自体は調べられるので!
では。
90年代と70年代の方を抽出する場合は、直感的にはANDではなくORを使うべきだと思うのですが、ANDで正しいのでしょうか?
ご意見ありがとうございます!
そうですね、90年and70年という条件はおかしいですね。
修正いたします!