Mysql第四,五连弹(二)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql第四,五连弹

三、💘

连表查询

笛卡尔积:描述了多个表查询的基本执行逻辑(那么什么叫笛卡尔积呢?)

任何两张表都可以用笛卡尔积,但是两个表假如没有关系,计算出来也没有意义。

笛卡尔积像是两个表的乘积,

我们通过上面两张图来看下图,可以观察到有很多不正确的数据,这时候就需要我们找条件去筛选哪些数据是正确的

⚠️⚠️缺点:笛卡尔积比较低效(多表联合查询就很低效),尤其是数据较多的情况下,所以使用它也需要注意,容易把数据库干停机咯。很多慢的sql都是使用这些联表查询。

笛卡尔积的用途

笛卡尔积的用途:

建立四个表

class(id,name,desc(留作备用的串用来匹配)

id :用于存储班级的唯一标识符,设置为主键,并使用  auto_increment  自增。

name :用于存储班级的名称,设为  varchar  数据类型,最大长度为 20。

desc :用于存储班级的描述,设为  varchar  数据类型,最大长度为 100。

需要注意的是, desc  是 SQL 保留字,表示降序排序的关键字,因此需要将其用反引号  `  包裹起来,以作为列名使用。)

student(ID,sn(备用),name qq_mail,class_id)

id :用于存储学生的唯一标识符,设置为主键,并使用  auto_increment  自增。

sn :用于存储学生的学号,设为  varchar  数据类型,最大长度为 20。

name :用于存储学生的姓名,设为  varchar  数据类型,最大长度为 20。

qq_mail :用于存储学生的 QQ 邮箱,设为  varchar  数据类型,最大长度为 20。

class_Id :用于存储学生所属的班级的标识符。

需要注意的是, class_Id  列作为外键关联到某个班级表上。如果你要设置外键关系,需要先创建班级表,然后在创建学生表时使用  foreign key  语句来关联到班级表的相应列上。

下面这两个就字面意思不用解释。

coursed(id,name);

score (score ,student_id,class_id);

改一下哈

四张表

假如说要查询漩涡鸣人同学的成绩

首先许仙来自:student

成绩来自:score。需要联合查询,

(1).先用笛卡尔积

(2).过滤不正确的结果,指定连接条件进行筛选。

(3).只关注鸣人,进一步筛选

(4).只关注特定的行和列,进行精简处理

假如查询所有同学的成绩,及个人信息,列出同学的名字,课程名字,分数来组织

同学:student

课程名字:course

分数:score

(1).三个表先笛卡尔积(遇事不决,笛卡尔积)

(2).指定条件

想清楚一件事哈:执行笛卡尔积电脑上其实很快的,但是显示半天才结束,是因为慢在显示,这个是控制台打印的锅。

(3)具体罗列条件,如下图

当然我们针对一些东西,可以起别名

select student name as studentName cour.name as courseName,score.score from student,score,course where···(简写,就是回顾一下,了解这个,怎么起别名就好)

上面的是内连接的方法1

下面是内连接的方法2:大同小异  多了个inner(可以省略,了解就好),join    前面多个表,分割现在用join(相当于逗号)分割,只写join不写on是完整的笛卡尔积,on表示连接条件⚠️⚠️⚠️join是在连接表的时候,前面还是要用逗号,join只是在连接表的时候相当于逗号。

四、💖

外连接

使用的是   (查询任意操作)表  left/right join 表

student(id,name)

score(studentId ,score)

假如此时左侧表中每一条有记录,都可在右侧有对应,则内外连接没有区别,但是一旦两个表对不上,内外连接就会有所不同

正如我上面的许仙之类的,在score中没有他。

内连接的结果一定是两个表中都存在的数据(公共部分):如下图

左外连接,以左侧表为主,右侧表的每个记录,都会存在最终结果里,如果左侧表存在,右侧表不存在的数据,就会把对应的列填成空值

右外连接,以右侧表为主,左侧表的每个记录,都会存在最终结果里,如果右侧表存在,左侧表不存在的数据,就会把对应的列填成空值

全外连接(outer join)-(mysql不支持,但是oracle支持)

我们在平时,尽量不写复杂的SQL,否则把SQL拆出来优化,本身是一件非常复杂的事情,只可以彻底重构。

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
关系型数据库 MySQL
mysql报Toomanyconnection的问题
mysql报Toomanyconnection的问题
215 0
|
1月前
|
存储 关系型数据库 MySQL
mysql技巧
【10月更文挑战第2天】mysql技巧
39 5
|
2月前
|
存储 关系型数据库 MySQL
Mysql全面总结
本文全面总结了MySQL的相关知识,涵盖思维导图、架构、存储引擎、数据类型、索引、查询、事务、锁机制、调优、分区与分表分库、主从复制及其他问题。MySQL采用插件式存储引擎架构,支持多种存储引擎,如InnoDB和MyISAM,每种引擎具备不同的特性。文章详细介绍了InnoDB和MyISAM的对比,包括事务支持、行级锁定、索引类型等。此外,还探讨了MySQL的查询优化、性能调优、主从复制等内容,适合数据库开发者和运维人员阅读。如涉及版权问题,请联系作者删除。
Mysql全面总结
|
2月前
|
关系型数据库 MySQL
|
3月前
|
SQL 关系型数据库 MySQL
在 MySQL 中使用 IN
【8月更文挑战第12天】
126 0
在 MySQL 中使用 IN
|
6月前
|
存储 关系型数据库 MySQL
mysql(下)
mysql(下)
67 0
|
SQL 存储 关系型数据库
mysql总结(上)
mysql总结
76 0
|
SQL 关系型数据库 MySQL
盘点一下Mysql中的一些小知识(二)
盘点一下Mysql中的一些小知识(二)
84 0
|
SQL 关系型数据库 MySQL
【必知必会的MySQL知识】②使用MySQL
【必知必会的MySQL知识】②使用MySQL
109 0
【必知必会的MySQL知识】②使用MySQL
|
存储 SQL 安全
MySQL(十)
MySQL(十),一起来学习吧。