【DataBase】MySQL 06 条件查询 & 排序查询
视频参考自: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 条件查询 & 排序查询的更多相关文章
- mysql 多个属性排序查询
查询 排序(order by) 语法:order by 字段 asc/desc asc 顺序,正序.数值 :递增,字母:自然顺序(a-z) desc 倒序 反序 数值:递减, 字母:自然反序 查询的宗 ...
- 数据库MySQL--条件查询/排序查询
一.条件查询 条件查询:满足条件的字段被筛选出来 语法:select 查询列表字段 from 表名 where 筛选条件: 条件查询的条件分类: 1.按条件表达式筛选:条件运算符:>, < ...
- mysql 06章_分组查询和链接查询
一.分组查询 在进行查询时,通常需要按某个或某些字段进行一些统计,因此就需要使用分组查询,但分组后通常需要与聚合函数使用,分组才有意义. 语法:SELECT <字段列表|*> FROM 表 ...
- mysql5.5根据条件进行排序查询 TP5
用到了 order by if 和 count 使用的是TP5.0 $sql = Db::name('teacher') ->alias('t') ->join('user u', 'u. ...
- mysql根据汉字拼音排序查询
例如现在有一张数据表label,字段为id.name,此表的字符集设置为gb2312,以gb2312_chinese_ci整理. 设置InnoDB引擎的字符集也为简体中文,且整理为gb2312_chi ...
- mysq带条件的分页查询数据结果错误
记一次mysql分页条件查询的结果出错: 以一张用户表为例,首先我们看表中的所有数据,注意红色框住的部分: 我们使用不带条件的分页查询来查询,数据显示是OK的: SELECT id,login_nam ...
- Hibernate_day04--课程安排_Hibernate查询方式_对象导航查询_OID查询
Hibernate_day04 上节内容 今天内容 Hibernate查询方式 对象导航查询 OID查询 HQL查询 查询所有 条件查询 排序查询 分页查询 投影查询 聚集函数使用 QBC查询 查询所 ...
- (四)MySQL条件查询(通配符、模糊查询)、排序查询、分组查询(单行、分组函数)
一.条件查询 1.含义:前面学的基础查询可以查询一个或多个字段,如果需要的数据仅仅是其中的某一行或多行就用到了条件查询. 2.语法:(序号表示语句执行顺序) SELECT 字段名 ③ FROM 表名 ...
- MySQL数据库6 -查询基础,简单查询,条件查询,对查询结果排序
一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...
- MySQL数据库—查询基础,简单查询,条件查询,对查询结果排序
一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...
随机推荐
- CF题解合集
CF 比赛题解合集 目录 CF 比赛题解合集 1952 A. Ntarsis' Set B. Imbalanced Arrays C. Ina of the Mountain D. Miriany a ...
- ABC353
不知道为啥有断更了一周... E woc,怎么跟我出的题目这么像 先把字符串扔到一个 Trie 里面,然后对于每一个点我们考虑这一个点到根节点组成的字符串能是多少对字符串的最长公共前缀. 我们定义 \ ...
- 笔记本重装系统后重装OFFICE(预装的,赠送的)
笔记本重装系统后重装OFFICE(预装的,赠送的) 1.首先用edge打开bing搜索微软账号,谷歌浏览器也行就是登录微软账号多了一步 2.进去后点击服务和订阅那一栏,然后可以看到自己已购买的产品.再 ...
- jquery中$.get()提交和$.post()提交有区别吗?
相同点: 都是异步请求的方式来获取服务端的数据: 异同点: a.请求方式不同:$.get() 方法使用GET方法来进行异步请求的.$.post() 方法使用POST方法来进行异步请求的. b.参数传递 ...
- Spring扩展——BeanPostProcessor(BPP)
BeanPostProcess简介 在Spring中 BeanPostProcessor 是一个非常重要的接口,它用于在每个bean对象初始化前后修改Bean的属性信息,比如我们最常用的@Autowi ...
- 网络诊断工具iPerf的使用
iPerf 是一个网络性能测试工具,用于测量最大 TCP 和 UDP 带宽性能.它支持多种平台,包括 Windows.Linux.macOS 等.以下是 iPerf 的基本使用方法: 安装 iPerf ...
- STP选举规则
STP Election Process 802.1D STP 802.1D是第一个生成树版本,不支持VLAN.选举过程如下 选择一个根桥 选择根端口 选择指定端口 选择关闭端口(剩下的最后一个端 ...
- mysql8.0.22在centos7.6下的简单安装
如果想把mysql安装得好一些,则严重推荐使用压缩包来安装,不推荐使用rpm方式. 一般情况下,现在大部分的服务器都是x86-64,少数是arm架构的. 选择合适的版本,下载即可. 本文中,使用的是 ...
- Kafka Stream 以及其他流处理框架对比
1. Kafka Stream Introduction 假设我们需要对kafka 消息做流数据分析,例如: 对部分消息做过滤 每分钟计算一次收到了多少消息 这种情况下,对于消息过滤以及定时统计,甚至 ...
- 【资料分享】全志科技T507工业核心板硬件说明书(下)
目 录 3 电气特性 3.1 工作环境 3.2 功耗测试 3.3 热成像图 4 机械尺寸 5 底板设计注意事项 5.1 最小系统设计 5.1.1 电源设计说明 5.1.2 系统启动配置 5.1. ...