【JavaWeb后端学习笔记】MySQL的数据查询语言(Data Query Language,DQL)

MySQL DQL

  • 1、DQL语法与数据准备
    • 1.1 DQL语法
    • 1.2 数据准备
  • 2、基础查询
    • 2.1 查询指定字段
    • 2.2 查询返回所有字段
    • 2.3 给查询结果起别名
    • 2.4 去除重复记录
  • 3、条件查询
    • 3.1 条件查询语法
    • 3.2 条件查询案例分析
  • 4、分组查询
    • 4.1 分组查询语法
    • 4.2 分组查询案例分析
  • 5、排序查询
    • 5.1 排序查询语法
    • 5.2 排序查询案例分析
  • 6、分页查询
    • 6.1 分页查询语法
    • 6.2 分页查询案例分析

1、DQL语法与数据准备

1.1 DQL语法

MySQL的数据查询语言(Data Query Language,DQL)用于查询数据库中表的记录,是MySQL中最常用的部分。

DQL语法的总体结构如下:

select字段列表
from表名列表
where条件列表
group by分组字段列表
having分组后条件列表
order by排序字段列表
limit分页参数

与DDL、DML相比,DQL最为复杂。为满足不同的查询条件和查询数据的需求,DQL可分为:

  • 基本查询
  • 条件查询(where)
  • 分组查询(group by)
  • 排序查询(order by)
  • 分页查询(limit)

1.2 数据准备

本文案例所需资料获取链接(来自黑马程序员):百度网盘链接:fttx
下载百度网盘中提供的SQL脚本,将DQL-数据准备.sql中的代码复制粘贴到IDEA中运行,得到数据库表以及表中的内容。后续基于这些数据进行实例分析。
在这里插入图片描述

2、基础查询

2.1 查询指定字段

查询指定字段 name,entrydate 并返回。

-- 1. 查询指定字段 name,entrydate 并返回
select name, entrydate from tb_emp;

查询结果:
在这里插入图片描述

2.2 查询返回所有字段

查询返回所有字段,可以列出所有的字段,也可以使用通配符。

-- 2. 查询返回所有字段
-- 列出所有字段(推荐)
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;-- 使用通配符(不推荐,不直观,性能低)
select * from tb_emp;

查询结果:
在这里插入图片描述

2.3 给查询结果起别名

使用 as 关键字给查询结果取别名。
查询所有员工的 name,entrydate, 并起别名(姓名、入职日期)

-- 3. 查询所有员工的 name,entrydate, 并起别名(姓名、入职日期)
select name as "姓名", entrydate as "入职日期" from tb_emp;

查询结果:
在这里插入图片描述

2.4 去除重复记录

查询已有的员工关联了哪几种职位(不要重复)。
使用distinct可以去除重复记录,还有一种方式是使用group by。

// distinct去除重复记录
select distinct job from tb_emp;
// group by分组去除重复记录
select job from tb_emp group by job;

查询结果:
在这里插入图片描述

3、条件查询

3.1 条件查询语法

条件查询语法

select 字段列表 from 表名 where 条件列表;

条件列表中包含多种运算:

比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<>或!=不等于
between…and…在某个范围之内(含最小、最大值)
in(…)在in之后的列表中的值,多选一
like 占位符模糊匹配(_匹配单个字符,%匹配任意个字符)
is null是null
逻辑运算符功能
and 或 &&并且(多个条件同时成立)
or 或 ||或者(多个条件任意一个成立)
not 或 !非,不是

3.2 条件查询案例分析

