【教程】MySQL数据库学习笔记(六)——数据查询语言DQL(持续更新)

news2024/11/15 14:06:01

文首标志
写在前面:
如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持!


【MySQL数据库学习】系列文章

第一章 《认识与环境搭建》
第二章 《数据类型》
第三章 《数据定义语言DDL》
第四章 《数据操作语言DML》
第五章 《约束》
第六章 《数据查询语言DQL》


文章目录

  • 【MySQL数据库学习】系列文章
    • 一、DQL介绍
    • 二、DQL简单查询
      • (一)数据准备
      • (二)简单查询
    • 三、DQL运算符
      • (一)算数运算符
      • (二)比较运算符
      • (三)逻辑运算符
      • (四)位运算符
    • 四、DQL基本查询
      • (一)排序查询
      • (二)聚合查询
      • (三)分组查询
      • (四)分页查询


一、DQL介绍

DQL(数据查询语言,Data Query Language) 是 SQL(结构化查询语言)的一部分,专注于从数据库中查询和检索数据。DQL 的主要功能是帮助用户获取所需的信息,而不是对数据库中的数据进行修改。最常用的 DQL 语句是 SELECT

DQL通用的语法过于复杂,初学可以先记住SELECTFROMWHERE三个关键词即可,简化后的基本语法如下。

SELECT *| 列名 FROMWHERE 条件

二、DQL简单查询

(一)数据准备

在演示DQL的使用前,需要先做好示例的数据准备,以下是一个简单的数据示例。

-- 1.创建数据库
CREATE DATABASE IF NOT EXISTS mydb1;
USE mydb1;

-- 2.创建商品表
CREATE TABLE product(
pid INT PRIMARY KEY auto_increment, -- 商品编号(自动增加)
pname VARCHAR(20) not null, -- 商品名字
price DOUBLE, -- 商品价格
category_id VARCHAR(20) -- 商品所属分类
);

-- 3.添加数据
INSERT INTO product VALUES(NULL, '海尔洗衣机', 5000, 'c001');
INSERT INTO product VALUES(NULL, '美的冰箱', 3000, 'c001');
INSERT INTO product VALUES(NULL, '格力空调', 5000, 'c001');
INSERT INTO product VALUES(NULL, '九阳电饭煲', 5000, 'c001');

INSERT INTO product VALUES(NULL, '李宁衬衣', 300, 'c002');
INSERT INTO product VALUES(NULL, '范思哲西裤', 800, 'c002');
INSERT INTO product VALUES(NULL, '北面夹克', 440, 'c002');
INSERT INTO product VALUES(NULL, '杰克琼斯休闲裤', 266, 'c002');
INSERT INTO product VALUES(NULL, '耐克卫衣', 180, 'c002');
INSERT INTO product VALUES(NULL, '安踏运动裤', 430, 'c002');

INSERT INTO product VALUES(NULL, '兰蔻面霜', 300, 'c003');
INSERT INTO product VALUES(NULL, '雅诗兰黛精华水', 200, 'c003');
INSERT INTO product VALUES(NULL, '香奈儿香水', 350, 'c003');
INSERT INTO product VALUES(NULL, 'SK-II神仙水', 350, 'c003');
INSERT INTO product VALUES(NULL, '资生堂粉底液', 180, 'c003');

INSERT INTO product VALUES(NULL, '白象方便面', 56, 'c004');
INSERT INTO product VALUES(NULL, '卫龙辣条', 17, 'c004');
INSERT INTO product VALUES(NULL, '三只松鼠坚果', 88, 'c004');

返回结果如下。
在这里插入图片描述

值得一提的是auto_increment在给出后此列自动增加,所以在下面添加数据中对此列数据全部填为NULL依旧能够正确排序。

(二)简单查询

数据准备完成之后,就可以通过不同的需求使用SELECT语句对数据进行查询了,以下是简单的示例。

-- 1.查询所有商品
SELECT * FROM product; -- 查询product表的全部列

-- 2.查询商品名和商品价格
SELECT pname, price FROM product; -- 查询product表的pname和price列

-- 3.别名查询
-- 3.1.表别名
SELECT * FROM product AS p; -- 将product表命名为p,查询全部列
-- 3.2.列别名
SELECT pname AS pn FROM product; -- 将product表的pname列命名为pn,查询pn列

