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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 初识MySQL之数据查询篇(下)

论MySQL的重要性

MySQL是一个小型关系数据库管理系统,由瑞典的MySQL软件公司开发,目前属于Oracle旗下.MySQL数据库不仅具有强大的功能而且兼容性极佳,便于人们使用.此论文主要探究了MySQL在日常生活中的应用,MySQL数据库与云结合的重要实例以及MySQL数据库在Internet中发挥的重要作用.


前期文章我们介绍了MySQL的基础查询语法知识,从基本的条件查询到表的连接查询,这些都是我们日常开发和数据分析必备的基础技能,说实话MySQL的重要性远比你掌握其他的一些高阶编程语法知识重要。当然如果你从事的方向不是数据分析和大数据处理开发,可能MySQL的应用不是特别的广泛,但是我还是想说MySQL语法知识是真的重要。

image.png

数据库的重要性在我们日常数据处理和开发当中,显得十分的重要,原因在于数据库可以高效的存储数据集,将大量的数据通过特定的模式存储,然后数据分析人员可以通过一些MySQL查询语法,快速的准确的,高效的结构性查出你需要的数据。有人说那么非专业的人是否也可以学习,我个人觉得还是可以的,虽然Excel可以解决,但是当你需要特定的输出一些数据何如显示的时候,MySQL使得你的工作可以一键化,解决你点点点的烦恼。


数据库好比人的大脑的记忆系统,没有了数bai据库就没有了记忆系统。计算机也就不会如此迅速的发展。数据库的应用已经深入到生活和工作的方方面面。数据库的发展体现了一个国家信息发展的水平,并且计算机软件的开发很多都是基于数据库的。


话不多说了,我们进入MySQL的查询语法探索之旅吧!

数据集在这里下载,点击即可,之后运行在你的Navicat里面,下面的所有查询语句都可以使用,包括MySQL专栏里面的系列语法,都可以,还等什么快来下载吧!

回顾一下之前的查询语法

特定条件查询

SELECT * FROM `tb_teacher` 
WHERE gender='女' and title='副教授';
• 1
• 2

查询老师的类型,采用distinct把相同的聚合

SELECT DISTINCT TITLE FROM tb_teacher;
# COUNT 计算行数
SELECT COUNT(DISTINCT COURSE_CODE) as `课程种类数` from tb_course_class;
SELECT COUNT( DISTINCT COURSE_CLASS_CODE) as `班级种类数` from tb_electives;

20201225122755487.png

2020122512281681.png

下面我就采用这种方式了,我直接把所有的MySQL语句贴出来,你们可以自己去运行

