【DataBase】MySQL数据库 06 条件查询

条件查询概述

# 进阶2 条件查询
-- 语法:SELECT 查询列表 FROM 表名 WHERE 筛选条件;
-- WHERE 关键字:当...筛选条件成立时,返回条件结果

-- 分类1:按条件表达式筛选,条件运算符:大于>、小于<、等于=、不等于<>(!=)、大于等于>=、小于等于<=
-- 分类2:按逻辑表达式筛选,逻辑运算符:且&&、或||、非!、MySQL推荐关键字[AND OR NOT]来表达
-- 分类3:模糊查询:LIKE,BETWEEN AND,IN,IS NULL

 

条件表达式

# 按条件表达式筛选

-- 案例1:查询工资大于12000的员工信息【如果单纯的说信息,那可以默认视为表的所有数据】
SELECT * FROM `employees` WHERE `salary` > 12000;

-- 案例2:查询部门编号不等于90的【员工名】和【部门编号】
SELECT 
  `first_name`,`last_name`,`department_id` 
FROM 
  `employees` 
WHERE 
  `department_id` <> 90;

 

逻辑表达式

# 按逻辑表达式筛选  

-- 案例1:查询工资在10000~20000之间的员工名,工资&奖金
SELECT    
  `first_name`,`last_name`,`salary`,`commission_pct`
FROM
  `employees`
WHERE
  10000 <= `salary` AND `salary` <= 20000;  

-- 案例2:查询部门编号不是在90~110之间,或者工资高于15000的员工信息
SELECT 
  *
FROM
  `employees`
WHERE
  NOT(90 <= `department_id` AND `department_id` <= 110) OR (`salary` > 15000);
  -- `department_id` < 90 OR `department_id` > 110 OR `salary` > 15000;

 

模糊条件查询

# 按模糊条件查询
-- LIKE        和通配符一起使用
-- BETWEEN ... AND ...
-- IN
-- IS NULL | IS NOT NULL
-- 通配符: %任意无或单或多字符 _任意1个字符


-- LIKE 像...
-- 案例1:查询员工名中包含字符a的员工信息
SELECT * 
FROM `employees` 
WHERE `last_name` LIKE %a%; --  %通配符,表示无字符或者任意字符

-- 案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
SELECT `last_name`,`salary`
FROM `employees`
WHERE `last_name` LIKE __n_l%; -- ‘__e_a%‘ [无结果]

 

转义处理

-- 案例3:查询员工名中第二个字符为下划线的员工名[\转义处理]
SELECT `last_name`
from `employees`
WHERE `last_name` LIKE _\_%;

-- 或者我们自定义转义符 ESCAPE关键字
SELECT `last_name`
FROM `employees`
WHERE `last_name` LIKE _@_% ESCAPE @;
--  LIKE ‘_a_%‘ ESCAPE ‘a‘;
--  LIKE ‘_$_%‘ ESCAPE ‘$‘; 都可以

 

BETWEEN ... AND ...

-- BETWEEN .. AND .. 在...和...之间 
-- 1、简化SQL,语义化SQL
-- 2、这个取值包含值本身
-- 3、值的位置不允许颠倒

-- 案例1:查询员工编号100~120之间的员工信息
SELECT * FROM `employees` WHERE `employee_id` BETWEEN 100 AND 120;

 

IN(...)

-- IN 关键字
-- 1、IN 等同Java的枚举
-- 2、提高SQL简洁和性能,语义化SQL
-- 3、IN列表的值类型必须一致,或者兼容
-- 4、IN的列表内容,不支持通配符【谁TM会往这里面写通配符啊!?】

-- 案例:查询员工的工种是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT `last_name`,`job_id`
FROM `employees` 
WHERE `job_id` IN(IT_PROG,AD_VP,AD_PRES);
-- 非IN的WHERE条件  job_id = ‘IT_PROG‘ or job_id = ‘AD_VP‘ or job_id = ‘AD_PRES‘;

 

空值判断与安全判断

-- ISNULL
-- = or <> 不能判断Null值
-- is null 或者 is not null 只用于判断null值
 
-- 案例:查询没有奖金的员工名和奖金串

-- 有奖金 IS NOT NULL
-- 没奖金 IS NULL
-- 那怎么没有0的情况?

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

# 什么是安全等于? <=>
SELECT `last_name`,`commission_pct`
FROM `employees`
WHERE `commission_pct` <=> NULL; -- 判断是否为null值?

-- 查询奖金为12000的信息
SELECT `last_name`,`salary`
FROM `employees`
WHERE `salary` <=> 12000;

-- IS NULL 仅判断NULL值
-- <=> 既可以判断NULL值,也可以判断普通的数值
-- 但是可读性很差,不建议使用

 

【DataBase】MySQL数据库 06 条件查询

上一篇:MYSQL常用命令


下一篇:修改mysql密码