SQL基本操作多表查询和事务 下

续:SQL基本操作和约束20.7.26 中

多表查询

什么叫多表查询?
多表查询就是结合多张表进行查询;

创建两张表;顺便作一个复习
首先创建一张部门表dept
在这里插入图片描述
然后创建一张职员表emp
在这里插入图片描述
通过insert into 向表中添加记录后最终得到的效果
在这里插入图片描述
先了解一下什么是笛卡尔积?
笛卡尔是一个著名的数学家;假设有两个集合A和B;取这两个集合的所有组合情况就叫笛卡尔积

在这里插入图片描述

1.内连接查询

内连接查询分为隐式内连接查询显示内连接查询

隐式内连接
由于出现无用的数据;那么可以通过where条件对无用的数据进行删除
在这里插入图片描述
一般比较规范的格式
在这里插入图片描述
显式内连接

语法:select 字段列表 from 表名1 join 表名2 on 条件
在这里插入图片描述
那么什么时候使用内连接查询?
需要从哪些表中查询数据;条件是什么;查询哪些字段

2.外连接查询

用外连接查询的目的是为显示有的为null的记录;就例如
查询所有员工信息,如果员工有部门,则查询部门名称,没有部门就不显示部门名称,而不是不显示没有部门的该名员工

左外连接

语法::select 字段列表 from 表1 left join 表2 on 条件
查询的是左表所有数据以及其交集部分

在这里插入图片描述
右外连接

语法:select 字段列表 from 表1 right join 表2 on 条件
查询的右表所有数据以及其交集部分

在这里插入图片描述

3.子查询

什么叫子查询?
也就是说查询中可以嵌套查询语句;这就成为子查询

举个例子;想要查询工资最高的员工信息;那么首先要用聚合函数先找出最高的工资;然后再用条件查询信息
在这里插入图片描述
但是用了子查询后可以写成这样
在这里插入图片描述
子查询的不同情况

  1. 子查询的结果是单行单列的;子查询可以作为条件;使用运算符去判断
    例如查询员工工资小于平均工资的人
    在这里插入图片描述
  2. 子查询的结果是多行单列的;子查询作为条件;使用运算符in来判断
    例如查询人力资源部和开发部的所有员工信息
    在这里插入图片描述
  3. 子查询的结果是多行多列的;子查询可以作为一张虚拟表参与查询
    例如查询员工入职日期是2014-11-11日之后的员工信息和部门信息
    在这里插入图片描述
    需要注意的是虚拟表要给它一个别名
    其实要想得到上述例子的结果可以采用普通内连接查询及可以了;也就是给它加多一个条件
    在这里插入图片描述

事务

1.事务的基本介绍

何为事务?
一个包含多个步骤的业务操作被一个事务管理;那么这些操作要么同时成功;要么同时失败

事务如何操作?
开启事务:start transaction;回滚:rollback;提交:cummit
在这里插入图片描述
要注意的是mysql数据库中事务默认是自动提交的;也就是没有开启事务是执行一条DML语句就会自动提交一次事务
而oracle数据库是默认是手动提交的;也就是需要先开启事务然后再提交

另外可以都事务的默认提交方式进行修改(1代表自动;0代表手动)
查看事务的默认提交方式:select @@autocommit; 修改默认提交方式:set @@autocommit = 0

2.事务的四大特征(面试会问)
  1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。
  2. 持久性:当事务提交或回滚后,数据库会持久化的保存数据。
  3. 隔离性:多个事务之间。相互独立。
  4. 一致性:事务操作前后,数据总量不变

CET4P248

  • conversely
  • grammar
  • freight
  • physical
  • insult
  • hostile
  • location
  • wit
  • wisdom
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值