-- 特定条件查询
SELECT * FROM `tb_teacher` 
WHERE gender='女' and title='副教授';
-- 聚合查询
SELECT DISTINCT TITLE FROM tb_teacher;
# COUNT 计算行数
SELECT COUNT(DISTINCT COURSE_CODE) as `课程种类数` from tb_course_class;
SELECT COUNT( DISTINCT COURSE_CLASS_CODE) as `班级种类数` from tb_electives;
# 全部学生人数
SELECT COUNT(*) from tb_student;
-- 查询班号为1的班级人数
SELECT count(*) from tb_student WHERE MAJOR_CLASS='1'
# 查询每个专业班的学生人数
SELECT COUNT(*) as sum,MAJOR_CLASS 
from tb_student 
GROUP BY MAJOR_CLASS 
ORDER BY MAJOR_CLASS;
# WHERE子句中使用子查询的情况,在子查询里面嵌套一些结果集,方便我们智能查询
SELECT * from tb_major_class where ID=(
SELECT MAJOR_CLASS from tb_student GROUP BY MAJOR_CLASS ORDER BY 
COUNT(*) DESC LIMIT 1);
# 查询课程班表中,每个老师带多少个班
-- 在进行分组查询的时候,你必须要清楚明白什么字段是重复的
那么相同的行就会整合到一组,然后根据该行进行一些查询
比如数量,平均分,其他属性
select COUNT(CODE) as `带班数`,teacher_id as `教师工号` from 
tb_course_class group by `教师工号` order by `带班数` DESC;
# 删除某字段包含NULL空值的行
DELETE FROM tb_course WHERE PERIOD IS NULL;
# 计算全部课程的学分之和
select SUM(CREDIT) as `学分之和`,PERIOD as `学分` from tb_course group by `学分`;
# 查询得分最高的分数和最低的分数,这里就充分利用到了分组的思想,然后根据分组里面的一些属性进行
一些查询
select course_class_code as 班号,MAX(SCORE) as 最高分,MIN(SCORE) as 最低分,
AVG(SCORE)as 平均分 from tb_electives group by course_class_code order by 平均分 DESC;
# 各学院专业各有多少班,这里采用了两个分组,为什么了,当我们需要获取一张大表里面的多个
重复字段的时候,我们需要分组这两个才可以
#这里的规则就是按照学院和入学年份进行分组,把同时具有这两个属性放在一组,
学院是2组,入学年份是4组,那么最后就分成了2*4=9组进行输出
-- 特别是在hive里面,进行多表连接的时候,要注意我们分组,如果是查询的字段在该表没有聚合分组里面,
那么就需要加入到分组里面
select college as `学院`,grade as `入学年份`,COUNT(*) as 班数 from tb_major_class 
group by `学院`, `入学年份`;
# 不同职称的老师各有多少名
select title as 职称,COUNT(*) as 人数 from tb_teacher group by title;
# 各班不及格的学生人数
select course_class_code 课程班编号,COUNT(*) 人数 from tb_electives where score<60
group by course_class_code;
# 不及格人数超过10人的班级,GROUP BY having
select course_class_code 课程班编号,COUNT(*) 人数 from tb_electives where score<60
group by course_class_code having 人数>10;
select * from tb_electives having score <50;
# 错误!聚合字段是在groupby之后产生,不能再where中使用
select course_class_code ,COUNT(*) 人数 from tb_electives where score<60 and 人数>10
group by course_class_code;
# 统计每个老师上几门课程
select COUNT(DISTINCT COURSE_CODE) 课程数,teacher_id 老师编号 from 
tb_course_class group by teacher_id ;
# order by 要放到语句的最后面
select COUNT(DISTINCT COURSE_CODE) 课程数,teacher_id from tb_course_class
 GROUP BY teacher_id having 课程数>4 order by 课程数;

这里是对一些基本的查询做了一个总结,具有丰富的参考意义

--查询自己班级编号
SELECT t.id AS 班级编号 
FROM
  tb_major_class AS t 
WHERE
  t.major = '大数据' 
  AND t.GRADE = '2019' 
  AND t.CLASS = '3';
--插入个人信息到学生选课表,利用子查询 
INSERT INTO tb_student SELECT
'2019443888',
'王小王',
'男',
'2020-12-25',
'15730596588',
ID 
FROM
  tb_major_class 
WHERE
  major = '大数据' 
  AND grade = 2019 
  AND class = 3;
SELECT
  * 
FROM
  tb_student 
WHERE
  `NAME` = '王小王';
--查看与自己同名或者同姓的学生 
SELECT
* 
FROM
  tb_student 
WHERE
  NAME = '%小王' 
  OR NAME LIKE '王%';
--统计你所在班级的人数 
SELECT
count(*) AS 班级人数 
FROM
  tb_student 
WHERE
  major_class =(
  SELECT
    ID 
  FROM
    tb_major_class 
  WHERE
    major = '大数据' 
    AND grade = 2019 
    AND class = 3 
  );
--统计你所在班级男生的人数
SELECT
count(*) 男生人数 
FROM
  tb_student AS t 
WHERE
  t.GENDER = '男' 
  AND major_class =(
  SELECT
    ID 
  FROM
    tb_major_class 
  WHERE
    major = '大数据' 
    AND grade = 2019 
    AND class = 3 
  );
--统计你所在班级女生的人数 SELECT
count(*) 女生人数 
FROM
  tb_student AS t 
