第十九周-day83-数据库day05_统计zhangs学习了几门课

55 阅读4分钟

2.2.4 每位老师所教课程的平均分,并按平均分排序
SELECT teacher.tname,AVG(sc.score)
FROM teacher
JOIN course
ON teacher.tno=course.tno
JOIN sc
ON course.cno=sc.cno
GROUP BY teacher.tno
ORDER BY AVG(sc.score) DESC;

2.2.5 查询oldguo所教的不及格的学生姓名
SELECT teacher.tname,student.sname,sc.score
FROM teacher
JOIN course
ON teacher.tno=course.tno
JOIN sc
ON course.cno=sc.cno
JOIN student
ON sc.sno=student.sno
WHERE teacher.tname='oldguo' AND sc.score<60;

2.2.6 查询所有老师所教学生不及格的信息
SELECT teacher.tname,GROUP_CONCAT(student.sname)
FROM teacher
JOIN course
ON teacher.tno=course.tno
JOIN sc
ON course.cno=sc.cno
JOIN student
ON sc.sno=student.sno
WHERE sc.score<60
GROUP BY teacher.tname

3.别名的使用

SELECT 别名.列
FROM 表 表别名
WHERE 别名.列
GROUP BY 别名.列
HAVING 列别名
ORDER BY 列别名

3.1 表别名
SELECT a.tname,GROUP_CONCAT(d.sname)
FROM teacher AS a
JOIN course AS b
ON a.tno=b.tno
JOIN sc AS c
ON b.cno=c.cno
JOIN student AS d 
ON c.sno=d.sno
WHERE c.score<60
GROUP BY a.tname

说明:表别名一般是在FROM的表的表名,或者join后的表的别名
在 WHERE,GROUP BY,select后的列,having,ORDER BY

3.2 列别名
SELECT a.tname AS 讲师 ,GROUP_CONCAT(d.sname) AS 学生
FROM teacher AS a
JOIN course AS b
ON a.tno=b.tno
JOIN sc AS c
ON b.cno=c.cno
JOIN student AS d 
ON c.sno=d.sno
WHERE c.score<60
GROUP BY a.tname

说明:列别名一般是在select后的列,定义的别名
– 作用:
– 1.结果集显示会以别名形式展示
– 2.在having 和order by 中可以调用列别名

-- 例子:每位老师所教课程的平均分,并按平均分排序
SELECT a.tname AS 讲师,AVG(c.score) AS 平均分
FROM teacher AS a
JOIN course AS b
ON a.tno=b.tno
JOIN sc AS c
ON b.cno=c.cno
GROUP BY a.tno
ORDER BY 平均分;


4.外链接简介☆☆☆

left join 左链接
right join 右链接

A left join B
on A.x=B.y
where

A left join B
on A.x=B.y
and



结论:
  1. 多表连接中,小标驱动大表

  2. 通过left join 强制选定驱动表


=================================
工作中还需要学习的内容:
1.内置函数
2.存储过程
3.函数
4.触发器
5.事件
6.视图
7.JSON语法

5.元数据获取

5.1 元数据介绍

”基表“ :数据字典信息(列结构 frm),系统状态,对象状态

相当于linux中的 inode

DDL DCL语句修改元数据

5.1 show语句(MySQL独家)
help show;
show  databases;                        #查看所有数据库
show tables;                            #查看当前库的所有表
SHOW TABLES FROM                        #查看某个指定库下的表
show create database world              #查看建库语句
show create table world.city            #查看建表语句
show  grants for  root@'localhost'      #查看用户的权限信息
show  charset;                         #查看字符集
show collation                          #查看校对规则
show processlist;                       #查看数据库连接情况
show index from                         #表的索引情况
show status                             #数据库状态查看
SHOW STATUS LIKE '%lock%';         		#模糊查询数据库某些状态
SHOW VARIABLES                          #查看所有配置信息
SHOW variables LIKE '%lock%';          	#查看部分配置信息
show engines                            #查看支持的所有的存储引擎
show engine innodb status\G             #查看InnoDB引擎相关的状态信息
show binary logs                        #列举所有的二进制日志
show master status                      #查看数据库的日志位置信息
show binlog evnets in                   #查看二进制日志事件
show slave status \G                    #查看从库状态
SHOW RELAYLOG EVENTS               		#查看从库relaylog事件信息
desc  (show colums from city)           #查看表的列定义信息

5.2 information_schema.tables 虚拟库

information_schema —> VIEWS 视图

use information_schema;
show tables;

CREATE VIEW test AS SELECT    
country.name AS co_name,country.SurfaceArea,city.name AS ci_name,city.Population
FROM city   JOIN country
ON city.CountryCode=country.code
WHERE city.Population<100;

SELECT * FROM test;

5.2.1 TABLES 作用和结构

作用: 存储整个数据库中,所有表的元数据的查询方式.

desc tables;	
TABLE_SCHEMA    表所在的库   
TABLE_NAME     	表名
ENGINE          表的引擎
TABLE_ROWS     	表的行数
AVG_ROW_LENGTH 	平均行长度
INDEX_LENGTH   	索引长度

例子

1.查询world 数据库下的所有表名
use world;
show tables;	&& show tables from world;

2.查询整个数据库下的所有表名
select table_name from information_schema.tables;

3.查询所有InnoDB引擎的表
SELECT table_schema,table_name,ENGINE FROM information_schema.tables
WHERE ENGINE='innodb';

4.统计每张表的实际的空间占用大小情况
(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)

SELECT table_name,AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH
FROM information_schema.tables;

5.统计每个库的空间使用大小情况
SELECT table_schema,SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024
FROM information_schema.tables
GROUP BY table_schema;

中小型公司:数据量大小一般在 300G 500G

中大型公司:数据量大小一般在 2T 10T

6.对MySQL的数据库进行分库分表备份
mysqldump -uroot -p123 world city >/backup/world_city.sql

SELECT CONCAT("mysqldump -uroot -p123 ",table_schema ," ",table_name ," >/backup/",table_schema,
"_",table_name,".sql")
FROM information_schema.tables INTO OUTFILE '/tmp/bak.sql';



**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/6047b56ed3cc46179b1999b0c34cc271~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MDgwNDUxMTkwMTI=:q75.awebp?rk3s=f64ab15b&x-expires=1770908011&x-signature=%2BGz02HnbZdc51yDEHZXBjpU3TXc%3D)
![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/061617e8f2b040cdae63166c9ccc2849~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MDgwNDUxMTkwMTI=:q75.awebp?rk3s=f64ab15b&x-expires=1770908011&x-signature=qNZnAU%2FxJFL%2Bivc5v829ub9Gbns%3D)

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
详情docs.qq.com/doc/DSmdCdUNwcEJDTXFK