MYSQL--多表查询&事务

多表查询的分类

在这里插入图片描述

SELECT * FROM EMP,DEPT;

在这里插入图片描述

笛卡尔积:A中有6条数据,B中有4条数据,AB组合后,有6x4=24条数据
但是这24条数据里有很多是无效数据

因此多表查询为了消除无效数据

1. 连接查询

内连接

查询两个表交集的数据

SELECT * FROM EMP,DEPT where dep_id=did;

在这里插入图片描述

隐式内连接

1.查询 emp的 name, gender,dept表的dname

SELECT
	emp. NAME,
	emp.gender,
	dept.dname
FROM
	emp,
	dept
WHERE
	emp.dep_id = dept.did;

给表取别名

SELECT
	t1. NAME,
	t1.gender,
	t2.dname
FROM
	emp t1, -- 给表取别名
	dept t2
WHERE
	t1.dep_id = t2.did;
显式内连接
select * from emp INNER JOIN dept on emp.dep_id=dept.did;   #INNER可以省略
select * from emp join dept on emp.dep_id=dept.did;

外连接

左外连接:相当于查询A表所有数据和交集部分数据
在这里插入图片描述

select * from emp left join dept on emp.dep_id = dept.did;  #以emp表为准

在这里插入图片描述

select * from dept left join emp on emp.dep_id = dept.did;  #以dept表为准

在这里插入图片描述

2.子查询

查询中嵌套查询,称嵌套查询为子查询。
在这里插入图片描述

单行单列

1.查询工资高于猪八戒的员工信息。

select salary from emp where name='猪八戒';
select * from emp where salary > 3600;

#两句和为一句
select salary from emp where salary>(select salary from emp where name='猪八戒');

在这里插入图片描述

多行单列

2.查询 ‘财务部’ 和 ‘市场部’ 所有的员工信息

select did from dept where dname ='财务部' or dname='市场部';

select * from emp where dep_id in (select did from dept where dname ='财务部' or dname='市场部');

在这里插入图片描述

多行多列

3.查询入职日期是 ‘2011-11-11’ 之后的员工信息和部门信息

-- 查询入职日期是 '2011-11-11' 之后的员工信息 
select * from emp where join_date > '2011-11-11' ; 

-- 将上面语句的结果作为虚拟表和dept表进行内连接查询 
select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where t1.dep_id = dept.did;

在这里插入图片描述

创建被查询的表

DROP TABLE
IF EXISTS emp;

DROP TABLE
IF EXISTS dept;

# 创建部门表 
CREATE TABLE dept (
	did INT PRIMARY KEY AUTO_INCREMENT,
	dname VARCHAR (20)
);

# 创建员工表 
CREATE TABLE emp (
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR (10),
	gender CHAR (1),
	-- 性别 
	salary DOUBLE,
	-- 工资 
	join_date DATE,
	-- 入职日期 
	dep_id INT,
	FOREIGN KEY (dep_id) REFERENCES dept (did) -- 外键,关联部门表(部门表的主键)
);

-- 添加部门数据 
INSERT INTO dept (dNAME)
VALUES
	('研发部'),
	('市场部'),
	('财务部'),
	('销售部');

-- 添加员工数据 
INSERT INTO emp (
	NAME,
	gender,
	salary,
	join_date,
	dep_id
)
VALUES
	(
		'孙悟空',
		'男',
		7200,
		'2013-02-24',
		1
	),
	(
		'猪八戒',
		'男',
		3600,
		'2010-12-02',
		2
	),
	(
		'唐僧',
		'男',
		9000,
		'2008-08-08',
		2
	),
	(
		'白骨精',
		'女',
		5000,
		'2015-10-07',
		3
	),
	(
		'蜘蛛精',
		'女',
		4500,
		'2011-03-14',
		1
	),
	(
		'小白龙',
		'男',
		2500,
		'2011-02-14',
		NULL
	);

MYSQL–事务
9/100
保存草稿
发布文章
weixin_48085301
未选择文件
1.事务简介
在这里插入图片描述
2.语法
(1)开启事务
事物中对表中数据的改变是暂时的

START TRANSACTION; 
或者
BEGIN;

(2)提交事务
提交事务之后,对表中事务的改变是永久的

commit;

(3)回滚事务
回滚事务会回滚到开启事务之前,事务提交后无法回滚的

rollback;

只有提交或者回滚后的数据会写入硬盘

事务的四个特性(ACID)
在这里插入图片描述
在这里插入图片描述

事务

1.事务简介

在这里插入图片描述

2.语法

(1)开启事务
事物中对表中数据的改变是暂时的

START TRANSACTION; 
或者
BEGIN;

(2)提交事务
提交事务之后,对表中事务的改变是永久的

commit;

(3)回滚事务
回滚事务会回滚到开启事务之前,事务提交后无法回滚的

rollback;

只有提交或者回滚后的数据会写入硬盘

3.事务的四个特性(ACID)

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值