MySQL---多表查询+事物

本文介绍了如何在SQL中处理多表查询,包括去除笛卡尔积的方法——通过连接查询和添加条件,内连接和外连接的使用,以及左外连接和右外连接的区别。此外,还探讨了子查询的不同类型及其在SQL语句中的应用。最后,文章讨论了事务的基本概念,如开启、提交和回滚事务,以及ACID特性的重要性。
摘要由CSDN通过智能技术生成

1. 多表查询

笛卡尔积:

笛卡尔积乘积是指在数学中,两个集合 A结合 和 B集合的所有组合情况
在这里插入图片描述
在SQL语句中,我们该如何去除无效的笛卡尔积呢?

即 给多张表查询加上连接查询的条件呢即可

多表查询需求实现步骤

  1. 需求中数据涉及哪些表
  2. 表联合查询使用 从表的外键=主表主键,去除无效的笛卡尔积数据,
    同时有其他额外条件 用 where 进行过滤
  3. 如果有分组,完成分组操作,有条件补充分组条件
  4. 回到select中把需要的数据定义出来
  5. 排序、分页

连接的分类

1.内连接
内连接根据连接条件从两个表中筛选出匹配的记录,并返回匹配的结果只有在两表之间存在匹配的行时,才会有返回结果

分类:
隐式内连接

select  字段列表   from   表1 ,2   where   条件 ... ;

显示内连接

select  字段列表   from   表1  [ inner ]  join 表2  on  连接条件 ... ;

2.外连接
外连接根据连接条件从两个表中筛选出匹配的记录,并返回匹配的结果以及不符合条件的记录。如果某个表中没有匹配的记录,则返回NULL值

分类

左外连接

查询左表的全部数据,显示右表与左表交集的部分数据
左表在前

select  字段列表   from   表1  left  [ outer ]  join 表2  on  条件 ... ;

右外连接

查询右表的全部数据,显示左表与右表交集的部分数据
右表在前

select  字段列表   from   表1  right  [ outer ]  join 表2  on  条件 ... ;

子查询

1.又称嵌套查询,SQL语句中嵌套SELECT语句

SELECT  *  FROM   t1   WHERE  column1 =  ( SELECT  column1  FROM  t2 );

子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个。

2.分类

根据子查询的结果不同,分为:
A. 标量子查询 (子查询结果为单个值)

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询
常见的操作符:= , <> , > , >= , < , <=

B. 列子查询(子查询结果为一列)

子查询返回的结果是一列(可以是多行)
常见的操作符
IN: 在指定的集合范围之内,多选一
NOT IN:不在指定的集合范围之内

C. 行子查询(子查询结果为一行)

子查询返回的结果是一行(可以是多列)
常见的操作符:=、<>、IN、NOT IN

D. 表子查询(子查询结果为多行多列)

子查询返回的结果是多行多列,常作为临时表
常见的操作符:IN

根据子查询位置,分为:
A. WHERE之后
B. FROM之后
C. SELECT之后

2. 事物

  1. 定义:事物是一组操作的集合,它是一个不可分割的工作单位,事物会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么全部成功,要么全部失败

  2. 操作

开启事务: START TRANSACTION 或 BEGIN
提交事务: COMMIT
回滚事务: ROLLBACK

例:我们可以在删除部门,并删除该部门下的员工时,进行事物控制:

-- 开启事务
start transaction ;

-- 删除学工部
delete from dept where id = 1;

-- 删除学工部的员工
delete from emp2 where dept_id = 1;

如果执行成功,则提交事物,执行如下

-- 提交事务 (成功时执行)
commit ;

如果执行失败,则回滚事务,执行如下

-- 回滚事务 (出错时执行)
rollback ;
  1. 四大特性

ACID

原子性(Atomicity):事物是不可分割的最小操作单元,要么全部成功,要么全部失败
一致性(Consistency):事物完成时,必须使所有数据都保持一致的状态
隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久性的

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值