Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

文字列比較で使用する演算子

文字列を比較する際には「比較演算子」を使います。

比較演算子自体はSQL以外でも使われますが、SQLで利用可能な比較演算子は次の通りです。

演算子 機能 使用例
= ○ と △ は等しい  ○ = △
<=>  ○ と △ は等しい ※NULLにも対応 ○ <=> △
<> ○ と △ は等しくない ○ <> △
!= ○ と △ は等しくない  ○ != △
< ○ は △ よりも小さい ○ < △
<= ○ は △ 以下( ○ は △よりも小さいか等しい) ○ <= △
> ○ は △ よりも大きい ○ > △
>= ○ は △ 以上( ○ は △よりも大きいか等しい) ○ >= △

比較演算子で比較した結果は、 1(=TRUE) 、 0(=FALSE) 、もしくは NULLを返します。

TRUEとFALSEには、それぞれ定数で1と0が割り当てられています。

上記以外にも次のような演算子が用意されています。

演算子 機能 使用例
IS ○ は △である ○ IS △
IS NOT ○ は △ではない ○ IS NOT △
IS NULL ○ は NULLである ○ IS NULL
IS NOT NULL ○ は NULLではない ○ IS NOT NULL
BETWEEN AND ○ は minより大きいか等しくmaxより小さいか等しい ○ BETWEEN min AND max
NOT BETWEEN AND ○ は minより大きくも等しくもなく、maxより小さくも等しくもない ○ NOT BETWEEN min AND max
IN ○ は カッコ内のいずれかの値に等しい ○ IN (△, △△, …)
NOT IN ○ は 括弧内のいずれの値とも等しくない ○ NOT IN (△, △△, …)
ANY ○ は カッコ内のいずれかの値に等しい ○ ANY (△, △△, …)
LIKE 正規表現を使用した文字列検索 ○ LIKE △
NOT LIKE LIKEの結果を反転させたもの ○ NOT LIKE △
REGEXP(RLIKE) 正規表現を使用した文字列検索(RLIKEはシノニム) ○ REGEXP △
NOT REGEXP(RLIKE) REGEXPの結果を反転させたもの ○ NOT REGEXP △

では、それぞれの使い方を見ていきましょう。

= / <=> / <> / !=

指定した文字列と等しいか等しくないかを判定するには、「=」「<=>」「<>」「!=」の4つが使えます。

サンプルコードでそれぞれの使い方を確認しましょう。

  1. mysql> SELECT * FROM my_table;
  2. +------+-------+
  3. | id | name |
  4. +------+-------+
  5. | 1 | Abe |
  6. | 2 | Satou |
  7. | 3 | Ide |
  8. +------+-------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM my_table WHERE name = 'Ide';
  12. +------+------+
  13. | id | name |
  14. +------+------+
  15. | 3 | Ide |
  16. +------+------+
  17. 1 row in set (0.00 sec)
  18.  
  19. mysql> SELECT * FROM my_table WHERE name <=> 'Ide';
  20. +------+------+
  21. | id | name |
  22. +------+------+
  23. | 3 | Ide |
  24. +------+------+
  25. 1 row in set (0.00 sec)
  26.  
  27. mysql> SELECT * FROM my_table WHERE name <> 'Ide';
  28. +------+-------+
  29. | id | name |
  30. +------+-------+
  31. | 1 | Abe |
  32. | 2 | Satou |
  33. +------+-------+
  34. 2 rows in set (0.00 sec)
  35.  
  36. mysql> SELECT * FROM my_table WHERE name != 'Ide';
  37. +------+-------+
  38. | id | name |
  39. +------+-------+
  40. | 1 | Abe |
  41. | 2 | Satou |
  42. +------+-------+
  43. 2 rows in set (0.00 sec)

それぞれ想定した動作になっていることがわかります。

ここでは確認していませんが、「<=>」はNULLの比較にも対応しています。

< / <= / > / >=

SQLでは文字列の大小(アルファベット順)を比較可能です。

比較には「<」「<=」「>」「>=」の4つが使えます。

使い方や演算子の意味は、数学などで使われるものと基本的に同じです。

