02_MySQL DQL_条件查询

#查询2:条件查询

/*
语法:
select
查询列表
from
表名
where
筛选条件;

执行顺序:找到表,逐行筛选,选出行的相关列呈现

分类:
1)按条件表达式筛选
条件运算符:> < = !=(<>也可以) >= <=

2)按逻辑表达式筛选
逻辑运算符:and or not(&& || !)
作用:连接条件表达式

&& and 两个条件都为true
|| or 两个条件任一为true
! not 取反

3) 模糊查询
like
between and
in
is null | is not null
*/

USE myemployees;

#一、按条件表达式筛选

#案例1:查询工资大于12000的员工信息
SELECT * FROM employees WHERE salary > 12000;

#案例2:查询部门编号不等于90的员工号和部门编号
SELECT employee_id,department_id FROM employees WHERE department_id != 90;
SELECT employee_id,department_id FROM employees WHERE department_id <>90;

#二、按逻辑表达式筛选

#案例1:查询工资在10000到20000之间的员工信息
SELECT last_name,salary,IFNULL(commission_pct,0) AS commission
FROM employees WHERE salary>=10000 AND salary<=20000;

#案例2:查询部门编号不在90~110之间,或者工资高于15000的员工信息
SELECT last_name,department_id,salary FROM employees
WHERE department_id<90 OR department_id>110 OR salary>15000;

#三、模糊查询
/*
like
一般和通配符配合使用
% 任意多个字符(0,1,无限多个)
_ 任意单个字符(1个)
between and
in
is null | is not null
*/

#like模糊查询
注意:MySQL5.5及以上的版本,也支持数值型的like查询

#案例1:查询员工名中包含字符a的员工信息(MySQL没有字符串的概念,都是字符)
# % 表示任意个数的任意字符
SELECT * FROM employees WHERE last_name LIKE '%a%';

#案例2:查询员工名中第三个字符为n, 第五个字符为l的员工名和工资
SELECT last_name,salary FROM employees WHERE last_name LIKE '__n_l%';

#案例3:查询员工名中第二个字符为_的员工名
#通配符转移为普通字符,\%, \_
SELECT last_name FROM employees WHERE last_name LIKE '_\_%';

#指定任意一个字符为转义字符
#escape '$' 指定$为转义字符
SELECT last_name FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';

#案例:数值型的like查询 (数值->字符->然后判断)
select * from employees where department_id like '1__';

#2、between and模糊查询
/*
提高语句简洁读
包含临界值
临界值不能颠倒顺序(等价于 >=左边,<=右边)
临界值要类型一致,或者能隐式转换
*/

#案例1:查询员工编号在100到200之间的员工信息
#between 100 and 200, 100和200包括在内
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 200;

#3、in 模糊查询
/*
含义:判断某字段的值,是否属于in列表中的某一项
in (v1,v2,v3,...)

特点:
1)比使用or,语句简洁度高
2)in列表的值类型必须统一,或者可以隐式转换
3)in列表的值,不支持通配符(like才能解析通配符)
*/

#案例1:查询工种是 IT_PROG, AD_VP, AD_PRES 其中任意一个的员工名和工种id
SELECT last_name,job_id FROM employees
WHERE
job_id='IT_PROT' OR job_id='AD_VP' OR job_id='AD_PRES';

SELECT last_name,job_id FROM employees
WHERE
job_id IN ('IT_PROT','AD_VP','AD_PRES');


#4、is null
/*
= 不能判断null值
is null 判断是否为null
is not null 判断是否为非null
*/

#案例1:查询没有奖金的员工名和奖金率(替换为0)
SELECT last_name, IFNULL(commission_pct,0) AS commission
FROM employees
WHERE commission_pct IS NULL;


#案例2:查询有奖金的员工名和奖金率
SELECT last_name, IFNULL(commission_pct,0) AS commission
FROM employees
WHERE commission_pct IS NOT NULL;

#5、安全等于 <=>
/*
<=> null, 可以判断是否为null值
<=> 普通值
*/
SELECT last_name,commission_pct FROM employees WHERE commission_pct <=> NULL;

SELECT last_name,salary FROM employees WHERE salary <=> 12000;

原文地址:https://www.cnblogs.com/shay-zhangjin/p/7897163.html