MySQL讲义第21讲——select 查询之查询条件
文章目录
- MySQL讲义第21讲——select 查询之查询条件
- 一、比较运算符和逻辑运算符
- 1、比较运算符
- 2、逻辑运算符
- 二、WHERE 子句的一般用法
- 1、查询身高超过 170 的学生的信息
- 2、查询 2000 年 1 月 1 日以后出生的员工信息
- 三、逻辑运算符的用法
- 1、查询 2000 年出生的学生信息
- 2、查询系编号为 D01 和 D02 的学生信息
- 3、查询系编号为 D01 和 D02 的男生信息
- 四、BETWEEN … AND 的用法
- 1、查找 2000 年出生的学生信息。
- 2、查找身高在 170 和 180 之间的学生信息
- 3、查找身高不在 170 和 180 之间的学生信息
- 五、IN 的用法
- 1、查询系编号为 D01 和 D02 的学生信息
- 2、查询系编号不是 D01 和 D02 的学生信息
- 3、查询身高为 170、175 和 180 的学生的信息
- 六、使用 IS NULL 查询空值
- 1、查询 phone 为空值的学生信息
- 2、查询 phone 不为空值的学生信息
在 MySQL 中,如果需要从数据表中查询满足某个条件的数据,可以使用 WHERE 关键字来指定查询条件。
一、比较运算符和逻辑运算符
可以使用比较运算符和逻辑运算符构造查询的条件。
1、比较运算符
比较运算符可以对两个数据的值进行比较,常用的比较运算符如下:
比较运算符 | 描述 |
= | 等于 |
<> 或 != | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN … AND | 在某个范围内 |
IN | 在某个集合内 |
IS NULL | 为空值 |
LIKE | 搜索某种模式 |
2、逻辑运算符
逻辑运算符包括 NOT、AND 和 OR,是对多个查询条件进行运算,用于构造复杂的查询条件。用法如下:
逻辑运算符 | 描述 |
NOT 条件1 | 对条件1求反,如果条件1为真,结果为假;如果条件1为假,则结果为真。 |
条件1 AND 条件2 | 如果条件1和条件2都为真,结果为真。 |
条件1 OR 条件2 | 条件1和条件2有一个为真,结果为真。 |
二、WHERE 子句的一般用法
使用等于(=)、大于(>)、小于(<)、大于或等于(>=)、小于或等于(<=)、不等于(!= 或 <>)构造条件。例如:
1、查询身高超过 170 的学生的信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> height >= 170;
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801101 | 王占峰 | 男 | 1999-12-30 00:00:00 | 177.0 | 15937320987 | D02 |
| 201801102 | 刘国量 | 男 | 2000-08-14 00:00:00 | 174.0 | 15937320789 | D02 |
| 201801103 | 巩莉 | 女 | 2000-06-18 00:00:00 | 170.0 | 15937320456 | D02 |
| 201801203 | 王大强 | 男 | 2000-10-19 00:00:00 | 174.0 | 15937320555 | D03 |
| 201901002 | 王宏伟 | 男 | 2001-02-15 00:00:00 | 180.0 | 15937320255 | D01 |
| 201901004 | | 男 | 2000-12-25 00:00:00 | 178.0 | 15937320321 | D01 |
| 201901005 | 刘鹏 | 男 | 2001-12-18 00:00:00 | 176.0 | 15937320654 | D01 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
7 rows in set (0.02 sec)
2、查询 2000 年 1 月 1 日以后出生的员工信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> birth >= '2000-1-1';
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801102 | 刘国量 | 男 | 2000-08-14 00:00:00 | 174.0 | 15937320789 | D02 |
| 201801103 | 巩莉 | 女 | 2000-06-18 00:00:00 | 170.0 | 15937320456 | D02 |
| 201801202 | 赵牡丹 | 女 | 2001-08-10 00:00:00 | 160.0 | 15937320666 | D03 |
| 201801203 | 王大强 | 男 | 2000-10-19 00:00:00 | 174.0 | 15937320555 | D03 |
| 201901002 | 王宏伟 | 男 | 2001-02-15 00:00:00 | 180.0 | 15937320255 | D01 |
| 201901003 | 张静静 | 女 | 2001-08-17 00:00:00 | 167.0 | 15937320123 | D01 |
| 201901004 | | 男 | 2000-12-25 00:00:00 | 178.0 | 15937320321 | D01 |
| 201901005 | 刘鹏 | 男 | 2001-12-18 00:00:00 | 176.0 | 15937320654 | D01 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
8 rows in set (0.00 sec)
三、逻辑运算符的用法
1、查询 2000 年出生的学生信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> birth >= '2000-1-1' AND birth <= '2000-12-31';
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801102 | 刘国量 | 男 | 2000-08-14 00:00:00 | 174.0 | 15937320789 | D02 |
| 201801103 | 巩莉 | 女 | 2000-06-18 00:00:00 | 170.0 | 15937320456 | D02 |
| 201801203 | 王大强 | 男 | 2000-10-19 00:00:00 | 174.0 | 15937320555 | D03 |
| 201901004 | | 男 | 2000-12-25 00:00:00 | 178.0 | 15937320321 | D01 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
4 rows in set (0.00 sec)
2、查询系编号为 D01 和 D02 的学生信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> dept_id = 'D01' OR dept_id = 'D02';
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801101 | 王占峰 | 男 | 1999-12-30 00:00:00 | 177.0 | 15937320987 | D02 |
| 201801102 | 刘国量 | 男 | 2000-08-14 00:00:00 | 174.0 | 15937320789 | D02 |
| 201801103 | 巩莉 | 女 | 2000-06-18 00:00:00 | 170.0 | 15937320456 | D02 |
| 201801104 | 宋丹风 | 女 | 1999-11-20 00:00:00 | 165.0 | 15937320444 | D02 |
| 201901002 | 王宏伟 | 男 | 2001-02-15 00:00:00 | 180.0 | 15937320255 | D01 |
| 201901003 | 张静静 | 女 | 2001-08-17 00:00:00 | 167.0 | 15937320123 | D01 |
| 201901004 | | 男 | 2000-12-25 00:00:00 | 178.0 | 15937320321 | D01 |
| 201901005 | 刘鹏 | 男 | 2001-12-18 00:00:00 | 176.0 | 15937320654 | D01 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
8 rows in set (0.00 sec)
3、查询系编号为 D01 和 D02 的男生信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> (dept_id = 'D01' OR dept_id = 'D02') AND gender = '男';
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801101 | 王占峰 | 男 | 1999-12-30 00:00:00 | 177.0 | 15937320987 | D02 |
| 201801102 | 刘国量 | 男 | 2000-08-14 00:00:00 | 174.0 | 15937320789 | D02 |
| 201901002 | 王宏伟 | 男 | 2001-02-15 00:00:00 | 180.0 | 15937320255 | D01 |
| 201901004 | | 男 | 2000-12-25 00:00:00 | 178.0 | 15937320321 | D01 |
| 201901005 | 刘鹏 | 男 | 2001-12-18 00:00:00 | 176.0 | 15937320654 | D01 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
5 rows in set (0.00 sec)
--说明:注意条件中的括号。这是因为 AND 运算的优先级高于 OR,因此需要使用括号。
四、BETWEEN … AND 的用法
BETWEEN … AND 用来限定查找的信息在两个值(一个表示最小值,一个表示最大值)之间。例如:
1、查找 2000 年出生的学生信息。
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> birth BETWEEN '2000-1-1' AND '2000-12-31';
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801102 | 刘国量 | 男 | 2000-08-14 00:00:00 | 174.0 | 15937320789 | D02 |
| 201801103 | 巩莉 | 女 | 2000-06-18 00:00:00 | 170.0 | 15937320456 | D02 |
| 201801203 | 王大强 | 男 | 2000-10-19 00:00:00 | 174.0 | 15937320555 | D03 |
| 201901004 | | 男 | 2000-12-25 00:00:00 | 178.0 | 15937320321 | D01 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
4 rows in set (0.00 sec)
2、查找身高在 170 和 180 之间的学生信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> height BETWEEN 170 AND 180;
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801101 | 王占峰 | 男 | 1999-12-30 00:00:00 | 177.0 | 15937320987 | D02 |
| 201801102 | 刘国量 | 男 | 2000-08-14 00:00:00 | 174.0 | 15937320789 | D02 |
| 201801103 | 巩莉 | 女 | 2000-06-18 00:00:00 | 170.0 | 15937320456 | D02 |
| 201801203 | 王大强 | 男 | 2000-10-19 00:00:00 | 174.0 | 15937320555 | D03 |
| 201901002 | 王宏伟 | 男 | 2001-02-15 00:00:00 | 180.0 | 15937320255 | D01 |
| 201901004 | | 男 | 2000-12-25 00:00:00 | 178.0 | 15937320321 | D01 |
| 201901005 | 刘鹏 | 男 | 2001-12-18 00:00:00 | 176.0 | 15937320654 | D01 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
7 rows in set (0.00 sec)
3、查找身高不在 170 和 180 之间的学生信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> height NOT BETWEEN 170 AND 180;
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801104 | 宋丹风 | 女 | 1999-11-20 00:00:00 | 165.0 | 15937320444 | D02 |
| 201801201 | 王艳艳 | 女 | 1999-09-30 00:00:00 | 162.0 | 15937320888 | D03 |
| 201801202 | 赵牡丹 | 女 | 2001-08-10 00:00:00 | 160.0 | 15937320666 | D03 |
| 201901003 | 张静静 | 女 | 2001-08-17 00:00:00 | 167.0 | 15937320123 | D01 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
4 rows in set (0.00 sec)
五、IN 的用法
使用 IN 可以代替逻辑表达式 OR,表示某个字段的取值在一个集合内。例如:
1、查询系编号为 D01 和 D02 的学生信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> dept_id IN ('D01','D02');
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801101 | 王占峰 | 男 | 1999-12-30 00:00:00 | 177.0 | 15937320987 | D02 |
| 201801102 | 刘国量 | 男 | 2000-08-14 00:00:00 | 174.0 | 15937320789 | D02 |
| 201801103 | 巩莉 | 女 | 2000-06-18 00:00:00 | 170.0 | 15937320456 | D02 |
| 201801104 | 宋丹风 | 女 | 1999-11-20 00:00:00 | 165.0 | 15937320444 | D02 |
| 201901002 | 王宏伟 | 男 | 2001-02-15 00:00:00 | 180.0 | 15937320255 | D01 |
| 201901003 | 张静静 | 女 | 2001-08-17 00:00:00 | 167.0 | 15937320123 | D01 |
| 201901004 | | 男 | 2000-12-25 00:00:00 | 178.0 | 15937320321 | D01 |
| 201901005 | 刘鹏 | 男 | 2001-12-18 00:00:00 | 176.0 | 15937320654 | D01 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
8 rows in set (0.01 sec)
2、查询系编号不是 D01 和 D02 的学生信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> dept_id NOT IN ('D01','D02');
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801201 | 王艳艳 | 女 | 1999-09-30 00:00:00 | 162.0 | 15937320888 | D03 |
| 201801202 | 赵牡丹 | 女 | 2001-08-10 00:00:00 | 160.0 | 15937320666 | D03 |
| 201801203 | 王大强 | 男 | 2000-10-19 00:00:00 | 174.0 | 15937320555 | D03 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
3 rows in set (0.00 sec)
3、查询身高为 170、175 和 180 的学生的信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> height IN (175,170,180);
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801103 | 巩莉 | 女 | 2000-06-18 00:00:00 | 170.0 | 15937320456 | D02 |
| 201901002 | 王宏伟 | 男 | 2001-02-15 00:00:00 | 180.0 | 15937320255 | D01 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
2 rows in set (0.00 sec)
六、使用 IS NULL 查询空值
查询某个字段为空值的记录不能使用等号(=),需要使用 IS NULL。例如:
1、查询 phone 为空值的学生信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> phone IS NULL;
+-----------+-----------+--------+---------------------+--------+-------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------+---------+
| 201801201 | 王艳艳 | 女 | 1999-09-30 00:00:00 | 162.0 | NULL | D03 |
| 201901005 | 刘鹏 | 男 | 2001-12-18 00:00:00 | 176.0 | NULL | D01 |
+-----------+-----------+--------+---------------------+--------+-------+---------+
2 rows in set (0.00 sec)
2、查询 phone 不为空值的学生信息
mysql> SELECT
-> *
-> FROM
-> stu
-> WHERE
-> phone IS NOT NULL;
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| stu_id | stu_name | gender | birth | height | phone | dept_id |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
| 201801101 | 王占峰 | 男 | 1999-12-30 00:00:00 | 177.0 | 15937320987 | D02 |
| 201801102 | 刘国量 | 男 | 2000-08-14 00:00:00 | 174.0 | 15937320789 | D02 |
| 201801103 | 巩莉 | 女 | 2000-06-18 00:00:00 | 170.0 | 15937320456 | D02 |
| 201801104 | 宋丹风 | 女 | 1999-11-20 00:00:00 | 165.0 | 15937320444 | D02 |
| 201801202 | 赵牡丹 | 女 | 2001-08-10 00:00:00 | 160.0 | 15937320666 | D03 |
| 201801203 | 王大强 | 男 | 2000-10-19 00:00:00 | 174.0 | 15937320555 | D03 |
| 201901002 | 王宏伟 | 男 | 2001-02-15 00:00:00 | 180.0 | 15937320255 | D01 |
| 201901003 | 张静静 | 女 | 2001-08-17 00:00:00 | 167.0 | 15937320123 | D01 |
| 201901004 | | 男 | 2000-12-25 00:00:00 | 178.0 | 15937320321 | D01 |
+-----------+-----------+--------+---------------------+--------+-------------+---------+
9 rows in set (0.00 sec)