当前位置: 首页 > news >正文

【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;

相关文章:

【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 排序查询…...

360 最新Android面试题及参考答案

一个 activity 只能有一个进程么【对进程的理解】 在 Android 中,一个 Activity 并不只能有一个进程。进程是操作系统进行资源分配和调度的一个独立单位。 从原理上来说,Android 系统允许开发者通过在 AndroidManifest.xml 文件中的<activity>标签设置 android:process…...

《操作系统 - 清华大学》6 -3:局部页面置换算法:最近最久未使用算法 (LRU, Least Recently Used)

文章目录 1. 最近最久未使用算法的工作原理2. 最近最久未使用算法示例3.LRU算法实现3.1 LRU的页面链表实现3.2 LRU的活动页面栈实现3.3 链表实现 VS 堆栈实现 1. 最近最久未使用算法的工作原理 最近最久未使用页面置换算法&#xff0c;简称 LRU&#xff0c; 算法思路&#xff…...

ES6新增了哪些特性(待更新)

1.let&#xff0c;const 1.1.var&#xff0c;let&#xff0c;const的区别 1.1.1 var存在变量提升&#xff0c;let和const不存在。 1.1.2 let和const只能在块作用域里访问。 1.1.3 同一作用域下let和const不能声明同名变量&#xff0c;而var可以。 1.1.4 const定义常量&am…...

剖析一下自己的简历第二条

剖析一下自己的简历第二条 背景前置说明可能会被问到的问题 背景 剖析一下自己简历, 增加对一些专业知识的掌握. 我的简历第二条是这样写的: “2. 熟悉JVM、JMM&#xff0c;包括内存模型&#xff0c;垃圾回收机制&#xff0c;了解其基本调优技巧并具备线上调优经验。”. 前置…...

威联通-001 手机相册备份

文章目录 前言1.Qfile Pro2.Qsync Pro总结 前言 威联通有两种数据备份手段&#xff1a;1.Qfile Pro和2.Qsync Pro&#xff0c;实践使用中存在一些区别&#xff0c;针对不同备份环境选择是不同。 1.Qfile Pro 用来备份制定目录内容的。 2.Qsync Pro 主要用来查看和操作文…...

性能测试基础知识jmeter使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 性能指标 1. 并发数 (Con…...

Ceph文件存储

Ceph文件存储1.概念:数据以文件的形式存储在存储介质上&#xff0c;每个文件都有一个唯一的文件名并存储在一个目录结构中。提供方便的文件访问接口&#xff0c;支持多种文件操作&#xff0c;如创建、删除、读取、写入、复制等。用于存储和管理个人文件&#xff0c;如文档、图片…...

Hive分区表新增字段并指定位置

Hive分区表新增字段并指定位置 1、Hive分区表新增字段2、CASCADE关键字3、历史分区新增列为NULL问题 1、Hive分区表新增字段 Hive分区表新增字段并指定位置主要分为两步&#xff1a;新增字段和移动字段 1&#xff09;新增字段 ALTER TABLE table_name ADD COLUMNS (col_name …...

关系型数据库(RDBMS)与非关系型数据库(NoSQL)应用场景

关系型数据库适用于事务性、强一致性和结构化数据场景&#xff1b;非关系型数据库则在高并发、大数据、非结构化数据场景中表现更优&#xff1b;数据量和并发量增加时&#xff0c;应通过分库分表、缓存、集群扩展等手段进行优化。 1. 在什么样的业务场景下&#xff0c;你会优先…...

浅谈CI持续集成

1.什么是持续集成 持续集成&#xff08;Continuous Integration&#xff09;&#xff08;CI&#xff09;是一种软件开发实践&#xff0c;团队成员频繁地将他们的工作成果集成到一起(通常每人每天至少提交一次&#xff0c;这样每天就会有多次集成)&#xff0c;并且在每次提交后…...

华为新手机和支付宝碰一下 带来更便捷支付体验

支付正在变的更简单。 11月26日&#xff0c;华为新品发布会引起众多关注。发布会上&#xff0c;华为常务董事余承东专门提到&#xff0c;华为Mate 70和Mate X6折叠屏手机的“独门支付秘技”——“碰一下”&#xff0c;并且表示经过华为和支付宝的共同优化&#xff0c;使用“碰…...

shell编程基础笔记

目录 echo改字体颜色和字体背景颜色 bash基本功能&#xff1a; 运行方式&#xff1a;推荐使用第二种方法 变量类型 字符串处理&#xff1a; 条件判断&#xff1a;&#xff08;使用echo $?来判断条件结果&#xff0c;0为true&#xff0c;1为false&#xff09; 条件语句&a…...

VS Code配置Lua调试环境

我这里选用Emmylua进行Lua代码调试&#xff0c;调试环境配置如下: 一、安装Emmylua 在VS Code扩展里搜索emmylua&#xff0c;然后进行安装, 如下 二、配置launch.json 在Run and Debug里生成launch.json文件 点击以上菜单后&#xff0c;生成launch.json文件如下: 三、配置.e…...

FPGA(一)Quartus II 13.1及modelsim与modelsim-altera安装教程及可能遇到的相关问题

零.前言 在学习FPGA课程时&#xff0c;感觉学校机房电脑用起来不是很方便&#xff0c;想着在自己电脑上下载一个Quartus II 来进行 基于 vhdl 语言的FPGA开发。原以为是一件很简单的事情&#xff0c;没想到搜了全网文章发现几乎没有一个完整且详细的流程教学安装&#xff08;也…...

【单片机】ESP32-S3+多TMC2209控制步进电机系列1 UART通信及无传感回零 硬件部分

目录 1. 硬件选型1.1 esp32硬件型号1.2 TMC2209 硬件型号 2 原理接线图2.1 esp32接线2.2 TMC2209接线2.2.1 单向通讯 不配置地址2.2.2 单向通讯 配置地址2.2.3 双向通讯 单UART 【本文采用】2.2.4 双向通讯 多UART 3. 成品效果 1. 硬件选型 1.1 esp32硬件型号 采用的是微雪ES…...

Django之ORM

1.ORM介绍 ORM概念 对象关系映射&#xff08;Object Relational Mapping&#xff0c;简称ORM&#xff09;模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说&#xff0c;ORM是通过使用描述对象和数据库之间映射的元数据&#xff0c;将程序中的对…...

html css 图片背景透明

html css图标背景透明 css属性&#xff1a; background-color:transparent; mix-blend-mode: multiply; 完整HTML代码&#xff1a; <html><head><title>Test</title></head><body><div id"test" style"background-col…...

使用ALB实现gRPC协议的负载均衡

gRPC是一种高性能、开源的远程过程调用框架&#xff0c;当您使用gRPC进行后端服务通信时&#xff0c;您可使用应用型负载均衡ALB&#xff08;Application Load Balancer&#xff09;实现gRPC协议的负载均衡&#xff0c;统一流量入口。gRPC基于HTTP/2协议进行通信&#xff0c;目…...

解决IDEA的easycode插件生成的mapper.xml文件字段之间逗号丢失

问题 easycode插件生成的mapper.xml文件字段之间逗号丢失&#xff0c;如图 解决办法 将easycode(在settings里面的othersettings)设置里面的Template的mapper.xml.vm和Global Config的mybatisSupport.vm的所有$velocityHasNext换成$foreach.hasNext Template的mapper.xml.vm(…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...