Mysql学习笔记之SQL-3

news2024/12/23 5:33:56

这篇文章开始介绍SQL语句的第三部分,DQL(Data Query Language)数据库查询语言。

1.简介

DQL(Data Query Language)数据库查询语言,用来查询数据表中的记录,也是sql语句中最常用的部分,在一般的业务中查询需求是远大于增删改等其他操作的,并且在查询的过程中,还会涉及到条件查询、排序、分页等操作。

2.语法

SELECT 字段列表 FROM 表名列表 WHERE 条件列表
GROUP BY 分组字段列表 HAVING 分组后条件列表
ORDER BY 排序字段列表
LIMIT 分页参数

语法看起来很复杂,但是并不是每此查询都需要用到如此复杂的查询语句,可以由浅入深的进行学习。

  • 简单查询
  • 聚合查询
  • 分组查询
  • 排序查询
  • 分页查询

每种查询都是可以任意组合的,可以根据实际业务需求自由搭配,例如先分组再排序,或者先排序再分页等等。下面分别介绍每种查询

3.简单查询

简单查询就是带条件或者不带条件查询
语法:

SELECT 字段1,字段2,... FROM 表名 [WHERE 条件];

WHERE条件是可省略的,不添加WHERE条件查询的是所有的数据,添加where条件则查询满足条件的数据。
WHERE条件中常用的比较符如下所示:

符号作用描述
>大于
>=大于等于
<小于
<=小于等于
=等于
<> 或 !=不等于
BETWEEN … AND …基于范围之间,包含边界值
IN(…)包含在列表中,如in (1,2,3,4)
LIKE模糊匹配,如 LIKE ‘张%’,或 LIKE ‘张_’ (_匹配单个字符, %匹配任意个字符)
IS NULL 或者 IS NOT NULL判断是否为空
  • 查询所有数据
SELECT * FROM 表名;
-- 查询学生表的所有数据
SELECT * FROM students;
  • 查询指定字段
SELECT 字段1,字段2,... FROM 表名;
--查询学生表的名称和年龄
SELECT name,age FROM students;
  • 字段别名
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
-- 或者
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;
  • 条件查询
SELECT * FROM 表名 WHERE 条件
-- 查询年龄大于18的学生
SELECT * FROM students WHERE age > 18;
-- 查询学号在1到20之间的学生
SELECT * FROM `student` WHERE id BETWEEN 1 AND 20;
-- 查询学号为1,3,4,5,7的学生
SELECT * FROM `student` WHERE id IN (1,3,4,5,7);

4.聚合查询

聚合函数用于对一组数据执行计算,并返回一个单一值。
常用的聚合函数有:

函数功能
count数量统计
max求最大值
min求最小值
avg求平均值
sum求和
  • 统计学生表的人数
-- 语法
SELECT COUNT(字段名) FROM 表名;
-- 案例
SELECT COUNT(id) FROM student;
  • 获取学生表中最大(最小)的年龄
-- 语法
SELECT MAX(字段名) FROM 表名;
-- 案例
SELECT MAX(age) FROM student;
SELECT MIN(age) FROM student;
  • 获取平均年龄
-- 语法
SELECT AVG(字段名) FROM 表名;
-- 案例
SELECT AVG(age) FROM student;
  • 年龄求和
-- 语法
SELECT SUM(字段名) FROM 表名;
-- 案例
SELECT SUM(age) FROM student;

当然聚合函数一般在实际业务中不会这么简单的使用,一般会在分组查询后使用。

5.分组查询

分组查询将数据集合按照一定的规则分组,并对每个分组执行聚合函数,如求和、平均、最大值和最小值等。
语法

SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名;

为了方便演示,这里需要给学生表(student)添加成绩字段,并添加数据

-- 添加字段
ALTER TABLE `student` ADD COLUMN `grade` int NULL AFTER `age`;

--插入数据
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (1, '张三', '男', 20, 80);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (2, '李四', '男', 16, 60);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (3, '王五', '男', 18, 90);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (4, '李翠翠', '女', 16, 75);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (5, '王芳芳', '女', 16, 50);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (6, '赵琴', '女', 16, 90);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (7, '皮洋洋', '男', 20, 80);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (7, '张无忌', '男', 20, 80);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (9, '张三丰', '男', 19, 75);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (10, '张三丰1', '男', 17, 80);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (11, '张三丰2', '男', 18, 60);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (12, '张三丰3', '男', 19, 90);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (13, '张三丰4', '男', 20, 75);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (14, '张三丰5', '男', 18, 50);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (15, '张三丰6', '男', 16, 80);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (16, '张三丰7', '男', 19, 80);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (17, '张三丰8', '男', 20, 90);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (18, '张三丰9', '男', 18, 65);
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `grade`) VALUES (19, '张三丰10', '男', 17, 75);

