【MySQL 数据查询】: 基本、分组、排序、聚合、分页、条件查询详解

news2024/12/24 8:20:17

前言

欢迎来到小K的MySQL专栏,本节将为大家带来MySQL数据查询的讲解(基本、分组、排序、聚合、分页、条件查询)

目录

      • 前言
      • 一、基本查询
      • 二、条件查询
      • 三、聚合函数(统计函数)
      • 四、分组查询
      • 五、排序查询
      • 五、分页查询
      • 六、总结


一、基本查询

MySQL数据库使用SELECT语句来查询数据

1、查询多个字段

以下为MySQL数据库中查询数据通用的SELECT语法:

SELECT 字段名,字段名... FROM 表名;
SELECT * FROM 表名; #查询所有字段
  • 查询语句中可以使用一个或者多个表,表之间使用逗号(,)分隔,并使用WHERE语句来设定查询条件
  • SELECT命令可以读取一条或者多条记录
  • 你可以使用星号( * )来替代其它字段,SELECT语句会返回表的所有字段数据

2、设置别名

SELECT 字段1 [AS 别名],字段2 [AS 别名]... FROM 表名;

3、去除重复记录

SELECT DISTINCT 字段列表 FROM 表名;

4、四则运算查询

运算符描述
+加法
-减法
*乘法
/(DIV)除法
%(MOD)求余

5、基本查询练习

  1. 查询指定字段 ename,job,sal的数据
SELECT ename,job,sal FROM emp;
  1. 查询所有字段,建议不要写 * ——不直观 影响效率 遵循开发规范最好不要写* 把所有字段写出了,一目了然
SELECT * FROM emp;

SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp;
  1. 查询所有员工的职位,并起别名
SELECT job AS '工作' FROM emp;
SELECT job '工作' FROM emp;   # as 可以省略
  1. 查询员工的的职位有哪些(不要重复)
SELECT DISTINCT job FROM emp;
  1. 查询员工年薪 即 sal* 12
SELECT ename AS '姓名',sal AS '月薪',sal*12 AS '年薪' FROM emp;

效果如下
在这里插入图片描述
在这里插入图片描述

二、条件查询

我们知道从 MySQL 表中使用 SELECT 语句来查询数据,如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。

语法

SELECT 字段名 FROM 表名 WHERE 条件;

运算符表

关系运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<> 或 !=不等于
逻辑运算符功能
AND 或 &&并且(多个条件同时成立)
OR 或 ||或者(多个条件任意成立一个)
NOT 或 !非,不是
其他功能
BETWEEN…AND…在某个范围之间(含最小、最大值)
IN(…)在in之后的列表中的值,多选一
LIKE模糊匹配(_匹配单个字符,%匹配任意个字符)
IS [NOT] NULL是 NULL

条件查询练习

  1. 查询工资等于3000的员工
SELECT ename,sal FROM emp WHERE sal=3000;
  1. 查询工资小于1000的员工
SELECT ename,sal FROM emp WHERE sal<1000;
  1. 查询工资小于等于1000的员工
SELECT ename,sal FROM emp WHERE sal<=1000;
  1. 查询没有奖金的员工
SELECT * FROM emp WHERE comm is NULL;
  1. 查询有奖金的员工
SELECT * FROM emp WHERE comm is NOT NULL;
  1. 查询工资在1200到1800之间的员工(包含1200和1800)
SELECT *FROM emp WHERE sal>=1200 && sal<=1800;
SELECT *FROM emp WHERE sal BETWEEN 1200 AND 1800;
  1. 查询职位为推销员,且工资小于1500的员工
SELECT * FROM emp WHERE job='salesman'&& sal<1500;
  1. 查询工资为800 或 3000 或 5000的员工
SELECT * FROM emp WHERE sal in(800,3000,5000);
  1. 查询姓名为四个字的员工
SELECT * FROM emp WHERE ename LIKE '____';
  1. 查询姓名最后一位是S的员工
SELECT * FROM emp WHERE ename LIKE '%s';

效果如下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、聚合函数(统计函数)

SQL允许对表中的数据进行计算,将一列数据作为一个整体,进行纵向计算

函数名作用
MAX(column)返回某列的最高值(没有则返回NULL)
MIN(column)返回某列的最低值(没有则返回NULL)
COUNT(column)返回某列的行数(不包括 NULL 值)
COUNT(*)返回被选列行数(包括NULL)
SUM(column)求和
AVG(column)求平均值

其中COUNT函数可用于任何数据类型(因为它只是计数),而SUMAVG函数只能对数值类型做计算,MAXMIN可用于数值、字符串或是日期时间数据类型

聚合函数练习

  1. 统计该企业员工数量
SELECT COUNT(*) FROM emp;
SELECT COUNT(comm) FROM emp;
SELECT COUNT(mgr) FROM emp;
  1. 统计该企业员工的平均工资
SELECT AVG(sal) FROM emp;
  1. 查询该企业员工的最高工资
SELECT MAX(sal) FROM emp;
  1. 查询该企业员工的最低工资
SELECT MIN(sal) FROM emp;
  1. 计算所有销售的工资之和
SELECT SUM(sal) as '销售总工资' FROM emp WHERE job='salesman';

效果如下

在这里插入图片描述

四、分组查询

需要声明一点的是,虽然说统计函数一般是搭配分组查询,但是单独使用的情况一定是有的。例如:在做报表显示的时候基本的分页操作,一定要查询出全部的数据

那么什么是分组呢?

分组这个概念在生活中其实是很常见的,比如有以下需求:

  • 1.在一个班级之中,要求男女各一组进行辩论赛
  • 2.在公司中,要求每个部门一组进行拔河比赛

对于第一个需求,假设存在学生表,那么在学生表之中一定会存在一个性别字段,性别只可能是男或者女。
而在公司之中,如果要进行部门分组,肯定需要一个部门列的内容存在重复。

分组只对数据有重复的字段才有意义,我们可以查看emp表,找到可以分组的字段job 和 deptno。

语法

SELECT 分组字段/聚合函数 FROM 表名 [WHERE 条件] GROUP BY 分组字段 [HAVING 分组后条件];

分组查询练习:

  1. 统计出每个工作岗位的人数
SELECT job,COUNT(*) '总人数' FROM emp GROUP BY job;
  1. 统计出每种职位的最低和最高工资
SELECT job,MAX(sal),MIN(sal) FROM emp GROUP BY job;

以上两个查询就实现了分组的基本操作,而且这些代码都按照标准格式进行了编写。可是在分组之中,个人认为最麻烦的地方就是在于分组操作的若干限制。

注意事项:

  1. 如果一个查询之中不存在GROUP BY子句,那么SELECT 子句之中只允许出现统计函数,其它任何字段都不允许出现

    #错误的语句
    SELECT ename,COUNT(job) FROM emp;
    #正确的语句
    SELECT COUNT(job) FROM emp;
    
  2. 在统计查询之中(存在GROUP BY子句),SELECT子句之中只允许出现分组字段(GROUP BY之后定义的字段和统计函数),其他的任何字段都不允许出现

    #错误的语句
    SELECT ename,COUNT(job) FROM emp GROUP BY job;
    #正确的语句
    SELECT job,COUNT(job) FROM emp GROUP BY job;
    

    在以后进行分组操作的时候,本着一个原则:GROUP BY子句之中允许出现的字段才是SELECT子句中允许出现的字段。

✨**HAVING查询练习:**

  1. 显示不同职位薪资少于1500的人数
SELECT job,COUNT(*) FROM emp WHERE sal<1500 GROUP BY job HAVING COUNT(*)>3;
  1. 显示非销售人员(salesman)工作名称以及从事同一工作的员工的月工资的总和,并且要满足从事同一工作的员工的月工资合计大于等于5000
SELECT job,SUM(sal) '月薪' FROM emp WHERE job!='salesman' GROUP BY job HAVING SUM(sal)>=5000;

效果如下:
在这里插入图片描述

✨==WHEREHAVING区别==

  • WHERE是在分组之前使用(可以没有GROUP BY),不允许使用统计函数;
  • HAVING是在分组之后使用(必须结合GROUP BY),允许使用统计函数。

在这里插入图片描述

五、排序查询

通过条件查询语句可以查询到符合用户需求的数据,但是查询到的数据一般都是按照数据最初被添加到表中的顺序来显示。为了使查询结果的顺序满足用户的要求,MySQL 提供了 ORDER BY 关键字来对查询结果进行排序。

在实际应用中经常需要对查询结果进行排序,比如,在网上购物时,可以将商品按照价格进行排序;在医院的挂号系统中,可以安装挂号的先后顺序进行排序…

语法:

SELECT 字段名 FROM 表名 ... ORDER BY 排序字段名[ASC|DESC],排序字段名[ASC|DESC];

语法说明:

  • 排序字段名:表示需要排序的字段名称,多个字段时用逗号隔开。
  • ASC|DESCASC表示字段按升序排序;DESC表示字段按降序排序。其中ASC为默认值。

特点

  • ORDER BY子句一般放在查询语句的最后面,LIMIT字句除外。
  • 当排序的字段中存在空值时,ORDER BY会将该空值作为最小值来对待。
  • ORDER BY指定多个字段进行排序时,MySQL会按照字段的顺序从左到右依次进行排序。
  • **注意:**在对多个字段进行排序时,排序的第一个字段必须有相同的值,才会对第二个字段进行排序。如果第一个字段数据中所有的值都是唯一的,MySQL将不再对第二个字段进行排序。

