【③MySQL 数据查询】:提高查询的效率

news2024/12/28 20:22:10

前言

欢迎来到小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/686184.html

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

相关文章

海格里斯HEGERLS仓储设备高端定制|四向穿梭车立体库仓储的重要设备换层提升机

随着科技的快速发展&#xff0c;仓储物流行业已慢慢的朝着无人化、自动化和智能化方向快速发展&#xff0c;用户的需求量也随之日益提升。自动化立体库早已成为很多企业智能仓的标配&#xff0c;可以实现仓库高层合理化、存取自动化、操作简便化。在立体仓库内&#xff0c;高位…

基于SQL Server数据库的安全性对策探究

数据库进阶课程论文 题 目&#xff1a;基于SQL Server数据库的安全性对策探究 作者姓名&#xff1a; 作者学号&#xff1a; 专业班级&#xff1a; 提交时间&#xff1a; 2023/6/4 目 录 1概述 1 2 SQL Server数据库的安全问题 1 2&#xff0e;1以使用者身份进入数据库 1 2&a…

区块链中怎么惩罚虚假信息的矿工,工作量证明POW,共识算法

目录 区块链中怎么惩罚虚假信息的矿工 工作量证明POW 什么是工作量证明&#xff1f; 现在出现了另一个问题&#xff1a;如果其他人偷看了小明的答案并且抢答了怎么办&#xff1f; 为什么区块可以安全广播&#xff1f; 共识算法 小结 区块链中怎么惩罚虚假信息的矿工 1…

二叉树|代码随想录2刷|11-34

222.完全二叉树的节点个数 链接&#xff1a;力扣 利用完全二叉树的性质&#xff0c;这个更容易想到&#xff0c;如何计算完全二叉树的节点数 | labuladong 的算法小抄 另一个二分的方法计算太偏了&#xff0c;既然时间复杂度都是O&#xff08;logn*logn&#xff09;&#xff0c…

Python读写xml(xml,lxml)Edge 浏览器插件 WebTab - 免费ChatGPT

Python读写xml&#xff08;xml&#xff0c;lxml&#xff09;Edge 浏览器插件 WebTab - 免费ChatGPT XML一、xml文件创建方法一&#xff1a;使用xml.dom.minidom1、文件、标签的创建 方法二&#xff1a;使用ElementTree 二、xml文件修改1、修改标签内容&#xff0c;属性2、增加子…

flask旅游数据可视化-计算机毕设 附源码81319

flask旅游数据可视化 摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对旅游数据可视化等问题&…

阿里企业邮箱标准版、集团版和尊享版有什么区别?

阿里云企业邮箱版本分为免费版、标准版、集团版和尊享版&#xff0c;除了费用区别&#xff0c;功能方面有什么差异&#xff1f;如何选择企业邮箱版本&#xff1f;免费版0元适合初创型企业&#xff0c;标准版适合大、中、小型企业使用&#xff0c;涉及子公司之间邮箱通讯可以选择…

cesium多颗卫星绕着不同的轨道旋转示例

本示例的目的是介绍演示如何在vue+satellite项目中模拟多颗卫星的运行轨迹和覆盖状态。 直接复制下面的 vue+satellite源示例代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例代码相关API参考:示例效果 配置方式 1)查看基础设置:https://xiaozhuanlan.com…

knife4j 4.1.0(OpenAPI3)实现spring security或shiro权限注解内容显示

前两天写了个knife4j&#xff08;swagger2&#xff09;实现spring security或shiro权限注解内容显示&#xff0c;主要是使用knife4j 2.0.5来实现权限注解内容显示的扩展。 在Spring Boot 3 中只支持OpenAPI3规范&#xff0c;集成knife4j的stater&#xff1a;knife4j-openapi3-…

Deepin 20.08 linux 升级nvidia驱动 黑屏 报错nvrm api mismatch

