MySQL IN和NOT IN的用法(附带实例)
MySQL 中的 IN 操作符用来查询满足指定范围内的条件的记录。
使用 IN 操作符,将所有检索条件用圆括号括起来,检索条件之间用逗号分隔开,只要满足条件范围内的一个值即为匹配项。
为了方便演示 IN 和 NOT IN 的用法,需要往数据表插入如下数据:
【实例 1】查询 s_id(水果供应商)为 101 和 102 的记录,SQL 语句如下:
相反,可以使用关键字 NOT 来检索不在条件范围内的记录。
【实例 2】查询所有 s_id 不等于 101 也不等于 102 的记录,SQL 语句如下:
使用 IN 操作符,将所有检索条件用圆括号括起来,检索条件之间用逗号分隔开,只要满足条件范围内的一个值即为匹配项。
为了方便演示 IN 和 NOT IN 的用法,需要往数据表插入如下数据:
mysql> INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES('a1', 101,'apple',5.2), ('b1',101,'blackberry', 10.2), ('bs1',102,'orange', 11.2), ('bs2',105,'melon',8.2), ('t1',102,'banana', 10.3), ('t2',102,'grape', 5.3), ('o2',103,'coconut', 9.2), ('c0',101,'cherry', 3.2), ('a2',103, 'apricot',2.2), ('l2',104,'lemon', 6.4), ('b2',104,'berry', 7.6), ('m1',106,'mango', 15.7), ('m2',105,'xbabay', 2.6), ('t4',107,'xbababa', 3.6), ('m3',105,'xxtt', 11.6), ('b5',107,'xxxx', 3.6);
【实例 1】查询 s_id(水果供应商)为 101 和 102 的记录,SQL 语句如下:
SELECT s_id,f_name, f_price FROM fruits WHERE s_id IN (101,102) ORDER BY f_name;查询结果如下:
+-------+------------+--------+ | s_id | f_name | f_price| +-------+------------+--------+ | 101 | apple | 5.20 | | 102 | banana | 10.30 | | 101 | blackberry | 10.20 | | 101 | cherry | 3.20 | | 102 | grape | 5.30 | | 102 | orange | 11.20 | +-------+------------+--------+
相反,可以使用关键字 NOT 来检索不在条件范围内的记录。
【实例 2】查询所有 s_id 不等于 101 也不等于 102 的记录,SQL 语句如下:
SELECT s_id, f_name, f_price FROM fruits WHERE s_id NOT IN (101, 102) ORDER BY f_name;查询结果如下:
+-------+--------+--------+ | s_id | f_name | f_price | +-------+--------+---------+ | 103 | apricot| 2.20 | | 104 | berry | 7.60 | | 103 | coconut| 9.20 | | 104 | lemon | 6.40 | | 106 | mango | 15.70 | | 105 | melon | 8.20 | | 107 | xbababa| 3.60 | | 105 | xbabay | 2.60 | | 105 | xxtt | 11.60 | | 107 | xxxxx | 3.60 | +-------+--------+---------+可以看到,该语句在 IN 关键字前面加上了 NOT 关键字,这使得查询的结果与实例 1 结果正好相反,实例 1 检索了 s_id 等于 101 和 102 的记录,而这里所要求查询的记录中 s_id 字段值不等于这两个值中的任何一个。