首先,建立三张表,按照《数据库系统概论》(高教版)例题建立。
代码如下:
先来解释下外键:如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。(参考:http://www.cnblogs.com/dirichlet/archive/2011/01/02/1924298.html)
代码如下:
-- 1.建立一个“学生”表Student
CREATE
TABLE
Student
(
Sno
CHAR
(
9
)
PRIMARY
KEY,
-- 列级完整性约束条件,Sno是主码
Sname
CHAR
(
20
)
UNIQUE,
-- Sname取唯一值
Ssex
CHAR
(
2
),
Sage
SMALLINT,
Sdept
CHAR
(
20
)
);
-- 2.建立一个“课程”表 Course
CREATE
TABLE
Course
(
Cno
CHAR
(
4
)
PRIMARY
KEY,
-- 列级完整性约束条件,Cno是主码
Cname
CHAR
(
40
),
Cpno
CHAR
(
4
),
-- Cpno 的含义是先修课
Ccredit
SMALLINT,
FOREIGN
KEY
(
Cpno
)
REFERENCES
Course
(
Cno
)
-- 表级完整性约束条件,Cpno是外码,被参照表示Course, 被参照列是Cno
);
-- 3.建立学生选课表SC。
CREATE
TABLE
SC
(
Sno
CHAR
(
9
),
Cno
CHAR
(
4
),
Grade
SMALLINT,
PRIMARY
KEY
(
Sno,
Cno
),
-- 主码由两个属性构成,必须作为表级完整性进行定义
FOREIGN
KEY
(
Sno
)
REFERENCES
Student
(
Sno
),
-- 表级完整性约束条件,Sno是外码,被参照表示Student
FOREIGN
KEY
(
Cno
)
REFERENCES
Course
(
Cno
)
-- 表级完整性约束条件, Cno是外码,被参照表是Course
);
解释一下三张表:Student和Course这两张表是独立的相互不关联,而SC这张表是前两张表的从表。使用Sno和Cno外键连接前两张表。所以要查找Student表中所对应Course中的数据,就要用SC表将这两张表连接起来。
实例:查询姓名为“李勇”的学生选课名称和成绩。
分析:姓名在Student表中,选课名在Course表中,而成绩在SC表中,显然是要把三张表连接起来。当然,你可以用WHERE来实现,只不过太麻烦。那么如何连接三张表呢?
很简单,只要把从表对应主表的外键联系起来就可。要说的一点是AND可以多次使用, 代码如下
实例:查询姓名为“李勇”的学生选课名称和成绩。
分析:姓名在Student表中,选课名在Course表中,而成绩在SC表中,显然是要把三张表连接起来。当然,你可以用WHERE来实现,只不过太麻烦。那么如何连接三张表呢?
很简单,只要把从表对应主表的外键联系起来就可。要说的一点是AND可以多次使用, 代码如下
SELECT
Sname,
Cname,
Grade
FROM
student,
SC,
course
WHERE
Student.
Sname
=
'李勇'
AND
course.
Cno
=
SC.
Cno
AND
Student.
sno
=
SC.
Sno;
其实,多表查询的本质我觉得是将三张表组成一张大表,然后其他的方法和单表查询一致。比如上面先使用
course.Cno = SC.Cno AND Student.sno = SC.Sno
将三张表连接在一起,再使用
在大表中找到姓名为“李勇”的学生名,课程名以及成绩。
好了,这是今天的演示题目,原谅我是一只菜鸟,当时没第一时间做出来,现在总结一下。
多表查询的步骤:
1.使用外键连接所要查询的表
2.按照单表查询的方法操作
到此结束。
将三张表连接在一起,再使用
SELECT
Sname,
Cname,
Grade
FROM
student,
SC,
course
WHERE
Student.
Sname
=
'李勇'
在大表中找到姓名为“李勇”的学生名,课程名以及成绩。
多表查询的步骤:
1.使用外键连接所要查询的表
2.按照单表查询的方法操作
到此结束。