【教程】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作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u