更加深入Mysql-04-MySQL 多表查询与事务的操作

文章目录

  • 多表查询
    • 内连接
      • 隐式内连接
      • 显示内连接
    • 外连接
      • 左外连接
      • 右外连接
    • 子查询
  • 事务
    • 事务隔离级别

多表查询

有时我们不仅需要一个表的数据,数据可能关联到俩个表或者三个表,这时我们就要进行夺标查询了。

  1. 数据准备:

创建一个部门表并且插入数据:

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) -- 外键,关联部门表(部门表的主键)
)
  1. 查看数据信息。
select * from emp;
select * from dept;

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

  1. 查询员工以及其部门的全部信息
select * from emp,dept where emp.dept_id = dept.id;

在这里插入图片描述
这里我们可以看到我们查询出emp表以及dept表俩个表中的数据了,但是其中存在冗余数据,因此我们要查询出我们所需要的具体数据来提高我们的查询数据。

  1. 查询员工的姓名及其部门名称
select emp.name 员工姓名,dept.name 部门名称 from emp,dept where emp.dept_id = dept.id;

在这里插入图片描述

  1. 通过起别名的方式来使sql代码简单
select e.name 员工姓名,d.name 部门名称 from emp e , dept d where e.dept_id = d.id;

在这里插入图片描述

内连接

用左边表的记录去匹配右边表的记录

隐式内连接

看不到 JOIN 关键字,条件使用 WHERE 指定
语法:

SELECT 字段名 FROM 左表, 右表 WHERE 条件

示例:

select e.name 员工姓名,d.name 部门名称 from emp e , dept d where e.dept_id = d.id;

在这里插入图片描述

显示内连接

使用 INNER JOIN ... ON 语句, 可以省略 INNER
语法:

SELECT 字段名  FROM 左表  [INNER] JOIN 右表  ON 条件

示例:

  1. 查询员工的全部信息
select * from emp inner join dept on emp.dept_id = dept.id;

在这里插入图片描述

  1. 查询员工姓名为猪八戒的全部信息,只要员工姓名和部门名称信息
select e.name as 员工名称,d.name as 部门名称 from emp e inner join dept d on e.dept_id = d.id and e.name = '猪八戒'

在这里插入图片描述

外连接

左外连接

用左边表的记录去匹配右边表的记录,如果符合条件的则显示;否则,显示 NULL
语法:

 SELECT 字段名  FROM 左表  LEFT [OUTER] JOIN 右表  ON 条件
  1. 数据准备
    在部门表中增加一个销售部
insert into dept (name) values ('销售部');
  1. 使用左外连接查询(保证左表的数据全部显示)
select * from dept left outer join emp on dept.id = emp.dept_id;

在这里插入图片描述
这里我们可以看到部门表的信息全部显示了,但是右表中没有匹配的数据则全部为null。

右外连接

用右边表的记录去匹配左边表的记录,如果符合条件的则显示;否则,显示 NULL
语法:

SELECT 字段名  FROM 左表 RIGHT [OUTER ]JOIN 右表  ON 条件
  1. 数据准备
insert into emp values (null, '沙僧','男',6666,'2013-12-05',null); 
  1. 使用右外连接查询(在内连接的基础上,保证右表的数据全部显示)
select * from dept right outer join emp on dept.id = emp.dept_id;

在这里插入图片描述

子查询

  • 一个查询的结果做为另一个查询的条件
  • 有查询的嵌套,内部的查询称为子查询
  • 子查询要使用括号

子查询结果:

  • 单行单列:子查询结果只要是单行单列,肯定在 WHERE 后面作为条件
  • 多行单列: 结果集类似于一个数组,父查询使用 IN 运算符
  • 多行多列: 子查询结果只要是多列,肯定在 FROM 后面作为表

示例:
**单行单列:**查询最低工资的员工信息

select * from emp where salary = (select min(salary) from emp)

在这里插入图片描述

**多行单列:**查询员工工资低于6000的部门名称

select name from dept where id in (select id from emp where salary < 6000)

在这里插入图片描述
**多行多列:**查询出 2011 年以后入职的员工信息,包括部门名称

select * from dept d, (select * from emp where join_date >='2011-1-1') e where d.`id`= e.dept_id ;

在这里插入图片描述

事务

要么成功都成功,要么失败都失败

功能SQL 语句
开启事务start transaction;
提交事务commit;
回滚事务rollback;
  1. 数据准备
CREATE TABLE account (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10),balance DOUBLE
);INSERT INTO account (NAME, balance) VALUES ('张三', 1000), ('李四', 1000);

在这里插入图片描述

  1. 手动事务提交
    过程图解:
    在这里插入图片描述
    示例(成功):
start transaction;-- 张三账号-500
update account set balance = balance - 500 where name='张三';
-- 李四账号+500
update account set balance = balance + 500 where name='李四';commit;

