条件查询概述
# 进阶2 条件查询 -- 语法:SELECT 查询列表 FROM 表名 WHERE 筛选条件; -- WHERE 关键字:当...筛选条件成立时,返回条件结果 -- 分类1:按条件表达式筛选,条件运算符:大于>、小于<、等于=、不等于<>(!=)、大于等于>=、小于等于<= -- 分类2:按逻辑表达式筛选,逻辑运算符:且&&、或||、非!、MySQL推荐关键字[AND OR NOT]来表达 -- 分类3:模糊查询:LIKE,BETWEEN AND,IN,IS NULL
条件表达式
# 按条件表达式筛选 -- 案例1:查询工资大于12000的员工信息【如果单纯的说信息,那可以默认视为表的所有数据】 SELECT * FROM `employees` WHERE `salary` > 12000; -- 案例2:查询部门编号不等于90的【员工名】和【部门编号】 SELECT `first_name`,`last_name`,`department_id` FROM `employees` WHERE `department_id` <> 90;
逻辑表达式
# 按逻辑表达式筛选 -- 案例1:查询工资在10000~20000之间的员工名,工资&奖金 SELECT `first_name`,`last_name`,`salary`,`commission_pct` FROM `employees` WHERE 10000 <= `salary` AND `salary` <= 20000; -- 案例2:查询部门编号不是在90~110之间,或者工资高于15000的员工信息 SELECT * FROM `employees` WHERE NOT(90 <= `department_id` AND `department_id` <= 110) OR (`salary` > 15000); -- `department_id` < 90 OR `department_id` > 110 OR `salary` > 15000;
模糊条件查询
# 按模糊条件查询 -- LIKE 和通配符一起使用 -- BETWEEN ... AND ... -- IN -- IS NULL | IS NOT NULL -- 通配符: %任意无或单或多字符 _任意1个字符 -- LIKE 像... -- 案例1:查询员工名中包含字符a的员工信息 SELECT * FROM `employees` WHERE `last_name` LIKE ‘%a%‘; -- %通配符,表示无字符或者任意字符 -- 案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资 SELECT `last_name`,`salary` FROM `employees` WHERE `last_name` LIKE ‘__n_l%‘; -- ‘__e_a%‘ [无结果]
转义处理
-- 案例3:查询员工名中第二个字符为下划线的员工名[\转义处理] SELECT `last_name` from `employees` WHERE `last_name` LIKE ‘_\_%‘; -- 或者我们自定义转义符 ESCAPE关键字 SELECT `last_name` FROM `employees` WHERE `last_name` LIKE ‘_@_%‘ ESCAPE ‘@‘; -- LIKE ‘_a_%‘ ESCAPE ‘a‘; -- LIKE ‘_$_%‘ ESCAPE ‘$‘; 都可以
BETWEEN ... AND ...
-- BETWEEN .. AND .. 在...和...之间 -- 1、简化SQL,语义化SQL -- 2、这个取值包含值本身 -- 3、值的位置不允许颠倒 -- 案例1:查询员工编号100~120之间的员工信息 SELECT * FROM `employees` WHERE `employee_id` BETWEEN 100 AND 120;
IN(...)
-- IN 关键字 -- 1、IN 等同Java的枚举 -- 2、提高SQL简洁和性能,语义化SQL -- 3、IN列表的值类型必须一致,或者兼容 -- 4、IN的列表内容,不支持通配符【谁TM会往这里面写通配符啊!?】 -- 案例:查询员工的工种是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号 SELECT `last_name`,`job_id` FROM `employees` WHERE `job_id` IN(‘IT_PROG‘,‘AD_VP‘,‘AD_PRES‘); -- 非IN的WHERE条件 job_id = ‘IT_PROG‘ or job_id = ‘AD_VP‘ or job_id = ‘AD_PRES‘;
空值判断与安全判断
-- ISNULL -- = or <> 不能判断Null值 -- is null 或者 is not null 只用于判断null值 -- 案例:查询没有奖金的员工名和奖金串 -- 有奖金 IS NOT NULL -- 没奖金 IS NULL -- 那怎么没有0的情况? SELECT `last_name`,`commission_pct` FROM `employees` WHERE `commission_pct` IS NOT NULL; # 什么是安全等于? <=> SELECT `last_name`,`commission_pct` FROM `employees` WHERE `commission_pct` <=> NULL; -- 判断是否为null值? -- 查询奖金为12000的信息 SELECT `last_name`,`salary` FROM `employees` WHERE `salary` <=> 12000; -- IS NULL 仅判断NULL值 -- <=> 既可以判断NULL值,也可以判断普通的数值 -- 但是可读性很差,不建议使用