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

本文主要是介绍【教程】MySQL数据库学习笔记(六)——数据查询语言DQL(持续更新),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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


【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; -- 将每件商品价格加10SELECT 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,我的博客将首发在上面~

文末标志

这篇关于【教程】MySQL数据库学习笔记(六)——数据查询语言DQL(持续更新)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135750

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na