#条件查询
/*
条件查询:根据条件过滤原始表的数据,查询到想要的数据
语法:
select
要查询的字段|表达式|常量值|函数
from
表
where
条件 ;
分类:
一、条件表达式
案例:salary>10000
条件运算符:
> < >= <= = != <> <=>
二、逻辑表达式
案例:salary>10000 && salary<20000
逻辑运算符:
and(&&):两个条件如果同时成立,结果为true,否则为false
or(||):两个条件只要有一个成立,结果为true,否则为false
not(!):如果条件成立,则not后为false,否则为true
优先级:not>and>or
!>&&>||
三、模糊查询
案例:last_name like 'a%'
*/
#一、按条件表达式查询
#案例1:查询部门编号是30的员工信息
SELECT *
FROM employees
WHERE department_id = 30;
#案例2:查询部门编号不是30的员工信息
SELECT *
FROM employees
WHERE department_id <> 30;
#案例3:查询工资<=20000的员工姓名和工资
SELECT
last_name,salary
FROM
employees
WHERE
salary<=20000;
#二、按逻辑表达式查询
#案例1:查询 工资10000和20000之间的员工信息
SELECT
*
FROM
employees
WHERE
salary >=10000 AND salary<=20000;
#案例2:查询job_id=AD_VP或 department_id>80的员工信息
SELECT
*
FROM
employees
WHERE
job_id='AD_VP' OR department_id > 80;
#案例3:查询部门编号不是在80-100之间的员工信息
SELECT
*
FROM
employees
WHERE
NOT(department_id>=80 AND department_id<=100);
#案例4:查询工资>10000或者 department_id在30-80之间的员工信息
SELECT
*
FROM
employees
WHERE
salary>10000
OR
department_id>=30
AND
department_id<=80;
#三、模糊查询
/*
1.like
特点: 与通配符搭配判断 字符型的数据
通配符:
% 任意多个字符,包含0个
_ 任意单个字符
2.between and
3.in
4.is null
*/
#1.like
#案例1:查询姓名中包含字符e的员工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE '%e%';
#案例2:查询姓名中第三个字符为a的员工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE '__a%';
#案例3:查询姓名中第二个字符为_的员工信息
/*
update employees set last_name='a_xx' where employee_id=102;
*/
SELECT * FROM employees WHERE last_name LIKE '_\_%';
SELECT
*
FROM
employees
WHERE
last_name LIKE '_a_%' ESCAPE 'a';
#2.between and
/*
在...之间
① 等价于 使用逻辑运算符and的使用,但简化了代码,提高了阅读性
②包含两个临界值
③较小值方前面,较大值放后面
*/
#案例:选择工资在5000到12000的员工的姓名和工资
SELECT
last_name,salary
FROM
employees
WHERE
salary BETWEEN 12000 AND 5000;
等价于
SELECT
last_name,salary
FROM
employees
WHERE
salary >= 12000 AND salary<=5000;
#3.in关键字
/*
在...里面
特点:
① 等价于 使用逻辑运算符or连接条件,好处 提高代码的简洁度和可读性
②列表值的类型必须是同一的类型
③不支持通配符
*/
#案例1:查询部门编号位30、50、90的员工信息
SELECT
*
FROM
employees
WHERE
department_id IN(30,50,90);
等价于
SELECT
*
FROM
employees
WHERE
department_id =30 OR department_id = 50 OR department_id=90;
#案例2:查询 job_id是ST_MAN或ST_CLERK或FI_ACCOUNT的员工信息
SELECT
*
FROM
employees
WHERE
job_id IN ('ST%','FI_ACCOUNT'); #×
#4.is null | is not null
/*
判断是否为空,用=或<>无法判断
补充:
<=> 安全等于,既可以判断是否为null,也可以判断普通类型的数据是否相等,但可读性较差
*/
#案例1:查询 没有奖金的员工
SELECT
*
FROM
employees
WHERE
commission_pct IS NULL;