MySQL演算子(and, or, in, not)の具体的な使用方法
1. はじめに
MySQLでwhere句を使ってクエリデータをフィルタリングする場合、複数のフィルタ条件を同時に満たすか、複数のフィルタ条件のうちの1つを満たす必要があることが多く、その場合、演算子を使ってwhere句を連結することができます。
いくつかのオペレータが動作します。
<テーブル 演算子 役割 と で、where 節の条件も満たす必要があります。 または または、複数の where 節の中の 1 つの条件のみにマッチさせる場合。 で where節クエリの範囲を指定するために使用します。 ない not, 一般に in, between and, and exists と共に用いられ、逆を取ることを示す。
2. 本体
まず、以下に示すDDLとテーブルデータを持つUserテーブルを用意し、これをコピーしてそのまま使用できるようにします。
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'username',
`age` int(11) NOT NULL COMMENT 'age',
`sex` smallint(6) NOT NULL COMMENT 'gender',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'Li Zixi', 18, 1);
INSERT INTO `user` VALUES (2, 'Zhang San', 22, 1);
INSERT INTO `user` VALUES (3, '李四', 38, 1);
INSERT INTO `user` VALUES (4, '王五', 25, 1);
INSERT INTO `user` VALUES (5, 'Liu Ma Zi', 13, 0);
INSERT INTO `user` VALUES (6, 'Tian Qi', 37, 1);
INSERT INTO `user` VALUES (7, 'Xie Li', 18, 0);
SET FOREIGN_KEY_CHECKS = 1;
初期状態の並び順は以下の通りです。
mysql> select * from user;
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | Li Zi Hsi | 18 | 1 |
| 2 | Zhang San | 22 | 1 |
| 3 | Li Si | 38 | 1 |
| 4 | Wang Wu | 25 | 1 |
| 5 | Six Pocky | 13 | 0 |
| 6 | Tian Qi | 37 | 1 |
| 7 | Xie Li | 18 | 0 |
+ ----+--------+-----+-----+
7 rows in set (0.00 sec)
2.1 AND演算子
and演算子は、クエリがWhere句の両方の条件を満たす必要がある場合に使用でき、and条件は互いにandの関係である。
要求事項
age=18、sex=maleのユーザーを対象としたクエリ(注:男性の場合はsex=1)。
ステートメント
mysql> select * from user where age = 18 and sex =1;
結果
+----+--------+-----+-----+
| ID|名前|年齢|性別
+----+--------+-----+-----+
| 1|LiZiHi|18|1|です。
+----+--------+-----+-----+
セットで1列(0.00秒)
この時点で、age=18とsex=1の両方を満たすユーザーのみが照会されていることがわかります。などと、一度に複数存在することも可能です。例えば、上記の上に ** Name=LiZiQi** をクエリする必要がある場合は、その後に別のand演算子を付ければ良いだけです。
mysql> select * from user where age = 18 and sex =1 and name = '李子柒';
Empty set (0.00 sec)
2.2 or 演算子
andとは異なり、orは複数のwhere条件のうち片方だけを満たせばよく、両方を満たす必要はなく、条件はorの関係になっている。
必要条件
age=18またはsex=maleのユーザーを対象としたクエリ(注:男性の場合はsex=1)。
ステートメントです。
mysql> select * from user where age = 18 or sex =1;
結果
+----+--------+-----+-----+
| ID|名前|年齢|性別
+----+--------+-----+-----+
| 1|LiZiHi|18|1|です。
| 2|チャン・サン|22|1|||。
| 3|リ・シー|38|1
| 4|ワン・ウー|25|1||。
| 6|ティエン・チー|37|1|||。
| 7|サンキュー|18|0|||。
+----+--------+-----+-----+
1セット6列(0.00秒)
この時点で、age=18 または sex=1 を満たすユーザがチェックアウトされていることがわかります。同じor演算子を複数のwhere句に同時に適用することができます。
2.3 in演算子 [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...]
関連
-
MySQLデータベースでvarchar型の数値の大きさを比較する方法
-
MySQLデータ型の詳細
-
MySQLの悲観的ロックと楽観的ロックの実装スキーム
-
Mysqlのソート機能の詳細
-
[解決済み】マルチパート識別子をバインドできませんでした。
-
[解決済み】MySQL - オペランドは1つのカラムを含む必要があります。
-
SQLException。オペランドは1列でなければなりません。
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
Djangoマイグレーションエラー 外部キー制約を追加できない
-
MySQL 接続タイムアウト。エラー SQLSTATE[HY000] [2002] 接続がタイムアウトしました 解決済み
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mysqlでインデックスに障害が発生する原因は何ですか?
-
MySqlの整数インデックスと文字列インデックスの失敗または暗黙の変換問題
-
mysqlにおけるvarcharの日付比較とソートの実装
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
[解決済み】マルチパート識別子をバインドできない
-
[解決済み】SQLサーバーのテンポラリーテーブルで「すでに名前のついたオブジェクトがあります」エラーが発生する。
-
MySQLにおけるvarchar型とchar型の違い
-
Mysql がエラーを報告 オペランドには 1 つのカラムが含まれている必要があります。
-
Mysql がエラー 1241 を報告 オペランドは 1 つのカラムを含む必要があります。
-
MySQLの起動エラー:ERROR 2003 (HY000)。localhost'上のMySQLサーバーに接続できない(10061)