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

SQL

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

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

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

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

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

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_';

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

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

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

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

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

試してみましょう!

SELECT
    ID,
    name,
    address,
    birth
FROM
    user
WHERE
    birth LIKE '1%';

すると…

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

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

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

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

となっているわけです。

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

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

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

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

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

複数のあいまい条件を付けるのは簡単。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_';

そしたら

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_';

こんなSQLを書くと…

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

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

まとめ

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

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

では。

コメント

  1. たろう より:

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

    • ヤマ ヤマ より:

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

      修正いたします!

タイトルとURLをコピーしました