MySQL超详细学习教程,2023年硬核学习路线(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL超详细学习教程,2023年硬核学习路线(二)

8. DQL- 数据的查询操作


查询是数据操作至关重要的一部分,比如说在所有商品中查找出价格在规定范围内的所有商品,要想把数据库中的数据在客户端中展示给用户,一般都进行了查询的操作。

在实际开发中,我们要根据不同的需求,并且考虑查询的效率来决定怎样进行查询,学习查询前,可以先看看查询的完整语法:

SELECT
  字段列表
FROM
  表名列表
WHERE
  条件列表
GROUP BY
  分组字段
HAVING
  分组后条件
ORDER BY
  排序字段
LIMIT
  分页限定


根据查询的完整语法中的关键字,我们分别来学习基础查询,条件查询,排序查询,分组查询和分页查询。

下面的练习中使用以下的案例学习单表查询:


-- 删除stu表
drop table if exists stu;
-- 创建stu表
CREATE TABLE stu (
id int, -- 编号
name varchar(10), -- 姓名
age int, -- 年龄
gender varchar(5), -- 性别
math double(5,2), -- 数学成绩
english double(5,2) -- 英语成绩
);
-- 添加数据
INSERT INTO stu(id,name,age,gender,math,english)
VALUES
(1,'小张',23,'男',66,78),
(2,'小李',20,'女',98,87),
(3,'小陈',55,'男',56,77),
(4,'小樊',20,'女',76,65),
(5,'小马',20,'男',86,NULL),
(6,'小赵',57,'男',99,99);


在Navicat中选中SQL并执行:

1.1.png

8.1 基础查询


1. 基础查询语法


查询多个字段:

select 字段列表 from 表名;


查询全部字段:

select * from 表名;


去除重复记录:

select distinct 字段列表 from 表名;


起别名操作:

select 字段名 别名 from 表名;


2. 基础查询练习


使用学生表进行基础查询练习:

查询多个字段的练习:

select name,math from stu;

1.2.png

起别名操作练习:

select name,english 英语成绩 from stu;

1.3.png

8.2 条件查询


1. 条件查询语法


一般语法:

select 字段列表 from 表名 where 条件列表;


条件查询一般配合运行符进行,下面是常见的几个运算符:

运算符

功能描述
> < = ! 大于 小于 等于 不等于
between…and… 在这个范围之内
in(…)

多选一

is null / is not null

是null / 不是null

and 或 &&

并且

or 或 || 或者

2. 条件查询练习


使用学生表进行条件查询练习:

查询年龄大于20的学生信息:


select * from stu where age>20;

1.4.png


查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于21岁的学生信息:


select * from stu where age in(18,20,21);

1.5.png


模糊查询使用like关键字,可以使用通配符进行占位:

_ : 代表单个任意字符

% : 代表任意个数字符


查询姓名中含有张的学生信息:

select * from stu where name like '%张%';

1.6.png

8.3 排序查询


1. 排序查询语法


select 字段列表 from 表名 order by 排序字段名1 [排序方式]...;


注:排序方式有两种:分别是升序ASC和降序DESC,默认情况下是升序ASC。

2. 排序查询练习


使用学生表进行排序查询练习:

查询学生信息,按照数学成绩降序排列:

select * from stu order by math DESC;


8.4 聚合函数


1. 聚合函数语法


什么是聚合函数呢?在进行查询操作时,往往需要对一整列进行运算,例如可以计算一整列成绩数据的平均值,我们就要使用聚合函数。下面是常见的聚合函数:

函数名

功能

count(列名)

统计数量(一般选用不为null的列)

max(列名)

最大值

min(列名)

最小值

sum(列名)

求和

avg(列名)

平均值


一般语法:

select 聚合函数 from 表名;


注:NULL值不参与聚合函数运算。

2.聚合函数练习


使用学生表进行聚合函数的练习:

统计该表中一共有几个学生:

select count(id) from stu;

1.7.png

上面我们使用某一字段进行运算,这样做可能面临的问题是某一个值可能是NULL,所以我们一般使用 * 进行运算,因为一行中不可能所有的字段都是NULL。

select count(*) from stu;


查询数学成绩的平均分:

select avg(math) from stu;

1.8.png

8.5 分组查询


1. 分组查询语法


select 字段列表 from 表名 [where 分组前的条件限定] group by 分组字段名 [having 分组后的条件过滤]


注:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义。

2. 分组查询练习


使用学生表进行分组查询练习:

查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组:

select gender, avg(math),count(*) from stu where math > 70 group by gender;

1.9.png

查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的:

select gender, avg(math),count(*) from stu where math > 70 group by gender having count(*) > 2;

1.10.png

注:where 和 having 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。所以,where 不能对聚合函数进行判断,having 可以。

8.6 分页查询


1. 分页查询语法


在我们的印象中,网页在展示大量的数据时,往往不是把数据一下全部展示出来,而是用分页展示的形式,其实就是对数据进行分页查询的操作,即每次只查询一页的数据展示到页面上。

select 字段列表 from 表名 limit 查询起始索引,查询条目数;


在 limit 关键字中,查询起始索引这个参数是从0开始的。

2. 分页查询练习


使用学生表进行分页查询练习:

从0开始查询,查询3条数据:

select * from stu limit 0,3;

1.11.png


起始索引 = (当前页码 - 1) * 每页显示的条数

在SQL标准中,一共规定了6种不同的约束,包括非空约束,唯一约束和检查约束等,而在MySQL中是不支持检查约束的,所以这篇文章先对其余5种约束做一个详解和练习。

9. 约束的概念


约束是作用于表中列上的规则,用于限制加入表的数据。例如,作为主键的列一定是非空的唯一的,否则将无法对数据进行区分。约束的存在保证了数据库中数据的正确性、有效性和完整性。所以约束在数据库设计中是非常重要的。

10. 约束的分类


前面说到SQL标准把约束分为了6大类,分别是非空约束,唯一约束,主键约束,检查约束,默认约束和外键约束,添加约束时我们只需要在SQL中添加关键词,便可以限制表中的数据。


约束类型

功能

非空约束 NOT NULL

保证列中所有的数据不能有null值

唯一约束 UNIQUE

保证列中所有数据各不相同

主键约束 PRIMARY KEY

主键是一行数据的唯一标识,要求非空且唯一

检查约束 CHECK

保证列中的值满足某一条件

默认约束 DEFAULT

保存数据时,未指定值则采用默认值

外键约束 FOREIGN KEY

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

11. 非空约束


目的:保证列中所有的数据不能有null值

添加约束:


CREATE TABLE 表名(
  列名 数据类型 NOT NULL,
);


建完表后添加非空约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;


删除约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型;


12. 唯一约束


目的:保证列中所有数据各不相同

添加约束:

CREATE TABLE 表名(
  列名 数据类型 UNIQUE [AUTO_INCREMENT],
  -- AUTO_INCREMENT: 当不指定值时自动增长
);
CREATE TABLE 表名(
  列名 数据类型,
  [CONSTRAINT] [约束名称] UNIQUE(列名)
);


建完表后添加唯有约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;


删除约束:


ALTER TABLE 表名 DROP INDEX 字段名;


13. 主键约束


目的:主键是一行数据的唯一标识,要求非空且唯一

添加约束:

CREATE TABLE 表名(
  列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
);
CREATE TABLE 表名(
  列名 数据类型,
  [CONSTRAINT] [约束名称] PRIMARY KEY(列名)
);


建完表后添加主键约束:

ALTER TABLE 表名 ADD PRIMARY KEY(字段名);


删除约束:

ALTER TABLE 表名 DROP PRIMARY KEY;


14. 默认约束


目的:保存数据时,未指定值则采用默认值

添加约束:

CREATE TABLE 表名(
  列名 数据类型 DEFAULT 默认值,
);


建完表后添加默认约束:

ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;


删除约束:

ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
14天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02-作业
本教程介绍了数据库表的创建与管理操作,包括创建员工表、插入测试数据、删除记录、更新数据以及多种查询操作,涵盖了SQL语句的基本使用方法,适合初学者学习数据库操作基础。
33 0
|
14天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day03
本课程为MySQL基础学习第三天内容,主要讲解多表关系与多表查询。内容涵盖物理外键与逻辑外键的区别、一对多、一对一及多对多关系的实现方式,以及内连接、外连接、子查询等多表查询方法,并通过具体案例演示SQL语句的编写与应用。
33 0
|
4天前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
134 16
|
9天前
|
关系型数据库 MySQL 数据管理
Mysql基础学习day03-作业
本内容包含数据库建表语句及多表查询示例,涵盖内连接、外连接、子查询及聚合统计,适用于员工与部门数据管理场景。
21 1
|
19天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01
本课程为MySQL基础学习第一天内容,涵盖MySQL概述、安装、SQL简介及其分类(DDL、DML、DQL、DCL)、数据库操作(查询、创建、使用、删除)及表操作(创建、约束、数据类型)。适合初学者入门学习数据库基本概念和操作方法。
110 6
|
18天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01-作业
本教程包含三个数据库表的创建练习:学生表(student)要求具备主键、自增长、非空、默认值及唯一约束;课程表(course)定义主键、非空唯一字段及数值精度限制;员工表(employee)包含自增主键、非空字段、默认值、唯一电话号及日期时间类型字段。每个表的结构设计均附有详细SQL代码示例。
39 0
|
18天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02
本课程为MySQL基础学习第二天内容,涵盖数据定义语言(DDL)的表查询、修改与删除操作,以及数据操作语言(DML)的增删改查功能。通过具体SQL语句与实例演示,帮助学习者掌握MySQL表结构操作及数据管理技巧。
69 0
|
24天前
|
安全 关系型数据库 MySQL
MySQL安全最佳实践:保护你的数据库
本文深入探讨了MySQL数据库的安全防护体系,涵盖认证安全、访问控制、网络安全、数据加密、审计监控、备份恢复、操作系统安全、应急响应等多个方面。通过具体配置示例,为企业提供了一套全面的安全实践方案,帮助强化数据库安全,防止数据泄露和未授权访问,保障企业数据资产安全。
|
9天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
40 3

推荐镜像

更多