SQL Server 练习
練習(xí):《數(shù)據(jù)庫原理》(第四版)
創(chuàng)建數(shù)據(jù)庫 GradeManager(成績管理)
create database GradeManager;創(chuàng)建Student、Course、Class、Grade表
切換數(shù)據(jù)庫
use GradeManager;創(chuàng)建 Studnet 表
CREATE TABLE Student( Sno CHAR(7)NOT NULL UNIQUE, /*學(xué)號唯一*/ Sname VarChar(20) NOT NULL, /*學(xué)生姓名*/ Ssex CHAR(2) NOT NULL, /*性別*/ Sage Smallint NULL, /*年齡*/ Clno CHAR(5) NOT NULL /*學(xué)生所在班級*/ );創(chuàng)建 Course 表
CREATE TABLE Course( Cno CHAR(1) NOT NULL UNIQUE, /*課程號唯一*/ Cname VarChar(20) NOT NULL, /*課程名稱*/ Credit Smallint NULL /*學(xué)分*/ );創(chuàng)建 Class 表
CREATE TABLE Class( Clno CHAR(5) NOT NULL UNIQUE, /*班級號唯一*/ Speciality VarChar(20) NOT NULL, /*班級所在專業(yè)*/ Inyear Char(4) NOT NULL, /*入校年份*/ Number Integer NULL, /*班級人數(shù)*/ Monitor Char(7) NULL /*班長學(xué)號*/ );創(chuàng)建 Grade 表
CREATE TABLE Grade( Sno CHAR(7) NOT NULL, /*學(xué)號*/ Cno Char(1) NOT NULL, /*課程號*/ Gmark Numeric(4, 1) NULL /*成績*/ );對 Studnet 表添加數(shù)據(jù)
INSERT INTO Student VALUES('2000101', '李勇', '男', 20, '00311'), ('2000102', '劉詩晨', '女', 19, '00311'), ('2000103', '王一鳴', '男', 20, '00312'), ('2000104', '張婷婷', '女', 21, '00312'), ('2001101', '李勇敏', '女', 19, '01311'), ('2001102', '賈向東', '男', 22, '01311'), ('2001103', '陳寶玉', '男', 20, '01311'), ('2001104', '張逸凡', '男', 21, '01311');| 1 | 2000101 | 李勇 | 男 | 20 | 00311 |
| 2 | 2000102 | 劉詩晨 | 女 | 19 | 00311 |
| 3 | 2000103 | 王一鳴 | 男 | 20 | 00312 |
| 4 | 2000104 | 張婷婷 | 女 | 21 | 00312 |
| 5 | 2001101 | 李勇敏 | 女 | 19 | 01311 |
| 6 | 2001102 | 賈向東 | 男 | 22 | 01311 |
| 7 | 2001103 | 陳寶玉 | 男 | 20 | 01311 |
| 8 | 2001104 | 張逸凡 | 男 | 21 | 01311 |
對 Course 表添加數(shù)據(jù)
INSERT INTO Course VALUES('1', '數(shù)據(jù)庫', 4), ('2', '離散數(shù)學(xué)', 3), ('3', '管理信息系統(tǒng)', 2), ('4', '操作系統(tǒng)', 4), ('5', '數(shù)據(jù)結(jié)構(gòu)', 4), ('6', '數(shù)據(jù)處理', 2), ('7', 'C語言', 4);| 1 | 1 | 數(shù)據(jù)庫 | 4 |
| 2 | 2 | 離散數(shù)學(xué) | 3 |
| 3 | 3 | 管理信息系統(tǒng) | 2 |
| 4 | 4 | 操作系統(tǒng) | 4 |
| 5 | 5 | 數(shù)據(jù)結(jié)構(gòu) | 4 |
| 6 | 6 | 數(shù)據(jù)處理 | 2 |
| 7 | 7 | C語言 | 4 |
對 Class 表添加數(shù)據(jù)
INSERT INTO Class VALUES('00311', '計算機(jī)軟件', '2000', 120, '2000101'), ('00312', '計算機(jī)應(yīng)用', '2000', 140, '2000103'), ('01311', '計算機(jī)軟件', '2001', 220, '2001103');| 1 | 00311 | 計算機(jī)軟件 | 2000 | 120 | 2000101 |
| 2 | 00312 | 計算機(jī)應(yīng)用 | 2000 | 140 | 2000103 |
| 3 | 01311 | 計算機(jī)軟件 | 2001 | 220 | 2001103 |
對 Grade 表添加數(shù)據(jù)
INSERT INTO Grade VALUES('2000101', '1', 92), ('2000101', '3', NULL), ('2000101', '5', 86), ('2000102', '1', 78), ('2000102', '6', 55), ('2000103', '3', 65), ('2000103', '6', 78), ('2000103', '5', 66), ('2000104', '1', 54), ('2000104', '6', 83), ('2001101', '2', 70), ('2001101', '4', 65), ('2001102', '2', 80), ('2001102', '4', NULL), ('2000103', '1', 83), ('2000103', '2', 76), ('2000103', '4', 56), ('2000103', '7', 88);| 2000101 | 1 | 92.0 |
| 2000101 | 3 | NULL |
| 2000101 | 5 | 86.0 |
| 2000102 | 1 | 78.0 |
| 2000102 | 6 | 55.0 |
| 2000103 | 3 | 65.0 |
| 2000103 | 6 | 78.0 |
| 2000103 | 5 | 66.0 |
| 2000104 | 1 | 54.0 |
| 2000104 | 6 | 83.0 |
| 2001101 | 2 | 70.0 |
| 2001101 | 4 | 65.0 |
| 2001102 | 2 | 80.0 |
| 2001102 | 4 | NULL |
| 2000103 | 1 | 83.0 |
| 2000103 | 2 | 76.0 |
| 2000103 | 4 | 56.0 |
| 2000103 | 7 | 88.0 |
(1)給 Studnet 表增加屬性 Nation,數(shù)據(jù)類型為 Varchar(20);
ALTER TABLE Student ADD Nation Varchar(20) NULL;| 1 | 2000101 | 李勇 | 男 | 20 | 00311 | NULL |
| 2 | 2000102 | 劉詩晨 | 女 | 19 | 00311 | NULL |
| 3 | 2000103 | 王一鳴 | 男 | 20 | 00312 | NULL |
| 4 | 2000104 | 張婷婷 | 女 | 21 | 00312 | NULL |
| 5 | 2001101 | 李勇敏 | 女 | 19 | 01311 | NULL |
| 6 | 2001102 | 賈向東 | 男 | 22 | 01311 | NULL |
| 7 | 2001103 | 陳寶玉 | 男 | 20 | 01311 | NULL |
| 8 | 2001104 | 張逸凡 | 男 | 21 | 01311 | NULL |
(2)刪除 Studnet 表中新增的屬性Nation;
ALTER TABLE Student DROP COLUMN Nation;| 1 | 2000101 | 李勇 | 男 | 20 | 00311 |
| 2 | 2000102 | 劉詩晨 | 女 | 19 | 00311 |
| 3 | 2000103 | 王一鳴 | 男 | 20 | 00312 |
| 4 | 2000104 | 張婷婷 | 女 | 21 | 00312 |
| 5 | 2001101 | 李勇敏 | 女 | 19 | 01311 |
| 6 | 2001102 | 賈向東 | 男 | 22 | 01311 |
| 7 | 2001103 | 陳寶玉 | 男 | 20 | 01311 |
| 8 | 2001104 | 張逸凡 | 男 | 21 | 01311 |
(3)向成績表中插入記錄(“2001110”, “3”, 80);
INSERT INTO Grade VALUES('2001110', '3', 80);| 2000101 | 1 | 92.0 |
| 2000101 | 3 | NULL |
| 2000101 | 5 | 86.0 |
| 2000102 | 1 | 78.0 |
| 2000102 | 6 | 55.0 |
| 2000103 | 3 | 65.0 |
| 2000103 | 6 | 78.0 |
| 2000103 | 5 | 66.0 |
| 2000104 | 1 | 54.0 |
| 2000104 | 6 | 83.0 |
| 2001101 | 2 | 70.0 |
| 2001101 | 4 | 65.0 |
| 2001102 | 2 | 80.0 |
| 2001102 | 4 | NULL |
| 2000103 | 1 | 83.0 |
| 2000103 | 2 | 76.0 |
| 2000103 | 4 | 56.0 |
| 2000103 | 7 | 88.0 |
| 2001110 | 3 | 80.0 |
(4)將學(xué)號為 “2001110” 的學(xué)生的成績修改為70分;
UPDATE Grade SET Gmark = 70 WHERE Sno = '2001110';| 2000101 | 1 | 92.0 |
| 2000101 | 3 | NULL |
| 2000101 | 5 | 86.0 |
| 2000102 | 1 | 78.0 |
| 2000102 | 6 | 55.0 |
| 2000103 | 3 | 65.0 |
| 2000103 | 6 | 78.0 |
| 2000103 | 5 | 66.0 |
| 2000104 | 1 | 54.0 |
| 2000104 | 6 | 83.0 |
| 2001101 | 2 | 70.0 |
| 2001101 | 4 | 65.0 |
| 2001102 | 2 | 80.0 |
| 2001102 | 4 | NULL |
| 2000103 | 1 | 83.0 |
| 2000103 | 2 | 76.0 |
| 2000103 | 4 | 56.0 |
| 2000103 | 7 | 88.0 |
| 2001110 | 3 | 70.0 |
(5)刪除學(xué)號為 “2001110” 的學(xué)生的成績記錄;
DELETE FROM Grade WHERE Sno= '2001110';| 2000101 | 1 | 92.0 |
| 2000101 | 3 | NULL |
| 2000101 | 5 | 86.0 |
| 2000102 | 1 | 78.0 |
| 2000102 | 6 | 55.0 |
| 2000103 | 3 | 65.0 |
| 2000103 | 6 | 78.0 |
| 2000103 | 5 | 66.0 |
| 2000104 | 1 | 54.0 |
| 2000104 | 6 | 83.0 |
| 2001101 | 2 | 70.0 |
| 2001101 | 4 | 65.0 |
| 2001102 | 2 | 80.0 |
| 2001102 | 4 | NULL |
| 2000103 | 1 | 83.0 |
| 2000103 | 2 | 76.0 |
| 2000103 | 4 | 56.0 |
| 2000103 | 7 | 88.0 |
(6)在學(xué)生表的Cno屬性上創(chuàng)建一個名為IX_Class的索引,以班級號的升序排序;
CREATE INDEX IX_Class ON student(clno);
(7)刪除 IX_Class 索引。
DROP INDEX student.IX_Class;(8)找出所有被學(xué)生選修了的課程號;
SELECT DISTINCT Cno 課程號 FROM Grade;| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
(9)找出01311班女學(xué)生的個人信息
SELECT * FROM Student WHERE Clno='01311' AND Ssex='女'| 1 | 2001101 | 李勇敏 | 女 | 19 | 01311 |
(10)找出 01311 班和 01312 班的學(xué)生姓名、性別、出生年份;
SELECT sname 學(xué)生姓名, ssex 性別, 2021-sage 出生年份 FROM Student WHERE Clno='01311' or Clno='01312'| 1 | 李勇敏 | 女 | 2002 |
| 2 | 賈向東 | 男 | 1999 |
| 3 | 陳寶玉 | 男 | 2001 |
| 4 | 張逸凡 | 男 | 2000 |
(11)找出所有姓李的學(xué)生的個人信息
SELECT * FROM Student WHERE Sname like '李%';| 1 | 2000101 | 李勇 | 男 | 20 | 00311 |
| 2 | 2001101 | 李勇敏 | 女 | 19 | 01311 |
(12)找出學(xué)生李勇所在班級的學(xué)生人數(shù)
SELECT COUNT(*) 班級人數(shù) FROM Student WHERE Clno in (SELECT Clno FROM Student WHERE Sname='李勇')| 1 | 2 |
(13)找出課程名為操作系統(tǒng)的平均成績、最高分、最低分;
SELECT AVG(Gmark) 平均成績, MAX(Gmark) 最高分, MIN(Gmark) 最低分FROM GradeWHERE Cno in(SELECT Cno From CourseWHERE Cname='操作系統(tǒng)')| 1 | 60.500000 | 65.0 | 56.0 |
(14)找出選修了課程的學(xué)生人數(shù);
SELECT COUNT(distinct sno) 學(xué)生人數(shù) FROM Grade| 1 | 6 |
(14)找出選修了課程操作系統(tǒng)的學(xué)生人數(shù);
SELECT COUNT(distinct sno) 學(xué)生人數(shù) FROM Grade WHERE Cno in (SELECT Cno FROM Course WHERE Cname='操作系統(tǒng)')| 1 | 3 |
(15)找出 2000 級計算機(jī)軟件班的成績?yōu)榭盏膶W(xué)生姓名。
SELECT Sname '姓名' FROM Student,Class WHERE Student.Clno=Class.Clno and Inyear='2000'and Speciality='計算機(jī)軟件'and sno NOT IN(SELECT sno FROM Grade) UNION SELECT Sname '姓名' FROM Student,Class WHERE Student.Clno=Class.Clno and Inyear='2000'and Speciality='計算機(jī)軟件'and sno IN(SELECT sno FROM Grade where Gmark is NULL);| 1 | 李勇 |
(16)找出與李勇在同一個班級的學(xué)生信息;
SELECT * FROM Student WHERE Sname='李勇' OR Clno IN ( SELECT Clno FROM Student WHERE Sname='李勇')| 1 | 2000101 | 李勇 | 男 | 20 | 00311 |
| 2 | 2000102 | 劉詩晨 | 女 | 19 | 00311 |
(17)找出所有與學(xué)生李勇有相同選修課程的學(xué)生信息;
SELECT * FROM Student WHERE Sname='李勇' OR exists( SELECT * FROM Grade WHERE Student.Sno=Grade.Sno AND Grade.Cno IN( SELECT Cno from Grade WHERE Sno IN( SELECT Sno FROM Student WHERE Sname='李勇')))| 1 | 2000101 | 李勇 | 男 | 20 | 00311 |
| 2 | 2000102 | 劉詩晨 | 女 | 19 | 00311 |
| 3 | 2000103 | 王一鳴 | 男 | 20 | 00312 |
| 4 | 2000104 | 張婷婷 | 女 | 21 | 00312 |
(18)找出年齡介于學(xué)生李勇和25歲之間的學(xué)生信息(已知李勇的年齡小于25歲);
SELECT?*? FROM?Student? WHERE?Sage?>??( SELECT?Sage? FROM?Student? WHERE?Sname='李勇') AND Sage?<?25| 1 | 2000104 | 張婷婷 | 女 | 21 | 00312 |
| 2 | 2001102 | 賈向東 | 男 | 22 | 01311 |
| 3 | 2001104 | 張逸凡 | 男 | 21 | 01311 |
(19)找出選修了課程操作系統(tǒng)的學(xué)生學(xué)號和姓名;
SELECT?Sno?學(xué)號,Sname?姓名? FROM?Student? WHERE?exists?( SELECT?*? FROM?Grade?? WHERE?Cno?IN( SELECT?Cno? FROM?Course? WHERE?Cname='操作系統(tǒng)')?AND?Student.Sno=Grade.Sno)| 1 | 2000103 | 王一鳴 |
| 2 | 2001101 | 李勇敏 |
| 3 | 2001102 | 賈向東 |
(20)找出沒有選修1號課程的所有學(xué)生姓名;
SELECT?Sname?姓名? FROM?Student? WHERE?NOT?exists?( SELECT?*? FROM?Grade?? WHERE?Student.Sno=Grade.Sno?AND?Cno=1)| 1 | 李勇敏 |
| 2 | 賈向東 |
| 3 | 陳寶玉 |
| 4 | 張逸凡 |
(21)找出選修了全部課程的學(xué)生姓名。
SELECT?Sname?姓名? FROM?Student? WHERE?NOT?EXISTS?( SELECT?Cno? FROM?Course?EXCEPT? SELECT?Cno? FROM?Grade? WHERE?Student.Sno=Grade.Sno)或者
SELECT Sname?姓名? FROM?Student? WHERE Student.Sno IN( SELECT Grade.Sno FROM Grade GROUP BY Grade.Sno HAVING COUNT(Grade.Cno) = ( SELECT COUNT(Course.Cno) FROM Course ))| 1 | 王一鳴 |
(22)查詢選修了3號課程的學(xué)生學(xué)號及成績,并按成績的降序排列;
SELECT?Sno?學(xué)號, Gmark?成績? FROM?Grade? WHERE?Cno=3?ORDER?BY?Gmark?DESC| 1 | 2000103 | 65.0 |
| 2 | 2000101 | NULL |
(23)查詢?nèi)w學(xué)生信息,要求查詢結(jié)果按班級號升序排列,同一班級學(xué)生按年齡降序排列;
SELECT?*? FROM?Student? ORDER?BY?Clno?ASC, Sage?DESC| 1 | 2000101 | 李勇 | 男 | 20 | 00311 |
| 2 | 2000102 | 劉詩晨 | 女 | 19 | 00311 |
| 3 | 2000104 | 張婷婷 | 女 | 21 | 00312 |
| 4 | 2000103 | 王一鳴 | 男 | 20 | 00312 |
| 5 | 2001102 | 賈向東 | 男 | 22 | 01311 |
| 6 | 2001104 | 張逸凡 | 男 | 21 | 01311 |
| 7 | 2001103 | 陳寶玉 | 男 | 20 | 01311 |
| 8 | 2001101 | 李勇敏 | 女 | 19 | 01311 |
(24)求每個課程號及相應(yīng)的選課人數(shù);
SELECT?Grade.Cno?課程號, COUNT(Grade.Cno)?選課人數(shù)?? FROM?Grade?JOIN?Course?ON?Grade.Cno=Course.Cno?GROUP?BY?Grade.Cno| 1 | 1 | 4 |
| 2 | 2 | 3 |
| 3 | 3 | 2 |
| 4 | 4 | 3 |
| 5 | 5 | 2 |
| 6 | 6 | 3 |
| 7 | 7 | 1 |
(25)查詢選修了3門以上課程的學(xué)生學(xué)號;
SELECT?Sno?學(xué)號? FROM?Grade?GROUP?BY?Sno?HAVING?COUNT(Sno)>3?| 1 | 2000103 |
(26)將01311班的全體學(xué)生的成績置零;
UPDATE Grade SET Gmark=0 WHERE Sno in ( SELECT Sno FROM Student WHERE Clno='01311')| 1 | 2000101 | 1 | 92.0 |
| 2 | 2000101 | 3 | NULL |
| 3 | 2000101 | 5 | 86.0 |
| 4 | 2000102 | 1 | 78.0 |
| 5 | 2000102 | 6 | 55.0 |
| 6 | 2000103 | 3 | 65.0 |
| 7 | 2000103 | 6 | 78.0 |
| 8 | 2000103 | 5 | 66.0 |
| 9 | 2000104 | 1 | 54.0 |
| 10 | 2000104 | 6 | 83.0 |
| 11 | 2001101 | 2 | 0.0 |
| 12 | 2001101 | 4 | 0.0 |
| 13 | 2001102 | 2 | 0.0 |
| 14 | 2001102 | 4 | 0.0 |
| 15 | 2000103 | 1 | 83.0 |
| 16 | 2000103 | 2 | 76.0 |
| 17 | 2000103 | 4 | 56.0 |
| 18 | 2000103 | 7 | 88.0 |
(27)刪除2001級計算機(jī)軟件的全體學(xué)生的選課記錄;
DELETE FROM Grade WHERE Sno IN ( SELECT Sno FROM Student WHERE Clno IN ( SELECT Clno FROM Class WHERE Speciality='計算機(jī)軟件' AND Inyear='2001'))| 1 | 2000101 | 1 | 92.0 |
| 2 | 2000101 | 3 | NULL |
| 3 | 2000101 | 5 | 86.0 |
| 4 | 2000102 | 1 | 78.0 |
| 5 | 2000102 | 6 | 55.0 |
| 6 | 2000103 | 3 | 65.0 |
| 7 | 2000103 | 6 | 78.0 |
| 8 | 2000103 | 5 | 66.0 |
| 9 | 2000104 | 1 | 54.0 |
| 10 | 2000104 | 6 | 83.0 |
| 11 | 2000103 | 1 | 83.0 |
| 12 | 2000103 | 2 | 76.0 |
| 13 | 2000103 | 4 | 56.0 |
| 14 | 2000103 | 7 | 88.0 |
(28)學(xué)生李勇已退學(xué),從數(shù)據(jù)庫中刪除有關(guān)他的記錄;
DELETE FROM Grade WHERE Sno IN ( SELECT Sno FROM Student WHERE Sname='李勇')| 1 | 2000102 | 1 | 78.0 |
| 2 | 2000102 | 6 | 55.0 |
| 3 | 2000103 | 3 | 65.0 |
| 4 | 2000103 | 6 | 78.0 |
| 5 | 2000103 | 5 | 66.0 |
| 6 | 2000104 | 1 | 54.0 |
| 7 | 2000104 | 6 | 83.0 |
| 8 | 2000103 | 1 | 83.0 |
| 9 | 2000103 | 2 | 76.0 |
| 10 | 2000103 | 4 | 56.0 |
| 11 | 2000103 | 7 | 88.0 |
| 1 | 00311 | 計算機(jī)軟件 | 2000 | 119 | 2000101 |
| 2 | 00312 | 計算機(jī)應(yīng)用 | 2000 | 140 | 2000103 |
| 3 | 01311 | 計算機(jī)軟件 | 2001 | 220 | 2001103 |
| 1 | 00311 | 計算機(jī)軟件 | 2000 | 119 | NULL |
| 2 | 00312 | 計算機(jī)應(yīng)用 | 2000 | 140 | 2000103 |
| 3 | 01311 | 計算機(jī)軟件 | 2001 | 220 | 2001103 |
| 1 | 2000102 | 劉詩晨 | 女 | 19 | 00311 |
| 2 | 2000103 | 王一鳴 | 男 | 20 | 00312 |
| 3 | 2000104 | 張婷婷 | 女 | 21 | 00312 |
| 4 | 2001101 | 李勇敏 | 女 | 19 | 01311 |
| 5 | 2001102 | 賈向東 | 男 | 22 | 01311 |
| 6 | 2001103 | 陳寶玉 | 男 | 20 | 01311 |
| 7 | 2001104 | 張逸凡 | 男 | 21 | 01311 |
(29)對每個班,求學(xué)生的平均年齡,并把結(jié)果存入數(shù)據(jù)庫;
ALTER TABLE Class ADD Cage SMALLINT NULL| 1 | 00311 | 計算機(jī)軟件 | 2000 | 119 | NULL | NULL |
| 2 | 00312 | 計算機(jī)應(yīng)用 | 2000 | 140 | 2000103 | NULL |
| 3 | 01311 | 計算機(jī)軟件 | 2001 | 220 | 2001103 | NULL |
| 1 | 00311 | 計算機(jī)軟件 | 2000 | 119 | NULL | 19 |
| 2 | 00312 | 計算機(jī)應(yīng)用 | 2000 | 140 | 2000103 | 20 |
| 3 | 01311 | 計算機(jī)軟件 | 2001 | 220 | 2001103 | 20 |
(30)建立01311班選修了1號課程的學(xué)生視圖Stu_01311_1;
CREATE VIEW Stu_01311_1 AS SELECT * FROM Student WHERE Sno IN( SELECT Sno FROM Grade WHERE Cno = 1) AND Clno = '01311';(31)建立01311班選修了1號課程并且不及格的學(xué)生視圖Stu_01311_2;
CREATE VIEW Stu_01311_2 AS SELECT * FROM Student WHERE Sno IN( SELECT Sno FROM Grade WHERE Cno = 1 AND Gmark < 60) AND Clno = '01311';(32)建立視圖Stu_year,由學(xué)生學(xué)號、姓名、出生年份組成;
CREATE VIEW Stu_year AS SELECT Sno AS '學(xué)號',Sname AS '姓名',(2014-Sage) AS '出生年份' FROM Student;| 1 | 2000102 | 劉詩晨 | 1995 |
| 2 | 2000103 | 王一鳴 | 1994 |
| 3 | 2000104 | 張婷婷 | 1993 |
| 4 | 2001101 | 李勇敏 | 1995 |
| 5 | 2001102 | 賈向東 | 1992 |
| 6 | 2001103 | 陳寶玉 | 1994 |
| 7 | 2001104 | 張逸凡 | 1993 |
(33)查詢1990年以后出生的學(xué)生姓名;
SELECT 姓名 FROM dbo.Stu_year WHERE '出生年份' > '1990';| 1 | 劉詩晨 |
| 2 | 王一鳴 |
| 3 | 張婷婷 |
| 4 | 李勇敏 |
| 5 | 賈向東 |
| 6 | 陳寶玉 |
| 7 | 張逸凡 |
(34)查詢01311班選修了1號課程并且成績不及格的學(xué)生的學(xué)號、姓名、出生年份;
SELECT * FROM dbo.Stu_year WHERE 學(xué)號 IN ( SELECT Sno FROM Stu_01311_2);創(chuàng)建Course表
CREATE TABLE Coures (Cno Char(1) PRIMARY KEY, /*主碼*/Cname VarChar(20) NOT NULL,Credit Smallint Check(Credit IN('1', '2', '3', '4', '5', '6')) );或
CREATE TABLE Coures (Cno Char(1), /*主碼*/Cname VarChar(20) NOT NULL,Credit Smallint Check(Credit IN('1', '2', '3', '4', '5', '6')),PRIMARY KEY(Cno) );創(chuàng)建Class表
CREATE TABLE Class (Clno Char(5) PRIMARY KEY, /*主碼*/Speciality VarChar(20) Not Null,Inyear Char(4) Not Null,Number Integer Check(Number > 1 And Number < 100),Monitor Char(7) );或
CREATE TABLE Class (Clno Char(5), /*主碼*/Speciality VarChar(20) Not Null,Inyear Char(4) Not Null,Number Integer Check(Number > 1 And Number < 100),Monitor Char(7),PRIMARY KEY(Clno) )創(chuàng)建Student表
CREATE TABLE Student(Sno Char(7) NOT NULL PRIMARY KEY, /*學(xué)號唯一 主碼*/Sname VarChar(20) NOT NULL, /*學(xué)生姓名*/Ssex Char(2) NOT NULL CHECK(Ssex In('男', '女')) DEFAULT '男', /*性別*/Sage Smallint NULL CHECK(Sage > 14 AND Sage < 65), /*年齡*/Clno Char(5) NOT NULL,FOREIGN KEY(Clno) REFERENCES Class(Clno) ON UPDATE CASCADE )為 Class表 的 Monitor 屬性添加 外部碼
ALTER TABLE Class ADD CONSTRAINT Monitor FOREIGN KEY (Monitor) REFERENCES Student(Sno)注:使用 PRIMARY KEY關(guān)鍵字定義主碼有兩種方式:
- 1、在屬性后添加關(guān)鍵字
- 2、在屬性表中加入額外的定義主碼的字句
使用 PRIMARY KEY關(guān)鍵字定義主碼需要注意的地方:
- 1、主碼的屬性值不能重復(fù)出現(xiàn)
- 2、主碼的屬性值不能為空
- 3、一個表中只能有一個主碼
例如下圖
當(dāng)主碼的屬性值重復(fù)時,會出現(xiàn)重復(fù)鍵值錯誤。
總結(jié)
以上是生活随笔為你收集整理的SQL Server 练习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用 uiautomator2
- 下一篇: 易语言操作mysql数据库