当我们开启事务之后,对张三和李四账户进行金额修改的时候,我们可以
看到金额都为1000,并没有发生改变,但是当我们进行提交的时候,账户的金额发生了改变。

示例(失败): 恢复数据张三和李四分别拥有1000元

-- 张三账号-500
update account set balance = balance - 500 where name='张三';
-- 李四账号+500
update account set balance = balance + 500 where name='李四';rollback;

当我们开启事务之后,对张三和李四账户进行金额修改,我们可以看到金额都为1000,并没有发生改变,我们使用事务的回滚,账户金额依然没有变。

  1. 自动提交事务
    MySQL 默认每一条 DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执行完毕自动提交事务

事务原理(图解):
事务在开启之后,所有操作都会被保存到日志文件当中,事务日志只有在得到commit命令才会同步到数据表中,其他任何情况都会清空事务日志(rollback,断开连接)
在这里插入图片描述

事务隔离级别

事务特性含义
原子性(Atomicity)每个事务都是一个整体,不可再拆分,事务中所有的 SQL 语句要么都执行成功,要么都失败。
一致性(Consistency)事务在执行前数据库的状态与执行后数据库的状态保持一致。
隔离性(Isolation)事务与事务之间不应该相互影响,执行时保持隔离的状态。
持久性(Durability)一旦事务执行成功,对数据库的修改是持久的。就算关机,也是保存下来的。
  • MySQL 数据库有四种隔离级别
级别名字隔离级别脏读不可重复读幻读数据库默认隔离级别
1读未提交read uncommitted
2读已提交read committedOracle 和 SQL Server
3可重复读repeatable readMySQL
4串行化serializable

欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fiddler 导出请求为curl格式

来自:https://www.cnblogs.com/yudongdong/p/15418181.html Fiddler 下载地址: https://downloads.getfiddler.com/fiddler-classic/FiddlerSetup.5.0.20243.10853-latest.exe 这段代码加到类中 public static RulesOption("关闭请求体转代码", "生成代码&qu…

达梦数据库系列—29. DTS迁移ORACLE到DM

目录 1.ORACLE源端信息 2.DM目的端信息 3.DTS 迁移评估 4.数据库迁移 4.1 Oracle 源端数据库准备 4.2 目的端达梦数据库准备 初始化参数设置 兼容性参数设置 表空间规划 用户规划 创建迁移用户和表空间 4.3迁移步骤 创建迁移 配置数据源 配置迁移对象及策略 开…

django-vue-admin项目运行

文本主要对django-vue-admin项目进行了简要介绍&#xff0c;并且对前后端进行了源码安装和运行。在此基础上可作为管理系统二次开发的基础框架。 一.django-vue-admin简介和安装 1.简介 django-vue-admin项目是基于RBAC模型权限控制的中小型应用的基础开发平台&#xff0c;采…

昇思MindSpore学习总结十六 —— 基于MindSpore的GPT2文本摘要

1、mindnlp 版本要求 !pip install tokenizers0.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple # 该案例在 mindnlp 0.3.1 版本完成适配&#xff0c;如果发现案例跑不通&#xff0c;可以指定mindnlp版本&#xff0c;执行!pip install mindnlp0.3.1 !pip install mindnlp …

使用Amazon Web Services Lambda把天气预报推送到微信

最近北京开始下雨&#xff0c;开始和同事打赌几点能够雨停&#xff0c;虽然Iphone已经提供了实时天气&#xff0c;但是还是想用国内的API试试看看是不是更加准确些。 以下是我使用的服务&#xff1a; 地图SDK/APP获取 经纬度彩云天气API 通过地理位置获取天气信息Lambda 作为…

关于Mysql的面试题(实时更新中~)

一、主键约束与“not null unique”区别 1、作为Primary Key的域/域组不能为null&#xff0c;而Unique Key可以。 2、在一个表中只能有一个Primary Key&#xff0c;而多个Unique Key可以同时存在。unique not null 可以 将表的一列或多列定义为唯一性属性&#xff0c;而prima…

buu做题(6)

目录 [GWCTF 2019]我有一个数据库 [WUSTCTF2020]朴实无华 [GWCTF 2019]我有一个数据库 什么都没有, 尝试用dirsearch扫一下目录 可以扫到一个 /phpmyadmin 可以直接进入到数据库里面 但里面没什么东西 可以看到它的版本不是最新的, 搜一下相关的漏洞 phpMyAdmin 4.8.1后台文…

go关于string与[]byte再学深一点

目标&#xff1a;充分理解string与[]bytes零拷贝转换的实现 先回顾下string与[]byte的基本知识 1. string与[]byte的数据结构 reflect包中关于字符串的数据结构 // StringHeader is the runtime representation of a string.type StringHeader struct {Data uintptrLen int} …

ClickHouse 入门(一)【基本特点、数据类型与表引擎】

