IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 第六章 连接查询 -> 正文阅读

[大数据]第六章 连接查询

系列文章目录

第一章 MySQL概述
第二章 MySQL的常用命令
第三章 MySQL中的常用数据类型
第四章 单行处理函数
第五章 多行处理函数(聚合函数)及group by的使用



前言

前五章的连接在上面,点击标题可以直达哦,接下来我们学习的是第六章内容;


一、什么是连接查询?

从一张表中查询数据,叫做单表查询;从多张表中查询数据,叫做多表查询;
连接查询的语法格式是

select column1、column2、column3 from table1, table2 ,table3;

二、连接查询的分类

根据表连接的方式分类,可分为以下几类:
在这里插入图片描述

三、笛卡尔积

在第一节我们给出了连接查询的语法格式为

select column1、column2、column3 from table1, table2 ,table3;

我们试着连接查询一下下面两张表
在这里插入图片描述
在这里插入图片描述
输入

select ename ,dname from emp,dept;

结果为:在这里插入图片描述
在这里插入图片描述

如果我们按照这个格式试着进行连接查询,就会发现一个现象:查询出来的数据条数是被联合查询的各个表中的数据条数的乘积,上面两张表中,dept中有4条数据,emp中有14条数据,那么查询出来的数据条数就是4*14共56条数据,我们把这个现象称为笛卡尔积现象;

四、如何避免笛卡尔积现象?

在查询出来的56数据中,其实大部分的数据都是错误的,比如关于“SAMITH”的有四条数据,但是只有与“RESEARCH”匹配的才是正确的,所以为了查询的高效性,我们应该在查询语句中添加条件以筛选出我们想要的数据;

如我们可以加入筛选条件:

select ename , dname from emp,dept where emp.deptno=dept.deptno;

查询结果为:在这里插入图片描述
可以看到,我们查询出来的都是正确的数据,但是需要注意的是,尽管我们查询出来了正确的数据,但是并没有避免笛卡尔现象,只不过是在查询出56条数据之后,又加了一步筛选,把符合条件的数据筛选出来;

若想要避免笛卡尔积现象,可以这样做

select emp.ename , dept.dname from emp,dept where emp.deptno=dept.deptno;

查询出来的是相同的结果,但是减少了匹配次数在这里插入图片描述

五、内连接

内连接,也被称为自然连接,只有两个表与查询条件相匹配的行才能在结果集中出现;

5.1 等值连接

等值连接,内连接的查询条件为等式时就是内连接的等值连接;

这里我们要稍微扩展一下,介绍一下SQL92和SQL99语法关于连接查询写法上的不同,
sql92

select emp. ename ,dept.dname from emp,dept where emp.deptno=dept.deptno;

sql99

select emp. ename ,dept.dname from emp join dept on emp.deptno=dept.deptno;

区别上就是将逗号改为了join,将where改为了on,sql99写法的好处是可以与where配合使用;

5.2 内连接中的非等值连接

顾名思义,非等值连接,内连接的查询条件为不等式时就是内连接的非等值连接;

比如在表salgrade和表emp中找出每个员工的薪资等级,并显示员工名,薪资,薪资等级;
在这里插入图片描述
在这里插入图片描述

我们可以输入

select e.ename ,e.sal, s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;

查询结果如下:
在这里插入图片描述

5.3 内连接中的自连接

连接查询不一定非要两张不同的表才可以进行连接,两张完全相同的表也可以进行连接查询;

如:在表emp中查询员工的上级领导,要求显示员工名和对应的领导名:在这里插入图片描述
代码如下:

select e.ename , s.ename from emp e join emp s on e.mgr=s.empno;

结果如下:在这里插入图片描述

六、外连接

在内连接的自查询结果中,不知道大家注意没有,其中并没有关于“KING及其领导”的数据,这是因为“KING”的领导是“NULL”,所以并没有显示出来,那么有没有一种方法让“KING”的领导显示为“NULL”呢?
有的,那就是外连接,代码如下:

select e.ename , s.ename from emp e left join emp s on e.mgr=s.empno;

结果为:在这里插入图片描述

6.1 外连接的左外连接

外连接的左外连接,就是在内连接的基础上,在join前加left,意思是将左边的表显示完整,如果某一项在右表中找不到对应项,就置为null,所以与"KING"对应的就是"NULL";

6.2 外连接的右外连接

外连接的右外连接与左外连接仅是"左右"的差别;

6.3 练习题

找出每个员工的部门名称以及工资等级,并显示员工名,部门名,薪资,薪资等级;

代码如下:

select e.ename, d.dname, s.grade ,e.sal from emp e join dept d on d.deptno = e.deptno join salgrade s on e.sal between s.losal and s.hisal ;

结果为:在这里插入图片描述

在上题的基础上,显示每个员工的上级领导名;

代码如下:

select e.ename, d.dname, s.grade ,e.sal,l.ename from emp e join dept d on d.deptno = e.deptno join salgrade s on e.sal between s.losal and s.hisal left join emp l on e.mgr=l.empno;

结果如下:在这里插入图片描述


总结

如果您觉得有用的话,不妨点个赞吧!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:56:15  更:2022-04-28 12:00:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:18:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码