当前课程知识点:数据库技术应用 > 学习情境三、银行存取款机数据操纵 > 模块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、数据库的基础知识
--数据库的基础知识
-模块2、MYSQL介绍与安装
--MYSQL介绍与安装
-模块3、银行存取款机数据库的创建与维护
--银行存取款机数据库的创建与维护
-模块4、银行存取款机数据库的设计
--银行存取款机数据库的设计
-模块1、表的创建
--2.1表的创建
--表的创建
-模块2、表的管理
--2.2表的管理
--表的管理
-模块3、索引
--2.3索引
--索引
-实践小课堂:宠物电商管理平台数据库和表的创建
-模块1、银行存取款机数据插入、修改和删除
--银行存取款机数据插入、修改和删除
-模块2、银行存取款机简单查询
--银行存取款机简单查询和统计查询
-模块3、银行存取款机连接查询
--3.3连接查询
--银行存取款机连接查询
-模块4、银行存取款机子查询
--3.4子查询
--银行存取款机子查询
-模块5、银行存取款机分类汇总与排序
--银行存取款机分类汇总与排序
-模块6、银行存取款机视图
--银行存取款机视图
-模块1、银行存取款机存储过程
--4.1.2事务
--银行存取款机存储过程
-模块2、银行存取款机触发器
--银行存取款机触发器
-模块1、MYSQL用户管理
--MYSQL用户管理
-模块2、MYSQL权限管理
--MYSQL权限管理
-模块3、MYSQL数据库的锁机制
--MYSQL数据库的锁机制
-模块4、MYSQL备份和恢复
--MYSQL备份和恢复