语法:

#查询所有行
select 查询列表 from 表名;

select 查询列表 from 表名 where 筛选条件;
#每一行判断筛选条件
#当where后面的条件成立,则可以显示
#如果不成立,则不能显示

分类:

一、按条件表达式筛选
	条件运算符:> < = != <> >= <=
二、按逻辑表达式筛选
	逻辑运算符:得true/false
		&& and
		|| or
		!  not
		建议使用and or not
三、模糊查询
		like
		between and
		in
		is null

一、按条件表达式筛选

#例:查询工资>12000的员工信息
SELECT * FROM employees WHERE salary>12000;
#例:查询部门编号不等于90号的员工名和部门编号
SELECT 
	CONCAT(last_name,first_name),department_id
FROM
	employees
WHERE
	department_id<>90;

二、按条件表达式筛选

#例:查询工资在10000到20000之间的员工名、工资以及奖金
SELECT 
	employee_id,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 or department_id<=110) or salary>=15000;

三、模糊查询

/*
like:
	①一般与通配符一起使用
	通配符:
		% :任意多个字符,包含0个字符
		_ :任意单个字符
between and :
	①包含临界值
	②前后值交换位置之后不等价
in :
	判断某字段的值是否属于in列表中的某一项
	①in列表的值类型必须统一或者兼容
is null | is not null :
	= 和 <> 不能判断null值
	<=> 安全等于 可以判断NULL值,也可以判断普通类型的值

*/
1、like-像
#例:查询员工名中包含字符 a 的员工信息
SELECT
	*
FROM
	employees
WHERE 
	last_name LIKE '%a%';
	# %代表任意多个字符
	# last_name like 'a%';
	# last_name like '%a';
	
	# _代表任意单个字符
#例:查询员工名中第三个字符为 s ,第五个字符为 i 的员工名和工资
SELECT 
	last_name,salary
FROM
	employees
WHERE
	last_name LIKE '__s_i%';
#例:查询员工名中第二个字符为 _ 的员工名
SELECT
	last_name
FROM 
	employees
WHERE
	last_name LIKE '_$_%' ESCAPE '$';
	#自定义转义字符,escape转义
	#last_name like '_\_%';
	# \ 转义字符
2、between and-在…之间
#例:查询员工编号在100到120之间的员工信息
SELECT 
	*
FROM 
	employees
WHERE
	employee_id BETWEEN 100 AND 120;
3、in
#例:查询员工的工种编号是IT_PROG,AD_VP,AD_PRES中的一个员工名和工种编号
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;
	#error: commission_pct = NULL;  = 不能判断null值
#例:查询有奖金的员工名和奖金率
SELECT 
	last_name,commission_pct
FROM 
	employees
WHERE
	commission_pct IS NOT NULL;
<=> 安全等于
#例:查询没有奖金的员工名和奖金率
SELECT 
	last_name,commission_pct
FROM 
	employees
WHERE
	commission_pct <=> NULL;
	
#安全等于也可判断普通类型
SELECT 
	last_name,commission_pct,salary
FROM 
	employees
WHERE
	salary <=> 12000;
#例:查询员工号为176的员工的姓名和部门号和年薪

SELECT 
	last_name,
	department_id,
	salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM 
	employees
WHERE
	employee_id = 176;
#例:查询没有奖金且工资小于18000的salary,last_name
SELECT 
	salary,
	last_name
FROM 
	employees
WHERE
	commission_pct IS NULL AND salary<18000;
#例:查询employees表中,job_id不为'IT'或者工资为12000的员工信息
SELECT
	*
FROM 
	employees
WHERE
	job_id<>'IT' OR salary=12000;
#例:查看部门departments表的结构
DESC departments;
#例:查询部门departments表中设计了哪些位置编号
SELECT DISTINCT
	location_id
FROM 
	departments;
#经典面试题
/*select * from employees;
和
select * from employees where commission_pct like '%%' and last_name like '%%';
结果是否是一样的?
*/
#不一样,判断的字段有null值

#commission_pct可以为null
SELECT * FROM employees;

#查询到的commission_pct不可以为null
SELECT * FROM employees WHERE commission_pct LIKE '%%' AND last_name LIKE '%%';

#查询commission_pct
SELECT 
	employee_id,commission_pct
FROM 
	employees
WHERE
	commission_pct IS NOT NULL;