【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

相关文章

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

mysql索引二(唯一索引)

前文中介绍了MySQL中普通索引用法,和没有索引的区别。mysql索引一(普通索引) 下面学习一下唯一索引。 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引。 添加数据库唯一索引的几种

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)