人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLのLIKE文について教えて下さい。

SELECT * FROM addre WHERE CONCAT(`ken`, `cit`, `num`) LIKE '%東京%' AND '%渋谷%' ORDER BY id

上記をうまく機能させるにはどう書けばいいのでしょうか?
複数の語句で検索したいのです。

●質問者: haring
●カテゴリ:ウェブ制作
✍キーワード:CIT ken SELECT SQL 東京
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● king23jp
●27ポイント

こうしたらうまくなるかもしれない、やってみてください。だめだったらごめんな!

SELECT * FROM addre

WHERE CONCAT(`ken`, `cit`, `num`) LIKE '%東京%'

AND CONCAT(`ken`, `cit`, `num`) LIKE '%渋谷%'

ORDER BY id


2 ● vector
●27ポイント

SELECT * FROM addre WHERE CONCAT('ken', 'cit', 'num') LIKE '%東京%' AND CONCAT('ken', 'cit', 'num') LIKE '%渋谷%' ORDER BY id

LIKEは a = b の = の類のものです。


3 ●
●27ポイント

列名から、kenには県名、citには都市名が入ると推測いたしました。

CONCATは文字列を連結する関数ですが、ここでは利用する必要はないと思います。

複数の条件で検索するには、ANDを使って条件を複数指定します。

SELECT *
FROM addre
WHERE ken LIKE '%東京%'
AND cit LIKE '%渋谷%'
ORDER BY id
;

ただ、LIKEでの検索は全レコードを検索してしまう可能性が高く、処理速度に問題があることが多いです。

例えば、kenに入っている値はあいまいな検索を行う必要がないのであれば、以下のようにWHERE句にてイコールで比較をした方が良いです。

SELECT *
FROM addre
WHERE ken = '東京'
AND cit LIKE '%渋谷%'
ORDER BY id
;

このようにすると、ken列にINDEXが張ってある場合など、かなり検索速度が大幅に向上します。

citについても同様にイコールで検索した方が処理速度は向上します。

特別な事情があり、CONCATを使う必要がある場合(例えば、検索につかう文字列がどの列を対象にするのかが明確になっていない場合)、以下のようにすれば良いです。

SELECT *
FROM addre
WHERE CONCAT(ken, cit, num) LIKE '%東京%'
AND CONCAT(ken, cit, num) LIKE '%渋谷%'
ORDER BY id
;

参考になれば幸いです。

また、SQLの質問をする際には、

を説明するとより適切な回答が付くと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