DQL 2_条件查询

2_条件查询

语法: select 查询列表 from 表名 where 筛选条件;
分类: 一、按 条件表达式筛选 条件运算符:> < = != <>(不等于)>= <=
二、 逻辑表达式筛选 逻辑运算符: && || ! and or not
and 两个条件都为 true 结果才为 true,反之 false
or 只要有一个条件为true 结果都为true 反之false
not 如果连接的条件本身为false,那么结果为 true,反之false
三、 模糊查询
like
between and
in
is null

1.按条件表达式筛选

案例1:查询工资>12000的员工信息

SELECT * FROM employees WHERE salary>12000;

案例2:查询部门编号不等于90号的员工名和部门编号

SELECT FIRST_NAME,DEPARTMENT_ID FROM employees WHERE DEPARTMENT_ID <> 90;# != 90

2.按逻辑表达式筛选

案例1:查询工资在10000到20000之间的员工名,工资和奖金

SELECT first_name,salary,commission_pct FROM employees WHERE salary>=10000 AND salary <=20000

案例2:查询部门编号不是90至110之间,或者工资高于15000的员工信息

SELECT * FROM EMPLOYEES WHERE NOT(DEPARTMENT_ID >=90 AND department_id<=110)OR salary>15000

3.模糊查询

/*
like
between and
in
is null | is not null
*/

1.like

/*
特点:1.一般和通配符搭配使用
通配符:
% 任意多个字符
_ 任意单个字符
*/

案例1:查询 员工名中 包含 字符a 的员工信息
SELECT * FROM employees WHERE first_name LIKE '%a%'; #ABC
案例2:查询员工名中第三个字符为n,第五个字符为l的员工名和工资
SELECT LAST_NAME,SALARY	FROM EMPLOYEES WHERE LAST_NAME LIKE '__n_l%';# 不要忘记 LAST_NAME 在哪个范围中查找
案例3:查询员工名中第二个字符为 ‘_’的员工名
SELECT LAST_NAME FROM EMPLOYEES	WHERE LAST_NAME LIKE '_\_%'  # \ 表示转义 
SELECT LAST_NAME FROM EMPLOYEES	WHERE LAST_NAME LIKE '_$_%' ESCAPE '$'  # ESCAPE '$' 表示转义  意思是 转义 $ 后跟的字符 

2.between and

/*
包含临界值
语句简洁
and 两个条件 前后不能 颠倒
*/

案例1:查询员工编号在100到120之间的员工信息
SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID BETWEEN 100 AND 120

3. in 等同于 =

/*
含义:判断 某字段的值 是否 属于 in列表中的 某一项
特点:
1. 简洁
2. in列表的 值类型 必须一致或兼容
3. in列表里不支持 _ % 等通配符
*/

案例1: 查询员工 工种编号是 IT_PROT,AD-VP,AD_PRES,中的一个的员工名和工种编号
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 或 is not null 可以判断null值
*/

案例1:查询没有奖金的员工名和奖金率
SELECT LAST_NAME,commission_pct FROM EMPLOYEES WHERE commission_pct IS NULL;
案例2:查询有奖金的员工名和奖金率
SELECT LAST_NAME,commission_pct FROM EMPLOYEES WHERE commission_pct IS NOT NULL;

4. <=> 安全等于

案例1:查询没有奖金的员工名和奖金率
SELECT LAST_NAME,commission_pct FROM EMPLOYEES WHERE commission_pct <=> NULL;
#### 案例2:查询工资为12000的员工信息
SELECT salary,LAST_NAME FROM EMPLOYEES WHERE SALARY <=>12000;
IS NULL PK <=>

/*
IS NULL ;仅可以判断 null值 可读性高 ,建议使用
<=>:既可以判断null值 也可以判断普通值 ,但可读性较低
*/

5. 练习

1.查询员工号为176的员工姓名和部门号和 年薪

SELECT CONCAT(LAST_NAME,FIRST_NAME)AS 姓名,manager_id AS 部门号,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM EMPLOYEES 
WHERE EMPLOYEE_ID = 176;

2.查询没有奖金,且工资小于18000的salary,lastname

SELECT salary,last_name FROM employees WHERE (commission_pct IS NULL) AND salary < 18000;

3. 查询employees表中 job_ID 不为 ‘IT’ 或者 工资为12000的 员工信息

SELECT * FROM employees WHERE JOB_ID <>'IT' OR salary=12000;

4.查询部门departments表中涉及了哪些位置编号

SELECT DISTINCT LOCATION_ID FROM departments;

5.SELECT *FROM EMPLOYEES 和 SELECT *FROM EMPLOYEES WHERE COMISSION_PCT LIKE ‘%%’ AND LAST_NAME LIKE ‘%%’,结果是否一样?
答 不一样
如果COMISSION_PCT字段的值 有null,则查询结果(行)返回 null值

6.选择工资不在 5000 到 12000 的员工的姓名和工资

SELECT LAST_NAME,salary FROM employees WHERE NOT(salary BETWEEN 5000 AND 12000);

7.选择在 20 或 50 号部门工作的员工姓名和部门号

SELECT LAST_NAME,DEPARTMENT_ID FROM EMPLOYEES WHERE DEPARTMENT_ID IN(20,50);

8.选择公司中没有管理者的员工姓名及 job_id

SELECT LAST_NAME,JOB_ID FROM EMPLOYEES WHERE manager_id IS NULL;

9.选择公司中有奖金的员工姓名,工资和奖金级别

SELECT LAST_NAME,salary,commission_pct FROM EMPLOYEES WHERE commission_pct IS NOT NULL;

10.选择员工姓名的第三个字母是 a 的员工姓名

SELECT LAST_NAME FROM EMPLOYEES WHERE LAST_NAME  LIKE '__a%';

11.选择姓名中有字母 a 和 e 的员工姓名

SELECT LAST_NAME FROM EMPLOYEES WHERE LAST_NAME LIKE '%a%' AND LAST_NAME LIKE '%e%';

12.显示出表 employees 表中 first_name 以 'e’结尾的员工信息

SELECT *FROM EMPLOYEES WHERE first_name LIKE '%e';

13.显示出表 employees 部门编号在 80-100 之间 的姓名、职位

SELECT LAST_NAME,JOB_ID,department_ID FROM EMPLOYEES WHERE department_ID BETWEEN 80 AND 100;

14.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、职位

SELECT LAST_NAME,JOB_ID,manager_id FROM employees WHERE manager_id IN(100,101,110);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值