こちらもサンプルコードで確認しましょう。

  1. mysql> SELECT * FROM my_table WHERE name < 'i';
  2. +------+------+
  3. | id | name |
  4. +------+------+
  5. | 1 | Abe |
  6. +------+------+
  7. 1 rows in set (0.00 sec)
  8.  
  9. mysql> SELECT * FROM my_table WHERE name <= 'i';
  10. +------+------+
  11. | id | name |
  12. +------+------+
  13. | 1 | Abe |
  14. +------+------+
  15. 1 rows in set (0.00 sec)
  16.  
  17. mysql> SELECT * FROM my_table WHERE name <= 'idea';
  18. +------+------+
  19. | id | name |
  20. +------+------+
  21. | 1 | Abe |
  22. | 3 | Ide |
  23. +------+------+
  24. 2 rows in set (0.00 sec)
  25.  
  26. mysql> SELECT * FROM my_table WHERE name > 'i';
  27. +------+-------+
  28. | id | name |
  29. +------+-------+
  30. | 2 | Satou |
  31. | 3 | Ide |
  32. +------+-------+
  33. 2 rows in set (0.00 sec)
  34.  
  35. mysql> SELECT * FROM my_table WHERE name >= 'i';
  36. +------+-------+
  37. | id | name |
  38. +------+-------+
  39. | 2 | Satou |
  40. | 3 | Ide |
  41. +------+-------+
  42. 2 rows in set (0.00 sec)

IS NULL / IS NOT NULL

IS NULLは、値がNULLであるかを判定する演算子です。値がNULLの場合に1を返します。

IS NOT NULLは、逆に値がNULLでないかを判定します。値がNULL以外の場合に1を返します。

こちらもサンプルで動きを確認しましょう。

  1. mysql> SELECT * FROM my_table;
  2. +------+-------+
  3. | id | name |
  4. +------+-------+
  5. | 1 | Abe |
  6. | 2 | Satou |
  7. | 3 | Ide |
  8. | 4 | |
  9. | 5 | NULL |
  10. +------+-------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT * FROM my_table WHERE name IS NULL;
  14. +------+------+
  15. | id | name |
  16. +------+------+
  17. | 5 | NULL |
  18. +------+------+
  19. 1 row in set (0.00 sec)
  20.  
  21. mysql> SELECT * FROM my_table WHERE name IS NOT NULL;
  22. +------+-------+
  23. | id | name |
  24. +------+-------+
  25. | 1 | Abe |
  26. | 2 | Satou |
  27. | 3 | Ide |
  28. | 4 | |
  29. +------+-------+
  30. 4 rows in set (0.01 sec)

空白(空)はNULL扱いにはなりません。

あくまでNULLかNULLではないかを判定します。

BETWEEN AND / NOT BETWEEN AND

値が最小値よりも大きいか等しいかつ、最大値よりも小さいか等しいかを判定する演算子です。

文字列比較で使われることはあまりありませんが、日付で検索する場合などに使われることがあります。

  1. mysql> SELECT * FROM my_table2;
  2. +------+-------+------------+
  3. | id | name | date |
  4. +------+-------+------------+
  5. | 1 | Abe | 2020-07-12 |
  6. | 2 | Abe | 2020-07-23 |
  7. | 3 | Satou | 2020-08-04 |
  8. +------+-------+------------+
  9. 3 rows in set (0.02 sec)
  10.  
  11. mysql> SELECT * FROM my_table2 WHERE date BETWEEN '2020-07-01' AND '2020-07-31';
  12. +------+------+------------+
  13. | id | name | date |
  14. +------+------+------------+
  15. | 1 | Abe | 2020-07-12 |
  16. | 2 | Abe | 2020-07-23 |
  17. +------+------+------------+
  18. 2 rows in set (0.01 sec)
  19. mysql> SELECT * FROM my_table2 WHERE date NOT BETWEEN '2020-07-01' AND '2020-07-31';
  20. +------+-------+------------+
  21. | id | name | date |
  22. +------+-------+------------+
  23. | 3 | Satou | 2020-08-04 |
  24. +------+-------+------------+
  25. 1 row in set (0.00 sec)
  26.  

指定した期間に当てはまるデータだけを取得したい場合などに有効です。

IN / NOT IN

値がリストに記述した値の中のいずれかに等しいかを判定する演算子です。

キーワードに一致するデータだけを取得したい場合などに使います。

サンプルコードを見てみましょう。

  1. mysql> SELECT * FROM my_table WHERE name IN ('Abe', 'Tanaka');
  2. +------+------+
  3. | id | name |
  4. +------+------+
  5. | 1 | Abe |
  6. +------+------+
  7. 1 row in set (0.01 sec)
  8.  
  9. mysql> SELECT * FROM my_table WHERE name NOT IN ('Abe', 'Tanaka');
  10. +------+-------+
  11. | id | name |
  12. +------+-------+
  13. | 2 | Satou |
  14. | 3 | Ide |
  15. | 4 | |
  16. +------+-------+
  17. 3 rows in set (0.00 sec)

