条件查询概述
# 进阶 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 '[email protected]_%' 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 值, 也可以判断普通的数值
-- 但是可读性很差, 不建议使用
来源: http://www.bubuko.com/infodetail-3523720.html