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

简介: 本文由作者blue撰写于2025年5月14日,主要内容涵盖数据库的多表查询、事物处理和索引技术。在多表查询部分,详细介绍了内连接、外连接及子查询的语法与应用场景;事物部分讲解了其四大特性(原子性、一致性、隔离性、持久性)及操作控制语句;索引部分则重点说明了B+Tree结构的优势与局限性,并提供了创建、查看和删除索引的具体示例。文章通过实例解析,帮助读者深入理解数据库核心操作。

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

作者:blue

时间:2025.5.14

[TOC]

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_dept
                                where tb_emp.dept_id = tb_dept.id;

-- B. 查询员工姓名,及所属的部门名称(显示内连接实现)
select tb_emp.name,tb_dept.name from db01.tb_emp
    inner 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_emp
    left outer join tb_dept on tb_dept.id = tb_emp.dept_id;

-- B. 查询部门表 所有 部门名称,和对应的员工名称 (右外连接)
select tb_emp.name,tb_dept.name from tb_emp
    right 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_emp
         where 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_emp
        where tb_emp.dept_id
        in (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 d
       where 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;

注意事项:

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

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

目录
相关文章
|
10月前
|
网络协议 Linux 网络安全
高级网络配置
高级网络配置
467 7
|
10月前
|
存储 前端开发 Android开发
鸿蒙开发:自定义一个联系人模版
实现的方式并不是一成不变,你也可以通过Canvas自定义绘制来实现,基本上大同小异,都是必须要确认当前触摸字母的位置,然后进行样式的更改,左右列表的联动操作。
138 8
鸿蒙开发:自定义一个联系人模版
|
10月前
|
vr&ar Android开发 云计算
《云端共生体:Flutter与AR Cloud如何改写社交交互规则》
当Flutter遇上AR Cloud,社交应用迎来跨设备增强现实内容共享与协作的新纪元。Flutter作为谷歌开源的UI开发工具包,支持一套代码多平台部署,大幅降低开发成本,其强大的渲染能力和丰富组件库为社交应用提供了流畅美观的用户体验。AR Cloud通过结合增强现实与云计算,构建虚实融合的共享空间,让用户突破地理限制,在虚拟环境中实时互动。手势识别与空间音频技术进一步提升沉浸感,使用户在虚拟音乐会、办公室等场景中实现自然交互。随着5G/6G网络普及和相关技术进步,未来社交应用将迈向更逼真、高效的沉浸式体验时代。
183 15
|
10月前
|
机器学习/深度学习 人工智能 数据库
RAG 2.0 深入解读
本文从RAG 2.0 面临的主要挑战和部分关键技术来展开叙事,还包括了RAG的技术升级和关键技术等。
1837 85
|
10月前
|
存储 人工智能 运维
MoE大模型迎来“原生战友”:昇腾超节点重构AI基础设施
大模型训练中,MoE架构逐渐成为主流,但也面临资源利用率低、系统稳定性差、通信带宽瓶颈三大挑战。传统AI集群难以满足其需求,而“昇腾超节点”通过自研高速互联协议、软硬件协同调度、全局内存统一编址及系统稳定性提升等创新,实现384张卡协同工作,大幅提升训练效率与推理性能。相比传统方案,昇腾超节点将训练效率提升3倍,推理吞吐提升6倍,助力MoE模型在工业、能源等领域的规模化应用。5月19日的鲲鹏昇腾创享周直播将深度解析相关技术细节。
630 15
|
10月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
存储 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:单机性能优化篇
阿里云PolarDB云原生数据库在TPC-C基准测试中,以20.55亿tpmC的成绩打破性能与性价比世界纪录。此外,国产轻量版PolarDB已上线,提供更具性价比的选择。
|
10月前
|
SQL 存储 关系型数据库
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
|
10月前
|
人工智能 监控 JavaScript
MCP实战之Agent自主决策-让 AI玩转贪吃蛇
MCP服务器通过提供资源、工具、提示模板三大能力,推动AI实现多轮交互与实体操作。当前生态包含Manus、OpenManus等项目,阿里等企业积极合作,Cursor等工具已集成MCP市场。本文以贪吃蛇游戏为例,演示MCP Server实现流程:客户端连接服务端获取能力集,AI调用工具(如start_game、get_state)控制游戏,通过多轮交互实现动态操作,展示MCP在本地实践中的核心机制与挑战。
936 39
MCP实战之Agent自主决策-让 AI玩转贪吃蛇