MySQL元数据获取基础笔记day05

多表连接查询

1、作用 业务需要的数据来自多张表时

2、多表连接查询基本语法

🌟🌟内连接
🌟 外链接
全链接
笛卡尔

3、内连接的类型

传统连接 where
自连接
join ming
join on 🌟 🌟 🌟 🌟 🌟

4、join on的语法

select xxx
from A
join B
on A.xxx=B.yyy
where
group
having
order by
limit

把原来的两张表按照一定的逻辑条件并成了一张表。

select a.name,b.addr from a join b on a.id=b.id where a.name='zhongsan';
如果是3张表 A B C
那么先A join C
on A.xx=C.yy
join B
on C.aa=B.bb

5、多表连接的套路:

1.根据需求找到关联表。
2.找到表与表的关联列。
3.列名调用时,需要添加表前缀,例如a.id ,b.name之类

多表连接案例 world表为例。
查询人口数量少于100人的城市所在的国家名、国土面积、城市名和人口名。

SELECT country.name,country.surfacearea,city.name,city.population
from city
join country
on city.countrycode=country.code
WHERE city.population<100;

5.2 查询zhang3学习了几门课程

涉及到的表 student
sc

select student.sname,count(sc.cno) from student join sc
on student.sno=sc.sno
where student.sname='zhang3';

5.3 统计zhang3学习了课程 名称
student
sc
course

select student.sname,group_concat(course.cname) from student join sc on student.sno=sc.sno
join course
on sc.cno=course.cno
where student.sname='zhang3';

5.4 oldguo老师教了学生的个数
teacher

select teacher.tname,count(student.sno)
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';

5.5 每位老师所教课程的平均分,并按平均分排序

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,teacher.tname
order by avg(sc.score);

5.6 查询oldguo所教的不及格的学生姓名

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 teacher.tname='oldguo' and sc.score<60;

5.7 查询所有老师所教学生不及格的信息

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;

6.别名的使用。
6.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

6.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 列
from 表 表别名
where 表别名.列
group b考别名. 列
having 列别名
order by 列别名

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

7.外链接简介

left join
a left join b
on a.x=b.y
right join

8.元数据获取

基表----数据字典信息(列结构frm),系统状态,对象状态。
相当于linux inode

DDL DCL

information_schema 虚拟库 视图

8.1 show 语句 (mysql独家)

show databases;
show tables;
show create databases xxx;
show create table xxx;
show grant for xxx(用户);
show charset;(支持字符集情况;
show collation;校对
show variables like ''%trx%;
show engines; (存储引擎)
show process list; (进程)
show index from t1; (查看索引)
show status;(看数据库状态)
show engine innodb status\G;(看存储引擎状态)
show binlog events in'';(二进制)
show binary logs;
show master status;
show slave status\G;
show relaylog events in '';
show table status;
help show;

8.2 information_schema虚拟库
information_schema --->values 视图

8.2.1 TABLES作用和结构

视图中保存中mysql所有的表的元数据信息。
作用:存储整个数据库中,所有表的元数据查询方式。

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

例子:
1、查询world数据库下所有的表名。

show tables from world;

use information_schema;
2、查询整个数据库下所有的表名。
select table_name from information_schema.tables;
3.查询所有innodb引擎的表
select * 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 as total_mb
from information_schema.tables
group by table_schema ;

6.对mysql的数据库进行分库分表备份

mysqldump -uroot -p world(库名) city(表名) >/backup/world_city.sql

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

会报错,这是5.7以后的一个约束,需要把参数加入配置文件中。然后保存退出,重启数据库,每次导出名不能重复。

secure-file-priv=/tmp

然后进入相应目录 sh 执行脚本即可。

7.模仿模版语句,对world数据库下的表进行批量操作。
alter table world.city discard table space;

select concat("alter table ",table_schema,".",table_name," discard table space;") from information_schema.tables where table_schema='world'
into outfield '/tmp/discard.sql'
;

  1. 索引及执行计划管理
    1.索引的作用
    类似于一本书的目录,起到优化查询的功能。
    2.索引类型
    Btree索引 ⭐️⭐️⭐️⭐️⭐️
    RTREE索引
    HASH索引
    FUllText索引 (全文索引)

  1. BTREE的细分类(算法)
    B-Tree 从根遍历然后遍历枝最后找到叶子。
    B+Tree 在下面叶节点双向指针。
    B*Tree 在相邻枝节点加入了枝节点的双向指针。


    b+tree.JPG

B-Tree先排序 然后分成几份 有个范围。

4.Btree索引的功能 (innode默认Btree*)
聚集索引(集群索引)cluster index
辅助索引 (二级索引)secondary index

5.B-tree是如何构建的
辅助索引: alter table t1 add index idx_name(name);
创建了一个B-tree的结构。

1.将name列的所有值取出来,进行自动排序。
2.将排完序的值均匀的落到16KB叶子节点数据页中,并将索引键值所对应的数据行的页码记录。
3.向上生成枝节点和根节点。

聚集索引(IOT)

1.默认是按照主键生成聚集索引,没有主键,存储引擎会使用唯一键,如果都没有会自动生成一个隐藏的聚集索引。
2.数据在存储时,就会按照聚集索引的顺序存储到磁盘的数据页。
3.由于本身数据就是有序的,所以聚集索引构建时,不需要排序。
4.聚集索引直接将磁盘的数据页作为叶子节点。
5.枝节点和根节点只会调取下层节点主键的最小值。

聚集索引和辅助索引的区别?

辅助索引的叶子节点是手工创建的
聚集索引是自动跟主键生成的
聚集索引只有一个
辅助索引可以有多个

索引可以用来提高查询速度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容

  • 作为一枚Java后端开发者,数据库知识必不可少,对数据库的掌握熟悉度的考察也是对这个人是否有扎实基本功的考察。特别...
    丶Orz丶阅读 397评论 0 0
  • 最近打算采用关系型数据库来理一下公司的运营数据,先拿点东西练手找感觉。下面是几个关于学生课业的表,需要建立一个数据...
    九天朱雀阅读 976评论 0 3
  • 上节重点难点回顾: 1. 数据类型 2. 列属性 primary key unique not null defa...
    张鑫泽_2109阅读 490评论 0 0
  • 1).创建数据库 create database学生选课数据库 2).创建四张表 Create table Stu...
    blvftigd阅读 1,581评论 0 0
  • 一。数据库基本概念:数据、数据库。数据模型/DBMS(数据库管理系统)/DBS(数据库系统)二。数据库内部组成二维...
    S_s_s_a53f阅读 517评论 0 0