当前课程知识点:数据库技术应用 >  学习情境三、银行存取款机数据操纵 >  模块3、银行存取款机连接查询 >  3.3连接查询

返回《数据库技术应用》慕课在线视频课程列表

3.3连接查询在线视频

下一节:任务实施:银行存取款机连接查询

返回《数据库技术应用》慕课在线视频列表

3.3连接查询课程教案、知识点、字幕

大家好

欢迎来到数据库技术应用在线开放课程

今天我们要完成的任务是BankDB数据库连接查询

前面我们已经做了简单查询

也用到了聚合函数

那么涉及到一些复杂查询的时候

我们可能涉及到多张表

那么我们需要用到连接查询

那么今天的连接查询

我们分成三个子任务

分别是查询赵晓丹的银行卡号

查询赵晓丹的交易记录

输出所有银行卡的交易信息

没有交易信息的银行卡也需要列出来

那这三个任务在实施的过程当中

一张表是解决不了问题的

所以我们就得用到连接查询

今天我们这节课的目标就是

让大家掌握内连接查询的方法

以及外连接查询的方法

我们一起进入知识技能学习环节

首先我们来看一下多表连接查询

在实际的查询中很多情况下

用户所需要的数据

并不是在一个数据库表当中的

而是存在于多个数据库表当中

这时需要用到连接查询

通过各个表之间的关联关系

也就是说各个表之间的共同列

来查询相应的数据

那首先是要建立多表之间的连接

然后再生成的结果集当中再进行筛选

我们用到的多表连接查询

分成内连接查询和外连接查询

我们先来看内连接查询

用比较运算符设置连接条件

只返回满足条件的数据行

它的语法格式是这样的

select后面还是我们熟悉的字段列表

from后面我们以前只加一个表的名字

那么涉及到连接查询的时候

from后面要加的可能是一张表

可能是两张表也可能是三张表

或者是多张表

那from后面竟然加了多张表

那where后面必然要写连接条件

那如果不写连接条件

后果就是做了笛卡尔积

什么是笛卡尔积

就是我们所说的排列组合

是不是一家的都牵起手来

但是实际上我们是把有关系的让他牵手

没关系的千万不能牵手

所以我们的连接条件是非常重要的

那where后面的连接条件怎么来写

我们刚才在说多表连接查询概念的时候

就说过两个表需要有一个公共字段

我们通过公共字段的比较关系

然后确定连接关系

比如说where表一点字段

比较运算符表二的字段

这样的话就可以去实现

一个连接条件的一个设定

第三个是外连接查询

外连接查询和内连接查询不一样

在查询的时候所用到的表有主从之分

而且可能只是两张表

确定只是两张表

使用外连接查询的时候

用主表当中每行数据

去匹配从表当中的数据行

如果符合连接条件就返回结果集当中

如果没有找到匹配行

则在结果集当中仍然保留主表的行

那对应的从表当中的列

就被填成了空值

那么外连接我们分成

左外连接和右外连接

那既然分类是左外连接右外连接

大家也能理解刚才我说的话

说外连接只能是两张表

他有左右之分

有主从之分

那么左外连接的左表作为他的主表

右表作为他的从表

结果集包括左表当中的所有的行

而右外连接

右表示主表

左表是从表

结果集当中包含右表当中的所有的行

外连接查询我们用到的语法格式是这样的

select后面是字段列表

from后面是表一表二

中间用什么来写

Left outer join或者是right outer join

left代表的就是左外连接

right代表的就是右外连接

然后on表一点字段比较运算符表二点字段

这样的话我们就构成了

外连接的一个语法格式

外连接的一个语法格式

那刚才咱们强调过了

对于内连接来说

它可以连接多张表

那对于外连接来说

他只能连接两张表

而且谁在左谁在右是不一样的效果

我们来看任务实施环节

首先第一个任务查询赵晓丹的银行卡号

赵晓丹的银行卡号

我们待查的目标是银行卡号

按照我们前面所做的一些知识储备

那select的后面就得加cardID

赵晓丹的银行卡号

那我是不是把名字也显示出来更好

我就在前面也加一个customername

from

里面又涉及到了用户名

又涉及到了卡号

那大家需要回忆一下

对于前面咱们自动存取款机建的这个表来说

我们身上建了三张表

