5 条件查询

条件查询

基本语法:

SELECT 查询列表 FROM 表名 WHERE 筛选条件;

执行顺序:

  • FROM 表名; 看看有没有这个表
  • WHERE 筛选条件; 看看表中哪个部分满足条件
  • SELECT 查询列表; 选择想要查询的信息

筛选条件分类:

  • 按条件表达式筛选

    条件运算符:
    >     大于
    <     小于
    =     等于
    !=    不等
    <>    不等
    >=    大于等于
    <=    小于等于
    
  • 按逻辑表达式筛选

    逻辑运算符:
    AND   与
    OR    或
    NOT   非
    
  • 模糊查询

    LIKE
    BETWEEN ... AND...
    IN
    IS NULL
    IS NOT NULL
    

按条件表达式筛选

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

SELECT * FROM employees WHERE salary > 12000;

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

SELECT last_name, department_id FROM employees WHERE department_id <> 90;

按逻辑表达式筛选

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

SELECT last_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;

模糊查询

LIKE
BETWEEN ... AND ...
IN
IS NULL
IS NOT NULL

LIKE 关键字

一般和通配符搭配使用:

%  任意多个字符,包含0个字符
_    任意单个字符

案例1:查询员工名中包含字符 a 的员工信息

SELECT * FROM employees WHERE last_name LIKE '%a%';

案例2:查询员工名中第三个字符为 e ,第五个字符为 a 的信息

SELECT * FROM employees WHERE last_name LIKE '__e_a'

案例3:查询员工名中第二个字符为_的员工名

SELECT * FROM employees WHERE last_name LIKE '_\_%'
# 或者
SELECT * FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';
# 这里的 ESCAPE 显示地说明哪个是转义字符

BEETWEEN AND 关键字

使用 BEETWEEN AND 提高代码的简洁度
包含两个临界值
两个临界值的顺序不要调换

案例一:查询员工编号在 100 到 120 之间的员工信息

SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;

IN关键字

使用 IN 比使用 OR 提高了语句的简洁度
IN列表的值类型必须一致或兼容
不支持模糊查询,因为 IN 是用等于来判断的。

案例一:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES 的其中一个的员工名和工种

SELECT last_name, job_id FROM employees WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES');

IS NULL & IS NOT NULL

= 号或者 <> 号不能判断 null 值,所以需要 IS NULL 和 IS NOT NULL

案例一:查询没有奖金的员工名和奖金率

SELECT last_name, commission_pct FROM employees WHERE commission_pct IS NULL;

案例二:查询有奖金的员工的员工名和奖金率

SELECT last_name, commission_pct FROM employees WHERE commission_pct IS NOT NULL;

补充

  • 安全等于,可以判断 NULL 值,也可以判断普通值。
    SELECT last_name, commission_pct FROM employees WHERE commission_pct <=> NULL;
    SELECT last_name, commission_pct FROM employees WHERE commission_pct <=> 0.2;
    
    但是判断 NULL 值的时候还是用 IS NULL 或 IS NOT NULL 关键字吧,可读性高

测试题

一:查询没有奖金且工资小于 180000 的 salary,last_name

SELECT last_name, salary FROM employees WHERE commission_pct IS NULL AND salary < 180000; 

二、查询 employees 表中 job_id 不为 ‘IT’ 或者工资为 120000 的员工信息

SELECT * FROM employees WHERE job_id <> 'IT' OR salary = 120000;

三、查看 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值!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值