MySQL 完全崩壊: クエリフィルタ条件の詳細な説明

MySQL 完全崩壊: クエリフィルタ条件の詳細な説明

概要

実際のビジネス シナリオ アプリケーションでは、ビジネス条件に基づいて対象データを取得およびフィルター処理する必要があることがよくあります。このプロセスをデータ クエリ フィルタリングと呼びます。フィルタリング プロセスで使用されるさまざまな条件 (日付、時刻、ユーザー、ステータスなど) は、正確なデータを取得するために必要な手順です。

これが期待する結果を得る唯一の方法です。そこで、この章では、MySQL でのクエリ フィルタリング条件のさまざまな使用法について学習します。

関係演算

関係演算は、where ステートメントの後に 1 つまたは複数の条件が続くものです。where の後の条件を満たすデータが返され、条件を満たさないデータは除外されます。演算子とは、次のようなケースを持つ演算子を指します。


オペレーター例示する
=等しい
<> または !=等しくない
>より大きい
>=より大きいか等しい
<未満
<=以下

関係演算の基本的な構文形式は次のとおりです。

 cname1、cname2、...をtnameから選択します。cname演算子はcvalです。 

=

背後にある値と厳密に等しいデータをクエリします。非値型の場合は背後にある値に引用符を追加する必要がありますが、値型の場合は引用符を追加する必要はありません。

構文の形式は次のとおりです。

cname = cval の場合、tname から cname1、cname2、... を選択します。
mysql> user2 から * を選択します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
+----+-------+-----+----------+-----+
3行セット

mysql> name='helen' の user2 から * を選択します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 2 | ヘレン | 20 | 泉州 | 0 |
+----+-------+-----+----------+-----+
セット内の1行

mysql> user2 から age=21 を選択して * します。
+----+-------+-----+--------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+--------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 3 | ソル | 21 | 厦門 | 0 |
+----+-------+-----+--------+-----+
2行セット

等しくない (<>, !=)

「等しくない」の書き方は 2 通りあります。1 つは <>、もう 1 つは != です。どちらも意味は同じで、互換的に使用できますが、<> は != の前に出現するため、これまでの多くの例を見ると、<> の方が頻繁に出現し、移植性も高いため、こちらの方が推奨されます。

「等しくない」の目的は、条件を満たさない結果を照会することです。形式は次のとおりです。

cname <> cval の場合、tname から cname1、cname2、... を選択します。
または、cname != cval の場合、tname から cname1、cname2、... を選択します。
mysql> user2 から * を選択します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
+----+-------+-----+----------+-----+
3行セット

mysql> user2 から age<>20 を選択して * します。
+----+-------+-----+--------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+--------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 3 | ソル | 21 | 厦門 | 0 |
+----+-------+-----+--------+-----+
2行セット

より大きいか小さいか (> <)

通常、数値、日付、時刻の比較に使用され、形式は次のとおりです。

cname > cval の場合、tname から cname1、cname2、... を選択します。

cname < cval の場合、tname から cname1、cname2、... を選択します。

cname >= cval の場合、tname から cname1、cname2、... を選択します。

cname <= cval の場合、tname から cname1、cname2、... を選択します。
mysql> user2 から age>20 を選択して * します。
+----+-------+-----+--------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+--------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 3 | ソル | 21 | 厦門 | 0 |
+----+-------+-----+--------+-----+
2行セット

mysql> user2 から age>=20 を選択して * します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
+----+-------+-----+----------+-----+
3行セット

mysql> user2 から age<21 を選択して * します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 2 | ヘレン | 20 | 泉州 | 0 |
+----+-------+-----+----------+-----+
セット内の1行

mysql> user2 から age<=21 を選択して * します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
+----+-------+-----+----------+-----+
3行セット

論理演算

オペレーター例示する
そして複数の条件が満たされている
または複数の条件のうち1つが満たされる
ない条件を否定する

そして

データをフィルタリングするために複数の条件が必要な場合、この方法が使用されます。 と の各式は true である必要があり、フィルタリングされたデータはユーザーが必要とするものになります。

次の例では、年齢と性別の両方の条件を満たすデータをフィルター処理します。構文の形式は次のとおりです。

