视频参考自:P28 - P42

https://www.bilibili.com/video/BV1xW411u7ax

条件查询概述

# 进阶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值,也可以判断普通的数值
-- 但是可读性很差,不建议使用

练习案例:

-- 1. 查询工资大于 12000 的员工姓名和工资
SELECT `first_name`,`last_name` ,`salary`
FROM `employees`
WHERE `salary` > 12000; -- 2. 查询员工号为 176 的员工的姓名和部门号和年薪
SELECT `first_name`,`last_name`,`department_id`,`salary` * 12
FROM`employees`
WHERE `employee_id` = 176; -- 3. 选择工资不在 5000 到 12000 的员工的姓名和工资
SELECT `first_name`,`last_name`,`salary`
FROM `employees`
WHERE `salary` < 5000 OR `salary` > 12000; -- 4. 选择在 20 或 50 号部门工作的员工姓名和部门号
SELECT `first_name`,`last_name`,`department_id`
FROM `employees`
WHERE `department_id` IN (20,50); -- 5. 选择公司中没有管理者的员工姓名及 job_id
SELECT `first_name`,`last_name`,`job_id`
FROM `employees`
WHERE `manager_id` IS NULL; -- 6. 选择公司中有奖金的员工姓名,工资和奖金级别
SELECT `first_name`,`last_name`,`salary`,`commission_pct`
FROM `employees`
WHERE `commission_pct` IS NOT NULL; -- 7. 选择员工姓名的第三个字母是 a 的员工姓名
SELECT `first_name`,`last_name`
FROM `employees`
WHERE `last_name` LIKE '__a%'; -- 8. 选择姓名中有字母 a 和 e 的员工姓名
SELECT `first_name`,`last_name`
FROM `employees`
WHERE `last_name` LIKE '%a%' OR `last_name` LIKE '%e%'; -- 9. 显示出表 employees 表中 first_name 以 'e'结尾的员工信息
SELECT *
FROM `employees`
WHERE `first_name` LIKE "%e"; -- 10. 显示出表 employees 部门编号在 80-100 之间 的姓名、职位
SELECT `last_name`,`job_id`
FROM `employees`
WHERE `department_id` BETWEEN 80 AND 100; -- 11. 显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、职位
SELECT `last_name`,`job_id`
FROM `employees`
WHERE `manager_id` IN(100,101,110);

排序查询

-- 排序查询
/*
SELECT 查询列表
FROM 表名
[WHERE 筛选条件]
ORDER BY 排序列表 1、ORDER BY 子句 支持单个字段,多个字段,表达式,函数,别名
2、ASC 默认升序排序,DESC 默认降序排序
3、ORDER BY 子句总是放在SQL语句的最后面[LIMIT 是例外]
4、执行顺序就按照默认SQL填写的字段先后来执行
*/
SELECT * FROM `employees` ORDER BY `first_name`; -- 案例:查询员工信息,要求工资从高到底排序[顺序是低到高,逆序高到低]
SELECT * FROM `employees` ORDER BY `salary` DESC;
SELECT * FROM `employees` ORDER BY `salary` aSC; -- [默认不写就是ASC] -- 案例:查询员工编号大于等于90的员工信息,按入职时间的先后顺序排序
SELECT *
FROM `employees`
where `employee_id` >= 90 ORDER BY `hiredate`; -- 案例:按年薪的高低显示员工信息和年薪【表达式排序】 [升序降序不限]
SELECT *,`salary` * 12 *(1 + IFNULL(`commission_pct`,0)) AS YS
from `employees`
ORDER BY `salary` * 12 *(1 + IFNULL(`commission_pct`,0)) DESC; -- [asc or desc] -- 案例:按年薪的高低显示员工信息和年薪【别名排序】 [升序降序不限]
SELECT *,`salary` * 12 *(1 + IFNULL(`commission_pct`,0)) AS YS
from `employees`
ORDER BY YS DESC; -- 案例:按姓名的长度[LENGTH()]显示员工姓名和工资 [升序降序不限]
select LENGTH(`last_name`) AS `name_length`,`last_name`,`salary`
from `employees`
order by `name length`; -- 案例:查询员工信息,要求先按工资排序,再按员工编号排序[升序降序不限]
SELECT *
FROM `employees`
ORDER BY `salary` desc,`employee_id` asc; -- 多个字段排序可以允许独立的升序降序 -- 练习案例:
-- 查询员工的姓名和部门号和年薪,按年薪降序、按姓名升序
SELECT `last_name`,`department_id`,`salary` * 12 as ys
from `employees`
order by ys DESC,`last_name` asc; -- 选择工资不再8000到17000的员工的姓名和工资,按工资降序
SELECT `last_name`,`salary`
from `employees`
where `salary` not between 8000 and 17000
order by `salary` desc; -- 查询邮箱中包含e的员工信息,按邮箱的字节降序,再按部门号升序
SELECT *,LENGTH(`email`) AS elength
FROM `employees`
WHERE `email` LIKE '%e%'
order by length(`email`) desc,`department_id` asc;

