(四)MySQL条件查询(通配符、模糊查询)、排序查询、分组查询(单行、分组函数)
一、条件查询
1、含义:前面学的基础查询可以查询一个或多个字段,如果需要的数据仅仅是其中的某一行或多行就用到了条件查询。
2、语法:(序号表示语句执行顺序)
SELECT 字段名 ③
FROM 表名 ①
WHERE 筛选条件; ②
3、筛选条件
#1条件运算符:
> < = <> >= <=
#2逻辑运算符:
&& || !
#3模糊查询:
like、between and、in、is null
案例一:查询所有员工中工资大于10000的员工名、工资(条件运算符+起别名+点语法)
SELECT last_name,salary
FROM employees e #起别名
WHERE e.`salary`>10000; #点语法访问表中的字段
注意:在from中给表employees起别名后where中再使用employees.salary是错误的
案例二:查询所有员工中工资大于5000并且部门编号大于105的员工信息(逻辑运算符+起别名)
SELECT *
FROM employees e
WHERE e.`salary`>5000 && e.`department_id`>105;
注意:MySQL中支持&&但推荐使用 AND、OR分别代替&&、||
案例三:查询所有员工中姓名第二个字母位'k'且工资在1000到20000之间的员工信息(模糊查询)
SELECT *
FROM employees e
WHERE e.`last_name` LIKE '_k%' AND e.`salary` BETWEEN 1000 AND 20000;
补充:
1、通配符:(使用like的模糊查询中用到)
①'%'在通配符中代表任意长度任意字符,其中任意长度可为0
②'_'在通配符中代表长度为1的任意字符
③如果要查询的字段中包含'%'、'_' 可以使用转义符'\'或自定义转义符,例如:
案例:查询员工姓名中包含'_'的员工信息
//使用'\'作为转义符(默认)
SELECT *
FROM employees e
WHERE e.`last_name` LIKE '%\_%' ;
//自定义转义符,使用escape关键字
SELECT *
FROM employees e
WHERE e.`last_name` LIKE '%$_%' ESCAPE '$';
2、between ... and ... :
①两者之间均可满足(不可等于临界值)
②between numa and numb,numa与numb的位置不可交换即必须满足:numa<=numb
3、模糊查询(in):
语法:
last_name in('a','b','c');
注意:
①括号中多个元素在一起时逗号隔开
②当last_name与括号中至少一个字符串完全一直时才会被筛选出来
4、模糊查询(is null):
语法:
last_name is null;
注意:MySQL中不能直接使用 ' == '来判空,但使用安全等于 ' <=> ' 可判空也可判定其它任意类型的数据
二、排序查询
1、含义:排序查询可将查询出的数据按照特定字段的数值按由小到大或由大到小排序。


2、语法:(执行顺序如序号所示)
SELECT 字段名 ④
FROM 表名 ①
【WHERE 筛选条件】 ②
ORDER BY 排序方式; ③
注意:
①排序方式分为两种ASC(升序)、DESC(降序)
②OREDER BY子句一般在查询语句的最后面,除了limit子句
案例:查询全体员工中薪资大于8000的员工姓名并将薪资按升序排列(排序查询+起别名)
SELECT last_name,salary
FROM employees e
WHERE e.`salary`>8000
ORDER BY e.`salary` ASC;
三、分组查询
1、单行函数:
①字符函数:
SELECT LENGTH('hello world!'); 返回括号中所占总字节数(多数函数返回字符数,仅该函数返回字节数)
SELECT CONCAT('str1','str2','str3'); 将括号中多个字符串拼接成一个长的字符串
SELECT UPPER('str'),LOWER('STR'); 变大、小写
SELECT SUBSTR('str',a,b); 在str中从第a位开始截取长度为b的字符串(第一个字符索引为1)
SELECT REPLACE('str','str1','str2');将str中的str1全部替换为str2
②数学函数
SELECT ROUND(1.345,2); 将1.345保留2位小数的四舍五入
SELECT CEIL(0.9),FLOOR(1.1); 将0.9向上取整,将1.1向下取整
SELECT TRUNCATE(1.55555,2); 保留两位小数
SELECT MOD(10,9); 取余(10%9)
③日期函数
SELECT NOW(); 打印当前时间
SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日'); 将标准日期类型(datetime)的数据转化为字符串(varchar)
SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put; 将字符串(varchar)转化为指定日期类型
④流程控制函数(只举一例if函数)
SELECT IF(3>2,end1,end2); 当3>2成立时,执行end1,否则执行end2
2、分组函数
求和:sum()、均值:avg()、最大值:max()、最小值:min()、求数目:count()、求日期差(天):datediff()
注意:用法在下面的分组查询中会详细讲解
3、分组查询
1、含义:题目中出现’ 每个 ‘的时候一般要使用分组查询,即:将整个表的数据按某个性质分成n组(理解不了就直接看案例)
2、语法:
SELECT 字段名或分组函数
FROM 表名
【WHERE 筛选条件】
GROUP BY 分组依据
ORDER BY 排序方式
案例一:查询每个部门的最低工资(起别名+分组排序)
理解:题中出现每个,要用分组排序,查询每个部门的最低工即:先将所有人按部门编号分成多组,再从每组中选出最低工资
SELECT MIN(salary) 最低工资,department_id 部门编号
FROM employees
GROUP BY department_id;
运行结果:

案例二:查询每个管理者手下员工的最低工资,并且最低工资不能低于6000,没有管理者的员工不计算在内
题目比较复杂分两步做:
①按照manage_id分组,从中选出最低工资
SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id;
②筛选最低工资大于等于6000的数据
SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(salary)>=6000;
注意:既然也是筛选为什么用的时having?
where筛选与having筛选的区别:分组前筛选用where,分组后筛选用having。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
复习整理,如有错误请指出。
(四)MySQL条件查询(通配符、模糊查询)、排序查询、分组查询(单行、分组函数)的更多相关文章
- (5)MySQL的查询:模糊查询(通配符查询like)、限制符查询(limit)、排序查询(order by)、分组查询(group by)、(子查询)
注意事项 指令语法的优先级: where > group by >order by > limit 例:select count(id) as cnt,age from tablen ...
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- 18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询
-- 数据的准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test; -- 显示使用的当前 ...
- 四 mysql之单表查询
目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 1. 什么是分组?为什么要分组? 2. ONLY_FULL_GROUP_BY ...
- MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)
MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not nul ...
- MySQL的ALTER变更、正则查询、分组查询、排序查询以及事务查询的概
MySQL的表和字段信息的变更 ALTER TABLE table-name DROP column-name; #删除某个字段 ALTER TABLE table-name ADD column-n ...
- MySQL使用笔记(七)排序和限制数据记录查询
By francis_hao Dec 17,2016 排序数据记录查询 排序是指将筛选出符合条件的数据进行有序排放,有升序(ASC(默认))方式和降序(DESC)方式. mysql> se ...
- MySQL进阶5--分组函数 / 分组排序和分组查询 group by(having) /order by
MySQL进阶--分组排序和分组查询 group by(having) /order by /* 介绍分组函数 功能:用做统计使用,又称为聚合函数或组函数 1.分类: sum, avg 求和 /平均数 ...
随机推荐
- 使用PHP得到所有的HTTP请求头
作者:老王 在PHP里,想要得到所有的HTTP请求头,可以使用getallheaders方法,不过此方法并不是在任何环境下都存在,比如说,你使用fastcgi方式运行PHP的话,就没有这个方法,所以说 ...
- Windows系统下Git的下载和配置
简介:Git是一款免费.开源的分布式版本控制系统,可记录文件每次改动,便于多人协作编辑. 下载:git-for-windows下载地址https://git-for-windows.github.io ...
- C语言基础知识(二)——二维数组
二维数组本质 二维数组本质就是一维数组,只不过**形式是二维**,类似矩阵,使用二维数组表示会更加形象. 二维数组实例 float rain[5][12]; //内含5个数组元素的数组,每个数组元素内 ...
- .Net基础之1——学前入门
1..Net平台 2.C#编程语言 3..Net都能做什么 Winform桌面应用程序.Internet应用程序——ASP.Net(京东.淘宝.携程网)(主推). WP8手机开发.Unity 3D游戏 ...
- 聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo
最近真的比较忙,很久就想写了,可是一直苦于写点什么,今天脑袋灵光一闪,觉得自己再UDP方面还有些不了解的地方,所以要给自己扫盲. 好了,咱们进入今天的主题,先列一下提纲: 1. UDP是什么,UDP适 ...
- Spring_bean作用域
本篇介绍Spring Bean实例的作用范围,Spring Bean实例的作用范围由配置项scope限定.通过本篇的学习,可以达成如下目标. ● 应用scope配置项配置Bean的作用域 ● 应用单例 ...
- Jmeter(三) - 从入门到精通 - 测试计划(Test Plan)的元件(详解教程)
1.简介 上一篇中宏哥已经教你如何通过JMeter来创建一个测试计划(Test Plan),那么这一篇我们就将JMeter启动起来,创建一个测试计划(Test plan),然后宏哥给大家介绍一下测试计 ...
- 简单poi操作word@2020
个人采用POI(3.16版本)一.段落部分XWPFParagraph paragraph = docxDocument.createParagraph();1.段落对齐方式paragraph.setA ...
- 剑指Offer之矩形覆盖
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 思路:与裴波拉 ...
- 【C++】常见易犯错误之数值类型取值溢出与截断(3)
0. 前言 本节是“[C++]常见易犯错误之数值类型取值溢出与截断(1)” 的补充,主要探讨浮点型的取值溢出. 1. 相关知识 (1) 浮点型数据取值范围如下: 单精度型 float 3.4 * 1 ...