-- 4.去掉重复值
SELECT DISTINCT price FROM product; -- 查询product表中的price列,并去除重复值显示

-- 5.查询结果使用表达式,运算查询
SELECT pname, price+10 FROM product; -- 查询product表的pname和price列,并将price列的全部值加10

需要注意的是别名命名关键字为AS,但同时可以省略,如3.1.表别名案例可以写作如下格式。

-- 3.1.表别名
SELECT * FROM product p; -- 将product表命名为p,查询全部列

同时,虽然在简单查询中别名的使用并不显著,但通常在处理多表数据时会频繁使用,在5.查询结果使用表达式的内容中,日常操作可能是将修改后的列重新命名别名使用,如下。

-- 5.查询结果使用表达式,运算查询
SELECT pname, price+10 new_price FROM product; -- 查询product表的pname和price列,并将price列的全部值加10

此时查询后price列在全部值加10后被命名为new_price

三、DQL运算符

在 SQL 中,运算符用于执行各种操作,主要包括比较、数学计算、逻辑操作和字符串处理等。

MySQL主要支持四种运算符,分别是:

  • 算数运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符

(一)算数运算符

算数运算符用于进行算术计算。

算数运算符说明
+加法运算符
-减法运算符
*乘法运算符
/除法运算符
%取模运算符

以下是简单的使用示例。

SELECT name,price + 10 AS new_price FROM product; -- 将每件商品价格加10

SELECT pname,price * 1.1 AS new_price FROM product; -- 将每件商品价格上调10%

(二)比较运算符

比较运算符用于比较两个值或表达式,返回布尔值(TRUEFALSE)。

比较运算符说明
=用于检查两个值是否相等
!=<>用于检查两个值是否不相等
>用于检查一个值是否大于另一个值
<用于检查一个值是否小于另一个值
>=用于检查一个值是否大于或等于另一个值
<=用于检查一个值是否小于或等于另一个值
BETWEEN用于检查一个值是否在两个指定值之间
IN用于检查一个值是否在指定的集合中
NOT IN用于检查一个值是否不在指定的集合中
LIKE用于进行通配符模式匹配
REGEXP用于进行正则表达式模式匹配
IS NULL用于检查值是否为 NULL
IS NOT NULL用于检查值是否不为 NULL
LEAST当有两个或多个参数时,返回最小值
GREATEST当有两个或多个参数时,返回最大值

以下是简单的使用示例。

-- 查询商品名称为“海尔洗衣机”的全部信息
SELECT * FROM product WHERE pname = '海尔洗衣机';

-- 查询价格为800的商品
SELECT * FROM product WHERE price = 800;

-- 查询价格不为800的商品
SELECT * FROM product WHERE price != 800;
SELECT * FROM product WHERE price <> 800;

-- 查询价格大于60的商品
SELECT * FROM product WHERE price > 60;

-- 查询价格在200到1000之间的所有商品
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;

-- 查询价格为200或800的商品
SELECT * FROM product WHERE price IN(200,800);

-- 查询含有“裤”的商品
SELECT * FROM product WHERE pname LIKE '%裤%'; -- 通配符“%”表示任意字符

-- 查询以“水”结尾的商品
SELECT * FROM product WHERE pname LIKE '%水';

-- 查询第二个字为“克”的商品
SELECT * FROM product WHERE pname LIKE '_克%'; -- 通配符“_”表示单个字符

-- 查询以category_id为null的商品
SELECT * FROM product WHERE category_id IS NULL;

-- 查询以category_id不为null的商品
SELECT * FROM product WHERE category_id IS NOT NULL;

(三)逻辑运算符

逻辑运算符用于组合多个条件表达式。

逻辑运算符说明
AND&&逻辑与,用于连接多个条件,只有所有条件都为 TRUE 时结果才为 TRUE
OR||逻辑或,用于连接多个条件,只要其中一个条件为 TRUE,结果就为 TRUE
NOT!逻辑非,用于取反条件的结果。即条件为 TRUE 时返回 FALSE,条件为 FALSE 时返回 TRUE

以下是简单的使用示例。

-- 查询价格不为800的商品
SELECT * FROM product WHERE NOT(price = 800);

-- 查询价格在200到1000之间的所有商品
SELECT * FROM product WHERE price >= 200 AND price <= 1000;