驱动连接 https://us.download.nvidia.cn/XFree86/Linux-x86_64/535.54.03/NVIDIA-Linux-x86_64-535.54.03.run 安装过程 systemctl set-default multi-user.target reboot 重启到字符界面后 chmod x NVIDIA-Linux-x86_64-535.54.03.run sudo ./NVIDIA-Linux-x86_64-535.5…

C++(11):关联容器

关联容器和顺序容器有着根本的不同&#xff1a;关联容器中的元素是按关键字来保存和访问的。与之相对&#xff0c;顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。 虽然关联容器的很多行为与顺序容器相同&#xff0c;但其不同之处反映了关键字的作用。 关联容器…

服务器数据中了locked勒索病毒,有关locked勒索病毒的介绍与预防建议

随着网络的普及和科技技术的发展&#xff0c;网络安全问题日益突出。而其中&#xff0c;勒索病毒就是一种常见的网络安全威胁。一旦企业的服务器数据库被勒索病毒攻击&#xff0c;会导致企业内部的重要数据被加密&#xff0c;给工作和生产生活带了极大的困扰。下面就为大家介绍…

Python工具箱系列(三十七)

二进制文件操作&#xff08;上&#xff09; python比较擅长与文本相关的操作。但现实世界中&#xff0c;对于非文本消息的处理也很普遍。例如&#xff1a; ◆通过有线、无线传递传感器获得的测量数据。 ◆卫星通过电磁波发送测量数据。 ◆数据中心的数万台服务器发送当前CP…

Android Studio 配置 DCL 单例脚本

DCL&#xff08;Double-Checked Locking&#xff09;单例是一种用于创建单例对象的设计模式。单例模式是一种创建型模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供全局访问点。 DCL单例的核心思想是使用双重检查来保证只有在需要时才对实例进行实例化。它结合…

MIT 6.830 数据库系统 -- Lab One

MIT 6.830 Lab One 项目拉取SimpleDB存储结构一览SimpleDB特性说明Lab One练习一练习二练习三练习四练习五练习六练习七 项目拉取 原项目使用ant进行项目构建&#xff0c;我已经更改为Maven构建&#xff0c;大家直接拉取我改好后的项目即可: https://gitee.com/DaHuYuXiXi/si…

物联网助力鲜花冷链安全——温湿度监控系统

近几年来我国花卉生产的发展尤为迅速&#xff0c;生产面积逐年扩大&#xff0c;产值成倍增长&#xff0c;内销市场越来越旺&#xff0c;出口创汇也有较大幅度上升。 随着人民生活水平的提高和可支配收入的增加&#xff0c;人们对鲜花的需求日益增长&#xff0c;花卉市场的前景…

电子药盒语音芯片ic解决方案WT588F02B-8S,免屏实现精准较时设定

概述&#xff1a;电子药盒是一种具备定时语音提醒服药的贴心智能家居用品&#xff0c;每天的服药时间是预先设定好的&#xff0c;到了设定的时间提醒声音就会响起&#xff0c;服药者因此就可以准时服药。许多需要每天服药的人士&#xff0c;尤其是老年人群体&#xff0c;经常会…

Matlab论文插图绘制模板第105期—带缺口的分组填充箱线图

在之前的文章中&#xff0c;分享了Matlab带缺口的分组箱线图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下带缺口的分组填充箱线图的绘制模板。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自…

算法leetcode|59. 螺旋矩阵 II(rust重拳出击)

文章目录 59. 螺旋矩阵 II&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 59. 螺旋矩阵 II&#xff1a; 给你一个正整数 n &#xff0c…

高速PCB设计中串行/并行信号的仿真与设计技巧

在高速PCB设计中&#xff0c;串行和并行信号的仿真是为了确保信号传输的准确性和完整性&#xff0c;随着系统数据传输速度的提高&#xff0c;准确模拟和优化信号的传输性能对于系统稳定性至关重要&#xff0c;那么你知道在高速PCB设计中&#xff0c;如何针对串行信号和并行信号…