当前位置: 首页 > news >正文

mysql快速精通(一)DQL数据查询语言

文章建立在已知基础用法的前提下进行深入了解

一.排序

基础语法:

SELECT 字段名 FROM 表名 [WHERE 条件] ORDER BY 字段名 [ASC|DESC]; 
# ASC: 升序,默认是升序 
# DESC: 降序
  1. 单行排序,即上述语法的基础用法
# 根据角色ID升序排序
SELECT role_id FROM roles_table ORDER BY role_id ASC;
  1. 组合排序
# 先根据性别ID降序排序再根据角色ID升序排序
SELECT role_id,role_gender FROM roles_table ORDER BY role_gender DESC,role_id ASC;

二.单行函数

  1. 数值函数
  • abs(x) 绝对值函数
  • ceil(x) 向上取整
  • floor 向下取整
  • rand() 返回0-1随机数(可通过运算得到任意范围的随机数)
  • round(x) 四舍五入得到整数
  1. 字符串函数
  • concat(s1,s2…sn) 连接字符串
  • locate(s1,s) 从s中获取第一个s1开始的位置
  • lower(s) 将字符串变成小写字母
  • upper(s) 将字符串变成大写字母
  • replace(s,s1,s2) 将s中的字符串s1替换为s2
  • substr(s,start,length) 从字符串s的start位置截取长度为lenght的字符串
  • trim(s) 去除字符串s前后的空格
  • reverse(s) 反转字符串s
  1. 时间日期函数
  • now()sysdate()返回当前系统时间(包括年月日时分秒)
  • curdate()返回当前年月日
  • curtime()返回当前时间(时分秒)
  • month(date)返回参数日期的月份

该函数会进行日期合法性判断,不合法会返回空

# 以横杠隔开的日期
SELECT MONTH('2024-2-29')# 以斜杠隔开的日期
SELECT MONTH('2024/2/29')
  • week(date)day(date)同上
  • date_add(date|datetime,INTERVAL expr type)在参数日期上增加相应的时间

a.date|datetime 日期或者日期时间
b. expr 添加的时间间隔(可为负数)
c. type参数有很多选择

# 在在该时间上加上30天
select date_add('2024-7-10 12:11:22',interval 30 DAY)

需要了解这个函数更完全的用法可以看看这位大佬的博客
MySQL加减间隔时间函数DATE_ADD和DATE_SUB的详解

  1. 流程控制函数
  • if(condition,expr1,expr2)condition条件为true时返回expr1,反之exp2
# 如果为真则查询role_id并将结果重命名为hhh
SELECT if(true,role_id,role_gender) as hhh FROM roles_table
  • ifnull(expr1,expr2) expr1不为null时返回expr1,反之expr2
  1. 其他函数
  • version()查看数据库版本
  • user()查看当前数据库用户
  • md5(expr) 查看参数进行md5加密后的值

三. 聚合函数

  • count(rowName)查询指定列记录数,为NULL不计,rowName为通配符*可查询总条数
  • sum计算指定列数值和,特性:如果不是数值类型,计算结果为0
  • avg计算指定列平均值,为NULL不记,特性同上
  • max||min 分别是计算特定列最大值与最小值,特性同上

四.分组

  • 分组查询
    分组查询指的是使用GROUP BY对查询信息进行分组,相同的放一组,但只返回第一组,所以通常与聚合函数配合使用

SELECT 字段1,字段2... FROM 表名 [WHERE条件] GROUP BY 分组字段 [HAVING 条件];

在某些默认情况下如果分组查询的字段没有用聚合函数包裹会违反
ONLY_FULL_GROUP_BY的规定,这里为了方便输出用于分组的字段内容可以关闭该规则

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

# 关闭ONLY_FULL_GROUP_BY规则
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));# 使用性别为聚合条件
SELECT SUM(role_id),role_gender from roles_table GROUP BY role_gender
  • where和having的对比

a. having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
b. having语句中可以使用聚合函数,where后面不可以使用聚合函数

# 分组前条件ele_type_id<3,分组后条件 SUM(role_id)>50
SELECT SUM(role_id),role_gender from roles_table where ele_type_id<3 GROUP BY role_gender HAVING SUM(role_id)>50

五. limit

常用于实现分页查询

语法(放在最后)
SELECT *|字段列表 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句][HAVING子句][ORDER BY子句][LIMIT子句];

两种方式:

LIMIT offset,length;或者limit length;
offset是指偏移量,可以认为是跳过的记录数量,默认为0,表示从哪开始
length是指需要显示的总记录数,表示显示几条

# 表示向后偏移0,显示几条
SELECT * from roles_table LIMIT 0,5; 

六. select语句语法总结

SELECT 字段 FROM 表名 WHERE 条件 GROUP BY 字段 HAVING 条件 ORDER BY 字段 LIMIT offset,length;

相关文章:

  • 图论·Day01
  • 5. 格点
  • react学习——23react中的路由的使用(重要)
  • 大气热力学(6)——位温和假相当位温
  • Linux 防火墙配置指南:firewalld不同服务管理的应用案例(十个)
  • Java-方法
  • 插8张显卡的服务器有哪些?
  • 基于Unity3D的Rokid AR Glass项目开发环境搭建
  • bug - while parsing file included at
  • LeetCode—和为K的子数组(前缀和)
  • 在SpringBoot使用AOP防止接口重复提交
  • C# Bitmap类型与Byte[]类型相互转化详解与示例
  • 需求分析|泳道图 ProcessOn教学
  • Games101——光珊化——深度缓存——shading着色 1
  • 旷野之间3 – CTO 应具备的技能
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • echarts的各种常用效果展示
  • es6(二):字符串的扩展
  • Fastjson的基本使用方法大全
  • Git同步原始仓库到Fork仓库中
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 大主子表关联的性能优化方法
  • 检测对象或数组
  • 面试遇到的一些题
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 盘点那些不知名却常用的 Git 操作
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 我看到的前端
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​Spring Boot 分片上传文件
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # .NET Framework中使用命名管道进行进程间通信
  • #if 1...#endif
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (1)svelte 教程:hello world
  • (3)llvm ir转换过程
  • (Java数据结构)ArrayList
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (不用互三)AI绘画工具应该如何选择
  • (多级缓存)缓存同步
  • (二)hibernate配置管理
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (七)Knockout 创建自定义绑定
  • (四)汇编语言——简单程序
  • (轉貼) UML中文FAQ (OO) (UML)
  • ****Linux下Mysql的安装和配置
  • .NET C# 使用GDAL读取FileGDB要素类
  • .net core docker部署教程和细节问题
  • .NET NPOI导出Excel详解
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据