スポンサードリンク

MySQL あいまい検索する。

データベースで文字を抽出条件に使う場合は少し複雑です。数字は明確に指定できますが、文字には曖昧さがあるからです。

例えば前回の「PREF_NAME = '東京都'」という指定の仕方だと検索できましたが、「PREF_NAME = '東京'」では一致しません。「=」(イコール)の場合は完全に一致しなければならないからです。しかしこれではあまりにも厳密すぎて利用し難いですね。

そこで文字列を抽出条件にする場合は LIKE演算子とワイルドカードを使い「あいまい検索」にすることが多いです。

MySQLとAccessでは使えるワイルドカードが異なりますが基本は同じです。


今回MySQLに接続するユーザーは「pgtop」ですので、間違えないように気を付けてください。


【1】以下の図を参考にMySQLを開始・接続します。

1.コマンドプロンプトを起動します。
2.「net start mysql」と入力し、「Enterキー」を押します。
3.「mysql -u pgtop -p -b」と入力し、「Enterキー」を押します。
4.パスワードを求められるので「12345」入力し、「Enterキー」を押します。

mysql-114.gif

*「-b」オプションを付けて起動するとビープ音が出なくなります。


【2】以下のSQL文を入力し、使用するデータベースを選択します。

USE SampleDB040;
mysql-116.gif


【3】最初は前回の復習です。以下のSQL文を入力して実行してみましょう。

SELECT PREF_CD,PREF_NAME
FROM T01Prefecture
WHERE PREF_NAME = '東京都';

mysql-189.gif


【4】抽出条件に「'東京'」と指定すると1件も表示されません。「=」(イコール)だと完全一致になるからです。

SELECT PREF_CD,PREF_NAME
FROM T01Prefecture
WHERE PREF_NAME = '東京';

mysql-190.gif


【5】次は抽出条件にLIKE演算子を使い「'東京_'」と指定します。「_」(半角アンダースコア)を後ろに付けると、あいまい検索になるので1件表示されます。

SELECT PREF_CD,PREF_NAME
FROM T01Prefecture
WHERE PREF_NAME LIKE '東京_';

mysql-196.gif

*LIKE演算子は「○○のような」という意味です。
*「_」(半角アンダースコア)は任意の1文字に相当します。


【6】次は抽出条件に「'東_'」と指定します。「 _ 」(半角アンダースコア)は任意の1文字なので、後ろに2文字必要な場合は一致しません。

SELECT PREF_CD,PREF_NAME
FROM T01Prefecture
WHERE PREF_NAME LIKE '東_';

mysql-197.gif


【7】次は抽出条件に「'東%'」と指定します。「%」(半角パーセント)は任意の0文字以上の文字列に相当するので、後ろに何文字でも一致します。

SELECT PREF_CD,PREF_NAME
FROM T01Prefecture
WHERE PREF_NAME LIKE '東%';

mysql-198.gif


【8】では抽出条件に「'%京%'」と指定するとどうなるか考えてみましょう。

SELECT PREF_CD,PREF_NAME
FROM T01Prefecture
WHERE PREF_NAME LIKE '%京%';

mysql-200.gif

ヒント 前後に任意の0文字以上で一致します。


【9】東京都と京都府が表示されました。

mysql-201.gif

予想した通りでしたか?予想通りならかなりコツはつかめたと思います。


【10】以下の場合はどうなるか考えてみましょう。

SELECT PREF_CD,PREF_NAME
FROM T01Prefecture
WHERE PREF_NAME LIKE '%京%' OR PREF_NAME LIKE '%長%';

mysql-202.gif

ヒント ORは「または」という意味で、どちらか一方の条件に一致していればよい


【11】「京」または「長」が1文字でも含まれている都道府県が表示されました。

mysql-203.gif


【12】以下の場合はどうなるか考えてみましょう。

SELECT PREF_CD,PREF_NAME
FROM T01Prefecture
WHERE PREF_NAME LIKE '%長%' AND PREF_CD >= 40;

mysql-204.gif

ヒント ANDは「かつ」という意味で、両方の条件に一致しなくてはならない。40以降は九州の都道府県。


【13】長崎県が表示されました。長野県は九州ではないので一致しません。

mysql-205.gif


【14】以下の場合はどうなるか考えてみましょう。

SELECT PREF_CD,PREF_NAME
FROM T01Prefecture
WHERE PREF_NAME LIKE '%長%' OR PREF_CD >= 40;

mysql-206.gif

ヒント ORは「または」という意味で、どちらか一方の条件に一致していればよい


【15】九州の都道府県に長野県がプラスされています。

mysql-207.gif


【16】以下の図を参考にMySQLを終了・停止します。

1.「exit」と入力し、「Enterキー」を押します。
2.「net stop mysql」と入力し、「Enterキー」を押します。

mysql-87.gif


【17】コマンドプロンプトは閉じてください。


【解説】

(1)「_」(半角アンダースコア)や「%」(半角パーセント)をワイルドカードといいます。

・「_」 任意の1文字
・「%」 0個以上の文字列

「0個以上」というのがポイントで無くてもいいわけです。「任意の1文字」の場合は必ず1文字必要ですので、以下のような場合は京都府は表示されません。

SELECT PREF_CD,PREF_NAME
FROM T01Prefecture
WHERE PREF_NAME LIKE '_京%';


(2)論理演算子について
・OR(または) どちらか一方の条件に一致していればよい
・AND(かつ) 両方の条件に一致しなくてはならない


スポンサードリンク






MySQL初心者入門講座TOPへ