语法:
#查询所有行
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;