在数据库表中一般包含大量的数据,很少需要检索表中的所有行。通常是通过指定搜索条件(过滤条件)来提取表的子集。
where子句
通过where后面接的条件来筛选表数据
1. where常用运算符
比较运算符
运算符 | 说明 | 运算符 | 说明 |
---|---|---|---|
< | 小于 | !=或<> | 不等于 |
<= | 小于或等于 |
= | 大于或等于 |
= | 等于 | > | 大于 |
in | 在集合内 | between | 在某范围内 |
逻辑运算符
运算符 | 说明 |
---|---|
NOT或! | 逻辑非 |
OR或|| | 逻辑或 |
AND或&& | 逻辑与 |
2. where搭配运算符的用法
- 比较运算符搭配where的应用
mysql> # 在promary表中查询id大于30的地区
mysql> select proID,proName from promary where proID > 30;
+-------+--------------------------+
| proID | proName |
+-------+--------------------------+
| 31 | 宁夏回族自治区 |
| 32 | 新疆维吾尔自治区 |
| 33 | 内蒙古自治区 |
| 34 | 澳门特别行政区 |
| 35 | 香港特别行政区 |
+-------+--------------------------+
mysql> # 在promary表中查询小于id等于5的地区
mysql> select * from promary where proID <= 5;
+-------+-----------+
| proID | proName |
+-------+-----------+
| 2 | 天津市 |
| 3 | 上海市 |
| 4 | 重庆市 |
| 5 | 河北省 |
+-------+-----------+
4 rows in set (0.00 sec)
mysql> # between用法(查询某个范围内的数据)
mysql> # 在promary表中查询在city从5-10的地区
mysql> select proID,proName from promary where proID between 5 and 10;
+-------+--------------+
| proID | proName |
+-------+--------------+
| 5 | 河北省 |
| 6 | 山西省 |
| 7 | 台湾省 |
| 8 | 辽宁省 |
| 9 | 吉林省 |
| 10 | 黑龙江省 |
+-------+--------------+
6 rows in set (0.00 sec)
mysql> # in用法(in (值1,值2....值n) 表示等于括号中任意一个值就行)
mysql> # 在city表中查询属于河北省(5)与湖北省(18)的所有市
mysql> select * from city where proID in (5,18);
+--------+--------------------------------+-------+
| cityID | cityName | proID |
+--------+--------------------------------+-------+
| 6 | 保定市 | 5 |
| 2 | 唐山市 | 5 |
| 10 | 廊坊市 | 5 |
| 7 | 张家口市 | 5 |
| 8 | 承德市 | 5 |
| 9 | 沧州市 | 5 |
| 3 | 秦皇岛市 | 5 |
| 11 | 衡水市 | 5 |
| 5 | 邢台市 | 5 |
| 4 | 邯郸市 | 5 |
| 13 | 仙桃市 | 18 |
| 3 | 十堰市 | 18 |
| 11 | 咸宁市 | 18 |
| 14 | 天门市 | 18 |
| 9 | 孝感市 | 18 |
| 5 | 宜昌市 | 18 |
| 17 | 恩施土家族苗族自治州 | 18 |
| 15 | 潜江市 | 18 |
| 16 | 神农架林区 | 18 |
| 4 | 荆州市 | 18 |
| 8 | 荆门市 | 18 |
| 6 | 襄樊市 | 18 |
| 7 | 鄂州市 | 18 |
| 12 | 随州市 | 18 |
| 10 | 黄冈市 | 18 |
| 2 | 黄石市 | 18 |
+--------+--------------------------------+-------+
26 rows in set (0.01 sec)
- 逻辑运算符与where搭配
mysql> # and,or用法
mysql> # 在promary表中查询1-3,30-35的地区
mysql> select proID,proName from promary where proID >=1 and proID <= 3 or proID >=30 and proID <= 35;
+-------+--------------------------+
| proID | proName |
+-------+--------------------------+
| 1 | 北京市 |
| 2 | 天津市 |
| 3 | 上海市 |
| 30 | 西藏自治区 |
| 31 | 宁夏回族自治区 |
| 32 | 新疆维吾尔自治区 |
| 33 | 内蒙古自治区 |
| 34 | 澳门特别行政区 |
| 35 | 香港特别行政区 |
+-------+--------------------------+
9 rows in set (0.00 sec)
mysql> # not用法
mysql> # 在promary表中查询不在5-30的地区
mysql> select proID,proName from promary where proID not between 5 and 30;
+-------+--------------------------+
| proID | proName |
+-------+--------------------------+
| 1 | 北京市 |
| 2 | 天津市 |
| 3 | 上海市 |
| 4 | 重庆市 |
| 31 | 宁夏回族自治区 |
| 32 | 新疆维吾尔自治区 |
| 33 | 内蒙古自治区 |
| 34 | 澳门特别行政区 |
| 35 | 香港特别行政区 |
+-------+--------------------------+
tips
- in操作符与or操作符有相同的功能,但是为什么要用in操作符?原因如下:
- 使用长的合法选项清单时,in操作符的语法更清楚且更加直观
- in操作符一般比or操作符更快
- in的最大优点时可以包含其他select语句,使得能够更加动态地建立where子句。
- 使用in操作符时,计算的次序更加容易管理(操作符更少)。
- MySQL支持使用not对in、between和exists子句取反。这与其他DBMS运行使用not对各种条件取反有很大的差别。
如果想看其他有关于MySQL数据库的文章,请跳转到到MySQL自学目录