【DataBase】MySQL 06 条件查询 & 排序查询的更多相关文章

  1. mysql 多个属性排序查询

    查询 排序(order by) 语法:order by 字段 asc/desc asc 顺序,正序.数值 :递增,字母:自然顺序(a-z) desc 倒序 反序 数值:递减, 字母:自然反序 查询的宗 ...

  2. 数据库MySQL--条件查询/排序查询

    一.条件查询 条件查询:满足条件的字段被筛选出来 语法:select 查询列表字段 from 表名 where 筛选条件: 条件查询的条件分类: 1.按条件表达式筛选:条件运算符:>, < ...

  3. mysql 06章_分组查询和链接查询

    一.分组查询 在进行查询时,通常需要按某个或某些字段进行一些统计,因此就需要使用分组查询,但分组后通常需要与聚合函数使用,分组才有意义. 语法:SELECT <字段列表|*> FROM 表 ...

  4. mysql5.5根据条件进行排序查询 TP5

    用到了 order by if 和 count 使用的是TP5.0 $sql = Db::name('teacher') ->alias('t') ->join('user u', 'u. ...

  5. mysql根据汉字拼音排序查询

    例如现在有一张数据表label,字段为id.name,此表的字符集设置为gb2312,以gb2312_chinese_ci整理. 设置InnoDB引擎的字符集也为简体中文,且整理为gb2312_chi ...

  6. mysq带条件的分页查询数据结果错误

    记一次mysql分页条件查询的结果出错: 以一张用户表为例,首先我们看表中的所有数据,注意红色框住的部分: 我们使用不带条件的分页查询来查询,数据显示是OK的: SELECT id,login_nam ...

  7. Hibernate_day04--课程安排_Hibernate查询方式_对象导航查询_OID查询

    Hibernate_day04 上节内容 今天内容 Hibernate查询方式 对象导航查询 OID查询 HQL查询 查询所有 条件查询 排序查询 分页查询 投影查询 聚集函数使用 QBC查询 查询所 ...

  8. (四)MySQL条件查询(通配符、模糊查询)、排序查询、分组查询(单行、分组函数)

    一.条件查询 1.含义:前面学的基础查询可以查询一个或多个字段,如果需要的数据仅仅是其中的某一行或多行就用到了条件查询. 2.语法:(序号表示语句执行顺序) SELECT 字段名 ③ FROM 表名 ...

  9. MySQL数据库6 -查询基础,简单查询,条件查询,对查询结果排序

    一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...

  10. MySQL数据库—查询基础,简单查询,条件查询,对查询结果排序

    一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...

随机推荐

  1. tar解压报错——Not found in archive tar: Exiting with failure status due to previous errors

    tar解压报错--Not found in archive [root@master software]# tar -xzf scala-2.11.8.tgz /usr/local/ tar: /us ...

  2. 一款WPF的精简版MVVM框架——stylet框架的初体验(包括MVVM绑定、依赖注入等操作)

    今天偶然知道一款叫做stylet的MVVM框架,挺小巧的,特别是它的命令触发方式,简单粗暴,让人感觉很巴适,现在我做一个简单的demo来顺便来分享给大家. 本地创建一个WPF项目,此处我使用.NET ...

  3. shiro有哪些组件?

    a.Authentication:身份认证/登录,验证用户是不是拥有相应的身份: b.Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限:即判断用户是否能做事情,常见的 ...

  4. 增补博客 第三篇 python 英文统计

    编写程序实现对特定英文文章(文本文件)的单词数和有效行数的统计,其中要求空行不计数: def count_words_and_lines(file_path): word_count = 0 line ...

  5. spring mvc GET请求方式及传参

    spring mvc GET请求方式及传参 @Api(tags = "管理接口") @Slf4j @RestController @RequestMapping("/my ...

  6. Linux 内核:设备树(3)把device_node转换成platfrom_device

    Linux 内核:设备树(3)把device_node转换成platfrom_device 背景 在上一节中讲到设备树dtb文件中的各个节点转换成device_node的过程(<dtb转换成de ...

  7. USB OTG有关协议

    想了解USB OTG的工作原理,需要知道三个协议: ADP:Attach Detection Protocol HNP:Host Negotiation Protocol SRP:Session Re ...

  8. OpenWrt中的LuCi和Lua一些总结

    Lua.LuCi Lua是一种小巧的脚本语言,和Python一样,Lua脚本的运行需要Lua解释器: UCI(Unified Configuration Interface)是OpenWrt实现所有系 ...

  9. Java常见问题-多线程

    现在有 T1.T2.T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行? 这个多线程问题比较简单,可以用 join 方法实现. 在 Java 中 Lock 接口比 ...

  10. VUE商城项目 -权限功能 - 手稿