首页 > 数据库 >MySQL 学习笔记 基础(多表查询下,事务)

MySQL 学习笔记 基础(多表查询下,事务)

时间:2024-07-24 16:31:05浏览次数:11  
标签:事务 多表 笔记 查询 dept emp MySQL where select

多表查询

 

多表查询-子查询

  • 概念:SQL语句中嵌套 SELECT 语句,称为嵌套语句,又称子查询。
SELECT * FROM t1 WHERE column = ( SELECT column1 FROM t2 );

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

  • 根据子查询结果不同,分为:

    · 标量子查询(子查询结果为单个值)

    · 列子查询(子查询结果为一列)

    · 行子查询(子查询结果为一行)

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

  • 根据子查询位置,分为:WHERE 之后,FROM 之后,SELECT 之后。

 

多表查询-子查询-标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。

常用的操作符:=  <>  >  >=  <  <=

例子1:查询“销售部”的所有员工信息

select * from emp where dept_id = (select id from dept where name = '销售部');

例子2:查询在员工“方东白”入职之后的员工信息

select * from emp where entrydate > (select entrydate from emp where name = '方东白' );

 

多表查询-子查询-列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。

常用的操作符:IN、NOT IN、ANY、SOME、ALL

 例子1:查询“销售部”和“市场部”的所有员工信息

select * from emp where dept_id in (select id from dept where name = '销售部' or name = '市场部');

例子2:查询比“财务部”所有人工资都高的员工信息

select * from emp where salary > all ( select salary from emp where dept_id = (select id from dept where name = '财务部') );

例子3:查询比“研发部”其中任意一人工资高的员工信息

select * from emp where salary > any ( select salary from emp where dept_id = (select id from dept where name = '研发部') );

 

多表查询-子查询-行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。

常用的操作符:=、<>、IN、NOT IN

例子1:查询与“张无忌”的薪资以及直属领导完全相同的员工信息

select * from emp where (salary, managerid) = (select salary, managerid from emp where name = '张无忌');

 

多表查询-子查询-表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询。

常用的操作符:IN

例子1:查询与“鹿杖客”,“宋远桥”的职位和薪资相同的员工信息

select * from emp where (job, salary) in ( select jot, salary from emp where name = '鹿杖客' or name = '宋远桥' );

例子2:查询入职日期是“2006-01-01”之后的员工信息,及其部门信息

select e.* d,* from (select * from emp where entrydate > '2006-01-01') e left join dept d on e.dept_id = d.id ;

 

事务

 

事务-简介

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

默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。

 

事务-事务四大特性

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

 

事务-并发事务问题

 

事务-并发事务演示及隔离级别

  •  查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
  • 设置事务隔离级别
SET [SESSION GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

 

标签:事务,多表,笔记,查询,dept,emp,MySQL,where,select
From: https://www.cnblogs.com/handsome-zyc/p/18321135

相关文章

  • MySQL中多表查询之外连接
     首先先来介绍一下我做的两个表,然后再用他们两个举例说明。--创建教师表createtableteachers(id_tintprimarykeyauto_increment,--老师编号name_tvarchar(5)--姓名);--创建学生表createtablestudents(id_sintprimarykeyauto_increment,--编号na......
  • Java学习笔记(三)算术运算符、逻辑运算符、四种进制介绍
    Hii,mJinXiang⭐前言⭐本篇文章主要介绍Java算术运算符、逻辑运算符、四种进制介绍详细使用以及部分理论知识......
  • Java学习笔记(七)面向对象编程(中级部分)
    Hii,mJinXiang⭐前言⭐本篇文章主要介绍Java面向对象编程(中级部分)包、访问修饰符、封装、继承、super关键字、多态、向上(下)转型、equals、hashCode、断点调试等知识的详细使用以及部分理论知识......
  • OI-Wiki 学习笔记
    算法基础\(\text{Update:2024-07-22}\)复杂度定义衡量一个算法的快慢,一定要考虑数据规模的大小。一般来说,数据规模越大,算法的用时就越长。而在算法竞赛中,我们衡量一个算法的效率时,最重要的不是看它在某个数据规模下的用时,而是看它的用时随数据规模而增长的趋势,即时间复......
  • MYSQL中SHOW PROCESSLIST使用
    SHOWPROCESSLIST是显示用户正在运行的线程,需要注意的是,除了root用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS权限。通常我们通过top检查发现mysqlCPU或者iowait过高那么解决这些问题......
  • Mysql性能优化
    以下配置需要找到MySQL的my.cnf的配置文件,在文件中修改,增加或者修改以下配置字符集character_set_server=utf8init-connect='SETNAMESutf8'validate_password=OFF大小写lower_case_table_names=1扩展设置最大链接数初始100,链接超过之后就不能连接max_connections=5......
  • 哈夫曼树学习笔记
    哈夫曼树学习笔记定义设二叉树具有\(n\)个带权叶结点,从根结点到各叶结点的路径长度与相应叶节点权值的乘积之和称为树的带权路径长度(WeightedPathLengthofTree,WPL)。设\(w_i\)为二叉树第\(i\)个叶结点的权值,\(l_i\)为从根结点到第\(i\)个叶结点的路径长度,则WPL......
  • mysql join、leftjoin、rightjoin、unijoin使用解释
    参考文章:https://blog.csdn.net/chenmozhe22/article/details/832424811.左连接------leftjoin:查询的结果为:两个表格通过on关联的行,显示两个表格的该行的字段左表所有数据信息全部不变,右表再去匹配左表如果左边表格有数据,但右边表格没数据,则右表则使用null填充table:students......
  • MySQL 8.0 字符集与比较规则介绍
    前言:我们都知道MySQL8.0与MySQL5.7的区别之一就是默认字符集从latin1改成了utf8mb4,除此之外,MySQL8.0下的字符集和比较规则还有没有其他变化呢?本篇文章我们一起来学习下。utf8mb4字符集在MySQL8.0中,utf8mb4字符集是默认的字符集设置,它是一个真正的4字节UTF-......
  • JAVA笔记十四
    十四、集合1.集合概述(1)集合是存储其它对象的特殊对象,可以将集合当作一个容器(2)集合的相关接口和类位于java.util包中(3)集合中的接口和类是一个整体、一个体系2.集合接口接口定义了一组抽象方法,实现该接口的类需要实现这些抽象方法,从而实现接口的类就具备了接口所规......