嗨客网搜索
数据库教程

Mysql多列过滤教程

Mysql多列过滤教程

我们已经了解到了 where 过滤一列的功能。在 mysql 中,还允许对多列进行过滤的功能。它可以用 AND 和 OR 来控制。

本章节,我们用 student 表来做例子。建表 sql 和插入的语句 sql 如下

CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `stu_no` int(11) DEFAULT NULL, `stu_name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 插入语句 INSERT INTO student (`id`,`stu_no`,`stu_name`,`age`) VALUES (1,1001,'小明',17), (2,1002,'小红',16), (3,1003,'小军',18), (4,1004,'小亮',19), (5,1005,'小亮',19), (6,1006,'小杰',16), (7,1007,'小亮',20), (8,1008,'无年龄',null);

多列过滤详解

语法

select 列名1,列名2... from 表名 where 条件1 AND/OR 条件2 ....

描述

和单列条件不同的是,这边用 AND 或者 OR 来连接条件。AND 表示条件都需要满足,OR 表示条件里面有一个满足就可以了。

案例

查询姓名是小亮并且年龄是 19 岁的数据

-- 嗨客网(www.haicoer.net) SELECT id,stu_no,stu_name,age FROM student WHERE stu_name = '小亮' AND age = 19;

运行结果如下

15 where and.png

因为我们要求是查询名字是小亮并且年龄是19岁的学生,所以我们在查询的时候使用 AND 来将条件关联起来,必须所有的条件都满足。

查询姓名是小亮或者年龄是 19 岁的学生

-- 嗨客网(www.haicoer.net) SELECT id,stu_no,stu_name,age FROM student WHERE stu_name = '小亮' OR age = 17;

运行结果如下

16 where or.png

和 and 不同的是,我们将名字是 小亮 和 年龄是 17 岁的学生信息都获取出来。

AND 和 OR 一起执行优先级

-- 嗨客网(www.haicoer.net) SELECT id,stu_no,stu_name,age FROM student WHERE id = 1 OR id = 8 AND age > 17;

运行结果如下

17 where and or 优先级1.png

上面的语句执行效果和下面 sql 语句一样。

SELECT id,stu_no,stu_name,age FROM student WHERE id = 1 OR (id = 8 AND age > 17);

将 or 条件用括号扩起来

SELECT id,stu_no,stu_name,age FROM student WHERE (id = 1 OR id = 8) AND age > 17;

运行结果如下

18 where and or 优先级2.png

从上面的运行结果中,我们可以看到,如果不加 () 的话,在 where 条件里面有 AND 和 OR 的时候,先执行 AND 条件,然后在执行 OR 的条件语句。如果有 () 的话,先执行 () 的语句。它的优先级比 AND 高。

IN操作符

语法

select 列名1,列名2... from 表名 where 列名 in (值1,值2...)

描述

IN 操作符来执行条件范围,它会对条件里面的每个值进行匹配。in 里面的条件以逗号隔开。

案例

-- 嗨客网(www.haicoer.net) SELECT id,stu_no,stu_name,age FROM student WHERE age IN (17,18,19);

运行结果如下

19 where in.png

我们将年龄在 17,18,19 岁的学生信息都获取了出来。它的效果和 OR 的功能类似,上面的语句可以换成

SELECT id,stu_no,stu_name,age FROM student WHERE age = 17 OR age = 18 or age = 19;

那么我们有了 OR 为什么还需要用 in 呢?其优点有:

  • IN 操作符的语法更加清楚,更直观。
  • 它一般的执行顺序比 OR 执行的更快。
  • IN 里面可以是另外一个 where 子句。

总结

如果对多个列进行查询对时候,我们可以使用 AND 或者 OR 来将条件组合。

嗨客网顶部