深入理解MySQL多表查询:JOIN操作与连接类型详解

创始人
2024-12-17 19:08:04
0 次浏览
0 评论

MySQL数据库之多表查询

在关系数据库中,通过JOIN操作实现多表查询是关键。
链接查询根据具体条件分为内部链接、外部链接和过滤查询。
让我们通过示例来理解这些概念。
首先,我们建立一个名为staff2的数据库,其中有两个表:staff和section。
内连接查询基是基于同一个字段(如人员表section_id和节表section_id,查询语句是这样的:通过'selectstaff.*,section.section_titlefromstaffinnerjoinsectiononstaff.staff_id=section)。
section_id',这里使用'.'澄清该字段所属的表。
自联接查询是同表内的联接,例如查询工资低于15000的员工信息,使用'selects1.*,s2.moneyfromstaffass1innerjoinstaffass2ons1.staff_id=s2.staff_idands2.money'。
外连接查询有左连接和右连接,根据表之间数据匹配的完整性填充空值。
例如,左连接查询“leftjoinordersongoodsg3.id=orders.good_id”用于查找已删除的产品订单。
复合条件连接查询如:'selectstaff.*,section.section_namefromstaffinnerjoinsectiononstaff.section_id=section.section_idandsection.section_name='总经理办公室'。
子查询在主查询中起到过滤的作用,比如子查询'in''wheregoods.idin(selectidfromgoodsg3wherenum>10)',按顺序过滤产品。
最后,通过关键字“Union”实现的联合搜索结果将删除重复项,并且unionall将保存所有数据。
例如:比较“select*fromgoodswherenamenotin(selectnamefromgoodsg3)”和“unionall”之后的结果,可以看到重复数据删除和保留所有记录之间的差异。

MySQL多表查询与左连接、右连接、内连接、全连接

因为在大多数情况下,遵循数据库设计要求;虽然数据不能聚合到单个表中。
分区到多个表使数据恢复更加困难。
解决上述问题。
内部参与:内部参与;最常见的连接方式(最常见,查询效率最高)也叫左连接:left[outer]join右连接:right[outer]join连接:全[外]连接;MySQL不直接支持这一点。
下面以经典的学生查询数据的四张表为例,演示MySQL中的四种join方法。
这四个表的字段;数据及ER图如下:字段说明1.分数表:s_id;c_id分数很多桌子;无主键2.课程表:c_id;c_名称;t_id一张桌子c_id为主键;对应成绩表3中的c_id字段。
学生表:s_id;s_name;圣人性别一张桌子s_id为主键,表中s_id字段对应分数4。
教师表:t_id;t_name;一张桌子t_id是课程表中t_id字段对应的主键;多表一般都是主表,各个字段主要存放数据。
没有万能钥匙。
无法在主要存储备份数据的表上找到特定记录。
可以通过主键搜索记录,不会重复归档记录。
左连接:左[外]连接;左连接从左表(t1)中提取所有记录并将它们与右表(t2)匹配。
如果没有匹配,空值代表右表的列。
您不需要在外部编写外部关键字:右[外部]联接从右表(t2)中提取所有记录并将它们联接到左表(t1)。
)如果没有匹配。
使用空值来表示左表的列。
语法:事实上,从右连接检索的结果与从左连接检索的结果相同。
Join是在右连接的右边,而左连接的右表的结果是在右连接的左边,对于每个连接,先写哪张表;这是表的字段。
显示在默认结果的左侧(选择后设置字段的情况除外)。
内连接也称为等值连接;通俗地说,内联接会生成同时包含t1表和t2表的数据集。
它查找两个表的交集。
语法:与左连接和右连接不同,在内部代码中,“innerjoin”两边的t1表和t2表的位置可以互换,结果是一样的。
上述s_id=8的记录没有出现在分数表中;因此,它不是交集,而是排除。
为了简化代码,别名(又名)。
还需要注意的是,通常是给表和字段都给的,如果结果集中两个表之间存在相同的字段,则相同的字段不能重复。
如果查询使用结果(派生表)作为子查询。
派生表必须具有相同的名称。
表字段直接跟在字段或表名称之后,中间可能包含也可能不包含“as”关键字。
MySQL还不支持这种类型的语句,但是可以使用union来组合两个结果;左连接和右连接可用于两次提取数据,并可用于组合数据并消除重复。
交叉联接:交叉联接返回两个表的笛卡尔积。
其功能是计算两个表之间的每个可能的联接。
如果你看过之前的文章《MySQL写入顺序与执行顺序》,你可能知道,多表查询的第一步是做笛卡尔积来创建虚拟表。
最后,我们总结一下七种连接方式(交叉连接比较难画,大家可以通过描述想象一下:上面是多表查询和连接类型,比较容易理解,但也很基础,初学者一定要懂。
)数据源在这里:基础练习-经典学生分数50题数据源
热门文章
1
SQL2000数据库备份压缩技巧:优化空... 怎么将SQL2000中的较大的备份数据库压缩变小更改数据库属性-选项-恢复模型很...

2
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

3
SQL字符串处理技巧:单引号使用与转义标... SQL语句中,字符串类型的值均使用什么符号标明?单引号如果字符串内有单引号,请小...

4
Windows环境下Redis安装指南与... redis安装windowsredis基本简介与安装安装Redis首先需要获取安...

5
深度解析:Redis性能优势与局限性,助... redis有哪些优缺点?Redis的全称是RemoteDictionary.Se...

6
深入解析:MySQL数据库的特性与应用 mysql是什么MySQL是一个关系数据库管理系统。MySQL是一个开源关系数据...

7
Linux Redis后台启动教程:配置... linux怎么启动redis1、首先,为了管理方便,将Redis文件中的conf...

8
MySQL浮点数与Decimal类型详解... MySQL中的float和decimal类型有什么区别小数类型可以准确地表示非常...

9
C语言实现输入10个整数并找出最大最小值... C语言从键盘输入任意的10个整数,从中找出最大值和最小值并输出代码:#inclu...

10
揭秘MySQL:为何将可重复读设为默认事... mysql默认的事务隔离级别是READUNCOMMITTED(未提交读)、REA...