没有合适的资源?快使用搜索试试~ 我知道了~
3 MySQL多表查询与事务的操作 让初学者自学的
需积分: 9 0 下载量 47 浏览量
2021-06-13
07:05:20
上传
评论
收藏 1.22MB DOCX 举报
温馨提示
试读
19页
3 MySQL多表查询与事务的操作 让初学者自学的
资源详情
资源评论
资源推荐
MySQL 多表查询与事务的操作
第 1 节 回顾
1.1
DQL 查询
1.1.1 排序使用什么子句:order by
升序:asc
降序:desc
1.1.2 聚合函数
聚合函数 作用
count
统计个数
max
最大值
min
最小值
sum
求和
avg
求平均
1.1.3 分页查询
limit 起始值从 0 开始, 长度
1.1.4 分组查询
group by 分组列 having 过滤条件
1.2 约束
1.2.1 约束的关键字
约束名 约束关键字
主键
primary key
唯一
Unique
非空
not null
默认
Default
外键
foreign key
1.2.2 自增长的关键字:
auto_increment
1.2.3 级联操作的语法:
级联操作语法 描述
on update cascade
级联更新
on delete cascade
级联删除
1.3 表与表之间的关系
表与表之间的三种关系 关系如何维护
一对多 通过主外键约束
多对多 通过中间表,中间表与两个表是多对一
一对一 1. 特殊的一对多,多方加唯一约束
1.4 数据库的三大范式
范式 特点
第 1 范式 原子性,每列不可再拆分
第 2 范式 不产生局部依赖,表中每一列都完全依赖于主键。
第 3 范式 不产生传递,表中每一列都直接依赖于主键
第 2 节 学习目标
1) 能够使用内连接进行多表查询
2) 能够使用左外连接和右外连接进行多表查询
3) 能够使用子查询进行多表查询能够使用多表进行查询
4) 能够理解事务的概念
5) 能够说出事务的特点
6) 能够在 MySQL 中使用事务
7) 能够理解脏读、不可重复读、幻读的概念及解决办法
8) 能够使用 DCL 管理 MySQL 中的用户
第 3 节 表连接查询
3.1 什么是多表查询
数据准备
2.
从表的主键同时又是外键
# 创建部门表
create table dept(
id int primary key auto_increment,
name varchar(20)
)
insert into dept (name) values ('开发部'),('市场部'),('财务部');
# 创建员工表
create table emp (
id int primary key auto_increment,
name varchar(10),
gender char(1), -- 性 别
salary double, -- 工 资
join_date date, -- 入职日期
dept_id int,
foreign key (dept_id) references dept(id) -- 外键,关联部门表(部门表的主键)
)
insert into emp(name,gender,salary,join_date,dept_id) values('孙悟
空','男',7200,'2013-02-24',1);
insert into emp(name,gender,salary,join_date,dept_id) values('猪八
戒','男',3600,'2010-12-02',2);
-- 设置过滤条件 Column 'id' in where clause is ambiguous
select * from emp,dept where id=5;
select * from emp,dept where emp.`dept_id` = dept.`id`;
-- 查询员工和部门的名字
select emp.`name`, dept.`name` from emp,dept where emp.`dept_id` = dept.`id`;
多表查询的作用:
比如:我们想查询孙悟空的名字和他所在的部门的名字,则需要使用多表查询。
如果一条 SQL 语句查询多张表,因为查询结果在多张不同的表中。每张表取 1 列或多列。
3.1.1 多表查询的分类:
3.2 笛卡尔积现象
3.2.1 什么是笛卡尔积现象
什么是笛卡尔积:
结果分析:
3.2.2 如何清除笛卡尔积现象的影响
我们发现不是所有的数据组合都是有用的,只有员工表.dept_id = 部门表.id 的数据才是有用的。所以需要
通过条件过滤掉没用的数据。
insert into emp(name,gender,salary,join_date,dept_id) values('唐僧','男',9000,'2008-
08-08',2);
insert into emp(name,gender,salary,join_date,dept_id) values('白骨
精','女',5000,'2015-10-07',3);
insert into emp(name,gender,salary,join_date,dept_id) values('蜘蛛
精','女',4500,'2011-03-14',1);
-- 需求:查询所有的员工和所有的部门
select * from emp,dept;
剩余18页未读,继续阅读
jzfwan
- 粉丝: 24
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0