前言 今天开始学习 ClickHouse &#xff0c;一种 OLAP 数据库&#xff0c;实时数仓中用到的比较多&#xff1b; 1、ClickHouse 入门 ClickHouse 是俄罗斯的 Yandex&#xff08;搜索引擎公司&#xff09;在 2016 年开源的列式存储数据库&#xff08;HBase 也是列式存储&#xf…

某宝同款度盘不限速后台系统源码

简介&#xff1a; 某宝同款度盘不限速后台系统源码&#xff0c;验证已被我去除&#xff0c;两个后端系统&#xff0c;账号和卡密系统 第一步安装宝塔&#xff0c;部署卡密系统&#xff0c;需要环境php7.4 把源码丢进去&#xff0c;设置php7.4&#xff0c;和伪静态为thinkphp…

山东济南十大杰出人物起名大师颜廷利:影响世界的思想家哲学家教育家

在宇宙的广袤舞台上&#xff0c;各类智者以他们独特的方式揭示着世界的奥秘。数学家们在无尽的符号与公式中穿梭&#xff0c;像探索者般解锁着自然界的深层逻辑。考古学家们则跋涉于古老的土地&#xff0c;用他们的双手拂去岁月的尘埃&#xff0c;让沉睡的历史重见天日。 二十一…

spss是什么软件?spss有什么用

spss是什么软件&#xff1f; SPSS是一款数据统计、分析软件&#xff0c;它由IBM公司出品&#xff0c;这款软件平台提供了文本分析、大量的机器学习算法、数据分析模型、高级统计分析功能等&#xff0c;软件易学且功能非常强大&#xff0c;可以使用SPSS制作图表&#xff0c;例如…

汽车免拆诊断案例 | 2017 款林肯大陆车发动机偶尔无法起动

故障现象 一辆2017款林肯大陆车&#xff0c;搭载2.0T发动机&#xff0c;累计行驶里程约为7.5万km。车主进厂反映&#xff0c;有时按下起动按钮&#xff0c;起动机不工作&#xff0c;发动机无法起动&#xff0c;组合仪表点亮正常&#xff1b;多次按下起动按钮&#xff0c;发动机…

(21)起落架/可伸缩相机支架

文章目录 前言 1 连接到自动驾驶仪 2 通过任务规划器设置 3 其他参数 4 参数说明 前言 Copter 和 Plane 支持可伸缩的起落架/相机支架&#xff0c;由伺服机制激活&#xff08;如 Hobby King 出售的用于copters 的这些&#xff09;。齿轮/支架可以手动缩回或用一个辅助开关…

【 DHT11 温湿度传感器】使用STC89C51读取发送到串口、通过时序图编写C语言

文章目录 DHT11 温湿度传感器概述接线数据传送通讯过程时序图检测模块是否存在 代码实现总结对tmp tmp << 1;的理解对sendByte(datas[0]/10 0x30);的理解 DHT11 温湿度传感器 使用80C51单片机通过读取HDT11温湿度传感的数据&#xff0c;发送到串口。 通过时序图编写相应…

微信小程序数组绑定使用案例(一)

微信小程序数组绑定案例&#xff0c;修改数组中的值 1.Wxml 代码 <view class"list"><view class"item {{item.ischeck?active:}}" wx:for"{{list}}"><view class"title">{{item.name}} <text>({{item.id}…

Redis7(二)Redis持久化双雄

持久化之RDB RDB的持久化方式是在指定时间间隔&#xff0c;执行数据集的时间点快照。也就是在指定的时间间隔将内存中的数据集快照写入磁盘&#xff0c;也就是Snapshot内存快照&#xff0c;它恢复时再将硬盘快照文件直接读回到内存里面。 RDB保存的是dump.rdb文件。 自动触发…

昇思25天学习打卡营第25天|MindNLP ChatGLM-6B StreamChat

配置环节 %%capture captured_output !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14 !pip install mindnlp !pip install mdtex2html配置国内镜像 !export HF_ENDPOINThttps://hf-mirror.com下载与加载模型 from m…

【计算机视觉】siamfc论文复现实现目标追踪

什么是目标跟踪 使用视频序列第一帧的图像(包括bounding box的位置)&#xff0c;来找出目标出现在后序帧位置的一种方法。 什么是孪生网络结构 孪生网络结构其思想是将一个训练样本(已知类别)和一个测试样本(未知类别)输入到两个CNN(这两个CNN往往是权值共享的)中&#xff0…

代码解读:Diffusion Models中的长宽桶技术(Aspect Ratio Bucketing)

Diffusion Models专栏文章汇总&#xff1a;入门与实战 前言&#xff1a;自从SDXL提出了长宽桶技术之后&#xff0c;彻底解决了不同长宽比的图像输入问题&#xff0c;现在已经成为训练扩散模型必选的方案。这篇博客从代码详细解读如何在模型训练的时候运用长宽桶技术(Aspect Rat…