初识MySQL之数据查询篇(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 初识MySQL之数据查询篇(上)

本次开启MySQL专栏的博文,针对MySQL数据库的前期介绍和了解,我们设置了初识MySQL之概念认知篇,正所谓,兵马未动、粮草先行,本次我们先以MySQL的技术性操作,实用篇开启MySQL的学习,概念和前期引入我们会在后期设置,话不多说,我们步入正题!

熟练掌握MySQL的查询不仅可熟练的玩转MySQL,还可以与Hadoop里面的hive插件,还有spark这些大数据应用软件融会贯通,反正就是一句话,学好MySQL是非常重要的。

引入


SELECT语句的基本查询:

SELECT (distinct:会过滤掉相同的行) 要查询的列名 FROM 表名字 WHERE 限制条件;
select * from tb_student where name like '王%' GROUP BY MAJOR_class HAVING major_class='4' 

实例操作

1:select要查询的内容,内容可以是一个字段、多个字段,或者是全部字段,也可以是表达式或者函数。如果要查询各个字段需要用“,”将其隔开,书写的顺序决定的显示的顺序,我们也可以在后面进行列名的重命名

-- SELECT 语句的基本语法
select * from tb_course;
select t.name 课程名称 from tb_course as t;
select count(*) from tb_course;

20201104195727982.png

20201104195647450.png

-- 限制查询
select * from tb_course where name like '数据%';

又叫模糊查询,我们有时候不知道这个表里面的一些属性的具体参数值,我们可以用模糊查询,利用like % 来通配符的查询。


总结:一般来说,我们首先有

select distinct(过滤)查询字段名 重命名 [或者 * 或者其他不重名的查询字段] 
from 数据表 
where 条件表达式  (= < > 等运算符)
group by 字段名列表(按照这个字段名列表进行分组) 
having 逻辑表达式(在分组好的各组里面进行逻辑筛选,过滤,最终选择出符合要求的数据集)
order by 字段名(按照字段名进行排序默认为从小到大)desc(从大到小)
limit n(偏移量,start) h (stop),一般如果只想要显示5个值:limit 5 ,因为第一个参数默认为0
这样就达到了主观的查询要显示的条数

简单查询

select

select a.`NAME`,NOW() from tb_student as a

使用now()函数输出我们查询的时间和日期

where

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

20201104203037720.png

select * from tb_student as b where b.GENDER='男' and b.BIRTHDATE>='2001-07-01';

2020110420333267.png

select * from tb_electives as c where c.SCORE BETWEEN '80' and '100' ORDER BY SCORE desc;

使用其他的模式进行匹配,我们首先查询了成绩80-100的,然后对其进行排序

between...and、not between...and、and、in、not in、like、not like、or 、not、is null、is not null

这些运算符和我们之前的学习都差不多,只要可以理解单词的意思问题就不大

select * from tb_student as c where c.ID in ('2017001002','2017001011','2017001012','2017001013');

20201104204410959.png

对于之前我们所说的模式匹配符

%代表可以匹配多个字符,也就是0个或多个
_代表任意单个字符,如果匹配的里面包括这个那么就需要利用到换义字符\
select * from tb_student as c where c.`NAME` like '程_忠';

20201104204830530.png

select * from tb_student where id is null;
select * from tb_student where id is not null;

查看这个参数是否为空,利用这个模式来查询

select * from tb_studnet where name='k' and 条件 ,
SELECT * from tb_student as c where c.GENDER='女' 
or c.BIRTHDATE>='2001-07-01' or c.MAJOR_CLASS='1';

注意这里的or and运算符的处理我们还是要理解一些,如果在同一个语句里面出现了他们,那么应该先运算and两边的条件表达式,所以下图中你才看见到了班级编号为1的排列到前面了。


order by子句


在查询结果集中,数据行是按照他们在表中的顺序进行排列的。我们可以使用order by字句对查询结果集中的数据行按照指定的排序方法。

SELECT * from tb_electives as c ORDER BY c.SCORE desc;
查询分数的排序好的数据,这里我们发现不一定需要where这个参数,如果需要也是过滤的

20201104210508299.png

使用limit子句

SELECT * from tb_electives as c ORDER BY c.SCORE desc limit 10 ;
显示前面的10条数据

SELECT * from tb_electives as c ORDER BY c.SCORE desc limit 10 ,1;
显示第11行的数据,也就是10+1=11

统计查询

这个里面就会涉及到一些集合函数和group by子句,having子句的组合查询,最后对查询结果进行求和操作和其他数学操作

count(字段)对字段中的个数统计次数
sum(求和)
avg(平均值)
max(最大值)
min(最小值)
select count(*)  学生总人数 from tb_student;

20201104211536941.png

select count(*) as 学生总人数 ,sum(SCORE) 总成绩, avg(SCORE) 班级平均成绩,
max(SCORE) 最高分,min(SCORE) 最低分 from tb_electives 
where COURSE_CLASS_CODE='3SL1037A.01';

20201104195647450.png

使用group by子句

group by 语句的作用就是可以利用相同字段的进行分组,然后达到相应的查询目的

SELECT column_name, function(column_name) FROM table_name
WHERE column_name operator value
GROUP BY column_name;

例如:

SELECT COURSE_CLASS_CODE 课程编号,avg(score) 班级平均分 from tb_electives GROUP BY COURSE_CLASS_CODE;

20201122140950957.png

按照相应的条件进行筛选就必须要在后加上 having 筛选条件了

比如我想要筛选到所有班级平均成绩大于77的班级,实现过程如下:

SELECT COURSE_CLASS_CODE 课程编号,avg(score) 班级平均分 from tb_electives GROUP BY COURSE_CLASS_CODE HAVING AVG(score) >=77 ;

20201122141259148.png

下面简单的排列一下顺序,也就是利用order by 字段名 desc进行相应的排序,结果如下,这里我们利用round(数据,保留的小数的位数)来格式化我们的数据:

SELECT COURSE_CLASS_CODE 课程编号,ROUND(avg(score),1) 班级平均分 from tb_electives GROUP BY COURSE_CLASS_CODE HAVING AVG(score) >=77 ORDER BY AVG(SCORE) desc ;

image.png

至于这里的语法查询,我觉得合理应用having的查询是比较的明智的,选取我们需要的数据,但是如果我们现在就只想要平均成绩最高的那个班级,我们可以有多种方法,比如我们利用聚合函数max,也可以排好序之后,使用limit 子句加上1 :

SELECT COURSE_CLASS_CODE 课程编号,ROUND(avg(score),1) 班级平均分 from tb_electives GROUP BY COURSE_CLASS_CODE HAVING AVG(score) >=77 ORDER BY AVG(SCORE) desc LIMIT 1 ;

20201122142832732.png


多表查询

在实际的应用场景之中,我们发现大量的数据集,并不是放在一张表里面的,可能是多张表,也可能是几百万张表,这个时候我们需要利用我们的一些分表查询

(在Hadoop里面有一种叫做,分区分桶:分区的作用提高我们查询的效率,细化数据管理直接读取相应的目录,缩小MapReduce程序要扫描的数据量;分桶的作用就是当我们利用join查询的时候可以提高效率,也就是我们利用分桶字段做连接字段的时候)

20201122144009411.png

内连接

select * from a[inner] join b on a.字段=b.字段
SELECT COURSE_CLASS_CODE,count(*) from tb_student INNER JOIN tb_electives on tb_student.ID=tb_electives.STUDENT_ID GROUP BY COURSE_CLASS_CODE ;

查询出各个班级的人数分别是多少

20201122144839781.png

这里我们也想要输出每个班级的男女人数各是多少,应该怎么做,我把这个问题留给大家,欢迎大家到评论区留言,各抒己见,答案的方式不唯一!我们下期文章再会!!!


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
④【数据查询】MySQL查询语句,拿来即用。
④【数据查询】MySQL查询语句,拿来即用。
42 0
|
7月前
|
SQL 关系型数据库 MySQL
MySQL知识【DML:数据操作语言&DQL:数据查询语言】第六章(下)
MySQL知识【DML:数据操作语言&DQL:数据查询语言】第六章
|
7月前
|
SQL 关系型数据库 MySQL
MySQL知识【DML:数据操作语言&DQL:数据查询语言】第六章(上)
MySQL知识【DML:数据操作语言&DQL:数据查询语言】第六章
|
3天前
|
Go
golang使用gorm操作mysql3,数据查询
golang使用gorm操作mysql3,数据查询
|
5月前
|
SQL 关系型数据库 MySQL
Mysql 千万级别数据数据查询
Mysql 千万级别数据数据查询
52 1
|
10月前
|
SQL 关系型数据库 MySQL
【MySQL新手入门系列四】:手把手教你MySQL数据查询由入门到学徒
SQL语言是与数据库交互的机制,是关系型数据库的标准语言。SQL语言可以用于创建、修改和查询关系数据库。SQL的SELECT语句是最重要的命令之一,用于从指定表中查询数据。在此博客中,我们将进一步了解SELECT语句以及WHERE子句以及它们的重要性。
|
5月前
|
SQL 关系型数据库 MySQL
Mysql数据库 4.SQL语言 DQL数据查询语言 查询
Mysql数据库 4.SQL语言 DQL数据查询语言 查询
54 0
|
7月前
|
SQL 关系型数据库 MySQL
MySQL知识【DML:数据操作语言&DQL:数据查询语言】第六章(中)
MySQL知识【DML:数据操作语言&DQL:数据查询语言】第六章
|
9月前
|
SQL 关系型数据库 MySQL
MySQL数据查询语言
MySQL数据查询语言
83 0
|
9月前
|
SQL 关系型数据库 MySQL
【MySQL】DQL数据查询语言(非常适合MySQL初学者学习)
【MySQL】DQL数据查询语言(非常适合MySQL初学者学习)
101 0