cname1 演算子 cval1 および cname2 演算子 cval2 である tname から cname1、cname2、... を選択します。
mysql> user2 から * を選択します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
| 4 | 翁 | 33 | 貴州 | 1 |
+----+-------+-----+----------+-----+
4行セット

mysql> select * from user2 where age >20 and sex=1;
+----+-------+-----+--------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+--------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 4 | 翁 | 33 | 貴州 | 1 |
+----+-------+-----+--------+-----+
2行セット

または

複数の条件が満たされる場合、1 つの条件が満たされている限りデータのフィルタリングが実行されます。

次の条件は、21 歳以上と 21 歳未満のデータを除外します。構文の形式は次のとおりです。

cname1 演算子 cval1 または cname2 演算子 cval2 の場合、tname から cname1、cname2、... を選択します。
mysql> user2 から * を選択します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
| 4 | 翁 | 33 | 貴州 | 1 |
+----+-------+-----+----------+-----+
4行セット

mysql> select * from user2 where age>21 or age<21;
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 2 | ヘレン | 20 | 泉州 | 0 |
| 4 | 翁 | 33 | 貴州 | 1 |
+----+-------+-----+----------+-----+
2行セット

ない

特定の条件が満たされていない場合、フィルタリングされたデータはユーザーが必要とするものになります。

次のフィルターは、年齢が 20 を超えるデータではありません。構文の形式は次のとおりです。

tname から cname1、cname2、... を選択します (cname 演算子 cval ではありません)
mysql> user2 から * を選択します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
| 4 | 翁 | 33 | 貴州 | 1 |
+----+-------+-----+----------+-----+
4行セット

mysql> user2 から * を選択します (年齢 > 20 ではありません);
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 2 | ヘレン | 20 | 泉州 | 0 |
+----+-------+-----+----------+-----+
セット内の1行

あいまい一致

上記のユーザー テーブル情報テーブル (名前、年齢、住所、性別を含む) と同様に、名前が s で始まるユーザーを照会する場合は、データのあいまい一致に使用される like キーワードを使用できます。

構文の形式は次のとおりです。パターンにはワイルドカードを含めることができ、ワイルドカードには 2 つの種類があります。 %: は任意の 1 文字または n 文字に一致することを意味します。_: は任意の 1 文字に一致することを意味します。

cname がパターンに一致する tname から cname1、cname2、... を選択します。

% 使用

mysql> user2 から * を選択します。
+----+--------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+--------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
| 4 | 翁 | 33 | 貴州 | 1 |
| 5 | セリーナ | 25 | 台湾 | 0 |
+----+--------+-----+----------+-----+
5行セット

mysql> select * from user2 where name like 's%';
+----+--------+-----+--------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+--------+-----+--------+-----+
| 3 | ソル | 21 | 厦門 | 0 |
| 5 | セリーナ | 25 | 台湾 | 0 |
+----+--------+-----+--------+-----+
2行セット

_の使用

mysql> user2 から * を選択します。
+----+--------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+--------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
| 4 | 翁 | 33 | 貴州 | 1 |
| 5 | セリーナ | 25 | 台湾 | 0 |
+----+--------+-----+----------+-----+
5行セット

mysql> select * from user2 where name like 's_l';
+----+------+-----+--------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+------+-----+--------+-----+
| 3 | ソル | 21 | 厦門 | 0 |
+----+------+-----+--------+-----+
セット内の1行

注記

1. あいまい一致ワイルドカードを過度に使用しないでください。他の演算子で同じ目的を達成できる場合は、他の演算子を使用する必要があります。

2. 大きなテーブルであいまい一致を実行する場合は、「%username」のように % で始まらないようにしてください。そうしないと、テーブルスキャンが発生し、効率が低下します。あいまい検索の開始部分(「brand%」など)を指定すると、最初に brand で始まるデータが検索され、より効率的になります。

範囲値チェック

BETWEEN AND (間隔クエリ)

演算子 BETWEEN ... AND は、2 つの値の間のデータの範囲を選択します。これらの値は数値、テキスト、または日付であり、閉じた間隔クエリに属します。