-- 1. 查询 姓名 为 杨逍 的员工
-- 通过 "=" 指定姓名为 "杨逍" 的员工
select * from tb_emp where name = '杨逍';-- 2. 查询 id小于等于5 的员工信息
-- 设置查询条件 id <= 5 
select * from tb_emp where id <= 5;-- 3. 查询 没有分配职位 的员工信息
-- 没有分配职位的员工 job 字段为 null
select * from tb_emp where job is null;-- 4. 查询 有职位 的员工信息
-- 有职位的员工 job 字段非空
select * from tb_emp where job is not null;-- 5. 查询 密码不等于 '123456' 的员工信息
-- 不等于运算符为 "!=" 或者 "<>"
select * from tb_emp where password != '123456';
select * from tb_emp where password <> '123456';-- 6. 查询 入职日期 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间的员工信息
-- 查询一个范围内的条件可以使用 between...and... 或者 >=  <= 配合使用
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01';
select * from tb_emp where entrydate >= '2000-01-01' and entrydate <= '2010-01-01';-- 7. 查询 入职时间 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间 且 性别为女 的员工信息
-- 条件列表中有多个条件,使用 "and" 或者 "or" 或者 "&&" 或者 "||" 连接
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01' and gender = 2;
select * from tb_emp where entrydate >= '2000-01-01' and entrydate <= '2010-01-01' and gender = 2;-- 8. 查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
-- 查询条件是一个列表,可以使用 in(...)
select * from tb_emp where job in (2,3,4);-- 9. 查询 姓名 为两个字的员工信息
-- 指定一个字段的长度,可以使用占位符 "_",如果长度未知,可以使用"%"匹配任意长度
select * from tb_emp where name like '__'; -- _ 表示一个字符的占位符-- 10. 查询 姓 '张' 的员工信息
-- 占位符 "%" 匹配任意长度
select * from tb_emp where name like '张%';

4、分组查询

4.1 分组查询语法

分组查询语法:

select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];

where和having的区别:

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

注意事项:

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
  • 执行顺序:where > 聚合函数 > having。
  • null值不参与任何聚合函数计算。

常用的聚合函数:

函数功能
count统计数量
max最大值(求指定字段的最大值)
min最小值(求指定字段的最小值)
avg平均值(求指定字段的平均值)
sum求和(求指定字段的和)

4.2 分组查询案例分析

