MySQL:多表查询和事务

多表查询

从多张表中查询数据

如果直接执行多表查询

sql 复制代码
select * from emp,dept;

会得到大量的结果集,即两张表的全部组合结果(笛卡尔积)

但我们并不需要这么多的无效结果,只需要保留两张表关联部分的数据

通过添加连接查询条件

sql 复制代码
select * from emp,dept where 外键 = 主键;

连接查询

内连接

查询两个集合的交集部分数据

隐式内连接
sql 复制代码
select 字段列表 from 表1 as 别名,表2 as 别名 where 条件..
显式内连接
sql 复制代码
select 字段列表 from 表1 别名1[inner] join 表2 别名2 on 连接条件

外连接

左外连接:

查询左表所有数据,以及两张表交集部分的数据

sql 复制代码
select 字段列表 from 表1 left [outer] join 表2 on条件
右外连接:

查询右表所有数据,以及两张表交集部分数据

sql 复制代码
select 字段列表 from 表1 right [outer] join 表2 on条件

自连接

当前表与自身的连接查询,自连接必须使用表别名

子查询

在SQL语句中嵌套select语句,称为嵌套查询,又称子查询

分为

标量子查询(子查询结果为单个值)
列子查询(查询结果为一列)
行子查询(子查询结果为一行)
表子查询(子查询结果为多行多列)

子查询可以写在

WHERE,FROM,SELECT

之后

标量子查询

最简单的子查询形式

只需要单纯的将需求分解即可

sql 复制代码
select a from b where + 条件
条件: a=(select a from b where c)

列子查询

子查询的结果为一列(可以是多行)

常用操作符:

IN,NOT IN
sql 复制代码
IN 在指定的集合范围内,多选
NOT IN 不在指定的集合范围内
sql 复制代码
select a from b where a in (select a from b where c)

行子查询

子查询结果返回一行(一列或多列)

常用操作符:

=,<>,IN,NOT IN
sql 复制代码
select * from emp where (a,b) = (select a,b from emp where ....)
#行和行进行判断

表子查询

子查询结果为多行多列(临时表)

常用操作符:

IN

事务

一组操作的集合,一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败.

开启事务
sql 复制代码
START TRANSACTION 或 BEGIN;
提交事务
sql 复制代码
COMMIT
回滚事务
sql 复制代码
ROLLBACK

事务的四大特性

ACID

原子性:

Atomicity

事务是不可分割的最小操作单元,要么全部成功,要么全部失败.

一致性:

Consistency

事务完成时,必须使所有数据都保持一致状态.

隔离性:

Isolation

数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行.

持久性:

Durability

事务一旦提交或回滚,那对数据库中数据的改变就是永久的.

相关推荐
松涛和鸣1 小时前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
likangbinlxa1 小时前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
r i c k2 小时前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦2 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL3 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·3 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德3 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫3 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i3 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.3 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql