开发者社区> 王小王-123> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 初识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

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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
数据结构之动态规划问题
数据结构中动态规划应该算得上是你避不开的一道槛了吧!其重要性不言而喻,今天就整理下学习笔记分享出来。希望对读者朋友也能有帮助,文章基本框架如下: 什么是动态规划 小偷的背包问题 LeetCode刷题
44 0
mysql数据库(9):常用查询的例子(下)
mysql数据库(9):常用查询的例子
36 0
MySQL 查询数据
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据。 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据。 语法 以下为在MySQL数据库中查询数据通用的 SELECT 语法: SELECT column_name,column_name FROM table_name[WHERE Clause][LIMIT N][ OFFSET M] 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
938 0
+关注
王小王-123
快乐代码,精彩人生!
268
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载