排序查询练习

  1. 根据姓名对员工进行排序(升序)
SELECT* FROM emp ORDER BY ename ASC;
  1. 查询入职时间大于1981年6月6日的员工信息,并按照入职时间升序排列
SELECT* FROM emp WHERE hiredate>'1981-6-6' ORDER BY hiredate DESC;
  1. 根据工作职位,进行升序排列,职位相同的情况下,再根据入职时间降序排列
SELECT* FROM emp ORDER BY job ASC,hiredate DESC;
  1. 查询工资不在1000到2000之间的员工的姓名和工资,工资按降序排列
SELECT * FROM emp WHERE sal<1000 || sal>2000 ORDER BY sal DESC;
  1. 按工作职位进行分组,查看每个工作职位的人数,工作职位按升序排列
SELECT job,COUNT(*) FROM emp GROUP BY job ORDER BY job ASC; 

效果如下:
在这里插入图片描述
在这里插入图片描述

五、分页查询

对于比较多的数据,如果在一个页面全部显示,查看起来会眼花缭乱。如果能进行分页显示,将更加快捷、清新的浏览!

语法:

SELECT 字段名 FROM 表名 LIMIT 起始索引,查询记录数;

特点:

  • 起始索引从0开始,起始索引=(查询页码-1) 每页显示记录数*
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为LIMIT 10

分页查询练习:

  1. 查询第一页员工数据,每页展示10条记录
SELECT * FROM emp LIMIT 0,10;
  1. 查询工资大于1500的员工数据,按工资升序排列,并分页,每页展示5条数据
SELECT* FROM emp WHERE sal>1500 ORDER BY sal ASC LIMIT 0,5;
SELECT* FROM emp WHERE sal>1500 ORDER BY sal ASC LIMIT 5,5;

效果展示:

在这里插入图片描述

六、总结

✨掌握基本的数据查询更有利于我们管理数据,处理数据之间的关系会更加得当~✨下节见✨

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

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

相关文章

全网最简单的软渲染器

引言 本文实现了一个包含矩阵变化、光栅化、面剔除、深度测试等功能的软渲染器。所谓软渲染器就是使用 CPU 渲染 3D 模型的程序。因此请记住我们的最终目的&#xff1a;将3D模型显示在屏幕上 。本文分为两个部分&#xff1a;预备知识、渲染器核心实现。预备知识概述了简化的渲…

可以在手机上使用的提醒事项软件有哪些

随着科技的进步&#xff0c;越来越多的人选择使用各种手机软件来提高自己的效率&#xff0c;高效率的手机软件已经成为人们生活和工作中不可或缺的一部分。其中&#xff0c;提醒事项软件是一种非常实用的工具&#xff0c;可以督促用户按时完成任务&#xff0c;有效防止遗忘。 …

chatgpt赋能python:如何利用Python在网上赚钱:一份SEO指南

如何利用Python在网上赚钱&#xff1a;一份SEO指南 随着互联网的快速发展和Python成为一种越来越受欢迎的编程语言&#xff0c;越来越多的人开始利用Python在网上赚取额外的收入。本篇文章将介绍一些Python工具和技术&#xff0c;以及SEO最佳实践&#xff0c;帮助你利用Python…

Spring Boot 回顾

Spring Boot 的发展是很快的&#xff0c;也使用了很多年。但是在工作中&#xff0c;还是发现了很多公司还没有怎么使用 Spring Boot&#xff0c;依旧是在使用 Spring MVC。于是决定复习总结一下。框架的进步和飞跃很重要&#xff0c;但是也不能一味追求新鲜事物&#xff0c;历史…

Yolo算法的演进—YoloCS有效降低特征图空间复杂度(附论文下载)

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;计算机视觉研究院 学习群&#xff5c;扫码在主页获取加入方式 论文地址&#xff1a;YOLOCS: Object Detection based on Dense Channel Compression for Feature Spatial Solidification (arxiv…

【6.12 代随_55day】判断子序列、不同的子序列

判断子序列、不同的子序列 判断子序列动态规划方法图解步骤代码 不同的子序列1.方法图解步骤代码 判断子序列 力扣连接&#xff1a;392. 判断子序列&#xff08;简单&#xff09; 动态规划方法 &#xff08;这道题也可以用双指针的思路来实现&#xff0c;时间复杂度也是O(n)…

Linux变卡cpu占用高,已装curl、wget但提示命令找不到(挖矿病毒)

现象 服务器变卡&#xff0c;top cpu占用非常高&#xff0c;但是进程占用只有1% 下载安装htop查看 看样子中了挖矿病毒 解决方式 修改/etc/hosts 把dev.fugglesoft.me 指向127.0.0.1 F9 -> enter杀掉进程 又多出来一个执行sh的&#xff0c;修改病毒sh&#xff0c;vi进去随便…

