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

推薦する

MySql5.7.18 の文字セット構成の詳細なグラフィック説明

背景:かなり前(2017.6.5、記事にはタイムリーさがあり、特に使用されているツールは頻繁に更新さ...

Tomcat をアンインストールして再インストールする方法 (画像とテキスト付き)

tomcat9をアンインストールする1. Tomcatのインストールはディレクトリに解凍するだけで...

Web デザイン: Web ミュージックの実装テクニック

<br />Web ページに音楽を挿入する場合、サフィックスに応じて異なるコードを記述す...

MySQL 5.7.17 のインストールと設定方法のグラフィックチュートリアル (Win7 の場合)

Windows 7 で MySQL 5.7.17 をインストールする方法についてのグラフィック チ...

MySQLで数千万のテストデータを素早く作成する方法

述べる:この記事で扱うデータ量は 100 万です。数千万のデータが必要な場合は、量を増やすだけで済み...

vue で h5 側のアプリを開きます (Android か Apple かを判断します)

1. 開発環境 vue+vant 2. コンピュータシステム Windows 10 Profess...

読み取り専用と無効の微妙な違いの詳細な説明

「読み取り専用」と「無効」はどちらも、ユーザーがフォーム フィールドの内容を変更できないようにします...

nginx ベースのブラウザネゴシエーションキャッシュプロセスの詳細な説明

この記事は主に、nginx に基づいてブラウザネゴシエーションキャッシュを設定する詳細なプロセスを紹...

Centos 7 システムの Tomcat サーバーの詳細な分析

目次1. tomcatの起源1. Tomcat アプリケーションのシナリオ2. Tomcatに必要な...

HTMLノードの追加と削除の簡単な例

<br />HTMLノードの追加と削除の簡単な例<input type="...

WeChatミニプログラムのすべてのページがログインされていることを確認する方法

目次現状解決さらなる解決策やっと現状WeChat ミニプログラムには、ホームページ、個人ページ、いく...

MySQL ログトリガー実装コード

SQL文 ドロップトリガー もし sys_menu_edit が存在します。 各行のsys_menu...

NavicatがMySQL8.0.11に接続するとエラー2059が発生する

間違いNavicat Premium を使用して MySQL に接続すると、次のエラーが発生します。...

Linux で大きなファイルの指定された内容を見つける方法

大きなことも小さなことも考えて、方向転換しましょう。 Linux では非常に大きなファイルに遭遇する...