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

数据库part3---表关联、索引、视图

表关联

表关联用来查询多个表的数据,关联的表之间必须有相同的字段,一般使用表的主键和外键来关联

表关联分为以下几种类型

内连接INNER JOIN只返回两个表都有的数据
左连接LEFT JOIN返回左表中所有的数据和右表中匹配的数据,右表中没有的数据使用NULL填充
右连接RIGHT JOIN返回右表中所有的数据和左表中匹配的数据,左表中没有的数据使用NULL填充

比如

游戏表中玩家应该装有装备

我们先来看看装备表的结构

分别是装备的ID、名称、所属玩家的ID

DESC equip

INNER JOIN - 内连接

是使用INNER JOIN来指定关联的表

然后ON 关键字后是两个表中关联的字段

SELECT * FROM player
INNER JOIN equip
ON player.id = equip.player_id

LEFT JOIN - 左连接

返回左表中所有的数据和右表中匹配的数据,右表中没有的数据使用NULL填充

SELECT * FROM player
LEFT JOIN equip
ON player.id = equip.player_id

结果包含了玩家表所有的信息并且这时候是附带上玩家的装备的信息的

有装备的话就会显示装备信息,没有装备的话就会显示NULL

RIGHT JOIN - 右连接

返回右表中所有的数据和左表中匹配的数据,左表中没有的数据使用NULL填充

SELECT * FROM player
RIGHT JOIN equip
ON player.id = equip.player_id

结果中包含了装备表的所有的数据,然后是附带上有对应装备的玩家的信息

然后我们也能看出有装备是有没有被装备上的

即没有对应关系的玩家信息部分会使用NULL来填充

除了join和on关键字我们还可以使用以及where来进行关联表查询

我们可以看出两段语句返回的结果是一致的

而且我们可以在表明后面加上别名

后面我们就可以直接用别名来代替原来的表名

像这样

SELECT * FROM player p , equip e
WHERE p.id = e.player_id

索引

索引是一种用来提高查询效率的数据结构

它可以帮助我们快速地定位到我们想要的数据

如果没有索引的话,通常是从头开始遍历数据

CREATE INDEX - 创建索引

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_nameON tbl_name (index_col_name,...)-- UNIQUE 表示唯一索引
-- FULLTEXT 表示全文索引
-- SPATIAL 表示空间索引

创建索引的语法和格式

CREATE INDEX 索引名称 on 表名(要在哪张表上创建索引)(一个或多个字段名(我们要对哪些字段创建索引,通常对一张表的主键字段或者经常用来查询的字段来创建索引(相当于where后面的查询字段)))

随机生成了两张表一张是fast一张是slow,两张表的数据是一样的,都有2000万条数据

所以后面我会对fast表创建索引,而slow表不创建索引,两个表做查询效率比较

给fast表创建索引

create index email_index on fast(email)

SHOW INDEX FROM - 查看索引

show index from fast

对slow表进行查询

select * from slow where email like 'abcd%' ORDER BY id

用时5.195秒

对fast表进行同样的查询

瞬间就完成了,只用了0.001秒

这就是索引带来的查询效率的提升

DROP INDEX - 删除索引

drop index email_index on fast

再来查询以下还有没有索引

可以看到已经被删除了 

而且我们还可以在修改表的结构时来创建索引 

ALTER TABLE player add INDEX email_index (email)

也可以在建表语句中直接指定一个索引

CREATE TABLE player123(email VARCHAR(100),INDEX email_index (email)
)

视图

是一种虚拟存在的表,它本身并不包含数据,而是作为一个查询语句,保存在数据字典中,当我们查询视图的时候,它会根据查询语句的定义,来动态地生成数据。

CREATE VIEW - 创建视图

假如我们需要一个等级前十的玩家的排行榜

这时候我们就可以用视图来创建一个虚拟的表

如下

先来看看等级前十的玩家都有谁

SELECT * FROM player ORDER BY level desc LIMIT 10;

然后我们来创建视图

CREATE VIEW top10
AS
SELECT * FROM player ORDER BY level desc LIMIT 10;

SELECT - 查看视图

SELECT * FROM top10

这个是不是看起来跟普通查询一样,当我们表中数据变化的时候,视图中的数据也会自动跟着变更 

比如我们更改第一名的等级

没执行之前

视图随着数据的变更而改变了

ALTER VIEW - 修改视图

ALTER VIEW 视图名称

as

新的语句

比如说我们刚刚是从大到小排序的

我现在要从小到大排序

那我们可以修改成这样

ALTER VIEW top10
AS
SELECT * FROM player ORDER BY level LIMIT 10;

这样就变成了玩家等级最低的前十名玩家了 

DROP VIEW - 删除视图

DROP VIEW top10

相关文章:

  • 深入浅出:Go语言中的Cookie、Session和Token认证机制
  • Vibe Coding - 进阶 Cursor Rules
  • gRPC 框架面试题精选及参考答案
  • C++模板基础
  • Python实现MySQL建表语句转换成Clickhouse SQL
  • OpenAI与微软的未来合作之路:充满挑战的AI竞赛与共赢
  • [Github]GitHub 2FA快速安全配置全攻略
  • 前端登录不掉线!Vue + Node.js 双 Token 无感刷新方案
  • RJ45 网口实现千兆传输速率(1Gbps)的原理,涉及物理层传输技术、线缆标准、信号调制及网络协议等多方面的协同设计。以下从技术维度展开详细解析:
  • 经典:在浏览器地址栏输入信息到最终看到网页的全过程,涉及网络协议以及前后端技术
  • day11——Java面向对象高级:多态、抽象类与接口深度解析
  • 5.2 Qt Creator 使用FFmpeg库
  • 【09】设计并实现一套面向 Agent 任务规划的 DSL 语言
  • python:使用 OpenAI CLIP 模型进行图像与文本的语义匹配,并用彩虹色带可视化 CLIP 模型的相似度矩阵
  • TodoList 案例(Vue3): 使用Composition API
  • 嵌入式开发之嵌入式系统架构如何搭建?
  • 【StarRocks系列】建表优化
  • AI与SEO关键词协同进化
  • HarmonyOS 5 NPU支持哪些AI框架?
  • 系统化的Node.js服务器搭建攻略
  • 知乎有趣的网站/免费优化推广网站的软件
  • html制作网站的步骤/东莞网站建设推广技巧
  • 安平县网站建设/重庆seo杨洋
  • 泉州做网站/优化大师官方免费下载
  • 备案域名做的网站别人用来诈骗/东莞网站制作十年乐云seo
  • 网站详情页艺术字怎么做的/天津seo代理商