DQL操作MySql

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: DQL操作MySql

基础查询

条件查询(WHERE)

分组查询(GROUP BY)

排序查询(ORDER BY)

分页查询(LIMIT)

 

 

-- 删除stu表
drop table if exists stu;
 
-- 创建stu表
CREATE TABLE stu(
id int, -- 编号
name varchar(20), -- 姓名
age int, -- 年龄
sex varchar(5), -- 性别
address varchar(100), -- 地址
math double(5,2), -- 数学成绩
english double(5,2), -- 英语成绩
hire_date date -- 入学时间
);
 
 
-- 添加数据
 
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date)
VALUES
(1,'马云',18,'男','杭州',66,78,'1998-09-01'),
(2,'马化腾',45,'女','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'男','香港',56,77,'1999-09-02'),
(4,'比尔盖茨',55,'男','深圳',56,77,'1999-09-02'),
(5,'巴菲特',55,'男','深圳',56,null,'1999-09-02'),
(5,'张一鸣',22,'男','深圳',56,null,'1999-09-02')
;
 
-- 查整个表
select        * from stu;
 
 
-- 基础查询 =============================
 
-- 查询name age 两列
 
select name,age from stu;
 
-- 查询所有列的数据,列名的列表可以使用*替代,不要使用!大部分公司不会允许你使用*号
 
select * from stu;
 
-- 查询地址信息
 
select address from stu;
 
-- 去除重复记录
 
select DISTINCT address from stu;
 
-- 查询姓名,数学成绩,英语成绩
select name ,math as 数学成绩 ,english as 英语成绩 from stu ;
 
 
-- 条件查询 ===================
 
-- 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;
 
 
-- 2. 查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;
 
-- 3.查询年龄大于等于20岁 并且年龄小于等于 30岁的学员信息
 
select * from stu where age >= 20 && age <= 30; -- 这三效果一样
select * from stu where age >= 20 and age <= 30;
select * from stu where age BETWEEN 20 and 30; -- 查询范围 20-30之间
 
 
-- 4.查询入学日期在 1998-09-01 到 1999-09-01 之间的学员信息
 
select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
 
 
-- 5.查询年龄等于18岁的学员信息
 
select * from stu where age = 18;
 
-- 查询年龄不等于18岁的学员信息
 
select * from stu where age != 18; -- 这俩效果一样
select * from stu where age <> 18;
 
-- 7.查询年龄等于18岁 或者 年龄等于20岁或者年龄等于22岁的学员信息
 
select * from stu where age = 18 or age = 20 or age = 22; 
select * from stu where age in (18,20,22);-- 这两效果一样
 
-- 8. 查询英语成绩为Null的学员信息
-- 注意: null值的比较不能使用 = != ,需要使用 is is not
 
select * from stu where english is null;

 

-- 删除stu表
drop table if exists stu;
 
-- 创建stu表
CREATE TABLE stu(
id int, -- 编号
name varchar(20), -- 姓名
age int, -- 年龄
sex varchar(5), -- 性别
address varchar(100), -- 地址
math double(5,2), -- 数学成绩
english double(5,2), -- 英语成绩
hire_date date -- 入学时间
);
 
 
-- 添加数据
 
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date)
VALUES
(1,'马云',18,'男','杭州',66,78,'1998-09-01'),
(2,'马化腾',45,'女','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'男','香港',56,77,'1999-09-02'),
(4,'比尔盖茨',55,'男','深圳',56,77,'1999-09-02'),
(5,'巴菲特',55,'男','深圳',56,null,'1999-09-02'),
(6,'张一鸣',22,'男','深圳',56,null,'1999-09-02'),
(7,'刘德华',65,'男','深圳',56,null,'1999-09-02')
;
 
-- 查整个表
select        * from stu;
 
 
-- 基础查询 =============================
 
-- 查询name age 两列
 
select name,age from stu;
 
-- 查询所有列的数据,列名的列表可以使用*替代,不要使用!大部分公司不会允许你使用*号
 
select * from stu;
 
-- 查询地址信息
 
select address from stu;
 
-- 去除重复记录
 
select DISTINCT address from stu;
 
-- 查询姓名,数学成绩,英语成绩
select name ,math as 数学成绩 ,english as 英语成绩 from stu ;
 
 
-- 条件查询 ===================
 
-- 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;
 
 
-- 2. 查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;
 
-- 3.查询年龄大于等于20岁 并且年龄小于等于 30岁的学员信息
 
select * from stu where age >= 20 && age <= 30; -- 这三效果一样
select * from stu where age >= 20 and age <= 30;
select * from stu where age BETWEEN 20 and 30; -- 查询范围 20-30之间
 
 
-- 4.查询入学日期在 1998-09-01 到 1999-09-01 之间的学员信息
 
select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
 
 
-- 5.查询年龄等于18岁的学员信息
 
select * from stu where age = 18;
 
-- 查询年龄不等于18岁的学员信息
 
select * from stu where age != 18; -- 这俩效果一样
select * from stu where age <> 18;
 
-- 7.查询年龄等于18岁 或者 年龄等于20岁或者年龄等于22岁的学员信息
 
select * from stu where age = 18 or age = 20 or age = 22; 
select * from stu where age in (18,20,22);-- 这两效果一样
 
-- 8. 查询英语成绩为Null的学员信息
-- 注意: null值的比较不能使用 = != ,需要使用 is is not
 
select * from stu where english is null;
 
-- 模糊查询 like ==========
/*
        通配符:
        (1)_:代表单个任意字符   代表一个字,不管你是什么
        (2)%:代表任意个数字符
*/
 
-- 1.查询姓 马的学员信息
 
select * from stu where name like '马%';
-- 马字在第一个,后面有多少字不管
 
-- 2.查询第二个字是 斯 的学员信息
 
select * from stu where name like '_斯%';
-- 斯前面任意一个字,后面多少字不管
 
 
-- 3.查询名字中包含 德 的学员信息
 
select * from stu where name like '%德%';
-- 前面多少字不管,后面多少字不管,中间一个德字

聚合函数

1.概念:

  将一列数据作为一个整体,进行纵向计算。

2.聚合函数分类

函数名

功能

count(列名)

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

max(列名)

最大值

min(列名)

最小值

sum(列名)

求和

avg(列名)

平均值

注意:null 值不参与所有聚合函数运算

-- 删除stu表
drop table if exists stu;
 
-- 创建stu表
CREATE TABLE stu(
id int, -- 编号
name varchar(20), -- 姓名
age int, -- 年龄
sex varchar(5), -- 性别
address varchar(100), -- 地址
math double(5,2), -- 数学成绩
english double(5,2), -- 英语成绩
hire_date date -- 入学时间
);
 
 
-- 添加数据
 
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date)
VALUES
(1,'马云',18,'男','杭州',66,78,'1998-09-01'),
(2,'马化腾',45,'女','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'男','香港',100,77,'1999-09-02'),
(4,'比尔盖茨',55,'男','深圳',99,77,'1999-09-02'),
(5,'巴菲特',55,'男','深圳',98,null,'1999-09-02'),
(6,'张一鸣',22,'男','深圳',56,null,'1999-09-02'),
(7,'刘德华',65,'男','深圳',56,null,'1999-09-02')
;
 
-- 查整个表
select        * from stu;
 
 
-- 基础查询 =============================
 
-- 查询name age 两列
 
select name,age from stu;
 
-- 查询所有列的数据,列名的列表可以使用*替代,不要使用!大部分公司不会允许你使用*号
 
select * from stu;
 
-- 查询地址信息
 
select address from stu;
 
-- 去除重复记录
 
select DISTINCT address from stu;
 
-- 查询姓名,数学成绩,英语成绩
select name ,math as 数学成绩 ,english as 英语成绩 from stu ;
 
 
-- 条件查询 ===================
 
-- 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;
 
 
-- 2. 查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;
 
-- 3.查询年龄大于等于20岁 并且年龄小于等于 30岁的学员信息
 
select * from stu where age >= 20 && age <= 30; -- 这三效果一样
select * from stu where age >= 20 and age <= 30;
select * from stu where age BETWEEN 20 and 30; -- 查询范围 20-30之间
 
 
-- 4.查询入学日期在 1998-09-01 到 1999-09-01 之间的学员信息
 
select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
 
 
-- 5.查询年龄等于18岁的学员信息
 
select * from stu where age = 18;
 
-- 查询年龄不等于18岁的学员信息
 
select * from stu where age != 18; -- 这俩效果一样
select * from stu where age <> 18;
 
-- 7.查询年龄等于18岁 或者 年龄等于20岁或者年龄等于22岁的学员信息
 
select * from stu where age = 18 or age = 20 or age = 22; 
select * from stu where age in (18,20,22);-- 这两效果一样
 
-- 8. 查询英语成绩为Null的学员信息
-- 注意: null值的比较不能使用 = != ,需要使用 is is not
 
select * from stu where english is null;
 
-- 模糊查询 like ==========
/*
        通配符:
        (1)_:代表单个任意字符   代表一个字,不管你是什么
        (2)%:代表任意个数字符
*/
 
-- 1.查询姓 马的学员信息
 
select * from stu where name like '马%';
-- 马字在第一个,后面有多少字不管
 
-- 2.查询第二个字是 斯 的学员信息
 
select * from stu where name like '_斯%';
-- 斯前面任意一个字,后面多少字不管
 
 
-- 3.查询名字中包含 德 的学员信息
 
select * from stu where name like '%德%';
-- 前面多少字不管,后面多少字不管,中间一个德字
 
-- 1.统计班级一共有多少个学生
select * from stu;
select count(id) from stu;  -- count 统计的列名不能为null
select count(english) from stu;
select count(*) from stu;
 
-- 2.查询数学成绩的最高分
select max(math) from stu;
 
-- 3.查询数学成绩的最低分
select min(math) from stu;
 
-- 4.查询数学成绩的总分
select sum(math) from stu;
 
-- 5.查询数学成绩的平均分
select avg(math) from stu;
 
-- 6.查询英语成绩的最低分
select min(english) from stu;

分组查询语法

SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤]

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

