日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

《数据库原理》学生表,课程表,选课表的相关内容

發布時間:2024/3/12 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《数据库原理》学生表,课程表,选课表的相关内容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# 學生表 create table Student(Sno char(9) primary key,Sname char(20) unique, Ssex char(2),Sage smallint,Sdept char(20) );# 課程表 create table Course(Cno char(4) primary key,Cname char(40) not null,Cpno char(4), Ccredit smallint,foreign key(Cpno) references Course(Cno) ); # 表級完整性約束條件, 相當于是自關聯 外鍵Cpno, 參照主鍵 Cno# 學生選課表 create table SC(Sno char(9),Cno char(4),Grade smallint,primary key(Sno, Cno),foreign key(Sno) references Student(Sno),foreign key(Cno) references Course(Cno) ); # 設置兩個子墩 合并為主鍵 # 常規外鍵# 插入數據 # 學生表 insert into Student values('201215121', '李勇', '男', 20, 'CS'),('201215122', '劉晨', '女', 19, 'CS'),('201215123', '王敏', '女', 18, 'MA'),('201215125', '張立', '男', 19, 'IS');# 課程表 insert into Coursevalues('1', '數據庫', '5', 4),('2', '數學', null, 2),('3', '信息系統', '1', 4),('4', '操作系統', '6', 3),('5', '數據結構', '7', 3),('6', '數據處理', null, 2),('7', 'PASCAL語言', '6', 4);# SC表 insert into SCvalues('201215121', '1', 92),('201215121', '2', 85),('201215121', '3', 88),('201215122', '2', 90),('201215122', '3', 80);# 三表展示: select * from Student; +-----------+--------+------+------+-------+ | Son | Sname | Ssex | Sage | Sdept | +-----------+--------+------+------+-------+ | 201215121 | 李勇 || 20 | CS | | 201215122 | 劉晨 || 19 | CS | | 201215123 | 王敏 || 18 | MA | | 201215125 | 張立 || 19 | IS | +-----------+--------+------+------+-------+select * from Course; +-----+--------------+------+---------+ | Cno | Cname | Cpno | Ccredit | +-----+--------------+------+---------+ | 1 | 數據庫 | 5 | 4 | | 2 | 數學 | NULL | 2 | | 3 | 信息系統 | 1 | 4 | | 4 | 操作系統 | 6 | 3 | | 5 | 數據結構 | 7 | 3 | | 6 | 數據處理 | NULL | 2 | | 7 | PASCAL語言 | 6 | 4 | +-----+--------------+------+---------+select * from SC; +-----------+-----+-------+ | Sno | Cno | Grade | +-----------+-----+-------+ | 201215121 | 1 | 92 | | 201215121 | 2 | 85 | | 201215121 | 3 | 88 | | 201215122 | 2 | 90 | | 201215122 | 3 | 80 | +-----------+-----+-------+# 修改 alter table 表名 add foreign key (字段名)references 表名(字段名) alter table Course add foreign key references 表名(字段名) ALTER TABLE Course DROP FOREIGN KEY (fk_symbol);# 101頁,3.52 查詢每門課的間接先修課。(自身連接)select first.Cno, second.Cpno from Course as first, Course as second where first.Cpno=second.Cno; # 結果 +-----+------+ | Cno | Cpno | +-----+------+ | 1 | 7 | | 3 | 5 | | 4 | NULL | | 5 | 6 | | 7 | NULL | +-----+------+ 5 rows in set (0.01 sec)# 多表查詢(這個題目中自關聯相當于使用兩張表)當不加條件的時候,就是相當于 兩個表當中的元組(各條記錄) 做笛卡爾積 select * from Course as first, Course as second;# (內連接) 就是取交集,我感覺和 上面的例子,多表查詢沒區別,書上也沒寫這個概念 select 字段 from1 inner join2 on1.字段1 =2.字段2;# 還以上面的題為例子: select first.Cno, second.Cpno from Course as first inner join Course as second on first.Cpno=second.Cno; # 結果: 和上面是一樣的 +-----+------+ | Cno | Cpno | +-----+------+ | 1 | 7 | | 3 | 5 | | 4 | NULL | | 5 | 6 | | 7 | NULL | +-----+------+ 5 rows in set (0.00 sec)# 外連接(還分為左連接,右鏈接) # 外連接,沒有外鍵約束的條件下,可能出現左右兩邊都出現空值 select Student.*, SC.* from Student join SC on Student.Son = SC.Sno;# 左連接: 已左邊為標準,右邊補 null, 右鏈接相反(具體參考課本 54,55頁的理論基礎) select Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade from Student left outer join SC on (Student.Sno=SC.Sno);# 結果:可以看到學生的選課情況,為null的,說明該學生沒有選擇該門課程 +-----------+--------+------+------+-------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade | +-----------+--------+------+------+-------+------+-------+ | 201215121 | 李勇 || 20 | CS | 1 | 92 | | 201215121 | 李勇 || 20 | CS | 2 | 85 | | 201215121 | 李勇 || 20 | CS | 3 | 88 | | 201215122 | 劉晨 || 19 | CS | 2 | 90 | | 201215122 | 劉晨 || 19 | CS | 3 | 80 | | 201215123 | 王敏 || 18 | MA | NULL | NULL | | 201215125 | 張立 || 19 | IS | NULL | NULL | +-----------+--------+------+------+-------+------+-------+ 7 rows in set (0.00 sec)# 多表連接(自身連接相當于兩個表,三個表以上通常叫做多表連接) # (103頁,3.54) 查詢學生學號,姓名,選修課程名及成績 select Student.Sno, Sname, Cname, Grade from Student, SC, Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno;# 結果: 三張表進行笛卡爾積運算,之后根據等值連接取 它的子集。 +-----------+--------+--------------+-------+ | Sno | Sname | Cname | Grade | +-----------+--------+--------------+-------+ | 201215122 | 劉晨 | 數學 | 90 | | 201215122 | 劉晨 | 信息系統 | 80 | | 201215121 | 李勇 | 數據庫 | 92 | | 201215121 | 李勇 | 數學 | 85 | | 201215121 | 李勇 | 信息系統 | 88 | +-----------+--------+--------------+-------+ 5 rows in set (0.01 sec)# 嵌套查詢(103頁): 一個select-from-where 語句為一個查詢塊。 # 將一個查詢塊嵌套進另一個查詢塊的where子句或者having短語中查詢,稱為嵌套查詢 # 查詢選修了課程二的學生的姓名; select Sname from Student where sno in ( select Sno from SCwhere Cno="2" ); # 外層叫做父查詢,內層叫做子查詢,另外需要注意:子查詢不能使用 order_by 子句, # order_by 只能對最終的查詢結果排序。 # 當子查詢是一個單值的時候,也可以使用 = 替換 in# 結果 +--------+ | Sname | +--------+ | 李勇 | | 劉晨 | +--------+ 2 rows in set (0.02 sec)# 另外根據經驗, 嵌套查詢的效率是很低的,一般不使用,還可以:select * from Student, SC where Student.sno = SC.Sno and Cno="2"; # 結果,注意條件 Student.sno = SC.Sno and Cno="2", 因為是笛卡爾積,全部結果集合中挑選數據 +-----------+--------+------+------+-------+-----------+-----+-------+ | sno | Sname | Ssex | Sage | Sdept | Sno | Cno | Grade | +-----------+--------+------+------+-------+-----------+-----+-------+ | 201215121 | 李勇 || 20 | CS | 201215121 | 2 | 85 | | 201215122 | 劉晨 || 19 | CS | 201215122 | 2 | 90 | +-----------+--------+------+------+-------+-----------+-----+-------+ 2 rows in set (0.00 sec)# 104頁 有很好的例題,可以看看。 105頁是一個三層嵌套查詢,然后都可以用連接查詢替換掉的。 # 不相關查詢:子查詢的查詢條件不依賴于 父查詢。# 相關查詢: 建議查看106頁,好好研究一下,有執行過程解讀。# 子查詢中的 謂詞 : 具體看書107,108,109. any # 任何一個,也就是某一個值 all # 所有值< any # 小于某個值即可# 后面的內容不再介紹了,都是類似于離散數學的,謂詞邏輯,全稱量詞,存在量詞的理論基礎上的。 # 書上很清晰的例子。# 修改數據表字段名 ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數據類型;alter table Student change son sno char(9);

總結

以上是生活随笔為你收集整理的《数据库原理》学生表,课程表,选课表的相关内容的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。