-- 查询价格为200或800的商品
SELECT * FROM product WHERE price = 200 OR price = 800;
SELECT * FROM product WHERE price = 200 || price = 800;

(四)位运算符

位运算符用于对整数进行位级操作。

位运算符说明
&按位与运算符,用于计算两个数的每一位的与
|按位或运算符,用于计算两个数的每一位的或
^按位异或运算符,用于计算两个数的每一位的异或
~按位取反运算符,用于取反数的每一位
<<按位左移运算符,将一个整数的位向左移动指定的位数
>>按位右移运算符,将一个整数的位向右移动指定的位数

四、DQL基本查询

(一)排序查询

当在MySQL中需要对读取的数据进行排序,就可以使用ORDER BY子句来设定按某个字段某种方式进行排序后,再返回搜索结果。ORDER BY用于子句中可以支持单个字段,多个字段,表达式,函数,别名。

ORDER BY子句,放在查询语句的最后面(LIMIT子句除外)。

具体查询语法如下所示。

SELECT 
字段1,字段2,...
FROM 表名
ORDER BY 字段名1[ASC|DESC],字段名2[ASC|DESC],...

在语法中可以看到,排序查询分为两种模式,而使用ASC是升序查询(英语ascend);使用DESC则为降序查询(英语descend);需要注意,如果不输入则默认为升序。

以下是简单的示例。

-- 使用价格排序(降序)
SELECT * FROM product ORDER BY price DESC;

-- 在价格排序的基础上,以分类ID排序(升序)
SELECT * FROM product ORDER BY price DESC,category_id ASC;

-- 显示商品的价格(去重复),并排序(降序)
SELECT DISTINCT price FROM product ORDER BY price DESC; 

(二)聚合查询

在 MySQL 中,聚合查询用于对数据进行汇总和计算,以获得一个结果集的统计信息。具体而言,之前使用的方法都是横向查询,即根据条件一行行地判断;而使用聚合函数的聚合查询则是纵向查询,是将一整列的值进行计算,从而返回一个计算后的单一的值。

另外,聚合函数会忽略空值。具体聚合函数如下所示。

聚合函数作用
COUNT()统计指定列不为NULL的记录行数
SUM()计算指定列的数值和(如果指定列类型不是数值类型,那么计算结果为0)
AVG()计算指定列的平均值(如果指定列类型不是数值类型,那么计算结果为0)
MAX()计算指定列的最大值(如果指定列是字符串类型, 那么使用字符串排序运算)
MIN()计算指定列的最小值(如果指定列是字符串类型, 那么使用字符串排序运算)

使用以上的聚合函数可以进行聚合查询,具体示例如下。

-- 查询商品的总条数
SELECT COUNT(pid) FROM product;
SELECT COUNT(*) FROM product;

-- 查询价格大于200的商品的总条数
SELECT COUNT(pid) FROM product WHERE price > 200;

-- 查询分类为“c001”所有商品的总和
SELECT SUM(price) FROM product WHERE category_id = 'c001';

-- 查询分类为“c002”所有商品的平均值
SELECT AVG(price) FROM product WHERE category_id = 'c002';

-- 查询商品的最大价格
SELECT MAX(price) FROM product;

-- 查询商品的最小价格
SELECT MIN(price) FROM product;

(三)分组查询

在 MySQL 中,分组查询用于将结果集分成若干组,并对每组数据进行聚合操作。分组查询通常与 GROUP BY 子句和HAVING子句结合使用,还可以配合聚合函数来统计和分析数据。

其语法格式为如下所示。

SELECT 字段1,字段2,... FROM 表名 GROUP BY 分组字段 HAVING 分组条件;

下面是简单的示例。

-- 统计各个分类的商品的个数
SELECT category_id,COUNT(*) FROM product GROUP BY category_id;

返回结果如下。
在这里插入图片描述

如果要进行分组的话,则SELECT子句之后只能出现分组的字段和统计函数,其他的字段不能出现。另外,GROUP BY字段后可以使用多个字段,只有多个字段都相同的值才会归于同一类。

同时,如果希望对分类结果进行筛选,不能使用WHERE,而是需要使用HAVING子句,具体示例如下。

-- 统计各个分类商品的个数,且只显示个数大于4的商品信息
SELECT category_id,COUNT(*) FROM product GROUP BY category_id HAVING COUNT(*) > 4;

