我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL系列多表连接查询92及99语法示例详解教程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL系列多表连接查询92及99语法示例详解教程

前面两天带着大家换了一个口味,带着大家学习了pyecharts的原理和部分图形制作。今天我们继续回归带你学MySQL系列,带着大家继续学习MySQL数据库。

多表查询是数据分析师日常工作中一定会使用到的一个知识点,可见它的重要程度有多大。今天这个文章全面总结了MySQL多表查询的几种情况,你知道MySQL的92语法和99语法吗?你知道等值连接和非等值连接吗?不要觉得某些知识点用的少,就可以不知道,其实不然,至少别人写出来后,你要知道是什么意思。

1.笛卡尔积现象

在这里插入图片描述

结果如下:

在这里插入图片描述

分析如下:
  上述结果肯定是不对的,左表中每一个人都有4个男朋友,仔细观察这4条记录,正好是左表每一条记录和右表一一匹配后的结果。
  笛卡尔积现象产生的原因:两张表没有有效的连接条件。既然你没有连接条件,本表中的第一行肯定是能和另外表中的所有行进行一一匹配,同理,本表中的第二行肯定是能和另外表中的所有行进行一一匹配,以此类推,本表中的最后一行m也可以和另外表中的所有行进行一一匹配。若另外一张表有n行,那么最后显示的行数,肯定就是m*n行了。
  如果不想产生笛卡尔积现象,就需要添加有效的表连接条件。拿上述例子来说,左表boyfriend_id只有和右边id相等时,才代表她们的男朋友。

添加表连接条件后:

在这里插入图片描述

可以看到,笛卡尔积最终产生的记录数是两张表中各自数据的乘积,当没有使用连接查询的时候,如果两张表中数据特别大的时候,将会撑爆你的内存,那是很可怕的,因此我们要学会使用连接查询。

2.连接查询知识点概括

1)什么是连接查询?

在实际开发中,大多数的情况下都不是从单表中查询数据,一般都是多张表联合查询取出最终的结果。也就是说:实际业务中也是一个业务由多个表构成,不同的信息存储在不同的表中,如果我们想要获取的信息来自多张表,此时你就需要使用连接查询。

2)连接查询的分类

① 按年代分类

MySQL中不支持全连接(full join),一般使用的是union关键字完成全连接的功能。MySQL中交叉连接是cross join,用的较少,我们也不用关心。

sq192标准:仅支持内连接;sq199标准【推荐】:仅仅支持内连接+外连接(仅支持左外和右外)+交叉连接; ② 按功能分类 内连接:等值连接、非等值连接、自连接;外连接:左外连接、右外连接、全外连接(full join);

3.内连接讲解

原始数据如下:

在这里插入图片描述

1)等值连接:最大特点是,连接条件为等量关系。

习题:查询员工名和对应的部门名;

sql92语法如下:(太老了,一般不用,看到了知道什么意思就行。)

在这里插入图片描述

sql99语法:(常用的)

在这里插入图片描述

2)sql92语法和sql99语法的区别。


 -- sql92语法
 select ename,dname
 from emp,dept
 where emp.deptno=dept.deptno;
 
-- sql99语法
select ename,dname
from emp (inner)join dept
on emp.deptno=dept.deptno;

-- sql92语法和sql99语法的区别
1)逗号(",")换成(inner)join;
2)where换成on;
注:inner可以省略,写上inner可以增加代码的可读性。

--sql99语法的优势
表连接和后面的where条件筛选,分离开来。
对于sql92语法来说,表连接用的是where,where筛选用的也是where,混淆在一起不清不楚。

3)非等值连接:最大特点是,连接条件为非等量关系。

在这里插入图片描述

习题:找出每个员工的工资等级,要求显示员工名、工资、工资等级。

在这里插入图片描述

4)自连接:最大特点是,一张表看作两张表。

什么叫做一张表看作两张表呢?也就是说,自连接是同一张表之间的连接,连接条件就是这张表中的不同字段。

人和机器的最大不同,就在于人有判断能力,你知道区分使用一张表的不同字段,但是机器不知道,都是同一张表,字段名也都是相同的。那么,机器怎么才能区分哪个表是哪个表(对于同一张表来说)。

这就需要起别名了。对于同一张表来说,我给它取两个名字,一个是A,一个是B,这样机器就能很好的区分了。当取A表中的字段,就是"A.字段",取B表中的字段,就是"B.字段"。

习题:找出每个员工的上级领导,要求显示员工名和对应的领导名。

在这里插入图片描述

4.外连接讲解

原始数据如下:

在这里插入图片描述

1)什么是外连接,和内连接有什么区别?

① 内连接

假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录,就会查询出来,这就是内连接。AB两张表没有主副之分,两张表是平等的。

② 外连接

假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带着查询副表。当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。

外连接最重要的特点是:主表的数据,无条件的全部查询出来。

2)外连接的分类

左连接有右连接的写法,右连接也会有对应的左连接的写法。因此,我们在学习MySQL的过程中,没有必要既学习左连接又学习右连接。

左外连接(左连接):表示左边的这张表是主表。右外连接(右连接):表示右边的这张表是主表。 3)案例分析

在这里插入图片描述

习题:找出哪个部门没有员工?

在这里插入图片描述

以上就是MySQL系列多表连接查询92及99语法示例详解教程的详细内容,更多关于MySQL查询语法的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL系列多表连接查询92及99语法示例详解教程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录