当前课程知识点:MySQL数据库案例教程 >  第4章 查询与视图 >  4.3 多表查询 >  4-3多表查询视频

返回《MySQL数据库案例教程》慕课在线视频课程列表

4-3多表查询视频在线视频

下一节:4-3多表查询课件

返回《MySQL数据库案例教程》慕课在线视频列表

4-3多表查询视频课程教案、知识点、字幕

同学们好

今天我们学习第4章

查询与视图

本次课的学习内容是

多表查询

前面我们学习了

select语句的基本语法和单表查询

但在实际的业务处理中

每一个数据库中都有多个表

经常会遇到需要查询

多个表中数据的情况

如在stu数据库中

要查询姓名 课程名 成绩

那么这三个字段来自于三个表

那么该如何来完成这个查询呢

要查询多个表中的数据

就需要连接多个表

在MySQL中

select语句多表连接的语法是这样的

SELECT 子句

FROM 表名1

[CROSS|INNER|LEFT|RIGHT] JOIN 表名2

ON 表名1.字段=表名2.字段

WHERE 子句

Group by 子句

Order子句

Limit子句

语句跟之前的单表查询相比

增加了连接的语法

多表之间的连接方式有三种

交叉连接 内连接和外连接

Cross表示是交叉连接

inner 表示内连接

left和right是外连接的两种类型

多表查询按照连接方式分为

交叉连接查询

内连接查询和外连接查询

接下来我们就分别来学习交叉连接

内连接和外连接的含义与使用方法

我们先来学习交叉连接

交叉连接的语法是

SELECT 子句

FROM 表名1 CROSS JOIN 表名2

交叉连接是按照笛卡尔乘积的形式

连接两个表中的数据

也就是表1中的每一条记录

和表2 的所有记录都连接一次

来看案例1

查询学生表student中

所有学生的所有选课可能

也就是student表中

每个学生可以对

course表中的每门课程进行选修

SELECT sid,sname,cno,cname

FROM student cross JOIN course

运行一下

可以看到

student表中的每一条记录

都与course表中的记录连接一次

查询结果的行数

是student表中的记录行数

乘以course表中的记录行数

交叉连接还有另外的实现方法

SELECT sid,sname,cno,cname

FROM student,course

运行

可以看到运行结果是一样的

交叉连接查询

在日常事务处理中较少使用

语法也比较简单

下面我们来学习内连接

内连接只查询输出

按照连接条件匹配的记录

连接语法是

SELECT 子句

FROM 表名1

inner JOIN 表名2

ON 表名1.字段=表名2.字段

其中的inner可以省略

来看案例

案例2

查询选修了课程的学号

姓名 课程号 成绩

在做多表查询之前

我们需要熟悉表的结构和字段类型

找出表与表之间的共同字段

对于stu数据库

我们简单地表达表与表之间的联系

Student通过sid与score表建立练习

score表通过cno与course表建立联系

再来看这个查询

学号和姓名属于student表

课程号和成绩属于score表

这两个表之间有共同字段sid

因此 查询可以这样写

Select sid,sname,cno,result

From student inner join score

On student.sid=score.sid

完整语句是

Select sid,sname,cno,result

From student inner join score

On student.sid=score.sid

来执行

出现一个错误

错误原因是

select后的sid未指明所属表

请大家在写查询语句时注意

如果某个字段属于多个表的共同字段

那么就需要指明这个字段所属的表

表名长书写不方便

我们可以给表起别名

把语句可以改写成这样

a.sid student a score b a.sid b.sid

语句就是这样的

Select a.sid,sname,cno,result

From student a

score b

where a.sid=b.sid

执行

可以看到两种查询方式结果相同

再来看案例3

查询选修课程的学号

姓名 课程名 成绩

来分析这个查询需求

学号sid和姓名sname属于student表

课程名cname属于course表

成绩result属于score表

这三个表之间的关系是

Student通过sid与score联系

score通过cno与course联系

因此查询可以这样写

Select a.sid,sname,cname,result

From student a inner join score b

On a.sid=b.sid

Inner course c

On b.cno=c.cno

执行

查出学号 姓名 课程名 成绩

还可以写成这样

Select student.sid,sname,cno,result

From student a ,score b,course c

where a.sid=b.sid

and b.cno=c.cno

执行

结果是一样的

来看案例4

查询选修了体育和大学英语的

课程的学生姓名 课程名 成绩

并按科目和成绩高低排序

这个查询也同样需要

使用到三个表中的数据

查询语句可以这样写

Select a.sid

sname,cname,result

From student a

inner join score b

On a.sid=b.sid

Inner course c

On b.cno=c.cno

那接下来呢有条件

Where cname in (‘体育’,‘大学英语’)

Order by cno,result desc

执行

可以看到查询结果

按照科目和成绩高低排序

内连接只能查询出

按照连接条件匹配的记录

如果想输出

不能匹配的记录怎么办呢

数据库中提供了另外的一种连接形式

外连接

下面来学习外连接的使用方法

外连接的语法形式是

SELECT 子句

FROM 表名1

LEFT|RIGHT JOIN 表名2

ON 表名1.字段=表名2.字段

WHERE 条件表达式

注意 使用left join时

left左边表的记录全部输出

使用right join时

右边表记录全部输出

