多表连接查询环境准备
CREATE DATABASE school CHARSET utf8mb4;
USE school
CREATE TABLE student(
sno INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
sname VARCHAR(20) NOT NULL COMMENT '姓名',
sage TINYINT UNSIGNED NOT NULL COMMENT '年龄',
ssex ENUM('f','m') NOT NULL DEFAULT 'm' COMMENT '性别'
)ENGINE=INNODB CHARSET=utf8;
CREATE TABLE course(
cno INT NOT NULL PRIMARY KEY COMMENT '课程编号',
cname VARCHAR(20) NOT NULL COMMENT '课程名字',
tno INT NOT NULL COMMENT '教师编号'
)ENGINE=INNODB CHARSET utf8;
CREATE TABLE sc (
sno INT NOT NULL COMMENT '学号',
cno INT NOT NULL COMMENT '课程编号',
score INT NOT NULL DEFAULT 0 COMMENT '成绩'
)ENGINE=INNODB CHARSET=utf8;
CREATE TABLE teacher(
tno INT NOT NULL PRIMARY KEY COMMENT '教师编号',
tname VARCHAR(20) NOT NULL COMMENT '教师名字'
)ENGINE=INNODB CHARSET utf8;
INSERT INTO student(sno,sname,sage,ssex)
VALUES
(1,'zhang3',18,'m'),
(2,'zhang4',18,'m'),
(3,'li4',18,'m'),
(4,'wang5',19,'f'),
(5,'zh4',18,'m'),
(6,'zhao4',18,'m'),
(7,'ma6',19,'f'),
(8,'oldboy',20,'m'),
(9,'oldgirl',20,'f'),
(10,'oldp',25,'m');
INSERT INTO teacher(tno,tname) VALUES
(101,'oldboy'),
(102,'hesw'),
(103,'oldguo');
INSERT INTO course(cno,cname,tno)
VALUES
(1001,'linux',101),
(1002,'python',102),
(1003,'mysql',103);
INSERT INTO sc(sno,cno,score)
VALUES
(1,1001,80),
(1,1002,59),
(2,1002,90),
(2,1003,100),
(3,1001,99),
(3,1003,40),
(4,1001,79),
(4,1002,61),
(4,1003,99),
(5,1003,40),
(6,1001,89),
(6,1003,77),
(7,1001,67),
(7,1003,82),
(8,1001,70),
(9,1003,80),
(10,1003,96);
多表连接说明:
1.通过查询需求,找到所需表
2.找到所有表之间的关联关系
语法:
两表关联
from a join b on a.x=b.y
多表关联:
from a join c on a.x=c.y
join b on c.z=b.z
外连接
A left join B
A表所有的数据+B表满足关联条件的数据
结论:left join 应用场景,
A right join B
B表所有的数据+A 满足关联条件的数据
show语句
show databases; 查看所有库名
show tables; 查看当前库下的所有表明
show tables from world ; 查看world库下的所有表
show create database world;查看建库语句
show create tables city ; 查看建表语句
show variables like '%try%' 查看参数信息
show grants for root@'loocalhost';查看用户权限信息
show [full] processlist; 查看会话连接情况
show engines; 查看当前数据库支持的引擎
show charset; 查看当前数据库支持的字符集
show collation; 查看当前数据库支持的排序规则
show status; 查看当前数据库的状态信息
show status like '%lock%'\G 模糊查询数据库状态
show master status; 查看当前使用的二进制日志信息
show binary logs; 查看所有二进制日志信息
show binlog evnets in 'xxxx' ; 查看二进制日志事件信息
show relaylog events in 'xxxx' 查看中继日志事件信息
show slave status \G ; 查看从库复制状态信息
show engine innodb status \G 查看innodb引擎相关状态信息
元数据获取
什么是元数据?
库,表: 属性(字符集,校对规则,数据类型,存储引擎,约束,其他数据)
权限:
状态信息:
等。
元数据 回去方法
show语句:封装好的基础功能,可以实现大部分的元数据查询需求
information_schema<试图> 库:mysql给我们定义好的元数据查询方法。
information_schema<试图> 库
应用场景:做数据库资产统计
tables
TABLE_SCHEMA:表所在的库
TABLE_NAME:表名
TABLE_ROWS:表的行数
ENGINE:引擎
AVG_ROW_LENGTH:平均行长度
INSEX_LENGTH:索引长度
TABLE_COMMENT:表的注释
例子:1.统计库的所有库下的表的数量
select table_schema,count(table_name) from information_schema.tables group by table_schema;
2.统计不同存储引擎的表名
select engine,group_concat(table_name) from information_schema.tables group by engine;
3.统计所有非系统表,非innodb的表
columns