1. ホーム
  2. データベース
  3. マイサク

MySQL演算子(and, or, in, not)の具体的な使用方法

2022-01-06 22:48:43

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演算子 [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...]