質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

5回答

11133閲覧

WHERE句のLIKEで*は使えない?

earnest_gay

総合スコア615

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

1グッド

1クリップ

投稿2016/06/27 15:27

SELECT * FROM user_data WHERE name3 LIKE '%ヤマダ%';
では読み込めますが

SELECT * FROM user_data WHERE * LIKE '%ヤマダ%';
ではエラーがでます。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '* LIKE '%ヤマダ%'' at line 1

syntaxエラーとのことですが、name3を*に変えただけです。

WHERE句で全カラム検索とかはできないのでしょうか?

stereo_code👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

なるほど、発想が柔軟でちょっと感心しました。できても良さそうですよね。
私も昔、or で似たようなことを考えたことがあります。

a = 1 or a = 2 が a = 1 or 2 となぜ書けないのかみたいなことですが、
SQLに関しては、in で、できますけどね。→ a in(1,2)
プログラミング言語では出来ませんね。

WHERE * LIKE '%ヤマダ%'; がなぜ出来ないのか考えてみたのですが
やはりカラムによっていろいろな型があるからかなと思います。

LIKE演算子は、charやvarchar等の文字列型の評価をするものなので、
日付型とか整数、小数型では、どのように評価したら良いか決められないからでしょうね。

なので結局 column1 like '%ヤマダ%'; or column2 like '%ヤマダ%'; のようにするしか無いですね。

どのような構文が許可されるのかは、各DBとISOで規定されたSQLがあるので、検索してみると良いかも知れません。

いろいろと覚えてくると当たり前に思って頭が固くなってきますので、そのやわらか頭は大切にして欲しいと思います。

投稿2016/06/27 22:05

Mr_Roboto

総合スコア2208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/06/28 02:50

ありがとうございます。 柔軟だといいのですが、ただWHERE句に*は使えないことを知らなかったです汗
otn

2016/06/28 03:31

> プログラミング言語では出来ませんね。 COBOLでは書けますけどね。どの言語にも真似されなかった。
Mr_Roboto

2016/06/30 00:47

> otnさん そうなんですね、知りませんでした、ありがとうございます。 無知を晒したようでお恥かしい限り ^_^; 精進致します。
guest

0

ベストアンサー

できません。
そういった発想は今までなかったので新鮮です。
やり方としては以下のいずれかかと思います。

カラムを1つずつORでつなげる
カラム1 LIKE '%ワード%' OR カラム2 LIKE '%ワード%' …

カラムを結合したものに対してLIKEする
CONCAT(カラム1,カラム2,…) LIKE '%ワード%'

投稿2016/06/28 00:13

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/06/28 02:51

ありがとうございます。 WHERE句で*が使えたら便利だなぁと思いました。 現行では繋げるしかないのですね...
guest

0

WHERE句に*はできません。

投稿2016/06/27 16:20

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/06/28 02:48

ありがとうございます。
guest

0

>WHERE句で全カラム検索とかはできないのでしょうか?
できません。

投稿2016/06/27 15:43

maiko0318

総合スコア876

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/06/28 02:48

ありがとうございます。
guest

0

私もttyp03さんとほぼ回答ですが、少しアレンジ。

CONCAT(カラム1,カラム2,…) LIKE '%ワード%'
のパターンだとカラム1の末尾に「ワー」カラム2の先頭に「ド」があった場合もヒットします。

これも含めて検索したい場合はよいのですが、それを防ぎたい場合は、
CONCAT(カラム1,'||',カラム2,'||',…) LIKE '%ワード%'
のように区切り文字を入れます。
区切り文字はなんでもよく、検索キーワードに使わないであろう文字列を使います。

ウチではMySQL独自関数であるCONCAT_WSを使ってこんな感じに書くことがあります。
CONCAT_WS('||',カラム1,カラム2,…) LIKE '%ワード%'

[参考] MariaDBドキュメント > CONCAT_WS

投稿2016/06/28 02:25

dupont_kedama

総合スコア925

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/06/28 02:52

ありがとうございます。 参考にさせて頂きます。
ttyp03

2016/06/28 05:45

カラム間の区切りはあったほうが良いですね。 CONCAT_WSは知らなかったので参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問