当前位置: 首页 > news >正文

菜鸟之路Day32一一多表查询,事物,索引

菜鸟之路Day32一一多表查询,事物,索引

作者:blue

时间:2025.5.14

文章目录

  • 菜鸟之路Day32一一多表查询,事物,索引
    • 1.多表查询
      • 1.1内连接
      • 1.2外连接
      • 1.3子查询
    • 2.事物
    • 3.索引

1.多表查询

连接查询

​ 内连接:相当于查询A,B交集部分的数据

​ 外连接:

​ 左外连接:查询左表所有数据(包括两张表交集部分的数据)

​ 右外连接:查询右表所有数据 (包括两张表交集部分的数据)

子查询

1.1内连接

语法:

隐式内连接:select 字段列表 from1,表2 where 条件...;显示内连接:select 字段列表 from1 [inner] join2 on 连接条件

练习:

-- A. 查询员工姓名,及所属部门名称(隐式内连接)
select tb_emp.name,tb_dept.name from tb_emp,tb_deptwhere tb_emp.dept_id = tb_dept.id;-- B. 查询员工姓名,及所属的部门名称(显示内连接实现)
select tb_emp.name,tb_dept.name from db01.tb_empinner join tb_dept on tb_emp.dept_id = tb_dept.id

1.2外连接

左外连接:查询左表所有数据(包括两张表交集部分的数据)

右外连接:查询右表所有数据 (包括两张表交集部分的数据)

左外连接:select 字段列表 from1 left [outer] join2 on 连接条件...;右外连接:select 字段列表 from1 right [outer] join2 on 连接条件...;

练习:

-- A. 查询员工表 所有 员工的姓名,和对应的部门名称 (左外连接)
select tb_emp.name,tb_dept.name from tb_empleft outer join tb_dept on tb_dept.id = tb_emp.dept_id;-- B. 查询部门表 所有 部门名称,和对应的员工名称 (右外连接)
select tb_emp.name,tb_dept.name from tb_empright outer join tb_dept on tb_dept.id = tb_emp.dept_id;

1.3子查询

介绍:SQL语句中嵌套的select语句,称为嵌套查询,又称为子查询

形式:

select * from t1 where column1 = (select column1 from t2 ...);

子查询外部的语句可以是insert/update/delete/select 的任何一个,最常见的是select

标量子查询:子查询返回的结果为单个值

-- 标量子查询
-- A. 查询"教研部"的所有员工信息
-- a. 查询 教研部 的部门 ID - tb_dept
select id from tb_dept where name='教研部';-- b. 再查询该部门ID下的员工信息 - tb_emp
select * from tb_empwhere dept_id = (select id from tb_dept where name='教研部');

列子查询:子查询返回的结果为一列

-- 列子查询
-- A. 查询"教研部"和"咨询部"的所有员工信息
-- a. 查询"教研部"和"咨询部"的部门ID - tb_dept
select id from tb_dept where name='教研部' or name='咨询部';-- b. 根据部门ID,查询该部门下的员工信息 - tb_dept
select * from tb_empwhere tb_emp.dept_idin (select id from tb_dept where name='教研部' or name='咨询部');

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

select * from tb_emp where (entrydate,job) = (select entrydate,job from tb_emp where name= 'XXX');

表子查询:子查询返回的结果为多行多列

-- a. 查询入职日期是“2006-01-01”之后的员工信息
select * from tb_emp where entry_time > '2006-01-01';-- b. 查询这部分员工信息及其部门名称 - tb_dept
select e.*,d.name from (select * from tb_emp where entry_time>'2006-01-01') e,tb_dept dwhere e.dept_id = d.id;

2.事物

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

-- 事物控制-- 开启事物
start transaction;begin;-- 提交事物
commit;-- 回滚事物
rollback;

例子:

-- 开启事物
start transaction;-- 删除部门
delete from tb_dept where id = 3;-- 删除部门下的员工
delete from tb_emp where dept_id = 3;-- 提交事物
commit;-- 回滚事物
rollback;

事物的四大特性

原子性:事物是不可分割的最小单元,要么全部成功,要么全部失败

一致性:事物完成时,必须使所有数据都保持一致的状态

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

持久性:事物一旦提交或回滚,它对数据库中的数据的改变就是永久的

3.索引

索引是帮助数据库高效获取数据数据结构(利用树形结构)

优点:提高数据查询的效率,降低数据库的IO成本

​ 通过索引对数据进行排序,降低数据排序的成本,降低CPU消耗

缺点:索引会占用存储空间

​ 索引大大提高了查询效率,同时也降低了insert,update,delete的效率

索引的结构

MySQL中:B+Tree(多路平衡搜索树)

每一个节点,可以存储多个key(有n个key,就有n个指针)

所有数据都存在叶子节点,非叶子节点仅用于索引数据

叶子节点形成了一颗双向链表,便于数据的排序及区间范围查询

语法:

创建索引:create [unique] index 索引名 on 表名(字段名....);查看索引:show index from 表名删除索引:drop index 索引名 on 表名

例子:

-- 创建:为tb_emp表的name字段建立一个索引
create index idx_emp_name on tb_emp(name);-- 查询:查询tb_emp表的索引信息
show index from tb_emp;-- 删除:删除tb_emp表中name字段的索引
drop index index_emp_name on tb_emp;

注意事项:

主键字段,在建表时,会自动创建主键索引

添加唯一约束时,数据库实际上会添加唯一索引

相关文章:

  • Ubuntu 20.04 报错记录: Matplotlib 无法使用 OpenCV 的 libqxcb.so
  • 76.有符号数累加运算
  • 从坏道扫描到错误修复:HD Tune实战指南
  • 小白到高手的人工智能学习笔记之初步了解pytorch
  • Ubuntu24.04下安装ISPConfig全过程记录
  • AM32电调学习解读八:无感驱动相位波形解析
  • 架构思维:构建高并发扣减服务_分布式无主架构
  • SQL性能分析
  • 第二章 苍穹外卖
  • Mamba LLM 架构简介:机器学习的新范式
  • 互联网大厂Java面试场景:从Spring Boot到分布式缓存技术的探讨
  • QT聊天项目DAY11
  • 如何实现RTSP和RTMP低至100-200ms的延迟:直播SDK的技术突破
  • 数据结构 -- 树形查找(二)平衡二叉树
  • 【GPT入门】第39课 OPENAI官方API调用方法
  • 【数据结构】2-2-2 顺序表的插入删除查找
  • 【Linux高级全栈开发】2.1.3 http服务器的实现
  • ngx_http_proxy_protocol_vendor_module 模块
  • FreeSWITCH 简单图形化界面43 - 使用百度的unimrcp搞个智能话务台,用的在线的ASR和TTS
  • STM32SPI通信基础及CubeMX配置
  • 以色列总理:以哈谈判内容包括“结束战争的框架”
  • 东航C919航线上新!正式投入上海虹桥—深圳航线运营
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿
  • 茅台总经理到访五粮液:面对白酒行业周期性调整,需要团结一心的合力
  • 莫高义在第四届中国新闻发言人论坛开幕式上的致辞
  • 当智慧农场遇见绿色工厂:百事如何用科技留住春天的味道?