Where 和 having 区别:

执行时机不一样;where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。

可判断的条件不一样:where不能对聚合函数进行判断,having可以。

执行顺序:where > 聚合函数 > having

 

-- 删除stu表
drop table if exists stu;
 
-- 创建stu表
CREATE TABLE stu(
id int, -- 编号
name varchar(20), -- 姓名
age int, -- 年龄
sex varchar(5), -- 性别
address varchar(100), -- 地址
math double(5,2), -- 数学成绩
english double(5,2), -- 英语成绩
hire_date date -- 入学时间
);
 
 
-- 添加数据
 
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date)
VALUES
(1,'马云',18,'男','杭州',66,78,'1998-09-01'),
(2,'马化腾',45,'女','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'男','香港',100,77,'1999-09-02'),
(4,'比尔盖茨',55,'女','深圳',99,77,'1999-09-02'),
(5,'巴菲特',55,'男','深圳',98,null,'1999-09-02'),
(6,'张一鸣',22,'女','深圳',56,null,'1999-09-02'),
(7,'查理芒格',65,'男','深圳',100,null,'1999-09-02'),
(8,'贝索斯',65,'男','深圳',100,null,'1999-09-02')
;
 
-- 查整个表
select        * from stu;
 
 
-- 基础查询 =============================
 
-- 查询name age 两列
 
select name,age from stu;
 
-- 查询所有列的数据,列名的列表可以使用*替代,不要使用!大部分公司不会允许你使用*号
 
select * from stu;
 
-- 查询地址信息
 
select address from stu;
 
-- 去除重复记录
 
select DISTINCT address from stu;
 
-- 查询姓名,数学成绩,英语成绩
select name ,math as 数学成绩 ,english as 英语成绩 from stu ;
 
 
-- 条件查询 ===================
 
-- 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;
 
 
-- 2. 查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;
 
-- 3.查询年龄大于等于20岁 并且年龄小于等于 30岁的学员信息
 
select * from stu where age >= 20 && age <= 30; -- 这三效果一样
select * from stu where age >= 20 and age <= 30;
select * from stu where age BETWEEN 20 and 30; -- 查询范围 20-30之间
 
 
-- 4.查询入学日期在 1998-09-01 到 1999-09-01 之间的学员信息
 
select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
 
 
-- 5.查询年龄等于18岁的学员信息
 
select * from stu where age = 18;
 
-- 查询年龄不等于18岁的学员信息
 
select * from stu where age != 18; -- 这俩效果一样
select * from stu where age <> 18;
 
-- 7.查询年龄等于18岁 或者 年龄等于20岁或者年龄等于22岁的学员信息
 
select * from stu where age = 18 or age = 20 or age = 22; 
select * from stu where age in (18,20,22);-- 这两效果一样
 
-- 8. 查询英语成绩为Null的学员信息
-- 注意: null值的比较不能使用 = != ,需要使用 is is not
 
select * from stu where english is null;
 
-- 模糊查询 like ==========
/*
        通配符:
        (1)_:代表单个任意字符   代表一个字,不管你是什么
        (2)%:代表任意个数字符
*/
 
-- 1.查询姓 马的学员信息
 
select * from stu where name like '马%';
-- 马字在第一个,后面有多少字不管
 
-- 2.查询第二个字是 斯 的学员信息
 
select * from stu where name like '_斯%';
-- 斯前面任意一个字,后面多少字不管
 
 
-- 3.查询名字中包含 德 的学员信息
 
select * from stu where name like '%德%';
-- 前面多少字不管,后面多少字不管,中间一个德字
 
-- 1.统计班级一共有多少个学生
select * from stu;
select count(id) from stu;  -- count 统计的列名不能为null
select count(english) from stu;
select count(*) from stu;
 
-- 2.查询数学成绩的最高分
select max(math) from stu;
 
-- 3.查询数学成绩的最低分
select min(math) from stu;
 
-- 4.查询数学成绩的总分
select sum(math) from stu;
 
-- 5.查询数学成绩的平均分
select avg(math) from stu;
 
-- 6.查询英语成绩的最低分
select min(english) from stu;
 
 
/*
分组函数
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP  BY  分组字段名 [HAVING 分组后条件过滤]
*/
 
-- 1.查询男同学和女同学各自的数学平均分
 
select sex,avg(math) from stu group by sex;
 
 
-- 2.查询男同学和女同学各自的数学平均分,以及各自人数
 
select sex,avg(math),count(*) from stu group by sex;
 
 
/*3.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组*/
 
select sex,avg(math),count(*) from stu where math > 70 group by sex;
 
 
-- 4.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
 
select sex,avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;

 

分页查询

1.分页查询语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数

起始索引:从0开始

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

Tips :

分页查询limit是MySQL数据库的方言

Oracle 分页查询使用rownumber

SQL Server分页查询使用top

分页查询语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数

起始索引:从0开始

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

Tips :

分页查询limit是MySQL数据库的方言

Oralcle分页查询使用rownumber

SQL Server 分页查询使用top

小结:

SELECT

 字段列表

 FROM

 表名列表

 WHERE

 分组字段

 HAVING

 分组后条件

 ORDER BY

 排序字段

 LIMIT

 分页限定


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错合集之用CTAS从mysql同步数据到hologres,改了字段长度,报错提示需要全部重新同步如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
44 8
|
2天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之程序初始化mysql没有完成就报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
13 4
|
2天前
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错合集之sqlserver mysql都用的胖包,sqlserver的成功了,mysql报这个错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
17 6
|
2天前
|
SQL Oracle 关系型数据库
实时计算 Flink版操作报错合集之连接器换成2.4.2之后,mysql作业一直报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
13 3
|
5天前
|
SQL 关系型数据库 MySQL
Mysql忘记密码操作
Mysql忘记密码操作
26 1
|
5天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
5天前
|
SQL 关系型数据库 MySQL
【MySQL】DQL-案例练习-DQL基本介绍&语法&执行顺序(代码演示)
【MySQL】DQL-案例练习-DQL基本介绍&语法&执行顺序(代码演示)
|
5天前
|
SQL 关系型数据库 MySQL
【MySQL】DQL-排序查询-语法&注意事项&可cv例题语句
【MySQL】DQL-排序查询-语法&注意事项&可cv例题语句
|
5天前
|
SQL 关系型数据库 MySQL
【MySQL】DQL-排序查询-语法&排序方式&注意事项&可cv例题语句
【MySQL】DQL-排序查询-语法&排序方式&注意事项&可cv例题语句
|
5天前
|
SQL 关系型数据库 MySQL
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句