返回结果如下。
在这里插入图片描述

(四)分页查询

在 MySQL 中,分页查询用于从查询结果集中获取特定范围的数据。这在处理大量数据时非常有用,尤其是在显示分页结果时,如在网站上显示搜索结果或列表,例如一共30条信息,可以选择一页显示5条信息,即第一页显示1-5条,第二页显示6-10条等。

具体语法格式如下。

SELECT 字段1,字段2,... FROM 表名 LIMIT 偏移量,记录数;

以下是简单的示例。

-- 查询product表前5条数据记录
SELECT * FROM product LIMIT 5;

-- 查询product表的记录,从第4条开始,显示5条
SELECT * FROM product LIMIT 3,5;

我是EC,一个永远在学习中的探索者,关注我,让我们一起进步!同时,欢迎你参观我的个人网站EliasChang.xyz,我的博客将首发在上面~

文末标志

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

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

相关文章

Day16_0.1基础学习MATLAB学习小技巧总结(16)——元胞数组

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍&#xff0c;为了在这个过程中加深印象&#xff0c;也为了能够有所足迹&#xff0c;我会把自己的学习总结发在专栏中&#xff0c;以便学习交流。 素材来源“数学建模清风” 特此说明&#xff1a;本博客的内容只在于总结在…

详细讲解hive on tez中各个参数作用,以及如何优化sql

最近经常有优化sql的任务&#xff0c;但是自己能力有限&#xff0c;只能凭经验去优化&#xff0c;现整理加学习一波&#xff0c;也欢迎各位学习和讨论。 我们经常用hivesql 的模型就是 join.如下。 insert overwrite table a select * from b left join c 这里面发生了什么…

【C++取经之路】map的详细介绍及其使用

目录 关于map 键值对 map的常用操作 关于multimap 关于map template < class Key, // map::key_typeclass T, // map::mapped_typeclass Compare less<Key>, //…

【时间盒子】-【5.绘制闹钟】动态绘制钟表和数字时间

Tips: Preview装饰器&#xff0c;支持组件可预览&#xff1b; Component装饰器&#xff0c;自定义组件&#xff1b; Canvas组件的使用&#xff1b; 使用RenderingContext在Canvas组件上绘制图形&#xff0c;请参考官方文档&#xff1a;https://developer.huawei.com/consume…

Apache ShardingSphere数据分片弹性伸缩加解密中间件

Apache ShardingSphere Apache ShardingSphere 是一款分布式 SQL 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强。 软件背景 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding…

如何利用python实现碰撞原理

先看图 跑了大概一天 这是结果 具体是通过BIP39规则生成的种子数据 生成完词组后&#xff0c;再根据词组生成姨太地址 # 生成随机助记词 def generate_mnemonic():entropy os.urandom(16) # 随机生成 16 字节熵mnemonic []for i in range(12): # 生成 12 个助记词word_in…

欧拉数据库的搭建及其部署

数据库的搭建 进行数据库安装前&#xff0c;必须保证软件yum仓库搭建完成 使用命令 dnf install mariadb-server&#xff0c;发现冲突selinux-policy-targeted-35.5-21.oe2203sp3.noarch有问题 [rootlocalhost yum.repos.d]# dnf install mariadb-server [rootlocalhost y…

Arthas工具使用,分析线上问题好帮手

在K8S中的步骤&#xff1a; #1.进入node #2.下载arthas 在容器中下载并启动 Arthas&#xff1a; java -jar arthas-boot.jar --repo-mirror aliyun --use-http #3.找到出现问题的类和方法的绝对路径 类路径 方法 #4.执行trace命令或者watch命令 trace:命令会追踪方法的执…

电脑硬盘数据丢失了怎么恢复?简单实用的硬盘数据找回的方法

我们的电脑使用硬盘作为存储设备来保存数据&#xff0c;硬盘里的数据是存储在扇区上&#xff0c;这些存储数据的单元则位于表面有磁性材料的旋转的盘片上。硬盘内部的磁头悬浮于高速旋转的盘片上&#xff0c;用于读写和检索数据。 假如我们使用电脑时不小心删除了某个文件&…

iOS——weak修饰符的学习补充

