【教程】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

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND