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


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

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

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/05/09 20:34:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:king23jp No.1

回答回数1ベストアンサー獲得回数0

ポイント27pt

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

SELECT * FROM addre

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

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

ORDER BY id

id:vector_xenon No.2

回答回数113ベストアンサー獲得回数4

ポイント27pt

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

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

id:bonlife No.3

回答回数421ベストアンサー獲得回数75

ポイント27pt

列名から、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の質問をする際には、

  • DBの種類 (MySQL、PostgreSQL、Oracleなど)
  • テーブルの構造 (列、データ型)
  • サンプルデータとその検索結果のイメージ

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません