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

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

ただいまの
回答率

90.34%

  • MySQL

    6205questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • SQL

    2574questions

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

このようなSQL文は存在するのか

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 737

aaaaaaaa

score 471

基礎からのmysql(131p)にsql文にてあいまい検索をするときのやり方が記述されています。

select * from tb where bang ='A101';

たとえば「A101もA102も抽出したい」というときはあいまい検索を行います。「~の文字を含む」というようなあいまいな条件で検索したいときは、LIKEを使います。
たとえば「'あ'という文字を含む」という条件は、「LIKE'あ'」となります。上のSQL文は次のようにしても、結果はまったく同じになります。

select * from tb where like 'A101';

ここで疑問が二つあって、一つ目が「...where like」とありますが、whereのあとは、カラム名を入れる「...where カラム名 like」という形でなければいけないのではないのでしょうか。
現にmysql5.5.16でselect * from tb where like "A101"といれると

mysql> select * from tb1d where like "A101";
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'like
"A101"' at line 1


※mysqlで弄っているテーブルは、tbではなくtb1dですがtb=tb1dと思ってください。

となり、エラーが発生します。誤植なのか何か足りない部分があるのか。いったいどういうことなのでしょうか。

最後の質問ですが「'あ'という文字を含む」という条件は、「LIKE'あ'」となる...とありますが、
LIKE'あ'で「あ」を含んだものを取得できるのなら、任意の文字列と1文字を意味する%や_などのワイルドカードはいるのでしょうか。
例えば「九州」という単語をDBから取得したいとき「...like "%州"」と「like "州"」は
「○●州(州単独も含めて)」を取得できるのだから、わざわざワイルドカードを利用する必要があるのだろうか…?と思っております。つまりいまいちワイルドカードの必要性がわからないのです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ikedas

    2017/03/02 21:00

    書籍を実見して確認しましたが、引用されたSQL文では '…' が使われています。"…" ではないです。 質問者さんには何度かお願いしているはずですが、引用は正確にお願いします。正しいかどうか聞いているのにその引用が間違っていたのでは、何を聞いているのか分かりません。

    キャンセル

  • aaaaaaaa

    2017/03/06 20:11

    ご返答有難うございます。修正しました。

    キャンセル

回答 3

+3

実際に動きをためせばわかりますよね。

テーブル

CREATE TABLE `sample` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

データ

INSERT INTO `sample` (`id`, `name`)
VALUES
    (1,'あいうえお'),
    (2,'かきくけこ'),
    (3,'さしすせそ'),
    (4,'あかさたな');

SQL

SELECT * FROM Sample WHERE `name` LIKE 'あ';
SELECT * FROM Sample WHERE `name` LIKE '%あ';
SELECT * FROM Sample WHERE `name` LIKE '%あ%';
SELECT * FROM Sample WHERE `name` LIKE 'あ%';
SELECT * FROM Sample WHERE `name` LIKE 'う';
SELECT * FROM Sample WHERE `name` LIKE '%う';
SELECT * FROM Sample WHERE `name` LIKE '%う%';
SELECT * FROM Sample WHERE `name` LIKE 'う%';

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/02 11:58 編集

    横から失礼します。
    >たとえば「"あ"という文字を含む」という条件は、「LIKE "あ"」となります。
    と本当に書いてあるのなら、「基礎からの...」とうたっている本にしては重大な誤りですね。誤植などは言い訳にもならないです。1つ目もaaaaaaaa さんの仰る通りです。酷すぎ...

    キャンセル

  • 2017/03/02 18:28

    「カラムが "あ" という文字列を含む」と解釈すれば、間違いではないのではないかと (まあ文字列の引用符に "…" を用いているのは気になりますが)。

    ともかく、当初の質問文を見ても、実際に試しているとは思えないので、試せる環境を整えてからご質問いただきたいです。

    キャンセル

  • 2017/03/02 20:35

    実見して確認。引用符には '…' が使われています。"…" ではないです。
    質問者さんには何度かお願いしているはずですが、引用は正確にお願いします。

    キャンセル

  • 2017/03/02 20:41

    お二人さま
    コメント書く場所間違ってません?

    キャンセル

  • 2017/03/02 20:57

    ごめんなさい。私のコメントは完全にご回答と無関係ですね。

    キャンセル

  • 2017/03/06 08:40 編集

    失礼しました。内容がほぼ被っていて、別で回答を立てる書くまでもなかったため、被せてコメントで書かせていただいてしまいました。質問文から「たぶん私は間違えていなくて、書籍がおかしいですよね」と、質問者様ご本人の見解に背中を押してほしかったのかな...と感じた次第です。試してエラーになったとも書いていませんが、試していないとも書かれていませんし(それならそのように回答に書いてもらえれば私の余計なコメントもなかった...)teratailで聞いて自信をつけてからでも構いませんが、出版社に訊いたら如何?が私の本音の回答ですね。

    キャンセル

checkベストアンサー

+1

select * from tb1d where like "A101";

カラム名が抜けてますね

select * from tb1d where bang like "A101";


基本的にはlikeはワイルドカードと一緒に使いますが
完全一致でもOKです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near 'like 
"A101"' at line 1 
上記のエラーメッセージは、SQLのミスって言っています。
多分比較する項目名がないと思います。 

A101 も A102 も見つけたい場合は、 
"*"や"%" を使って、"like "A10%"として、"A101xxx","A102xx"を探したり
"?"や"_" を使って、"like "A10?" として、"A101","A102"を探したりとかだと思います。

select * from tb1d where bang like "A10?";

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • MySQL

    6205questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • SQL

    2574questions

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