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

举报
王小王-123 发表于 2020/11/25 00:13:48 2020/11/25
【摘要】 本次开启MySQL专栏的博文,针对MySQL数据库的前期介绍和了解,我们设置了初识MySQL之概念认知篇,正所谓,兵马未动、粮草先行,本次我们先以MySQL的技术性操作,实用篇开启MySQL的学习,概念和前期引入我们会在后期设置,话不多说,我们步入正题! 熟练掌握MySQL的查询不仅可熟练的玩转MySQL,还可以与Hadoop里面的hive插件,还有spark这些大数...

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

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

引入

SELECT语句的基本查询:

SELECTdistinct:会过滤掉相同的行) 要查询的列名 FROM 表名字 WHERE 限制条件;

  
 
  • 1
select * from tb_student where name like '王%' GROUP BY MAJOR_class HAVING major_class='4' 

  
 
  • 1

实例操作

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

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

  
 
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
在这里插入图片描述

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

  
 
  • 1
  • 2

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

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

简单查询

select

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

  
 
  • 1

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

where

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

  
 
  • 1

在这里插入图片描述

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

  
 
  • 1

在这里插入图片描述

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

  
 
  • 1

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

between...andnot between...andandinnot inlikenot likeornotis nullis not null

  
 
  • 1

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


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

  
 
  • 1
  • 2

在这里插入图片描述
对于之前我们所说的模式匹配符

%代表可以匹配多个字符,也就是0个或多个
_代表任意单个字符,如果匹配的里面包括这个那么就需要利用到换义字符\

  
 
  • 1
  • 2
select * from tb_student as c where c.`NAME` like '程_忠';

  
 
  • 1

在这里插入图片描述

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

  
 
  • 1
  • 2

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

select * from tb_studnet where name='k' and 条件 ,

  
 
  • 1
SELECT * from tb_student as c where c.GENDER='女' 
or c.BIRTHDATE>='2001-07-01' or c.MAJOR_CLASS='1';


  
 
  • 1
  • 2
  • 3

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

order by子句

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

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

  
 
  • 1
  • 2

在这里插入图片描述
使用limit子句

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

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

  
 
  • 1
  • 2

统计查询

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

count(字段)对字段中的个数统计次数
sum(求和)
avg(平均值)
max(最大值)
min(最小值)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
select count(*)  学生总人数 from tb_student;

  
 
  • 1

在这里插入图片描述

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

  
 
  • 1
  • 2
  • 3

在这里插入图片描述
使用group by子句

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

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

  
 
  • 1
  • 2
  • 3

例如:

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

  
 
  • 1

在这里插入图片描述
按照相应的条件进行筛选就必须要在后加上 having 筛选条件了
比如我想要筛选到所有班级平均成绩大于77的班级,实现过程如下:

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

  
 
  • 1

在这里插入图片描述
下面简单的排列一下顺序,也就是利用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 ;

  
 
  • 1

在这里插入图片描述
至于这里的语法查询,我觉得合理应用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 ;

  
 
  • 1

在这里插入图片描述
多表查询
在实际的应用场景之中,我们发现大量的数据集,并不是放在一张表里面的,可能是多张表,也可能是几百万张表,这个时候我们需要利用我们的一些分表查询
(在Hadoop里面有一种叫做,分区分桶分区的作用提高我们查询的效率,细化数据管理直接读取相应的目录,缩小MapReduce程序要扫描的数据量;分桶的作用就是当我们利用join查询的时候可以提高效率,也就是我们利用分桶字段做连接字段的时候)

在这里插入图片描述
内连接

select * from a[inner] join b on a.字段=b.字段 

  
 
  • 1
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 ;

  
 
  • 1

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

每文一语

时间的味道应该是清淡而细致,不应该是油腻且粗暴的,品味的是人生,而不是品味的是自己!

文章来源: blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_47723732/article/details/109497325

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。