LIKE / NOT LIKE

値に対して特殊な文字を使い、パターンマッチングを行う演算子です。

特殊な文字とは「%」と「_」になります。

%は任意の0文字以上の文字列を、_は任意の1文字を意味します。

サンプルコードで確認してみましょう。

  1. mysql> SELECT * FROM my_table3;
  2. +------+-------+-----------------+
  3. | id | name | address |
  4. +------+-------+-----------------+
  5. | 1 | Abe | Tokyo Shinjuku |
  6. | 2 | Satou | Tokyo Shibuya |
  7. | 3 | kasai | Saitama Saitama |
  8. +------+-------+-----------------+
  9. 3 rows in set (0.01 sec)
  10.  
  11. mysql> SELECT * FROM my_table3 WHERE address LIKE 'Tokyo%';
  12. +------+-------+----------------+
  13. | id | name | address |
  14. +------+-------+----------------+
  15. | 1 | Abe | Tokyo Shinjuku |
  16. | 2 | Satou | Tokyo Shibuya |
  17. +------+-------+----------------+
  18. 2 rows in set (0.00 sec)
  19.  
  20. mysql> SELECT * FROM my_table3 WHERE address NOT LIKE 'Tokyo%';
  21. +------+-------+-----------------+
  22. | id | name | address |
  23. +------+-------+-----------------+
  24. | 3 | kasai | Saitama Saitama |
  25. +------+-------+-----------------+
  26. 1 row in set (0.00 sec)
  27.  
  28. mysql> SELECT * FROM my_table3 WHERE name LIKE '_____';
  29. +------+-------+-----------------+
  30. | id | name | address |
  31. +------+-------+-----------------+
  32. | 2 | Satou | Tokyo Shibuya |
  33. | 3 | kasai | Saitama Saitama |
  34. +------+-------+-----------------+
  35. 2 rows in set (0.00 sec)
  36.  
  37. mysql> SELECT * FROM my_table3 WHERE name NOT LIKE '_____';
  38. +------+------+----------------+
  39. | id | name | address |
  40. +------+------+----------------+
  41. | 1 | Abe | Tokyo Shinjuku |
  42. +------+------+----------------+
  43. 1 row in set (0.00 sec)

それどれ指定した通りにデータが取得できています。

REGEXP(RLIKE) / NOT REGEXP(RLIKE)

値と文字列が一致するかを比較する演算子です。

LIKE演算子と使い方は似ています。

  1. mysql> SELECT * FROM my_table WHERE name REGEXP '^S';
  2. +------+-------+
  3. | id | name |
  4. +------+-------+
  5. | 2 | Satou |
  6. +------+-------+
  7. 1 row in set (0.02 sec)
  8. mysql> SELECT * FROM my_table WHERE name NOT REGEXP '^S';
  9. +------+------+
  10. | id | name |
  11. +------+------+
  12. | 1 | Abe |
  13. | 3 | Ide |
  14. | 4 | |
  15. +------+------+
  16. 3 rows in set (0.00 sec)

「^S」で先頭がSから始まる値を判定しています。

その他にも使用できる正規表現はさまざまです。

正規表現については、以下のページを参考にしてみてください。

参考:MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.5.2 正規表現

STRCMP

比較する文字列が同じである場合は0を返し、第1引数がソート順で小さければ -1、第2引数がソート順で小さければ1を返す演算子です。

ここでは、「potepan」と「potepan2」という文字列を比較してみます。

  1. mysql> SELECT STRCMP ('potepan', 'potepan') AS STRCMP01, STRCMP('potepan', 'potepan2') AS STRCMP02, STRCMP ('potepan2', 'potepan') AS STRCMP03;
  2. +----------+----------+----------+
  3. | STRCMP01 | STRCMP02 | STRCMP03 |
  4. +----------+----------+----------+
  5. | 0 | -1 | 1 |
  6. +----------+----------+----------+
  7. 1 row in set (0.00 sec)

まとめ

文字列比較を比較する演算子について解説しました。

文字列比較にはさまざまな演算子が使えますが、ぜひこの記事を参考に目的にあった比較方法を行ってみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。