WHERE
  t.GENDER = '女' 
  AND major_class =(
  SELECT
    ID 
  FROM
    tb_major_class 
  WHERE
    major = '大数据' 
    AND grade = 2019 
    AND class = 3 
  );
--列出你所在的学院的专业名称 
SELECT DISTINCT
t.major 专业名称 
FROM
  tb_major_class AS t 
WHERE
  college = '数理与大数据学院';
-- --统计各课程班级的最高分和最低分
SELECT
  a.`NAME` 课程名称,
  b.COURSE_CODE 课程 ID,
  c.* 
FROM
  tb_course AS a,
  tb_course_class AS b,
  ( SELECT COURSE_CLASS_CODE 课程班级 ID, max( SCORE ) 最高分, 
  min( SCORE ) 最低分 FROM tb_electives GROUP BY COURSE_CLASS_CODE ) AS c 
WHERE
  a.`CODE` = b.COURSE_CODE 
  AND b.`CODE` = c.`课程班级ID`;
--  统计平均分超过75分的课程班级及平均分,并按平均分从小到大排序
SELECT
  * 
FROM
  (
  SELECT
    b.COURSE_CODE 课程 ID,
    a.`NAME` 课程名称,
    c.`平均分` 
  FROM
    tb_course AS a,
    tb_course_class AS b,
    ( SELECT COURSE_CLASS_CODE 课程班级 ID, AVG( SCORE ) 平均分 
    FROM tb_electives GROUP BY
    COURSE_CLASS_CODE HAVING AVG( SCORE )> '75' ) AS c 
  WHERE
    a.`CODE` = b.COURSE_CODE 
    AND b.`CODE` = c.`课程班级ID` 
  ) AS e 
ORDER BY
  e.`平均分`;
--查询上’结构化数据存储与处理’课程的老师的姓名 
SELECT DISTINCT
t.老师名称 
FROM
  (
  SELECT
    a.NAME 课程名称,
    c.NAME 老师名称 
  FROM
    tb_course AS a,
    tb_course_class AS b,
    tb_teacher AS c 
  WHERE
    a.CODE = b.course_code 
    AND b.TEACHER_ID = c.id 
  ) AS t 
WHERE
  t.课程名称 = '结构化数据存储与处理';
SELECT DISTINCT
  TEACHER_ID 
FROM
  tb_course_class 
WHERE
  COURSE_CODE = '3SL1037A'
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
SQL 关系型数据库 MySQL
④【数据查询】MySQL查询语句,拿来即用。
④【数据查询】MySQL查询语句,拿来即用。
121 0
|
SQL 关系型数据库 MySQL
MySQL知识【DML:数据操作语言&DQL:数据查询语言】第六章(下)
MySQL知识【DML:数据操作语言&DQL:数据查询语言】第六章
|
SQL 关系型数据库 MySQL
MySQL知识【DML:数据操作语言&DQL:数据查询语言】第六章(上)
MySQL知识【DML:数据操作语言&DQL:数据查询语言】第六章
|
9月前
|
监控 关系型数据库 MySQL
MySQL和SQLSugar百万条数据查询分页优化
在面对百万条数据的查询时,优化MySQL和SQLSugar的分页性能是非常重要的。通过合理使用索引、调整查询语句、使用缓存以及采用高效的分页策略,可以显著提高查询效率。本文介绍的技巧和方法,可以为开发人员在数据处理和查询优化中提供有效的指导,提升系统的性能和用户体验。掌握这些技巧后,您可以在处理海量数据时更加游刃有余。
854 9
|
SQL 关系型数据库 MySQL
MySQL数据库子查询——in多个数据查询的示例
MySQL数据库子查询——in多个数据查询的示例
135 1
|
11月前
|
SQL Oracle 关系型数据库
【MySQL】——数据查询_进阶操作(超详细)!!
聚合查询,联合查询,内外连接,子查询,合并查询爽歪歪
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
662 5
|
关系型数据库 MySQL 数据库
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
265 6
golang使用gorm操作mysql3,数据查询
golang使用gorm操作mysql3,数据查询

推荐镜像

更多