赞
赏
我们已经了解到了 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;
运行结果如下
因为我们要求是查询名字是小亮并且年龄是19岁的学生,所以我们在查询的时候使用 AND 来将条件关联起来,必须所有的条件都满足。
查询姓名是小亮或者年龄是 19 岁的学生
-- 嗨客网(www.haicoer.net) SELECT id,stu_no,stu_name,age FROM student WHERE stu_name = '小亮' OR age = 17;
运行结果如下
和 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;
运行结果如下
上面的语句执行效果和下面 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;
运行结果如下
从上面的运行结果中,我们可以看到,如果不加 () 的话,在 where 条件里面有 AND 和 OR 的时候,先执行 AND 条件,然后在执行 OR 的条件语句。如果有 () 的话,先执行 () 的语句。它的优先级比 AND 高。
IN操作符
语法
![]()