Mysql进阶二:条件查询

进阶二:条件查询

I 语法:

SELECT 
	查询列表   #第三步执行
FROM
	表名       #第一步执行
WHERE
	筛选条件;  #第二步执行

II 分类:

一、按照条件表达式筛选

条件表达式:
> 
< 
=  
!=  
<=  
>=

二、按照逻辑表达式筛选

逻辑运算符:
&&
|| 
!
and 
or 
not

三、模糊查询

like 
between and 
in
is null

USE myemployees;

一、按照条件表达式筛选

案例一:查询工资》12000的员工信息
SELECT
	*
FROM
	employees
WHERE
	salary>12000;
案例二:查询部门编号不等于90号的员工名和部门编号
SELECT
	last_name,
	department_id
FROM
	employees
WHERE
	department_id<>90;

二、按照逻辑表达式查询

案例一:查询工资z在10000到20000之间的员工名称、工资以及奖金
SELECT
	last_name,
	salary,
	commission_pct
FROM
	employees
WHERE
	salary >=10000 AND salary <= 20000;
案例二:查询部门编号不是在90到110之间的,或者工资高于15000的员工信息
SELECT
	*
FROM
	employees
WHERE
	#department_id <90 or department_id >110 or salary>15000; #第一种表达
	NOT(department_id >90 AND department_id <1110 ) OR salary >15000; #第二种表达

三、模糊查询

LIKE
BETWEEN AND
IN
IS NULL 
IS NOT NULL
/*
like一般和通配符一起使用;
	通配符:
	% 任意多个字符,包含0个字符
	_ 任意单个字符
*/	

1.like

案例一:查询员工姓名中包含字符a的员工信息
SELECT
	*
FROM
	employees
WHERE
	last_name LIKE '%a%';
案例二:查询员工名中第三个字符为n,且第五个字符为l的员工名和工资
SELECT
	last_name,
	salary
FROM
	employees
WHERE
	last_name LIKE '__n_l%';
	
案例三:查询员工名中地位个字符为_的员工名
SELECT 
	last_name
FROM
	employees
WHERE
	last_name LIKE '_$_%' ESCAPE '$';  #定义转义字符

2. between and

/*
1.提高语句简洁度
2.包含临界值
3.两个临界值不可以颠倒
*/

案例一:查询员工编号在100-120之间的员工信息
常规表达
SELECT
	*
FROM
	employees
WHERE
	employee_id >=100 AND employee_id <=120;
between and 的等价表达
SELECT
	*
FROM
	employees
WHERE
	employee_id BETWEEN 100 AND 120;  #包含临界值 【 】 

3.in

/*
含义:使用in判断字段的值是否属于in列表的某一项
1.使用in语句提高语句简洁度
2.in列表的值类型必须统一或兼容
*/

案例:查询员工的公众编号是 IT_PROG、AD_PRES中的一个员工名和工种编号
常规表达
SELECT
	last_name,
	joB_id
FROM
	employees
WHERE
	job_id = 'IT_PROG' OR job_id='AD_VP' OR job_id= 'AD_PRES';
使用in表达
SELECT
	last_name,
	job_id
FROM
	employees
WHERE
	job_id IN('IT_PROG','AD_VP','AD_PRES');

4. is null

SELECT
	last_name,
	commission_pct
FROM
	employees
WHERE
	commission_pct IS NULL
	
安全等于 <=>
案例1:查询没有奖金的员工名和奖金率
SELECT
	last_name,
	commission_pct
FROM
	employees
WHERE
	commission_pct <=> NULL;
案例2:查询工资为12000的员工信息
SELECT
	*
FROM
	employees
WHERE
	salary <=> 12000;
	
is null 与 <=>
IS NULL 仅仅可以判断NULL值,可读性较高,建议使用
<=> 既可以判断NULL值,又可以判断普通的数值,但是可读性较差

四. 经典面试题

试问

SELECT * FROM employees;

SELECT * FROM employees WHERE commission_pct LIKE '%%' AND last_name LIKE '%%';

结果是否一样,说明理由。

答:

不一样。如果判断的字段有NULL值,就不一样。
如果将AND换成OR,则结果是一样的。
发布了113 篇原创文章 · 获赞 58 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/QQQZSJ/article/details/104093025