【Mysql】DQL操作单表、创建数据库、排序、聚合函数、分组、limit关键字

本文主要是介绍【Mysql】DQL操作单表、创建数据库、排序、聚合函数、分组、limit关键字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DQL操作单表

1.1 创建数据库

•创建一个新的数据库 db2

CREATE DATABASE db2 CHARACTER SET utf8;

•将db1数据库中的 emp表 复制到当前 db2数据库

在这里插入图片描述

在这里插入图片描述

** 1.2 排序**

通过 ORDER BY 子句,可以将查询出的结果进行排序 (排序只是显示效果,不会影响真实数据)
语法结构:
•SELECT 字段名 FROM 表名 [WHERE 字段 = 值] ORDER BY 字段名 [ASC / DESC]
ASC 表示升序排序(默认)
DESC 表示降序排序

1.2.1 单列排序
•单列排序:只按照某一个字段进行排序, 就是单列排序
需求: 使用 salary 字段,对emp 表数据进行排序 (升序/降序)

– 默认升序排序 ASC

SELECT * FROM emp ORDER BY salary;

– 降序排序

SELECT * FROM emp ORDER BY salary DESC;

1.2.2 组合排序
•组合排序: 同时对多个字段进行排序, 如果第一个字段相同 就按照第二个字段进行排序,以此类推
需求: 在薪水排序的基础上,再使用id进行排序, 如果薪水相同就以id 做降序排序

– 组合排序

SELECT * FROM emp ORDER BY salary DESC, eid DESC;

1.3 聚合函数
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对某一列的值进行计算,然后返回一个单一的值(注意:聚合函数会忽略null空值)。
语法结构
•SELECT 聚合函数(字段名) FROM 表名;
我们来学习5个聚合函数
聚合函数 作用
count(字段) 统计指定列不为NULL的记录行数
sum(字段) 计算指定列的数值和
max(字段) 计算指定列的最大值
min(字段) 计算指定列的最小值
avg(字段) 计算指定列的平均值
需求1:
– 1 查询员工的总数
– 2 查看员工总薪水、最高薪水、最小薪水、薪水的平均值
– 3 查询薪水大于4000员工的个数
– 4 查询部门为’教学部’的所有员工的个数
– 5 查询部门为’市场部’所有员工的平均薪水
SQL实现

-- 1.查询员工的总数
-- 统计表中的记录条数 使用 count()
SELECT COUNT(eid) FROM emp; -- 使用某一个字段
SELECT COUNT(*) FROM emp; -- 使用 *
SELECT COUNT(1) FROM emp; -- 使用 1,与 * 效果一样-- 下面这条SQL 得到的总条数不准确,因为count函数忽略了空值
-- 所以使用时注意不要使用带有null的列进行统计
SELECT COUNT(dept_name) FROM emp;-- 2.查看员工总薪水、最高薪水、最小薪水、薪水的平均值
-- sum函数求和, max函数求最大, min函数求最小, avg函数求平均值
SELECT SUM(salary) AS '总薪水',MAX(salary) AS '最高薪水',MIN(salary) AS '最低薪水',AVG(salary) AS '平均薪水'   
FROM emp;-- 3.查询薪水大于4000员工的个数
SELECT COUNT(*) FROM emp WHERE salary > 4000;-- 4.查询部门为'教学部'的所有员工的个数
SELECT COUNT(*) FROM emp WHERE dept_name = '教学部';-- 5.查询部门为'市场部'所有员工的平均薪水
SELECT AVG(salary) AS '市场部平均薪资' 
FROM emp 
WHERE dept_name = '市场部';

1.4 其他常用函数

  1. 日期时间函数
-- 返回当前日期和时间
SELECT NOW();-- 计算两个日期之间的天数差
SELECT DATEDIFF('2023-12-01','2023-12-10');
  1. 字符串操作
-- 拼接字符串
SELECT CONCAT('hello','world');-- 截取字符串(从1开始)
SELECT SUBSTRING('hello',1,2);