第一张表userinfo是我们的用户信息表

第二张表叫cardinfo是我们的银行卡表

第三张表是transinfo是我们的交易信息表

这三张表我们也曾经画过E-R图

写过关系模式

他们三个的关系是一个用户以有多个银行卡

但是一个银行卡只属于一个用户

那银行卡和交易信息来说

一个银行卡可以有多条交易记录

但是一条交易记录只对应的是一张银行卡

那么在这个前提条件下

大家就想一下customername和cardID

我们需要用到几张表

很显然customername是在userinfo里的

而cardID是在cardinfo里的

所以from后面我要加两个表

中间用逗号隔开

也就说用到的是等值连接

那什么条件

虽然说我们在看题目的时候

查询赵晓丹的银行卡号

条件很明显的是名字是赵晓丹

但实际上它暗藏了一个条件

就是咱们前面说的

只要你用到连接查询必然用到连接条件

那么我们刚才分析过了三个表之间的关系

大家现在想userinfo、cardinfo通过哪个字段建立关联

换句话来说这两个表有没有公共字段

这两张表的公共字段是customerID

那我就可以写连接条件了

叫userinfo.customerID等于cardinfo.customerID

就是刚才我说的一家人让他拉起手来

那么这是一个条件

第二个条件的是customername等于赵晓丹

那好这俩条件什么关系

或者还是并且

很显然是并且的关系

那么我们就需要and进行连接

让大家看到的这个代码

Select from where

虽然还是三个子句三行

但是这三个子句相对于

前面咱们做的查询来说就复杂多了

它涉及到两个表

涉及到了连接条件

所以在做连接查询的时候

对这个逻辑思维是要求比较高的

接下来我们来看第二个子任务

第二个字任务是查询赵晓丹的交易记录

还是这个人换了一个说法

查的是交易记录

那么这里面大家想交易记录在哪个表里

交易记录在我们的transinfo表里面

赵晓丹刚刚咱们分析了customername

他是在userinfo里

交易记录又在cardinfo里

我们刚才分析了三个表之间的关系

userinfo和transinfo能不能直接建立连接

他们俩有没有公共字段

没有中间还得借助一个cardinfo

所以在这个查询过程当中

看起来又设计赵晓丹

又设计交易记录是两个表

但如果想要这两个表牵起手来的话

需要一个中间的cardinfo

那换句话来说from后面

我们要加的是userinfo逗号

cardinfo逗号transinfo

那三张表都用到了

那连接条件怎么写

两张表我们写了一个连接条件

那三张表是不是两两连接

我们需要两个连接条件

首先解决userinfo和cardinfo

Userinfo.customerID等于cardinfo . customerID

那么cardinfo和transinfo这两张表怎么连接

我们是借助cardID来连接的

所以cardinfo . cardID等于transinfo . cardID

那最后一个赵小丹

customername等于赵晓丹

这三个条件之间还是并且的关系

所以我们用到两个and进行连接

所以大家看要完成第二个子任务

比第一个子任务难度更加大了一些

因为它用到了三个表

那三个表大家会了两个连接条件

那如果我涉及到四个表就是三个连接条件

五个表就是四个连接条件

以此类推

但是需要大家清楚的认识到有哪些表

这些表之间又是什么样的关系

那两个表建立连接的时候

又通过哪个公共字段来建立连接

那么我们的连接条件就很好写了

我们来看第三个任务

输出所有银行卡的交易信息

那有一种情况就是

没有交易信息的银行卡怎么办

人家要求已经提出来很明确了

也需要列出来

就这个卡没有交易信息也需要列出来

那就不能用我们的等值连接了

这时候很显然的

我们需要用到我们的外连接

外连接的话只能连两个表

这里面连哪两个表

银行卡交易信息

那肯定是cardinfo和穿transinfo

那如果开cardinfo作为左表的话

transinfo就是右边

那我要显示左表当中所有记录就是

不管他有没有交易信息

cardinfo里的数据都要显示

也就是说满足了我们即使没有交易信息的银行卡

也需要列出这样一个需求

所以我们的语句写成了

select * from cardinfo left outer join transinfo

on后面还是连接条件

这两个表我们分析过了

连接条件是cardID

也就是说cardinfo . cardID等于transinfo . cardID

这样的话

