mysql> SELECT name
-> FROM teachers
-> WHERE country = 'CN';
+-----------------+
| name |
+-----------------+
| Northern Beggar |
| Linghu Chong |
+-----------------+
2 rows in set (0.00 sec)
SELECT name,student_count
FROM courses
WHERE name In ('Web', 'Big Data');
目标输出结果
mysql> SELECT name,student_count
-> FROM courses
-> WHERE name In ('Web', 'Big Data');
+----------+-------------------+
| name | student_count |
+----------+-------------------+
| Web | 340 |
| Big Data | 700 |
+----------+-------------------+
2 rows in set (0.00 sec)
SELECT *
FROM teachers
WHERE country NOT IN ('JP', 'USA');
执行输出结果
mysql> SELECT *
-> FROM teachers
-> WHERE country NOT IN ('JP', 'USA');
+----+-----------------+---------------------------+-----+---------+
| id | name | email | age | country |
+----+-----------------+---------------------------+-----+---------+
| 1 | Eastern Heretic | eastern.heretic@gmail.com | 20 | UK |
| 2 | Northern Beggar | northern.beggar@qq.com | 21 | CN |
| 5 | Linghu Chong | NULL | 18 | CN |
+----+-----------------+---------------------------+-----+---------+
3 rows in set (0.00 sec)
练习题:NOT IN
题目描述:查询课程表courses中所有teacher_id不为1和3的授课老师所授课程名称
SELECT name
FROM courses
WHERE teacher_id NOT IN (1,3);
目标输出结果
mysql> SELECT name
-> FROM courses
-> WHERE teacher_id NOT IN (1,3);
+------------------------+
| name |
+------------------------+
| Advanced Algorithms |
| Web |
| Object Oriented Design |
+------------------------+
3 rows in set (0.01 sec)
3.2 BETWEEN AND
BETWEEN AND操作符字如其名,会选取介于两个值之间的数据范围内的值。比如学生人数在300到500之间,我们之前会写student_count > 300 AND student_count < 500,现在我们可以简单写成student_count BETWEEN 300 AND 500。
SELECT *
FROM teachers
WHERE (age BETWEEN 20 AND 25) AND (country NOT IN ('CN','UK'));
执行输出结果
mysql> SELECT *
-> FROM teachers
-> WHERE (age BETWEEN 20 AND 25) AND (country NOT IN ('CN','UK'));
+----+------------------+-------------------------+-----+---------+
| id | name | email | age | country |
+----+------------------+-------------------------+-----+---------+
| 4 | Southern Emperor | southern.emperor@qq.com | 21 | JP |
+----+------------------+-------------------------+-----+---------+
1 row in set (0.00 sec)
SELECT name
FROM courses
WHERE name BETWEEN 'D' AND 'Z';
执行输出结果
mysql> SELECT name
-> FROM courses
-> WHERE name BETWEEN 'D' AND 'Z';
+------------------------+
| name |
+------------------------+
| System Design |
| Django |
| Web |
| Java P6+ |
| Data Analysis |
| Object Oriented Design |
| Dynamic Programming |
+------------------------+
7 rows in set (0.00 sec)
SELECT name
FROM courses
WHERE name BETWEEN 'Db' AND 'Dz';
目标输出结果
mysql> SELECT name
-> FROM courses
-> WHERE name BETWEEN 'Db' AND 'Dz';
+---------------------+
| name |
+---------------------+
| Django |
| Dynamic Programming |
+---------------------+
2 rows in set (0.00 sec)
mysql> SELECT *
-> FROM teachers
-> WHERE email IS NULL;
+----+--------------+-------+-----+---------+
| id | name | email | age | country |
+----+--------------+-------+-----+---------+
| 5 | Linghu Chong | NULL | 18 | CN |
+----+--------------+-------+-----+---------+
1 row in set (0.00 sec)
如果我们希望查询教师表中email不为空的所有信息呢? 这时候IS NOT NULL就发挥了作用
SELECT *
FROM teachers
WHERE email IS NOT NULL;
执行输出结果
mysql> SELECT *
-> FROM teachers
-> WHERE email IS NOT NULL;
+----+------------------+---------------------------+-----+---------+
| id | name | email | age | country |
+----+------------------+---------------------------+-----+---------+
| 1 | Eastern Heretic | eastern.heretic@gmail.com | 20 | UK |
| 2 | Northern Beggar | northern.beggar@qq.com | 21 | CN |
| 3 | Western Venom | western.venom@163.com | 28 | USA |
| 4 | Southern Emperor | southern.emperor@qq.com | 21 | JP |
+----+------------------+---------------------------+-----+---------+
4 rows in set (0.00 sec)
可以看到输出结果中email信息为空的教师数据已经被我们筛除。
练习题:IS NUL
题目描述:查询教师表中国籍为’CN'或‘JP’且email信息不为空的所有教师信息
SELECT *
FROM teachers
WHERE (country in ('CN', 'JP')) AND (email IS NOT NULL);
目标输出结果
mysql> SELECT *
-> FROM teachers
-> WHERE (country in ('CN', 'JP')) AND (email IS NOT NULL);
+----+------------------+-------------------------+-----+---------+
| id | name | email | age | country |
+----+------------------+-------------------------+-----+---------+
| 2 | Northern Beggar | northern.beggar@qq.com | 21 | CN |
| 4 | Southern Emperor | southern.emperor@qq.com | 21 | JP |
+----+------------------+-------------------------+-----+---------+
2 rows in set (0.00 sec)
SELECT *
FROM teachers
WHERE (email LIKE '%@qq.com') AND (country = 'CN');
目标执行结果
mysql> SELECT *
-> FROM teachers
-> WHERE (email LIKE '%@qq.com') AND (country = 'CN');
+----+-----------------+------------------------+-----+---------+
| id | name | email | age | country |
+----+-----------------+------------------------+-----+---------+
| 2 | Northern Beggar | northern.beggar@qq.com | 21 | CN |
+----+-----------------+------------------------+-----+---------+
1 row in set (0.01 sec)