Weak修饰符的内部机制 SideTable ObjectC中对对象的存储&#xff0c;实现上做了一定的优化&#xff0c;一旦有弱引用对象被赋值&#xff0c;即运行时&#xff08;Runtime&#xff09;会在全局的SideTables中分配一个SideTable空间&#xff0c;此空间是根据对象的地址相关算法…

多线程 | synchronized的底层原理

目录 1.它做了什么2.什么是Monitor如何减少用户态和内核态的切换 3.对象头和内置锁 (ObjectMonitor)3.1对象头3.2内置锁 (ObjectMonitor)3.3wait方法底层3.4notify 方法的底层实现 4.总结 1.它做了什么 使用synchronized的修饰的代码块如下&#xff0c;那么jvm是如何编译它的&…

【PyQt6 应用程序】短剧原视频直接生成解说视频精简版

在当今视频内容创作日益繁荣的时代,利用自动化工具进行视频编辑和二次创作已成为提高生产效率和创作水平的重要手段。本文将介绍如何使用PyQt6创建一个应用程序,该程序能够自动提取视频中的解说和原声部分,并使用人工智能生成配套的解说视频,从而生成具有独特风格的新视频内…

Oracle OCP认证值得考吗? 需要门槛吗?

随着数据量的爆炸性增长和企业对数据依赖性的提升&#xff0c;对数据库专业人士的需求也在不断上升。OCP认证&#xff0c;作为Oracle公司提供的权威认证之一&#xff0c;长期以来被视为数据库专业人士技能和知识水平的重要标志。 但随着技术的发展和认证种类的增多&#xff0c;…

基于百度AIStudio飞桨paddleRS-develop版道路模型开发训练

基于百度AIStudio飞桨paddleRS-develop版道路模型开发训练 参考地址&#xff1a;https://aistudio.baidu.com/projectdetail/8271882 基于python35paddle120env环境 预测可视化结果&#xff1a; &#xff08;一&#xff09;安装环境&#xff1a; 先上传本地下载的源代码Pad…

数据分析:R语言计算XGBoost线性回归模型的SHAP值

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍SHAP用途计算方法:应用加载R包导入数据数据预处理函数模型介绍 SHAP(SHapley Additive exPlanations)值是一种解释机器学习模型预测的方法。它基于博弈论中的Shapley值概念,…

Linux高性能服务器编程 总结索引 | 第3章:TCP协议详解

和IP协议相比&#xff0c;TCP协议 更靠近应用层&#xff0c;因此在应用程序中具有 更强的可操作性。一些重要的socket选项都和TCP协议相关 TCP头部信息。TCP头部信息出现在 每个TCP报文段中&#xff0c;用于指定 通信的源端口号、目的端口号&#xff0c;管理TCP连接&#xff0…

使用ffmpeg在视频中绘制矩形区域

由于项目需要对视频中的人脸做定位跟踪&#xff0c; 我先使用了人脸识别算法&#xff0c;对视频中的每个帧识别人脸、通过人脸库比对&#xff0c;最终记录坐标等信息。 然后使用ffmpeg中的 drawbox 滤镜功能&#xff0c;选择性的绘制区域。从而实现人脸定位跟踪 1、drawbox …

C++项目引入开源库bit7z

摘要&#xff1a; 公司C项目需要能解压缩.tar文件&#xff0c;关键是要在Windows环境下&#xff0c;tar格式主要是Linux中用的压缩文件&#xff0c;还要考虑到用户可能没有Windows自带的tar命令&#xff0c;最终解决方案就是一步到位&#xff0c;考虑到后续的功能拓展引入第三方…

尚品汇-延迟插件实现订单超时取消(四十五)

目录&#xff1a; &#xff08;1&#xff09;延迟插件封装 &#xff08;2&#xff09;基于延迟插件测试 如何保证消息幂等性&#xff1f; &#xff08;3&#xff09;改造订单service-order模块-实现订单超时取消 &#xff08;1&#xff09;延迟插件封装 把消息带过去&#…

computed计算属性及方法对比和循环遍历统计以及watch和watchEect监听的用法

1.computed计算属性及方法对比 1.了解computed计算属性和用法 在我们的一些应用中可以看的应用会给我们提供一些计算类的功能比如取名&#xff0c;它会给你提供两个输入框&#xff0c;然后在你给这两个输入框输入值的时候会在下方生成你输入这个两个值的结合值&#xff0c;就…