来看案例

案例5

查询所有学生学号

姓名 课程号 成绩

没有选修课的学生也输出

查询语句可以这样来写

Select a.sid,sname,cno,result

From student a left join score b

On a.sid=b.sid

执行

来看查询结果

可以看到

没有选课的学生记录

也被查询输出了

他的相关的课程号和课程名

以空值输出

也可以用右连接来实现

SELECT a.sid,sname,cno,result

FROM score a RIGHT JOIN student b

ON a.sid=b.sid

来看查询结果

与刚刚上面的查询结果是一样的

再来看案例6

查询信息工程系所有的学号

姓名 课程号 成绩

没有选修课的学生也输出

这个查询在案例5的基础上增加了条件

因此语句可以这样写

Where department=‘信息工程系’

执行

查询出信息工程系所有学生

姓名 课程号 成绩

没有选修课的学生也输出了

本次课的学习内容就是这些

我们来对本次课做个小结

本次课我们学习了多表查询

对于多表查询我们需要掌握

表与表之间的连接方式

其基本语法是

FROM 表名1

[CROSS|INNER|LEFT|RIGHT] JOIN 表名2

在实际的应用时有三种形式

第一 交叉连接

其连接语法是

FROM 表名1 CROSS JOIN 表名2

第二 内连接

FROM 表名1 [INNER] JOIN 表名2

ON 表名1.字段=表名2.字段

三 外连接

FROM 表名1 LEFT|RIGHT JOIN 表名2

ON 表名1.字段=表名2.字段

请理解left和right的含义

注意所有记录都输出的表的位置

请在资料下载练习4-3

并完成操作练习

本次课就讲到这里

谢谢 再见

MySQL数据库案例教程课程列表:

第1章 数据库基础知识

-1.1 数据库基础知识

--1.1 数据库基础知识视频

--1-1数据库基础知识课件

-1.2 MySQL的安装与运行

--1-2MySQL安装与运行视频

--1-2MySQL安装与运行课件

--1-2MySQL安装与运行实训

-第1章 测试

第2章 数据库和表的基本操作

-2.1 数据库的基本操作

--2-1数据库的基本操作视频

--2-1数据库的基本操作课件

--2-1数据库的基本操作实训

-2.2 表的基本操作

--2-2表的基本操作视频

--2-2表的基本操作课件

--2-2表的基本操作实训

-2.3 MySQL数据类型

--2-3MySQL数据类型视频

--2-3MySQL数据类型课件

--2-3MySQL数据类型实训

-2.4 约束设置

--2-4约束设置视频

--2-4约束设置课件

--2-4约束设置实训

-2.5 索引

--2-5索引视频

--2-5索引课件

--2-5索引实训

-第2章测试

第3章 记录操作

-3.1 插入记录

--3-1 插入记录视频

--3-1插入记录课件

--3-1插入记录实训

-3.2 修改记录

--3-2修改记录视频

--3-2修改记录实训

--3-2修改记录课件

-3.3 删除记录

--3.3删除记录

--3-3删除记录实训

--3-3删除记录课件

-第3章 测试

第4章 查询与视图

-4.1 select语句

--4.1select 语句视频

--4-1select语句课件

--4-1select语句实训

-4.2 单表查询

--4-2-1select子句

--4-2-2where子句

--4-2-3group子句

--4-2单表查询实训

-4.3 多表查询

--4-3多表查询视频

--4-3多表查询课件

--4-3多表查询实训

-4.4 子查询

--4-4子查询视频1

--4-4子查询视频2

--4-4子查询课件

--4-4子查询实训

-4.5 外键

--4-5外键视频

--4-5外键课件

--4-5外键实训

-4.6 视图

--4-6视图视频1

--4-6视图视频2

--4-6视图课件

--4-6视图实训

-第4章测试

第5章 高级操作

-5.1 函数

--5-1自定义函数视频

--5-1系统函数

--5-1函数课件

--5-1 函数实训

-5.2 流程控制语句

--5-2流程控制语句视频

--5-2流程控制课件

--5-2流程控制实训

-5.3 事务与游标

--5-3事务与游标视频

--5-3事务与游标课件

--5.3事务与游标实训

-5.4 存储过程

--5-4存储过程视频

--5-4存储过程课件

--5-4存储过程实训

-5.5 触发器

--5-5触发器视频

--5-5触发器课件

--5-5触发器实训

-第5章测试

第6章 备份与还原

-6.1 数据库备份与还原

--6-1数据库备份与还原 视频

--6-1数据库备份与还原 课件

--6-1数据库备份与还原 实训

-6.2 异构数据源导入导出

--6-2异构数据源导入导出 视频

--6-2异构数据源导入导出 课件

--6-2异构数据源导入导出 实训

-第6章测试

第7章 用户与权限

-7.1 用户管理

--7-1用户管理 视频

--7-1用户管理 课件

--7-1用户管理 实训

-7.2 权限管理

--7.2 权限管理 视频

--7.2 权限管理 课件

--7.2 权限管理 实训

-7.3 应用实例开发

--7-3应用实例开发 视频

--7-3应用实例开发 课件

--7-3应用实例开发 实训

-第7章测试

4-3多表查询视频笔记与讨论

也许你还感兴趣的课程:

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