Portraiture5.0滤镜插件中文升级版本下载及功能介绍

专注人像修图&#xff0c;打造完美摄影作品&#xff0c;Portrait5.0是款最新版的人脸图像后期处理软件。它可以帮助用户快速编辑修图&#xff0c;提供全方面的人物美白效果&#xff0c;让用户可以更轻松地修图&#xff0c;操作简单&#xff0c;方便快捷&#xff0c;非常不错。新…

Cilium 如何处理 L7 流量

还记得在 使用 Cilium 增强 Kubernetes 网络安全 示例中&#xff0c;我们通过设置网络策略限制钛战机 tiefighter 访问死星 deathstar 的 /v1/exhaust-port 端点&#xff0c;但放行着陆请求 /v1/request-landing。在提起 Cilium 时&#xff0c;都说其是使用 eBPF 技术推动的用于…

心法利器[85] | 算法技术和职业规划

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会&#xff0c;与大家一起成长。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 2022年新一版的文章合集已经发布&#xff0c;累计已经60w字了&#xff0c;获取方式看这里&…

花3万买的大学申请文书,竟和ChatGPT写的一样?

正值高考毕业季&#xff0c;留学出国又成热门话题。眼下&#xff0c;选学校、写申请书是不少学生头等大事。在AI如火如荼的今年&#xff0c;这个老行当却有了新变化。 当学生纷纷用AI写申请书&#xff0c;留学机构开始缩减业务&#xff0c;中介用AI写文书“糊弄”学生&#xf…

哈夫曼树和哈夫曼编码

一.哈夫曼树 1.哈夫曼树 哈夫曼树是一种用于编码的树形结构。它是通过将频率最低的字符反复组合形成的二叉树&#xff0c;使得出现频率高的字符具有较短的二进制编码&#xff0c;而出现频率低的字符具有较长的编码。 在哈夫曼树中&#xff0c;每个叶子节点都代表一个字符&am…

chatgpt赋能python:Python图形填充颜色教程

Python图形填充颜色教程 Python是一种简单易学、高效的编程语言&#xff0c;广泛应用于数据分析、机器学习、Web开发等领域。其中&#xff0c;图形处理是Python编程领域的一个重要方面。在很多情况下&#xff0c;我们需要填充图形颜色来增加图形的美观程度和可读性。本文将介绍…

使用OpenCV和MediaPipe实现姿态识别!

大家好&#xff0c;我是小F&#xff5e; MediaPipe是一款由Google开发并开源的数据流处理机器学习应用开发框架。 它是一个基于图的数据处理管线&#xff0c;用于构建使用了多种形式的数据源&#xff0c;如视频、音频、传感器数据以及任何时间序列数据。 MediaPipe通过将各个感…

表示学习(Representation Learning) Part1--Pretext Text

文章目录 Representation LearningInferring structure&#xff08;推断结构&#xff09; Transformation predictionRotation predictionRelative transformation prediction ReconstructionDenoising AutoencodersContext encodersColorizationSplit-brain encoders Instance…

屏幕录像视频录制编辑软件TechSmith Camtasia 2023 for Mac 简体中文版

TechSmith Camtasia for Mac 中文版 是一款专业的屏幕录像视频录制编辑软件&#xff0c;非常容易就可以获得精彩的截屏视频。创建引人注目的培训&#xff0c;演示和演示视频。Camtasia 屏幕录制软件简化&#xff0c;直观&#xff0c;让您看起来像专业人士。利用Camtasia&#x…

SpringMVC 学习总结

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 1. 什么是 Spring MVC 1.1 Spring、Spring MV…

Dockerfile创建镜像

一、Docker镜像的创建 创建镜像有三种方法&#xff0c;分别为【基于已有镜像创建】、【基于本地模板创建】以及【基于Dockerfile创建】。 1.1 基于现有镜像创建 &#xff08;1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改docker run -it centos:7 /bin/bash …

旧手机卖掉之前我们需要做这几个操作

随着科技的不断进步&#xff0c;人们使用的电子产品也在不断地迭代更新。当我们不再使用旧手机时&#xff0c;卖掉它可以省下一笔开支&#xff0c;但也需要注意保护个人隐私数据。因此&#xff0c;在售卖二手手机之前&#xff0c;正确清除旧手机中的历史数据变得至关重要。 首先…

Java网络开发(Tomcat)——从同步到异步 从jsp 到 js + axios + vue 实现 数据分页显示 数据增删改查

目录 引出一些固定的东西1.固定的响应格式2.name 变成 v-model 进行双向绑定3.下拉框选中--:value"type.id"4.vue导包固定写法5.script固定写法6.axios的get请求7.axios的post请求8.前端美化&#xff1a; 数据分页显示1.后端改成resp响应2.前端的修改要点&#xff08…