1.5分组
•分组查询:指的是使用 GROUP BY 语句,对查询的信息进行分组,相同数据作为一组。
语法格式
•SELECT 分组字段/聚合函数 FROM 表名 GROUP BY 分组字段 [HAVING 条件];
需求1: 通过性别字段 进行分组

-- 按照性别进行分组操作
SELECT * FROM emp GROUP BY sex; -- 注意 这样写没有意义
分析: GROUP BY 分组过程

注意:
分组时可以查询要分组的字段, 或者使用聚合函数进行统计操作.

  • 查询其他字段没有意义

需求1: 通过性别字段 进行分组,求各组的平均薪资

SELECT sex, AVG(salary) FROM emp GROUP BY sex;

需求2:
– 1.查询所有部门信息
– 2.查询每个部门的平均薪资
– 3.查询每个部门的平均薪资, 部门名称不能为null
SQL实现

-- 1.查询有几个部门
SELECT dept_name AS '部门名称' FROM emp GROUP BY dept_name;-- 2.查询每个部门的平均薪资
SELECT 
dept_name AS '部门名称',
AVG(salary) AS '平均薪资' 
FROM emp GROUP BY dept_name;-- 3.查询每个部门的平均薪资, 部门名称不能为null
SELECT dept_name AS '部门名称',AVG(salary) AS '平均薪资' 
FROM emp WHERE dept_name IS NOT NULL GROUP BY dept_name;

需求3:
– 查询平均薪资大于6000的部门.
分析:

  1. 需要在分组后,对数据进行过滤,使用 关键字 having
  2. 分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。

SQL实现:

-- 查询平均薪资大于6000的部门
-- 需要在分组后再次进行过滤,使用 having
SELECT dept_name , AVG(salary)
FROM emp  WHERE dept_name IS NOT NULL GROUP BY dept_name HAVING AVG(salary) > 6000 ;

•where 与 having的区别
过滤方式 特点
where where 进行分组前的过滤
where 后面不能写 聚合函数
having having 是分组后的过滤
having 后面可以写 聚合函数

GROUP_CONCAT() 函数:
•作用: 用于将组内的行连接成一个单独的字符串,并使用指定的分隔符将它们分开。
•这在执行分组操作时非常有用。以下是 GROUP_CONCAT() 函数的基本语法:

SELECT 
GROUP_CONCAT(column_name SEPARATOR ',')  AS concat_col
FROM table_name
GROUP BY group_column;

1)column_name: 是要连接的列名。
2)SEPARATOR :是用于分隔连接的字符串,可以根据需要指定。
3)table_name 是表的名称。
4)group_column 是用于分组的列名,GROUP BY 子句根据这一列对数据进行分组。
使用演示: 使用 GROUP_CONCAT() 将每个部门的员工名字连接成一个字符串

-- 使用 GROUP_CONCAT() 将每个部门的员工名字连接成一个字符串
SELECTdept_name,GROUP_CONCAT(ename SEPARATOR ',') AS ename_list
FROM emp GROUP BY dept_name;

1.6 limit关键字
limit 关键字的作用
•limit是限制的意思,用于 限制返回的查询结果的行数 (可以通过limit指定查询多少行数据).
•limit 语法是 MySQL的方言,用来完成分页

语法结构

•SELECT 字段1,字段2… FROM 表名 LIMIT offset , length;

参数说明
1.limit offset , length; 关键字可以接受一个 或者两个 为0 或者正整数的参数
2.offset 起始行数, 从0开始记数, 如果省略 则默认为 0.
3.length返回的行数
需求1:
– 查询emp表中的前 5条数据
– 查询emp表中 从第4条开始,查询6条
SQL实现

-- 查询emp表中的前 5条数据
-- 参数1 起始值,默认是0 , 参数2 要查询的条数
SELECT * FROM emp LIMIT 5;
SELECT * FROM emp LIMIT 0 , 5;-- 查询emp表中 从第4条开始,查询6条
-- 起始值默认是从0开始的.
SELECT * FROM emp LIMIT 3 , 6;

这篇关于【Mysql】DQL操作单表、创建数据库、排序、聚合函数、分组、limit关键字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085191

相关文章

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select