首先,建立三張表,按照《數據庫系統概論》(高教版)例題建立。
代碼如下:
-- 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
);
先來解釋下外鍵:如果表A的主關鍵字是表B中的字段,則該字段稱爲表B的外鍵,表A稱爲主表,表B稱爲從表。外鍵是用來實現參照完整性的,不同的外鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或者刪除的級聯操作將使得日常的維護工作更加輕鬆。(參考:http://www.cnblogs.com/dirichlet/archive/2011/01/02/1924298.html)
解釋一下三張表:Student和Course這兩張表是獨立的相互不關聯,而SC這張表是前兩張表的從表。使用Sno和Cno外鍵連接前兩張表。所以要查找Student表中所對應Course中的數據,就要用SC表將這兩張表連接起來。
實例:查詢姓名爲“李勇”的學生選課名稱和成績。
分析:姓名在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
將三張表連接在一起,再使用
SELECT Sname,Cname, Grade
FROM student,SC, course
WHERE Student.Sname = '李勇'
在大表中找到姓名爲“李勇”的學生名,課程名以及成績。
好了,這是今天的演示題目,原諒我是一隻菜鳥,當時沒第一時間做出來,現在總結一下。
多表查詢的步驟:
1.使用外鍵連接所要查詢的表
2.按照單表查詢的方法操作
到此結束。