1. はじめにMySQL で where 句を使用してクエリ データをフィルタリングする場合、複数のフィルタリング条件を同時に満たしたり、複数のフィルタリング条件のうち 1 つを満たしたりする必要がある場合がよくあります。このとき、演算子を使用して where 句を接続できます。 いくつかの演算子の機能:
2. 本文まず、User テーブルを準備します。DDL とテーブルデータは以下のとおりで、そのままコピーして使用できます。 名前を設定します utf8mb4; FOREIGN_KEY_CHECKS = 0 を設定します。 -- ---------------------------- -- ユーザー用テーブル構造 -- ---------------------------- `user` が存在する場合はテーブルを削除します。 テーブル `user` を作成します ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主キー', `name` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'ユーザー名', `age` int(11) NOT NULL COMMENT '年齢', `sex` smallint(6) NOT NULL COMMENT '性別', BTREE を使用した主キー (`id`) ) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- ユーザーの記録 -- ---------------------------- `user` に VALUES (1, '李子8', 18, 1) を挿入します。 INSERT INTO `user` VALUES (2, '张三', 22, 1); `user` VALUES (3, '李四', 38, 1) に INSERT INTO します。 `user` VALUES (4, '王五', 25, 1) に INSERT INTO します。 INSERT INTO `user` VALUES (5, '六麻子', 13, 0); `user` VALUES (6, '田七', 37, 1) に INSERT INTO します。 `user` VALUES (7, 'Thank you', 18, 0) に INSERT INTO します。 FOREIGN_KEY_CHECKS = 1 を設定します。 データの初期順序は次のとおりです。 mysql> ユーザーから * を選択します。 +----+--------+-----+-----+ | ID | 名前 | 年齢 | 性別 | +----+--------+-----+-----+ | 1 | プラム 8 | 18 | 1 | | 2 | 張三 | 22 | 1 | | 3 | 李思 | 38 | 1 | | 4 | 王武 | 25 | 1 | | 5 | 劉麻子 | 13 | 0 | | 6 | 天斉 | 37 | 1 | | 7 | ありがとう | 18 | 0 | +----+--------+-----+-----+ セット内の行数は 7 です (0.00 秒) 2.1 および演算子クエリが where 句の条件を同時に満たす必要がある場合は、and 演算子を使用できます。and 条件は and 関係にあります。 必要: mysql> 年齢 = 18、性別 = 1 の場合、ユーザーから * を選択します。 結果:
この時点で、age=18 と sex=1 の両方を満たすユーザーのみがクエリされていることがわかります。同様に、複数の and が同時に存在することも可能です。たとえば、上記に基づいて **name=李子柒** を検索する必要がある場合は、それに別の and 演算子を続けるだけです。 mysql> select * from user where age = 18 and sex =1 and name = '李子柒'; 空のセット (0.00 秒) 2.2 または演算子and とは異なり、or は複数の where 条件のすべてではなく、そのうちの 1 つだけを満たす必要があります。条件は or 関係にあります。 必要: mysql> 年齢 = 18 または性別 = 1 の場合、ユーザーから * を選択します。 結果:
この時点で、age=18 または sex=1 を満たすすべてのユーザーが見つかったことがわかります。同じ or 演算子を複数の where 句に同時に適用することもできます。 2.3 オペレーターin 演算子は、where 句のクエリ スコープを指定するために使用されます。これは包含を意味し、複数の or 演算子を使用して実装できます。 必要: mysql> select * from user where name = '张三' or name = '李四' or name = '王五'; +----+------+-----+-----+ | ID | 名前 | 年齢 | 性別 | +----+------+-----+-----+ | 2 | 張三 | 22 | 1 | | 3 | 李思 | 38 | 1 | | 4 | 王武 | 25 | 1 | +----+------+-----+-----+ セット内の 3 行 (0.00 秒) in演算子の使用 mysql> select * from user where name in ('张三', '李四', '王五'); +----+------+-----+-----+ | ID | 名前 | 年齢 | 性別 | +----+------+-----+-----+ | 2 | 張三 | 22 | 1 | | 3 | 李思 | 38 | 1 | | 4 | 王武 | 25 | 1 | +----+------+-----+-----+ セット内の 3 行 (0.00 秒) 上記の要件は or 演算子と in 演算子を使用することで実現できますが、in 演算子を使用すると SQL ステートメントが簡潔になることは明らかです。 2.4 not演算子値が特定の範囲内にないか存在しないかを照会する必要がある場合は、not 演算子を使用できます。not 演算子は単独では使用されず、in 演算子、like 演算子、between and、exists などと一緒に使用されることがよくあります。 ない mysql> select * from user where name not in ('张三', '李四', '王五'); +----+--------+-----+-----+ | ID | 名前 | 年齢 | 性別 | +----+--------+-----+-----+ | 1 | プラム 8 | 18 | 1 | | 5 | 劉麻子 | 13 | 0 | | 6 | 天斉 | 37 | 1 | | 7 | ありがとう | 18 | 0 | +----+--------+-----+-----+ セット内の 4 行 (0.00 秒) 好きではない mysql> select * from user where name not like '李子%'; +----+--------+-----+-----+ | ID | 名前 | 年齢 | 性別 | +----+--------+-----+-----+ | 2 | 張三 | 22 | 1 | | 3 | 李思 | 38 | 1 | | 4 | 王武 | 25 | 1 | | 5 | 劉麻子 | 13 | 0 | | 6 | 天斉 | 37 | 1 | | 7 | ありがとう | 18 | 0 | +----+--------+-----+-----+ セット内の 6 行 (0.00 秒) との間ではない mysql> select * from user where age not between 20 and 30; +----+--------+-----+-----+ | ID | 名前 | 年齢 | 性別 | +----+--------+-----+-----+ | 1 | プラム 8 | 18 | 1 | | 3 | 李思 | 38 | 1 | | 5 | 劉麻子 | 13 | 0 | | 6 | 天斉 | 37 | 1 | | 7 | ありがとう | 18 | 0 | +----+--------+-----+-----+ セット内の行数は 5 です (0.00 秒) 存在しない not exists テーブルは exists テーブルと同じように使用され、現在の where 句の結果を返すかどうかを決定するために使用されます。 not exists と exists はサブクエリに作用し、親に true と false を返します。 SELECT ... FROM テーブル WHERE EXISTS (サブクエリ) SELECT ... FROM table WHERE NOT EXISTS (サブクエリ) 効果を示すために、テーブル作成ステートメントとデータは次のようになる単純な注文テーブルを作成します。 名前を設定します utf8mb4; FOREIGN_KEY_CHECKS = 0 を設定します。 -- ---------------------------- -- 注文のテーブル構造 -- ---------------------------- `order` が存在する場合はテーブルを削除します。 テーブル「order」を作成します( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主キー', `number` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '注文番号', `user_id` bigint(20) NULL デフォルト NULL コメント 'ユーザーID', `price` 小数点(10, 2) NULL デフォルト NULL コメント 'amount', `create_date` datetime(0) NULL DEFAULT NULL COMMENT '作成日', BTREE を使用した主キー (`id`) ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- 注文記録 -- ---------------------------- `order` に値 (1, 'DD-20211110-000001', 1, 250.00, '2021-11-10 22:37:19') を挿入します。 FOREIGN_KEY_CHECKS = 1 を設定します。 注意: order は MySQL のキーワードであるため、テーブルを作成するときにテーブルに直接 order という名前を付けることはお勧めしません。ここでは、この問題を解決する方法を説明するために order という名前を付けます。 mysql> `order` から * を選択します。 +----+--------------------+---------+--------+---------------------+ | id | 番号 | ユーザーID | 価格 | 作成日 | +----+--------------------+---------+--------+---------------------+ | 1 | DD-20211110-000001 | 1 | 250.00 | 2021-11-10 22:37:19 | +----+--------------------+---------+--------+---------------------+ セット内の 1 行 (0.00 秒) よく見ると、順序が ` で変更されており、MySQL がそれをキーワードとして解析しないことがわかります。 MySQL を追加しないと、例外がスローされます。 話題に戻ると、今度は exists を使用して要件を照会します。 mysql> select * from user where exists(select id from `order` where user_id = user.id); +----+--------+-----+-----+ | ID | 名前 | 年齢 | 性別 | +----+--------+-----+-----+ | 1 | プラム 8 | 18 | 1 | +----+--------+-----+-----+ セット内の 1 行 (0.00 秒) このとき、注文をしていないユーザー情報を照会したい場合は、not exists を使用するだけで済みます。 mysql> 存在しないユーザーから * を選択します (user_id = user.id である `order` から id を選択します); +----+--------+-----+-----+ | ID | 名前 | 年齢 | 性別 | +----+--------+-----+-----+ | 2 | 張三 | 22 | 1 | | 3 | 李思 | 38 | 1 | | 4 | 王武 | 25 | 1 | | 5 | 劉麻子 | 13 | 0 | | 6 | 天斉 | 37 | 1 | | 7 | ありがとう | 18 | 0 | +----+--------+-----+-----+ セット内の 6 行 (0.00 秒) 2.5 演算子の順序上記ではいくつかの演算子について説明しましたが、多くの場合、複数の演算子を組み合わせて使用する必要があります。このとき、演算子の順序に注意する必要があります。 たとえば、次の要件があります。 mysql> select * from user where age > 20 or sex = 1 and name != '张三'; +----+--------+-----+-----+ | ID | 名前 | 年齢 | 性別 | +----+--------+-----+-----+ | 1 | プラム 8 | 18 | 1 | | 2 | 張三 | 22 | 1 | | 3 | 李思 | 38 | 1 | | 4 | 王武 | 25 | 1 | | 6 | 天斉 | 37 | 1 | +----+--------+-----+-----+ セット内の行数は 5 です (0.00 秒) この時点で、クエリの戻り結果には実際に Zhang San が含まれていることがわかります。これは、and が or よりも優先順位が高いためです。MySQL の下部にある SQL パーサーは、上記の SQL を sex = 1 and name != 'Zhang San' or age > 20 と解析します。また、age > 20 であるため、Zhang San も検出されます。この問題を解決するには、 or ステートメントを括弧で囲むだけです。 mysql> select * from user where (age > 20 or sex = 1) and name != '张三'; +----+--------+-----+-----+ | ID | 名前 | 年齢 | 性別 | +----+--------+-----+-----+ | 1 | プラム 8 | 18 | 1 | | 3 | 李思 | 38 | 1 | | 4 | 王武 | 25 | 1 | | 6 | 天斉 | 37 | 1 | +----+--------+-----+-----+ セット内の 4 行 (0.00 秒) この時点で、クエリの返されたデータには Zhang San は含まれなくなりました。 したがって、SQL を書くときは、括弧を使用する習慣を身につけることができます。括弧で演算子をグループ化することで、デフォルトの順序を使用することで発生するエラーのリスクを回避できます。 これで、MySQL 演算子 (and、or、in、not) の具体的な使用法に関するこの記事は終了です。MySQL 演算子に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: HTML におけるスクリプトの配置に関する簡単な説明
>>: OpenLayers 3 のベクターマップソースの読み込みの問題を解決する
目次G2チャートについて使用テンプレートで使用される完全なコード (棒グラフ)世界地図を追加するG2...
<div align="center"> <table sty...
1. バックアップソースリストUbuntu のデフォルトのソースは国内サーバーではないため、更新され...
以前、プロジェクトでQRコードをスキャンして情報を表示する機能を開発する必要がありました。インターネ...
これを見た後、あなたにも手ができて、さまざまな美しい小さなしっぽを作れるようになることを保証します!...
0. システム要件CPU I5-10400F以上メモリ 16 GB、32 GBのメモリが最適ハードド...
MySQL のイベント スケジューラ EVENT は、Unix crontab や Windows ...
この記事の例では、矢印をクリックして画像を切り替えるVue + jsの具体的なコードを共有しています...
目次導入建築ESXIの利点vSphere とは何ですか? 2. 仮想マシンの利点3. 仮想マシンを使...
新しいCSS3プロパティと互換性ありCSS3では、プラグインprefixfree.min.jsを使用...
2.1 セマンティクス化により、Webページが検索エンジンに理解されやすくなりますこの章では、We...
CSS3 は反転可能なホバー効果を実装します。具体的なコードは次のとおりです。 1.css /*基本...
目次序文変換関係具体的な実装file2DataUrl(ファイル、コールバック) file2Image...
仮想DOMの役割まず、仮想 DOM の出現によってどのような問題が解決されるのかを知る必要があります...
1. はじめに以前は、Python アプリケーションの作成を開始したい場合、最初のステップはマシンに...