我们左外连接的代码也做出来了

我们的第三个子任务就完成了

今天的拓展任务是员工管理数据库的连接查询

感谢大家的聆听

数据库技术应用课程列表:

学习情境一、银行存取款机数据库创建与管理

-模块1、数据库的基础知识

--1.1.1数据库设计-数据库的基本概念

--1.1.2数据管理的发展和数据库体系结构

--数据库的基础知识

-模块2、MYSQL介绍与安装

--MYSQL介绍与安装

--MYSQL介绍与安装

-模块3、银行存取款机数据库的创建与维护

--1.3数据库的创建与维护

--银行存取款机数据库的创建与维护

-模块4、银行存取款机数据库的设计

--1.4.1数据库的概念模型设计

--1.4.2数据库的数据模型设计

--1.4.3数据库的关系规范化

--银行存取款机数据库的设计

学习情境二、创建和管理银行存取款机数据表

-模块1、表的创建

--2.1表的创建

--任务实施:银行存取款机表的创建

--表的创建

-模块2、表的管理

--2.2表的管理

--任务实施:银行存取款机表的管理

--表的管理

-模块3、索引

--2.3索引

--任务实施:银行存取款机索引

--索引

-实践小课堂:宠物电商管理平台数据库和表的创建

--实践小课堂:宠物电商管理平台数据库和表的创建

学习情境三、银行存取款机数据操纵

-模块1、银行存取款机数据插入、修改和删除

--3.1.1数据插入

--任务实施:银行存取款机数据插入

--3.1.2数据修改和删除

--任务实施:银行存取款机数据修改和删除

--实践小课堂:宠物电商管理平台数据插入

--银行存取款机数据插入、修改和删除

-模块2、银行存取款机简单查询

--3.2.1简单查询

--任务实施:银行存取款机简单查询

--实践小课堂:宠物电商管理平台简单查询

--3.2.2统计查询

--任务实施:银行存取款机统计查询

--实践小课堂:宠物电商管理平台条件查询

--银行存取款机简单查询和统计查询

-模块3、银行存取款机连接查询

--3.3连接查询

--任务实施:银行存取款机连接查询

--银行存取款机连接查询

-模块4、银行存取款机子查询

--3.4子查询

--任务实施:银行存取款机子查询

--实践小课堂:宠物电商管理平台多表查询

--银行存取款机子查询

-模块5、银行存取款机分类汇总与排序

--3.5分类汇总与排序

--任务实施:银行存取款机分类汇总与排序

--实践小课堂:宠物电商管理平台分类汇总和排序

--银行存取款机分类汇总与排序

-模块6、银行存取款机视图

--3.6.1视图的创建与管理

--任务实施:银行存取款机视图的创建与管理

--3.6.2视图的更新

--任务实施:银行存取款机视图的更新

--实践小课堂:宠物电商管理平台视图

--银行存取款机视图

学习情境四、银行存取款机数据库编程

-模块1、银行存取款机存储过程

--4.1.1创建和执行存储过程

--任务实施:银行存取款机创建和执行存储过程

--实践小课堂:宠物电商管理平台存储过程

--4.1.2事务

--任务实施:银行存取款机事务

--实践小课堂:宠物电商管理平台存储函数

--银行存取款机存储过程

-模块2、银行存取款机触发器

--4.2.1INSERT触发器

--任务实施:银行存取款机INSERT触发器

--实践小课堂:宠物电商管理平台INSERT触发器

--4.2.2UPDATE触发器

--任务实施:银行存取款机UPDATE触发器

--实践小课堂:宠物电商管理平台UPDATE触发器

--4.2.3DELETE触发器

--任务实施:银行存取款机DELETE触发器

--实践小课堂:宠物电商管理平台DELETE触发器

--银行存取款机触发器

教学情境五、银行存取款机数据库安全性

-模块1、MYSQL用户管理

--模块1、MYSQL用户管理

--MYSQL用户管理

-模块2、MYSQL权限管理

--模块2、MYSQL权限管理

--MYSQL权限管理

-模块3、MYSQL数据库的锁机制

--MYSQL数据库的锁机制

--MYSQL数据库的锁机制

-模块4、MYSQL备份和恢复

--模块4、MYSQL备份和恢复

--MYSQL备份和恢复

3.3连接查询笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。