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 のベクターマップソースの読み込みの問題を解決する
最近、Textrea に転送したときに、データが本当に行ごとに保存できるかどうかという問題に遭遇しま...
目次ネスティング親子コンポーネント通信ブラザーコンポーネント通信撤回するReact の Linked...
Centos7 と Centos6 では、GRUB パスワードの設定手順に大きな違いがあります。これ...
序文モバイル デバイスでは、帯域幅とプロセッサ速度の制限により、Web ページのパフォーマンスに対す...
目次JavaScriptでは、通常、次のコードのようにクラスを簡単に定義できます。 var サンプル...
覚えて: IDE ディスク: 最初のディスクは hda、2 番目のディスクは hdb...最初のディ...
上記のように材料を準備します(ps: hadoop-3.1.2-srcはhadoop-3.1.2に変...
序文この記事では、docker-compose と dockerfile を使用して、binlog ...
目次1. SC テーブルを挿入または変更するときに、テスト スコアが 0 ~ 100 の範囲外の場合...
目次ステップ1. ルーティング ルールを設定し、子構成項目を使用します。 2. ジャンプ(フルパスを...
序文この記事では主にMySQLのカスタム関数とストアドプロシージャに関する関連コンテンツを紹介し、皆...
述べる:この記事で扱うデータ量は 100 万です。数千万のデータが必要な場合は、量を増やすだけで済み...
1. はじめにあなたのウェブサイトはまだインターネット上に公開されたままですか?ここでは、HTTPS...
従来のソフトウェアから Web ウェアへの段階的な移行の傾向の中で、デザイン パターンとテクノロジは...
以下は、Shiji Tiancheng が Tencent KartRider ページを呼び出すため...