当前位置:网站首页>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;
边栏推荐
- 第6期:大学生应该选择哪种主流编程语言
- 使用Geoprocessor 工具
- .NET操作Redis Set无序集合
- Oracle创建索引
- C language calculation date interval days
- 12 复制对象时勿忘其每一个成分
- 20210807#1 C语言程序结构
- Mlx90640 infrared thermal imager temperature sensor module development notes (VI) pseudo color coding of infrared images
- Issue 6: which mainstream programming language should college students choose
- SuperMap IClient for Leaflet 加载高斯克吕格投影三度分带CGCS2000大地坐标系WMTS服务
猜你喜欢
![[Halcon vision] threshold segmentation](/img/1c/e2463a796f99804a55680b69e714a6.png)
[Halcon vision] threshold segmentation

抽象工厂及其改进示例
![[leetcode每日一题2021/8/31]1109. 航班预订统计【中等】差分数组](/img/9d/5ce5d4144a9edc3891147290e360d8.png)
[leetcode每日一题2021/8/31]1109. 航班预订统计【中等】差分数组

Problems encountered in QRcode QR code (C language)

uniapp使用简单方法signalR(仅用于web调试,无法打包app)

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

Mlx90640 infrared thermal imager temperature sensor module development notes (VI) pseudo color coding of infrared images

js下载文件,FileSaver.js导出txt、excel文件

canvas上传图片base64-有裁剪功能-Jcrop.js

干货likeshop外卖点餐系统开源啦100%开源无加密
随机推荐
json-c库的简单使用——将json文件转换为struct.
上传图片获取宽高
Issue 5: the second essential skill for College Students
Database functions
第6期:大学生应该选择哪种主流编程语言
第4期:大学生提前职业技能准备之一
Okaleido ecological core equity Oka, all in fusion mining mode
putty的使用教程
GIS方法类期刊和论文的综述(Introduction)怎么写?
[leetcode每日一题2021/8/30]528. 按权重随机选择【中等】
Uniapp uses the simple method signalr (only for web debugging, cannot package apps)
码云,正式支持 Pages 功能,可以部署静态页面
原生JS-获取transform值 x y z及rotate旋转角度
.NET操作Redis sorted set有序集合
【dectectron2】跟着官方demo一起做
(转载)ArcGIS Engine中各种点的创建方法
Introduction to data analysis | kaggle Titanic mission
.NET操作Redis List列表
一些你不知道的 web API
链式方法调用的事务问题剖析