【SQL】指定の文字列を抽出、除外するLIKE句 複数条件指定も

最近SQLも触ることが増えてきました。

基本的なところから勉強しているので学びつつ。

今回は指定の文字列だけを抽出したいときに使えるLIKE句を使ったのでまとめます。

こちらのブログを参考にしました↓
【SQL】具体例でLIKE句を学ぶ(NOT LIKEや複数含む)

SQLに関して基礎は以下の本を読んだら絵が使われていたので参考にもなるかと思います!

LIKE句とは

sqlを書いていくうえで、あいまいな文字列を指定して抽出等を行いたい場合に利用します。

簡単な例で説明してみましょう。

↓こんなテーブルがあるとします。

userテーブル

IDnameaddressbirth
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)

すると下記の情報を取得することができます。

IDnameaddressbirth
1山田大阪1997
3田口東京1990
  • アンダースコア(_)は任意の一文字のマッチを意味します。
  • バーセント記号(%)は0文字以上の文字列とのマッチを意味します。

今回の例でいうと、199X年の人がマッチするわけですね。アンダースコアを利用しているので、任意の一文字とのマッチを意味しています。

「1個の何かしらの文字列」ということですね。

では(%)を使うときはどんな時でしょうか?

試してみましょう!

SELECT ID, name, address, birth FROM user WHERE birth LIKE '1%';
Code language: JavaScript (javascript)

すると…

IDnameaddressbirth
1山田大阪1997
2中本東京1987
3田口東京1990
4今井京都1985

1000年代に生まれた人が抽出できます。

パーセントはワイルドカードを意味していますね。ワイルドカードってのは「任意の文字列」の事を表しています。

今回でいうと「1」が最初に来れば後の文字列は何でも良いから全部抽出じゃ!

となっているわけです。

しかし2000年代に生まれた人とは…恐ろしい…

正規表現についてもう少し詳しく知りたい方はこの辺を確認すると良いと思います。↓

SQLの曖昧検索、正規表現を解説!

複数の条件をつける場合は?

ではここで複数の条件を付ける方法を紹介しましょう。

複数のあいまい条件を付けるのは簡単。ANDを使ってあげましょう。

userテーブル

IDnameaddressbirth
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)

そしたら

IDnameaddressbirth
1山田大阪1997
3田口東京1990
5大前和歌山1979
6瀧本大阪1975

こんな風になるわけですね。

除外する場合は?

ではあいまい条件で除外する場合にはどうするのでしょうか?

これは簡単。notを付け足すだけです。

先ほどのテーブルを例にnotを使って紹介します。

userテーブル

IDnameaddressbirth
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を書くと…

IDnameaddressbirth
2中本東京1987
4今井京都1985
5大前和歌山1979
6瀧本大阪1975

90年代の人と、70年代の人が除外されましたね。

まとめ

SQLは今後もたくさん使う機会があるので自分でしっかり書きながらどんな事ができるのか等覚えていきたいです。

やり方自体は調べられるので!

では。

2 COMMENTS

たろう

90年代と70年代の方を抽出する場合は、直感的にはANDではなくORを使うべきだと思うのですが、ANDで正しいのでしょうか?

返信する
ヤマ

ご意見ありがとうございます!
そうですね、90年and70年という条件はおかしいですね。

修正いたします!

返信する

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA