数据库常用操作回顾三

接着上次的常用操作二补充涉及多个表的查询。首先用一个问题引导情景,目前有两个表,分别是用于存放教学安排信息的teaches表和用于存放课程信息的course表,表结构描述如下:

teaches_table
这里写图片描述

course_table
这里写图片描述

现在要查询在夏季(summer)开课的课程名称(title),这两个属性跨越的两个表,因此就需要将两个表连接起来后在进行查询。

常用的表连接方式有两种,分别是等值连接和外链接

需要注意的是查询语句中‘列名’要改为用’表名.列名‘的形式书写,这样可以避免出现两个表中其他相同列名的冲突。
1.等值连接
等值连接即用两个表中相同的列名将同名列(连接字段)中值相等的元组连接起来,然后去掉两个表中未能连接的元组
select <表名.列名1>, <表名.列名2>…
from 表1, 表2…
where 表1.连接字段=表2.连接字段 and 表2.连接字段=表3.连接字段…
这里写图片描述

2.外连接
等值连接会去掉为连接的元组,在外连接中则会讲没有连接的元组保留下来,并在连接表的属性填上空值。
这里需要用到三个新的关键字:
left outer join on:列出左边表的所有元组
inner join on:列出两个表都有的元组
right outer join on:列出右边表的所有元祖

select <列名1>, <列名2>…
from <表1>
left outer join | right outer join | inner join <表2>
on (表1.关键字段=表2.关键字段)

自身连接
有些时候数据表会需要与本身相连接,这种情况一般会出现表中有同性质但不同名的属性的现象。比如一下的表结构:course(number(课程编号), name(课程名), p_no(前置课程编号)),其中前置课程的值域和课程编号的值域是相同的。
这个时候要求查询所有课程和它的前置课程的前置课程则需要用到自身连接。
select A.number, B.p_no
from course A, course B
where A.p_no=B.number
这里其实根本上还是运用了等值连接的方法,只是给原来的同一个表取了两个别名然后再连接起来。

猜你喜欢

转载自blog.csdn.net/braveheartm/article/details/82659903