-- 聚合函数
-- 1. 统计该企业员工数量
-- 使用count聚合函数统计数量,有三种使用方式
select count(*) as 员工数量 from tb_emp; -- count(*) (推荐)
select count(name) as 员工数量 from tb_emp; -- count(字段)
select count(5) as 员工数量 from tb_emp; -- count(常量)-- 2. 统计该企业员工 ID 的平均值
-- 统计字段平均值使用avg函数
select avg(id) from tb_emp;-- 3. 统计该企业最早入职的员工
-- 统计字段最小值使用min函数,这里where条件中返回了一个子表
select * from tb_emp where entrydate = (select min(entrydate) from tb_emp);-- 4. 统计该企业最迟入职的员工
-- 统计字段最大值使用max函数
select * from tb_emp where entrydate = (select max(entrydate) from tb_emp);-- 5. 统计该企业员工的 ID 之和
-- -- 统计字段和使用sum函数
select sum(id) from tb_emp;-- 分组
-- 1. 根据性别分组 , 统计男性和女性员工的数量
-- 使用 group by 对性别分组,再返回性别以及对应的数量
select gender as 性别, count(*) 数量 from tb_emp group by gender;-- 3. 先查询入职时间在 '2015-01-01' (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位
-- 使用 group by 对职位分组,通过 having 过滤掉 人数少于 2 的职位,最后返回职位已经剩余人数
select job as 职位, count(*) as 数量 from tb_emp where entrydate <= '2015-01-01' group by job having count(job) >= 2;

5、排序查询

5.1 排序查询语法

排序查询语法:

select 字段列表 from 表名 [where 条件列表] [group by 分组字段] order by 字段1 排序方式1,字段2 排序方式2,...;

排序方式有两种:
· ASC:升序(默认值)
· DESC:降序
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

5.2 排序查询案例分析

-- 1. 根据入职时间, 对员工进行升序排序
select * from tb_emp order by entrydate asc ;
select * from tb_emp order by entrydate ; -- 默认排序方式为升序,asc可省-- 2. 根据入职时间, 对员工进行降序排序
select * from tb_emp order by entrydate desc ;-- 3. 根据 入职时间 对公司的员工进行 升序排序,入职时间相同,再按照 更新时间 进行降序排序
select * from tb_emp order by entrydate asc , update_time desc ;

6、分页查询

6.1 分页查询语法

select 字段列表 from 表名 limit 起始索引,查询记录数;

MySQL的索引是从 0 开始。
假设要查第 n 页,每页展示 m 条数据,通过公式可计算:
起始索引 = ( n - 1 ) * m;
查询记录数 = m;

6.2 分页查询案例分析

分页查询较为简单。

-- 1. 从起始索引0开始查询员工数据, 每页展示5条记录
select * from tb_emp limit 0, 5;-- 2. 查询 第1页 员工数据, 每页展示5条记录
select * from tb_emp limit 0, 5;-- 3. 查询 第2页 员工数据, 每页展示5条记录
select * from tb_emp limit 5, 5;-- 4. 查询 第3页 员工数据, 每页展示5条记录
select * from tb_emp limit 10, 5;

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

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

相关文章

插入排序⁻⁻⁻⁻直接插入排序希尔排序

引言 所谓的排序&#xff0c;就是使一串记录按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 常见的排序算法有&#xff1a; 今天我们主要学习插入排序的直接插入排序和希尔排序。 直接插入排序 什么是直接插入排序&#xff1f; 直接插入排序其…

FlightGear+MATLAB+飞行手柄实现实时飞控视景系统

文章目录 一、软件配置二、FlightGearMATLAB联合仿真第一步 复制文件第二步 新建文件夹第三步 打开demo第四步 demo说明第五步 打开Simulink第六步 连接FlightGear第七步 设置FlightGear第八步 生成FlightGear连接文件FlightGear的设置Network的设置File的设置生成.bat文件 第九…

golang并发编程模型之actor(一)

前言 多线程/进程编程是每个程序员的基本功&#xff0c;同时也是开发中的难点&#xff0c;处理各种“锁”的问题是让人十分头痛的一件事。 Actor模型&#xff0c;在1973由Carl Hewitt定义&#xff0c;被Erlang OTP推广&#xff0c;其消息传递更加符合面向对象的原始意图。Actor…

Android13 允许桌面自动旋转

一&#xff09;需求-场景 Android13 实现允许桌面自动旋转 Android13 版本开始后&#xff0c;支持屏幕自动旋转&#xff0c;优化体验和兼容性&#xff0c;适配不同屏幕 主界面可自动旋转 二&#xff09;参考资料 android framework13-launcher3【06手机旋转问题】 Launcher默…

vue2:el-select中的@change事件如何传入自定义参数

在 Element UI 中,el-select 组件用于创建一个下拉选择框。当选项发生变化时,你可以使用 @change 事件来监听这个变化。默认传入的是选中项的值(如果是多选,则传入一个数组) 但是有些时候需要传入额外的自定义参数,可以通过如下方式实现 1、template中定义事件响应函数时…

Go 1.19.4 HTTP编程-Day 20

1. HTTP协议 1.1 基本介绍 HTTP协议又称超文本传输协议&#xff0c;属于应用层协议&#xff0c;在传输层使用TCP协议。HTTP协议属是无状态的&#xff0c;对事务处理没有记忆能力&#xff0c;如果需要保存状态需要引用其他技术&#xff0c;如Cookie。HTTP协议属是无连接的&…

Tomcat使用教程

下载地址&#xff1a;https://tomcat.apache.org/ 配置环境变量 变量名: CATALINA_HOME 变量值: D:\tools\apache-tomcat-9.0.97 Path: %CATALINA_HOME%\bin 启动Tomcat(打开命令提示符) startup.bat 解决乱码问题(打开conf\logging.properties) java.util.logging.Conso…

WPF+LibVLC开发播放器-LibVLC在C#中的使用

LibVLC在C#中的使用 安装包Nuget使用控件使用播放器初始化加载视频文件 视频教程&#xff1a; 使用WPFLibVLC快速开发一个播放器 安装包Nuget 安装下面两个包,必须安装两个 一个是相关框架对应的包&#xff0c;Winform就安装LibVLCSharp.Winform;WPF就安装LibVLCSharp.WPF&am…

[创业之路-173]:《BLM战略规划》- 战略洞察 (战略能力中最最核心的能力) - 市场洞察 -3- 看竞争对手-要比你的竞争对手跟了解他们自己

目录 一、五看三定 二、看竞争 2.1 概述 1、分析竞争对手 2、进行价值链分析 3、紧盯标杆对手 4、关注新进入者和替代产品 5、制定竞争策略 2.2 看竞争的主要内容&#xff1a;背景信息、战略、价值定位、价值链、价值交付、组织架构、财务绩效 1、背景信息 2、战略 …

Mysql - 存储引擎

一 MYSQL体系结构简介 MYSQL的体系结构可以分为四个层级&#xff0c;从上往下依次为&#xff1a; 1. 连接层: 最上层为客户端以及一些连接服务&#xff0c;包含连接操作&#xff0c;例如JAVA想要与MYSQL建立连接就需要用到JDBC&#xff0c;PHP语言与Python也可以连接到MYSQL&am…

基于MinIO打造高可靠分布式“本地”文件系统

MinIO是一款高性能的对象存储服务&#xff0c;而S3协议是由亚马逊Web服务&#xff08;AWS&#xff09;制定的一种标准协议&#xff0c;用于云存储服务之间的数据交换。MinIO与S3协议的关系在于&#xff0c;MinIO实现了S3协议的接口&#xff0c;这意味着用户可以使用与AWS S3相同…

电子应用设计方案-43:智能手机充电器系统方案设计

智能手机充电器系统方案设计 一、引言 随着智能手机的广泛应用&#xff0c;对充电器的性能、效率和安全性提出了更高的要求。本方案旨在设计一款高效、安全、兼容多种快充协议的智能手机充电器。 二、系统概述 1. 系统目标 - 提供快速、稳定、安全的充电功能。 - 兼容主流的智…

vue3项目最新eslint9+prettier+husky+stylelint+vscode配置

一、eslint9和prettier通用配置 安装必装插件 ESlint9.x pnpm add eslintlatest -DESlint配置 vue 规则 , typescript解析器 pnpm add eslint-plugin-vue typescript-eslint -DESlint配置 JavaScript 规则 pnpm add eslint/js -D配置所有全局变量 globals pnpm add globa…

【环境搭建】WordPress本地部署搭建及历史版本插件安装(windows系统)

&#x1f3d8;️个人主页&#xff1a; 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞&#x1f44d;收藏&#x1f497;支持一下哦 【环境搭建】WordPress本地部署搭建及历史版本插件安装&#xff08;windows系统&#xff09; WordPress搭建环境部署&#xff08;…

qt QTemporaryFile详解

1、概述 QTemporaryFile类是Qt框架中用于创建和管理临时文件的类。它提供了一个安全且便捷的方式来生成唯一的临时文件&#xff0c;这些文件通常用于存储临时数据&#xff0c;如缓存、草稿或中间结果。QTemporaryFile确保了临时文件的唯一性&#xff0c;避免了文件名冲突&…

Gitee配置以及如何将本地项目提交到远程仓库

文章目录 准备远程仓库配置注册新建仓库 配置git 生成ssh&#xff0c;输入以下命令&#xff0c;然后连敲三次回车键配置公钥本地代码上传 准备 1.本地下载git 2.注册远程仓库账号 远程仓库配置 注册 官网&#xff1a;https://gitee.com 完成注册 新建仓库 头像->设置-…

基于Java和Vue开发的漫画阅读软件漫画阅读小程序漫画APP

前景分析 受众广泛&#xff1a;漫画的受众群体广泛&#xff0c;不仅限于青少年&#xff0c;还涵盖了成年人等多个年龄层和社会阶层。漫画文化在全球范围内的影响力不断扩大&#xff0c;未来漫画软件创业可以考虑全球市场的拓展。 市场需求大&#xff1a;数字化阅读趋势下&…

2024.12.2——[极客大挑战 2019]Secret File 1

知识点&#xff1a;抓包 代码审计 filter伪协议 一、解题步骤 step 1 查看源代码中的信息 查看源代码发现一个php文件&#xff1a;[./Archive_room.php](http://72df1f22-85bf-47bb-b23a-efcaf88701d4.node5.buuoj.cn:81/Archive_room.php) 点进去后发现没什么用&#xff0c…

距离与AoA辅助的三维测距算法,适用于自适应基站数量的情况。订阅专栏后可直接查看完整源代码

本MATLAB 代码实现了一个基于距离与到达角(AoA)的三维测距系统,主要用于在动态环境中估计目标物体的位置。提供本算法与仅侧角(AoA)的定位误差对比 文章目录 代码运行结果源代码代码功能概述主要步骤分析初始化部分AOA定位绘图部分输出部分代码的应用和意义总结代码运行结…

[241206] X-CMD 发布 v0.4.15:env 升级,mirror 支持华为/腾讯 npm 镜像,pb-wayland 剪贴板

目录 X-CMD 发布 v0.4.15&#x1f4c3;Changelog&#x1f4e6; env|pkg&#x1fa9e; mirror&#x1f4d1; pb&#x1f3a8; theme|starship|ohmyposh&#x1f916; chat&#x1f4dd; man✅ 升级指南 X-CMD 发布 v0.4.15 &#x1f4c3;Changelog &#x1f4e6; env|pkg 新增…