数据库多表-嵌套
sql关键字
关键字 | 描述 |
---|---|
select | 查询 |
from | 从哪张表 |
where | 普通条件筛选 |
order by | 排序 |
asc | 升序 |
desc | 降序 |
group by | 分组 |
having | 对聚合函数过滤,一般都是结合group by一块用 |
distinct | 去重 |
limit | 取结果中的一部分 |
条件
条件 | 含义 |
---|---|
> | 大于 |
< | 小于 |
= | 等于 |
<> != | 不等于 |
like | 模糊查询 |
between and | 在。。。和。。。之间 |
in | 在集合中存在 |
not | 非 |
条件连接符
符号 | 含义 |
---|---|
and | 且 |
or | 或 |
分组
group by 分组字段
聚合函数过滤
having 聚合函数 判断条件值
聚合函数
函数 | 含义 |
---|---|
max() | 最大 |
min() | 最小 |
avg() | 平均 |
sum() | 求和 |
count() | 计数 |
排序
order by 排序字段 排序规则
排序规则 | 解释 |
---|---|
asc | 升序 |
desc | 降序 |
取结果的一部分
- 取前几条
limit n
limit 0,n - 取中间的一部分
limit m,n
m 表示从第m-1行开始取
n表示取了多少行
取别名
- 字段名或者表名 + 空格 + 别名按时
- 字段名或者表名 + as + 别名
多表关联
where关联
select 展示字段 from 表名1 a,表名2 b where a.关联字段= b.关联字段
join关联
- 内连接
select 展示字段 from 表名1 a join 表2 b on a.关联字段= b.关联字段
或select 展示字段 from 表名1 a inner join 表2 b on a.关联字段= b.关联字段 - 左连接
select 展示字段 from 表名1 a left join 表2 b on a.关联字段= b.关联字段 - 右连接
select 展示字段 from 表名1 a right join 表2 b on a.关联字段= b.关联字段 - 全连接
select 展示字段 from 表名1 a full join 表2 b on a.关联字段= b.关联字段
增
- 关键字
insert into 表名 (字段名1,字段名2,。。。)
value(值1,值2,。。。)
values(值1,值2,。。。) ,(值1,值2,。。。) ,(值1,值2,。。。),。。。。。 - 单条数据差插入
insert into 表名 (字段名1,字段名2,。。。)value(值1,值2,。。。) - 多条数据插入
insert into 表名 (字段名1,字段名2,。。。)values(值1,值2,。。。),(值1,值2,。。。),(值1,值2,。。。),。。。。
删
- 关键字
delete from 表名
where 条件 - 删除某些数据
delete from 表名 where 条件 - 清空表
delete from 表名
改
- 关键字
update 表名
set 字段名 = 字段值
格式
update 表名 set 字段名 = 字段值 where 条件
数据运维
- 清表
只删除表内容,不释放内存
delete from 表名;
清空表内容,并且释放内存
truncate table 表名;
备份临时表(全部数据)
- 1.临时表不存在
create table 新表名 as select * from 旧表; - 2.临时表已存在
insert into 临时表名 select * from 旧表;
备份临时表(部分数据,表结构一样)
- 1.临时表不存在
create table 新表名 as select * from 旧表 where 条件; - 2.临时表已存在
insert into 临时表名 select * from 旧表 where 条件;
只备份表结构
create table 新表名 as select * from 旧表 where 1=2;
备份临时表(表结构不同)
insert into 临时表名 (字段1,字段2,字段3,。。。) select 字段1,字段2,字段3,。。。 from 旧表名 where 条件
应付面试
关键字 | 作用 |
---|---|
create table | 建表 |
create database | 建库 |
alter table | 修改表结构 |
drop table | 删表 |
drop database | 删库 |
show databases | 查看所有数据名 |
show tables | 查看数据库中有哪些表 |
use | 数据库名 切换数据库 |
commit | 事物提交 |
rollback | 事物回滚 |
增删改关键字总结
关键字 | 解释 |
---|---|
insert into | 插入关键字 |
value/values | 值 |
update | 修改关键字 |
set | 修改某个字段 |
delete from | 删除关键字 |
create table | 建表 |
create database | 建库 |
alter table | 修改表结构 |
drop table | 删表 |
drop database | 删库 |
show databases | 查看所有数据名 |
show tables | 查看数据库中有哪些表 |
use | 数据库名 切换数据库 |
commit | 事物提交 |
rollback | 事物回滚 |
ER图
画图工具:visio
- 1.画ER图
- 2.选择ER图形状
更多形状——软件和数据库——数据库——UML数据库表示法
填充表结构
根据数据库的表结构,来填充ER图每个表中的内容
学生表.png
根据表与表之间的关系,用线连接关联字段
课程表.png
根据ER图写多表关联语句
1、查询出每个老师教的所有课程和学生
先找出改查询语句需要用到哪些字段
老师姓名,课程名,学生姓名-
根据看ER图找出这几个字段都在那几张表中
这几个字段分别在 老师表,课程表,和学生表中
老师表.png -
根据表与表之间的关系,看需要关联几张表
根据ER图可以看出,需要关联4张表
SC.png 写出多表关联语句
select * from Teacher a,Course b,SC c,Student d where a.TID = b.TID and b.CID = c.CID and c.SID = d.SID;再根据题意写出完整的sql
select a.Tname,b.Cname,d.Sname from Teacher a,Course b,SC c,Student d where a.TID = b.TID and b.CID = c.CID and c.SID = d.SID order by a.TID;
多表关联之join
多表关联
- 先决条件
两表关联,必须有一个关联字段
关联方式:where
原理:
第一步:拿量表数据做笛卡尔积,生成一张临时表
第二步:根据where条件,筛选出满足条件的数据
问题:如果表数据太多的话,生成的临时表会变得非常庞大 - join
原理:
第一步:是先根据on条件进行筛选
第二步:显示满足条件的数据 - 内外连接
只显示满足on条件的数据,不满足条件的不显示
格式:
select * from 表1 a inner join 表2 b on 条件; - 左外连接
以左表为主表,左表数据全显示,右表只显示满足on条件的数据,不满足以null代替
格式:
select * from 表1 a left join 表2 b on 条件; - 右外连接
以右表为主表,右表数据全显示,左表只显示满足on条件的数据,不满足以null代替
格式:
select * from 表1 a right join 表2 b on 条件; - 全外连接
两表数据全显示,不满足on条件的以null代替
格式
select * from 表1 a full join 表2 b on 条件;