接下来可以对成绩进行分组,然后求取平均值或者年龄等。

  • 对成绩进行分组,并统计各成绩段的人数
SELECT COUNT(id),grade FROM student GROUP BY grade;
  • 对成绩进行分组,获取各成绩段人数的平均年龄
SELECT AVG(age),grade FROM student GROUP BY grade;

加上where条件

  • 对成绩进行分组,并统计成绩大于等于80的人数
SELECT COUNT(id),grade FROM student WHERE grade >= 80 GROUP BY grade;

拓展
分组条件过滤除了使用where,还可以使用HAVING,但过滤方式与WHRERE有所区别:

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以。

语法

SELECT 字段列表 FROM 表名 GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];

6.排序查询

排序查询顾名思义就是对查询的结果进行排序。
语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;

排序方式分为两种,升序排序(ASC)和降序排序(DESC),省略不写默认为升序排序

  • 对成绩程序排序
SELECT * FROM student ORDER BY grade;
-- 或者
SELECT * FROM student ORDER BY grade ASC;
  • 对成绩降序排序
SELECT * FROM student ORDER BY grade DESC;

也可以对多个字段进行排序,多个字段排序时,只有当第一个字段的值相同时才会对第二个字段排序。

  • 先对成绩升序排序,在对年龄降序排序
SELECT * FROM student ORDER BY grade ASC,age DESC;

7.分页查询

当数据表中的数据非常的多达到几百万甚至上千万时,一次展示这么多数据也不方便用户查看,这时就可以通过分页查询,每次查询一定量的数据。
语法

SELECT * FROM student ORDER BY grade ASC,age DESC;

注意

  • 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10
  1. 每页查询五条记录,查询第一页数据
SELECT * FROM student LIMIT 0,5;
-- 或者
SELECT * FROM student LIMIT 5;
  1. 每页查询五条记录,查询第二页数据
SELECT * FROM student LIMIT 5,5;

分页查询与where条件连用

  1. 查询分组大于60的数据,每页显示五条记录,查询第一页数据
SELECT * FROM student WHERE grade > 60 LIMIT 0,5;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2264074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3项目结合Echarts实现甘特图(可拖拽、选中等操作)

效果图&#xff1a; 图一&#xff1a;选中操作 图二&#xff1a;上下左右拖拽操作 本案例在echarts​​​​​​​示例机场航班甘特图的基础上修改​​​​​​​ 封装ganttEcharts组件&#xff0c;测试数据 airport-schedule.jsonganttEcharts代码: 直接复制粘贴可测​​​​…

【已解决】黑马点评项目jmeter高并发测试中用户数据的生成

具体实现见此篇文章的第3章 运行 test 程序后&#xff0c;生成以下用户名 以下文件名改成自己的地址 成功

VScode 查看linux 内核代码

0&#xff0c;安装c.c 1&#xff0c;查看linux 目录下的linux代码&#xff0c;安装remote ssh 2&#xff0c; 输入服务器IP 3 选择服务器为linux

【游戏设计原理】21 - 解谜游戏的设计

你想象一下&#xff0c;刚坐下准备玩游戏&#xff0c;想着“今天得挑战一下我的智商极限&#xff01;”可结果碰上一个谜题&#xff0c;傻眼了&#xff0c;心里默念&#xff1a;“这啥玩意儿&#xff1f;这游戏是在玩我吗&#xff1f;”如果这个谜题太简单了&#xff0c;你可能…

解析交通事故报告:利用 PDF、AI 与数据标准化技术构建智能分析系统

在交通事故处理中&#xff0c;数据的准确性与完整性至关重要。传统上&#xff0c;交通事故报告通常以 PDF 格式呈现&#xff0c;这使得手动提取数据成为一项繁琐且容易出错的任务。随着人工智能与数据处理技术的发展&#xff0c;如何自动化这一过程并提升数据质量&#xff0c;成…

基于Python+Vue开发的体育用品商城管理系统,实习作品,期末作业

项目简介 该项目是基于PythonVue开发的体育用品商城管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Python的体…

7.C语言 宏(Macro) 宏定义,宏函数

目录 宏定义 宏函数 1.注释事项 2.注意事项 宏(Macro)用法 常量定义 简单函数实现 类型检查 条件编译 宏函数计算参数个数 宏定义进行类型转换 宏定义进行位操作 宏定义进行断言 总结 宏定义 #include "stdio.h" #include "string.h" #incl…

【LeetCode】906、超级回文数

【LeetCode】906、超级回文数 文章目录 一、通过数据量猜解法 枚举 数学 回文1.1 通过数据量猜解法 枚举 数学 回文1.2 多语言解法 二、打表法 一、通过数据量猜解法 枚举 数学 回文 1.1 通过数据量猜解法 枚举 数学 回文 减小数据规模: 先构成回文, 再平方, 再判断是否是范围…

SpringBoot的创建方式

