当前位置:网站首页>MySQL速学-2021-09-01
MySQL速学-2021-09-01
2022-07-26 10:36:00 【竹某】
0.摘要
a.排序
b.排序+筛选
c.单行处理函数(数据处理函数)
d.多行处理函数(联合函数)与分组查询
e.distinct关键字
1.排序,排序与筛选
| order by fieldName asc; | 按照fieldName字段的升序进行排列。字符串的排序和C,Java类似。 |
| order by fieldName desc; | 按照fieldName字段的降序进行排列 |
| order by fieldName; | 按照fieldName字段的升序进行排列(默认为升序) |
| order by field1 asc, field2 asc...; | 首先按照field1的升序(也可以是降序)进行排列;如遇相等,再按照field2的升序(也可以是降序)进行排列...总之写在前面的优先级高。 |
| select field1, field2,... from tableName order by ... | 按照指定字段的指定顺序对表进行排列 |
实例:表stuinfor如下
+------+-----+--------+
| name | age | sex |
+------+-----+--------+
| Guo | 19 | female |
| Wen | 25 | female |
| Xu | 21 | male |
| Ying | 21 | female |
+------+-----+--------+
先按照age进行排序,再按照name进行。
SELECT * FROM stuinfor ORDER BY age desc, name\g
筛选+排序
| SELECT filed1,field2,... FROM tableName WHERE expr ORDER BY... | 筛选加排序,关键字的顺序不能够变。 |
上述语句的执行顺序是:FROM(找表)--WHERE(按照条件进行筛选)--SELECT(查找)--ORDER BY(排序)。最后输出。注意关键字的顺序不能够变。
比如对上述表中的女性进行年龄排序:
SELECT * FROM stuinfor WHERE sex = 'female' ORDER BY age desc\g
2.单行处理函数
单行处理函数,又称数据处理函数,区别于多行处理函数。其特点为:一个输入,一个输出;几个输入,几个输出。尽管老师没有强调,但是单行处理函数应该有形参,实参和返回值。
| 函数原型 | 功能 | 其他 |
| String lower(String); | 将字符串大写转小写 | 遇到非字母保持不变 |
| String upper(String); | 将字符串小写转大写 | 遇到非字母保持不变 |
| String substr(String,left,length); | 取给定字符的子字符串,并返回 | 对于mysql,字符串的下标从1开始而不是0。 |
| int length(String); | 返回指定字符串的长度 | 区别于java中的object.length。 |
| String trim(String); | 去掉给定字符串中的空格,并返回 | 常用于初步处理输入的数据。去除前后空格。不能去除中间空格。 |
double rand(); double rand(int); | 生成[0,1) | 缺省模式下生成不可重复的随机数,rand(const_n)生成可重复的随机数。 |
| double round(double,int); | 四舍五入到指定位数 | 将给定的浮点数四舍五入到指定位数,0代表个位,1代表十分位,2代表百分位......-1代表十位,-2代表百位。 |
| double ifnull(data,double) | 检查指定数据是否位NULL。若为NULL返回指定指定值,否则返回原值。 | 由于mysql中NULL参与算数运算,结果必为NULL。为了避免这个现象,故采用ifnull函数。 |
case...when...then... when...then...else...end | 将case后的变量与when后的情况匹配,并将对应的then后的表达式的值作为整个函数的值;否则,将else后的值作为整个函数的值。只要一个when符合条件就会跳过之后的语句,直接到end。 | 对于else是否是必需的问题:不是必需的。 when后面跟的为值,而不是逻辑表达式;then后面应该跟值;case后面跟的是变量或说字段。即: case fieldName when fieldValue then expr1 else expr2; |
单行处理函数可以构成表达式,能在任何能够使用表达式的地方使用。比如select后,where后与逻辑运算符一起构成逻辑表达式等等。
3.多行处理函数
单表查询的最后一部分。多行处理函数区别于单行处理函数,多个input,一个output。多行处理函数总共有5个,如下:
| int count(fieldName); | 返回指定字段中不为NULL的元素数目 |
| double sum(fieldName); | 返回指定字段中不为NULL的元素总和 |
| double avg(fieldName); | 返回指定字段中元素的平均值,不考虑NULL元素 |
| double max(fieldName); | 返回指定字段中的最大元素的值 |
| double min(fieldName); | 返回指定字段中的最小元素的值 |
使用分组函数的几个注意事项:
1.分组函数使用时不考虑字段中为NULL的元素,所以不需要使用ifnull进行预先处理;
2.分组函数必需先分组后使用。分组需要group by关键字,如果不使用的话则默认整张表为一组。
3.where后面不能使用分组函数,这与各种语句的执行顺序有关。将在后面详细阐述。
分组查询中有两个新的关键字:
| group by fieldName1, fieldName2, ......; | 按照指定字段进行分组。组数应该为每个字段各自的组数之积。 如之前有select,只能拿group by之后的字段。 |
| having | 语法上类似于where,用于条件筛选,区别在于语句的执行顺序上。 |
4.分组查询
考虑下列语句的执行顺序:
select ......
from ......
where ......
group by ......
having ......
order by ......\g
排列顺序不能更改,而执行顺序为:1.使用from找表;2.使用where进行过滤(找表之后立刻筛选有利于提高执行效率);3.使用group by进行分组(由于group by的执行顺序在where之后,所以where后不能使用分组函数,因为这违反了“先分组后使用”的原则);4.使用having在分组之后进行进一步的过滤(能够使用where代替尽量使用where代替,以提高执行效率);5.使用select从表中拿出指定数据(注意,有了order by之后select只能拿group by之后的字段);6.利用order by进行排序。最后输出。
需要思考一个问题:order by是会在组内排序,还是整体排序?整个问题其实在单表查询中不成立。因为分完组后就只能看出组内的统计信息了,看不见具体的细节,遑论组内排序。
5.distinct关键字
用法:select distinct fieldName1, fieldName2... from tableName;
distinct必需放在所有的字段名(变量)前面,用于去除重复记录。若其后有多个字段名,则表示多个字段联合去除重复记录。多个字段联合去除重复记录时,只有某两条记录的所有字段(在distinct后出现过的)的值都相同才被认为是重复的;只要有一个字段不同,就会同时保留两者。
可以使用count和distinct计算不重复的记录条数。
select count(distinct fieldName1,...) from table;
边栏推荐
猜你喜欢

