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 をデプロイする方法 (開発アーティファクト)

推薦する

スライドボタン効果を実現するネイティブJS

Jsで作ったスライドボタンの具体的なコードは参考までに。具体的な内容は以下のとおりですまずエフェク...

CSS 表示テーブルの適応的な高さと幅の問題の解決策

定義と使用法display プロパティは、要素が生成するボックスのタイプを指定します。例示するこの属...

Nginx ベースの HTTPS ウェブサイトを設定する手順

目次序文:暗号化アルゴリズム: 1. HTTPS の概要2. NginxはHTTPSウェブサイト設定...

Vueはシンプルなメモ帳機能を実装します

この記事では、参考までに、簡単なメモ帳機能を実装するためのVueの具体的なコードを紹介します。具体的...

HTML タグ sup と sub の応用の紹介

HTML タグ: 上付き文字HTML では、<sup> タグは上付き文字のテキストを定義...

HTML テーブルタグチュートリアル (33): セルの垂直配置属性 VALIGN

垂直方向では、セルの配置を上、中央、下に設定できます。基本的な構文<TD VLIGN=&quo...

Linux で tcpdump コマンドを使用してデータ パケットをキャプチャおよび分析する方法の詳細な説明

序文tcpdump はよく知られたコマンドライン パケット分析ツールです。 tcpdump コマンド...

Vue-CLI マルチページディレクトリパッケージ化手順の記録

ページディレクトリ構造 デフォルトの HTML テンプレート ファイル public/index.h...

MySQLクエリが遅い理由

目次1. 遅いところはどこですか? 2. 不要なデータをクエリしましたか? 1. 不要なレコードをク...

Vue の計算プロパティとプロパティリスニングについての簡単な説明

目次1. 計算プロパティ構文: 1. 省略形:文法: 2. 文章を完成させる: 2. モニタリング(...

最新の仮想マシン VMware 14 インストール チュートリアル

まず、VMware 14のアクティベーションコードをお渡ししますFF31K-AHZD1-H8ETZ-...

jQueryはショッピングカートの完全な機能を実現します

この記事では、ショッピングカートの完全な機能を実現するためのjQueryの具体的なコードを参考までに...

dockerfile-maven-plugin 使用ガイドの概要

目次pom 構成Setting.xml 構成ログインステータスログインが必要ですログインは必要ありま...

MySQL インデックス カバレッジの例の分析

この記事では、MySQL インデックス カバレッジについて例を挙げて説明します。ご参考までに、詳細は...

Dockerボリュームコンテナ間のデータ共有の実装

ボリュームとは何ですか?ボリュームは英語で容量を意味し、Docker ではデータ ボリューム、つまり...