SpringBoot创建的五种方式 1.通过Springboot官网链接下载 注意SpringBoot项目的封装方式默认为Jar 需要查看一下&#xff0c;自己的Maven版本是否正确 创建成功 2.通过 aliyun官网链接下载 修改服务路径为阿里云链接 创建成功 3.通过Springboot官网下载 点击&#xff0c;拉到最…

Android Studio AI助手---Gemini

从金丝雀频道下载最新版 Android Studio&#xff0c;以利用所有这些新功能&#xff0c;并继续阅读以了解新增内容。 Gemini 现在可以编写、重构和记录 Android 代码 Gemini 不仅仅是提供指导。它可以编辑您的代码&#xff0c;帮助您快速从原型转向实现&#xff0c;实现常见的…

物理信息神经网络(PINN)八课时教案

物理信息神经网络&#xff08;PINN&#xff09;八课时教案 第一课&#xff1a;物理信息神经网络概述 1.1 PINN的定义与背景 物理信息神经网络&#xff08;Physics-Informed Neural Networks&#xff0c;简称PINN&#xff09;是一种将物理定律融入神经网络训练过程中的先进方…

双臂机器人

目录 一、双臂机器人简介 二、双臂机器人系统的组成 三、双臂机器人面临的主要挑战 3.1 协调与协同控制问题 3.2 力控制与柔顺性问题 3.3 路径规划与轨迹优化问题 3.4 感知与环境交互 3.5 人机协作问题 3.6 能源与效率问题 3.7 稳定性与可靠性问题 四、双臂机器人…

日期区间选择器插件的操作流程

我们知道&#xff0c;在开发过程中&#xff0c;为了能够在规定时间内完成项目&#xff0c;有时候我们都会使用插件来大大提高我们的开发效率&#xff0c;有些插件是可以直接拿来用&#xff0c;但是有些插件拿过来之后是需要进行修改&#xff0c;在使用插件的时候还有很多的注意…

以ATTCK为例构建网络安全知识图

ATT&CK&#xff08;Adversarial Tactics, Techniques, and Common Knowledge &#xff09;是一个攻击行为知识库和模型&#xff0c;主要应用于评估攻防能力覆盖、APT情报分析、威胁狩猎及攻击模拟等领域。本文简单介绍ATT&CK相关的背景概念&#xff0c;并探讨通过ATT&a…

“年轻科技旗舰”爱玛A7 Plus正式发布,全国售价4999元

12月18日&#xff0c;备受行业瞩目的“A7上场 一路超神”爱玛旗舰新品发布会在爱玛台州智造工厂盛大举行。 作为年末“压轴产品”的“两轮豪华轿跑”爱玛A7Plus重磅上场&#xff0c;以“快、稳、帅、炫、智、爽”六大超神技惊艳四座&#xff0c;不仅践行了爱玛科技的精品战略&…

精通Redis(一)

目录 1.NoSQL 非关系型数据库 2.Redis 3.Redis的java客户端 4.Jedis 4.1Jedis快速入门 4.2Jedis连接池及使用 5.SpringDataRedis和RedisTemplate 1.NoSQL 非关系型数据库 基础篇-02.初始Redis-认识NoSQL_哔哩哔哩_bilibili NoSQL与SQL的区别就在于SQL是结构化的、关联…

研发效能DevOps: Vite 使用 Element Plus

目录 一、实验 1.环境 2.初始化前端项目 3.安装 vue-route 4.安装 pinia 5.安装 axios 6.安装 Element Plus 7.gitee创建工程 8. 配置路由映射 9.Vite 使用 Element Plus 二、问题 1.README.md 文档推送到gitee未自动换行 2.访问login页面显示空白 3.表单输入账户…

openbmc hwmon与sensor监控

1.说明 参考文档: https://github.com/openbmc/entity-manager/blob/master/docs/entity_manager_dbus_api.mdhttps://github.com/openbmc/entity-manager/blob/master/docs/my_first_sensors.md 1.1 简单介绍 注意: 本节是快速浏览整个sensor框架&#xff0c;了解大致open…

thinkphp框架diygw-ui-php进销存出库记录操作

将进销存的出库明细记录存储到数据库中&#xff0c;thinkphp框架diygw-ui-php后台通常涉及以下几个步骤&#xff1a; 数据库表定义 实现我们定义了三张表、一个产品表、出库订单表、出库订单产品明细表 生成API 进入DIY可视化API代码生成器&#xff0c;我们生成这三张表结应…

vertx idea快速使用

目录 1.官网下载项目 2.修改代码 2.1拷贝代码方式 为了能够快速使用&#xff0c;我另外创建一个新的maven项目&#xff0c;将下载项目的src文件和pom文件拷贝到新建的maven项目。 2.2删除.mvn方式 3.更新配置 4.配置application 5.idea启动项目 1.官网下载项目 从vert…