Application of.Net open source framework in industrial production

Some cutting-edge research work sharing of SAP ABAP NetWeaver containerization

.NET5WTM(ASP.NET Core) PGSql开箱操作

SAP ABAP 守护进程的实现方式

Issue 8: cloud native -- how should college students learn in the workplace

工厂模式详解

Redis docker instance and data structure

Agenda express | list of sub forum agenda on July 27

el-table实现可编辑表格

从蚂蚁的觅食过程看团队研发(转载)
随机推荐
canvas上传图片base64-有裁剪功能-Jcrop.js
Simple use of json-c Library -- converting JSON files to struct
[leetcode每日一题2021/5/8]1723. 完成所有工作的最短时间
404页面和路由钩子
多目标优化系列1---NSGA2的非支配排序函数的讲解
STM32 Alibaba cloud mqtt esp8266 at command
移动端双指缩放事件(原生),e.originalEvent.touches
剑指Offer(八):跳台阶
[leetcode每日一题2021/8/30]528. 按权重随机选择【中等】
[leetcode每日一题2021/4/23]368. 最大整除子集
centos8(liunx)部署WTM(ASP.NET 5)使用pgsql
Comparison of packet capturing tools fiddler and Wireshark
uniapp使用简单方法signalR(仅用于web调试,无法打包app)
码云,正式支持 Pages 功能,可以部署静态页面
Mlx90640 infrared thermal imager temperature sensor module development notes (VI) pseudo color coding of infrared images
The problem of large fluctuation of hx711 data
剑指Offer(七):斐波那契数列
Okaleido ecological core equity Oka, all in fusion mining mode
Unit test, what is unit test and why is it so difficult to write a single test
将json文件中数组转换为struct