と の左側 val1 と右側 val2 は、2 つの臨界値を表します。これらは数式 [val1,val2] に相当します。これら 2 つの区間に属するデータはフィルタリングされるため (>=val1 および <=val2)、構文の形式は次のようになります。

 tname から cname1、cname2、... を選択します。cname は val1 と val2 の間です。
 cname >= val1 かつ cname <= val2 の場合、 tname から selec cname1,cname2,... と同等です。

年齢が[21,25]のデータをクエリします。

mysql> user2 から * を選択します。
+----+--------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+--------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
| 4 | 翁 | 33 | 貴州 | 1 |
| 5 | セリーナ | 25 | 台湾 | 0 |
+----+--------+-----+----------+-----+
5行セット

mysql> select * from user2 where age between 21 and 25;
+----+--------+-----+--------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+--------+-----+--------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 3 | ソル | 21 | 厦門 | 0 |
| 5 | セリーナ | 25 | 台湾 | 0 |
+----+--------+-----+--------+-----+
3行セット

mysql> user2 から * を選択します。年齢は 21 以上、年齢は 25 以下です。
+----+--------+-----+--------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+--------+-----+--------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 3 | ソル | 21 | 厦門 | 0 |
| 5 | セリーナ | 25 | 台湾 | 0 |
+----+--------+-----+--------+-----+
3行セット

IN (包含クエリ)

上記のデータによると、居住地が福州と厦門であるユーザーデータを検索する場合、IN 演算子を使用する必要があります。IN 演算子を使用すると、WHERE 句で複数の値を指定でき、これらの値のいずれかが一致すると条件が満たされ、データが返されるためです。

構文の形式は次のとおりです。次のリストの値の型は一貫性があり互換性がある必要があり、ワイルドカードはサポートされていません。

cname が (val1,val2,...) である tname から cname1,cname2,... を選択します。
mysql> user2 から * を選択します。
+----+--------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+--------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
| 4 | 翁 | 33 | 貴州 | 1 |
| 5 | セリーナ | 25 | 台湾 | 0 |
+----+--------+-----+----------+-----+
5行セット

mysql> user2 から * を選択します。 where address in('fuzhou','xiamen');
+----+-------+-----+--------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+--------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 3 | ソル | 21 | 厦門 | 0 |
+----+-------+-----+--------+-----+
2行セット

NOT IN (包含クエリを否定する)

上で not のユーザーについてはすでに学習しました。not の後に実行される式を否定してテストしてみましょう。

mysql> user2 から * を選択します。
+----+--------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+--------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
| 4 | 翁 | 33 | 貴州 | 1 |
| 5 | セリーナ | 25 | 台湾 | 0 |
+----+--------+-----+----------+-----+
5行セット

mysql> user2 から * を選択します。アドレスが ('fuzhou'、'quanzhou'、'xiamen') に含まれません。
+----+--------+-----+--------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+--------+-----+--------+-----+
| 4 | 翁 | 33 | 貴州 | 1 |
| 5 | セリーナ | 25 | 台湾 | 0 |
+----+--------+-----+--------+-----+
2行セット

NULL値のチェック

NULL である/NULL ではない

空かどうかを判断するための構文形式は次のとおりです。値が null のデータの場合、さまざまな比較演算子 (like、between and、in、not in クエリなど) は機能しないことに注意してください。is null のみがそれをフィルターできます。

 cname が null の場合、tname から cname1、cname2、... を選択します。
 または、cname が null でない場合に、tname から cname1、cname2、... を選択します。
mysql> アドレスが null である user2 から * を選択します。
+----+--------+-----+--------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+--------+-----+--------+-----+
| 5 | セリーナ | 25 | NULL | 0 |
+----+--------+-----+--------+-----+
セット内の1行

mysql> アドレスが null でない user2 から * を選択します。
+----+-------+-----+----------+-----+
| ID | 名前 | 年齢 | 住所 | 性別 |
+----+-------+-----+----------+-----+
| 1 | ブランド | 21 | 福州 | 1 |
| 2 | ヘレン | 20 | 泉州 | 0 |
| 3 | ソル | 21 | 厦門 | 0 |
| 4 | 翁 | 33 | 貴州 | 1 |
+----+-------+-----+----------+-----+
4行セット

null 値の判定を含めることができるキーワード <=> がありますが、現在ではほとんど使われていません。興味のある方は調べてみてください。ここでは詳細には触れません。

要約する

1. 類似表現の%は1文字から複数の任意の文字に一致し、_は任意の文字に一致する。

2. NULL 値をクエリするには、IS NULL または IS NOT NULL を使用する必要があります。その他のクエリ演算子は NULL 値に対して無効です。 % ワイルドカード文字は任意のものに一致しますが、値が NULL のデータとは一致しません。

3. テーブルを作成するときは、テーブル フィールドを空にせず、フィールドにデフォルト値を指定することをお勧めします。

4. MySQL は、IN、BETWEEN、および EXISTS 句を否定するために NOT の使用をサポートしています。

これで、MySQL を完全に破壊するクエリのフィルター条件に関するこの記事は終了です。MySQL クエリのフィルター条件の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLクエリ条件のnot inとinの違いと理由
  • MySQL 条件付きクエリと使用法および優先順位の例の分析
  • Mysqlクエリ条件で文字列の末尾にスペースがあっても一致しない問題の詳細な説明
  • MySQLクエリ条件の一般的な使用法の詳細な説明
  • インデックスは MySQL クエリ条件で使用されますか?
  • 複数の条件を持つ MySQL クエリ メソッド

<<:  Vueプロジェクトのパッケージングと展開の実際のプロセスの記録

>>:  Docker を使用してスタンドアロン Pulsar とクラスター化された Redis をデプロイする方法 (開発アーティファクト)

推薦する

Dockerコンテナ間で通信する3つの方法

Docker コンテナは互いに分離されており、相互にアクセスできないことは誰もが知っていますが、依存...

MySQL データベースの 1045 エラーの解決方法

ローカル データベースがサーバー データベースに接続されているときに発生する 1045 の問題を解決...

Mysql マスタースレーブ同期構成の実践の詳細な説明

1. はじめに以前、「MySQL マスター スレーブ同期の原理」という記事を書きました。この記事を読...

検索テキストボックスがフォーカスを外れたときにテキストの位置がジャンプする問題の解決方法

検索テキストボックスにテキストを設定すると、フォーカスを外すと位置がジャンプしますコードをコピーコー...

MySQL 空間データストレージと関数

目次1. データ型1. MySQL空間データとは何か2. GeoJSONとは3. 空間データ型のフォ...

Linux に MySQL をインストールする方法 (yum とソース コードのコンパイル)

Linux に MySQL をインストールするには、yum インストールとソース コード コンパイ...

Reactでのイベントバインディングの実装は3つの方法を指しています

1. 矢印関数1. 矢印関数自体はこれをバインドしないという事実を利用します。 2. render(...

フロントエンド制作に関する簡単な議論: 互換性のために IE6 はまだ必要ですか?

国内市場ではIE6~7のサポートに対する一定の需要がまだありますが、フロントエンド開発者として、私た...

画像の半透明処理 画像と半透明の背景の実装のアイデアとコード

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

MySQL 5.x 以降を使用している場合のエラー #1929 列 ''createtime'' の日付時刻値が正しくありません: '''' の簡単な解決方法

MySQL をインストールした後、テーブル データを保存および削除しようとすると、常にエラー メッセ...

Docker Composeのデプロイと基本的な使い方の詳しい説明

1. Docker Composeの概要Compose は、マルチコンテナ Docker アプリケー...

Mac MySQL のルートパスワードをリセットするチュートリアル

免責事項:このパスワード リセット方法は、Homebrew によってインストールされた MySQL ...

Ubuntu 20.04 デスクトップのインストールとルート権限の有効化および SSH インストールの詳細

記事は主にUbuntu 20.04の簡単なインストールプロセスを記録し、インストール後に国内ソースを...

CSS3 の新しいレイアウト: flex の詳細な説明

Flexの基本概念フレックス レイアウト (フレックスはフレキシブル ボックスの略)、エラスティック...

Linuxのファイル権限の詳細な紹介

Linux の優れた点は、マルチユーザー、マルチタスク システムにあります。 Linux では通常、...