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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server 练习

發(fā)布時間:2025/5/22 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 练习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

練習(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'); SnoSnameSsexSageClno
12000101李勇2000311
22000102劉詩晨1900311
32000103王一鳴2000312
42000104張婷婷2100312
52001101李勇敏1901311
62001102賈向東2201311
72001103陳寶玉2001311
82001104張逸凡2101311

對 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); CnoCnameCreditc
11數(shù)據(jù)庫4
22離散數(shù)學(xué)3
33管理信息系統(tǒng)2
44操作系統(tǒng)4
55數(shù)據(jù)結(jié)構(gòu)4
66數(shù)據(jù)處理2
77C語言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'); ClnoSpecialityInyearNumberMonitor
100311計算機(jī)軟件20001202000101
200312計算機(jī)應(yīng)用20001402000103
301311計算機(jī)軟件20012202001103

對 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); SnoCnoGmark
2000101192.0
20001013NULL
2000101586.0
2000102178.0
2000102655.0
2000103365.0
2000103678.0
2000103566.0
2000104154.0
2000104683.0
2001101270.0
2001101465.0
2001102280.0
20011024NULL
2000103183.0
2000103276.0
2000103456.0
2000103788.0

(1)給 Studnet 表增加屬性 Nation,數(shù)據(jù)類型為 Varchar(20);

ALTER TABLE Student ADD Nation Varchar(20) NULL; SnoSnameSsexSageClnoNation
12000101李勇2000311NULL
22000102劉詩晨1900311NULL
32000103王一鳴2000312NULL
42000104張婷婷2100312NULL
52001101李勇敏1901311NULL
62001102賈向東2201311NULL
72001103陳寶玉2001311NULL
82001104張逸凡2101311NULL

(2)刪除 Studnet 表中新增的屬性Nation;

ALTER TABLE Student DROP COLUMN Nation; SnoSnameSsexSageClno
12000101李勇2000311
22000102劉詩晨1900311
32000103王一鳴2000312
42000104張婷婷2100312
52001101李勇敏1901311
62001102賈向東2201311
72001103陳寶玉2001311
82001104張逸凡2101311

(3)向成績表中插入記錄(“2001110”, “3”, 80);

INSERT INTO Grade VALUES('2001110', '3', 80); SnoCnoGmark
2000101192.0
20001013NULL
2000101586.0
2000102178.0
2000102655.0
2000103365.0
2000103678.0
2000103566.0
2000104154.0
2000104683.0
2001101270.0
2001101465.0
2001102280.0
20011024NULL
2000103183.0
2000103276.0
2000103456.0
2000103788.0
2001110380.0

(4)將學(xué)號為 “2001110” 的學(xué)生的成績修改為70分;

UPDATE Grade SET Gmark = 70 WHERE Sno = '2001110'; SnoCnoGmark
2000101192.0
20001013NULL
2000101586.0
2000102178.0
2000102655.0
2000103365.0
2000103678.0
2000103566.0
2000104154.0
2000104683.0
2001101270.0
2001101465.0
2001102280.0
20011024NULL
2000103183.0
2000103276.0
2000103456.0
2000103788.0
2001110370.0

(5)刪除學(xué)號為 “2001110” 的學(xué)生的成績記錄;

DELETE FROM Grade WHERE Sno= '2001110'; SnoCnoGmark
2000101192.0
20001013NULL
2000101586.0
2000102178.0
2000102655.0
2000103365.0
2000103678.0
2000103566.0
2000104154.0
2000104683.0
2001101270.0
2001101465.0
2001102280.0
20011024NULL
2000103183.0
2000103276.0
2000103456.0
2000103788.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; 課程號
11
22
33
44
55
66
77

(9)找出01311班女學(xué)生的個人信息

SELECT * FROM Student WHERE Clno='01311' AND Ssex='女' SnoSnameSsexSageClno
12001101李勇敏1901311

(10)找出 01311 班和 01312 班的學(xué)生姓名、性別、出生年份;

SELECT sname 學(xué)生姓名, ssex 性別, 2021-sage 出生年份 FROM Student WHERE Clno='01311' or Clno='01312' 學(xué)生姓名性別出生年份
1李勇敏2002
2賈向東1999
3陳寶玉2001
4張逸凡2000

(11)找出所有姓李的學(xué)生的個人信息

SELECT * FROM Student WHERE Sname like '李%'; SnoSnameSsexSageClno
12000101李勇2000311
22001101李勇敏1901311

(12)找出學(xué)生李勇所在班級的學(xué)生人數(shù)

SELECT COUNT(*) 班級人數(shù) FROM Student WHERE Clno in (SELECT Clno FROM Student WHERE Sname='李勇') 班級人數(shù)
12

(13)找出課程名為操作系統(tǒng)的平均成績、最高分、最低分;

SELECT AVG(Gmark) 平均成績, MAX(Gmark) 最高分, MIN(Gmark) 最低分FROM GradeWHERE Cno in(SELECT Cno From CourseWHERE Cname='操作系統(tǒng)') 平均成績最高分最低分
160.50000065.056.0

(14)找出選修了課程的學(xué)生人數(shù);

SELECT COUNT(distinct sno) 學(xué)生人數(shù) FROM Grade 學(xué)生人數(shù)
16

(14)找出選修了課程操作系統(tǒng)的學(xué)生人數(shù);

SELECT COUNT(distinct sno) 學(xué)生人數(shù) FROM Grade WHERE Cno in (SELECT Cno FROM Course WHERE Cname='操作系統(tǒng)') 學(xué)生人數(shù)
13

(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='李勇') SnoSnameSsexSageClno
12000101李勇2000311
22000102劉詩晨1900311

(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='李勇'))) SnoSnameSsexSageClno
12000101李勇2000311
22000102劉詩晨1900311
32000103王一鳴2000312
42000104張婷婷2100312

(18)找出年齡介于學(xué)生李勇和25歲之間的學(xué)生信息(已知李勇的年齡小于25歲);

SELECT?*? FROM?Student? WHERE?Sage?>??( SELECT?Sage? FROM?Student? WHERE?Sname='李勇') AND Sage?<?25 SnoSnameSsexSageClno
12000104張婷婷2100312
22001102賈向東2201311
32001104張逸凡2101311

(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) 學(xué)號姓名
12000103王一鳴
22001101李勇敏
32001102賈向東

(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 學(xué)號成績
1200010365.0
22000101NULL

(23)查詢?nèi)w學(xué)生信息,要求查詢結(jié)果按班級號升序排列,同一班級學(xué)生按年齡降序排列;

SELECT?*? FROM?Student? ORDER?BY?Clno?ASC, Sage?DESC SnoSnameSsexSageClno
12000101李勇2000311
22000102劉詩晨1900311
32000104張婷婷2100312
42000103王一鳴2000312
52001102賈向東2201311
62001104張逸凡2101311
72001103陳寶玉2001311
82001101李勇敏1901311

(24)求每個課程號及相應(yīng)的選課人數(shù);

SELECT?Grade.Cno?課程號, COUNT(Grade.Cno)?選課人數(shù)?? FROM?Grade?JOIN?Course?ON?Grade.Cno=Course.Cno?GROUP?BY?Grade.Cno 課程號選課人數(shù)
114
223
332
443
552
663
771

(25)查詢選修了3門以上課程的學(xué)生學(xué)號;

SELECT?Sno?學(xué)號? FROM?Grade?GROUP?BY?Sno?HAVING?COUNT(Sno)>3? 學(xué)號
12000103

(26)將01311班的全體學(xué)生的成績置零;

UPDATE Grade SET Gmark=0 WHERE Sno in ( SELECT Sno FROM Student WHERE Clno='01311') SnoCnoGmark
12000101192.0
220001013NULL
32000101586.0
42000102178.0
52000102655.0
62000103365.0
72000103678.0
82000103566.0
92000104154.0
102000104683.0
11200110120.0
12200110140.0
13200110220.0
14200110240.0
152000103183.0
162000103276.0
172000103456.0
182000103788.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')) SnoCnoGmark
12000101192.0
220001013NULL
32000101586.0
42000102178.0
52000102655.0
62000103365.0
72000103678.0
82000103566.0
92000104154.0
102000104683.0
112000103183.0
122000103276.0
132000103456.0
142000103788.0

(28)學(xué)生李勇已退學(xué),從數(shù)據(jù)庫中刪除有關(guān)他的記錄;

DELETE FROM Grade WHERE Sno IN ( SELECT Sno FROM Student WHERE Sname='李勇') SnoCnoGmark
12000102178.0
22000102655.0
32000103365.0
42000103678.0
52000103566.0
62000104154.0
72000104683.0
82000103183.0
92000103276.0
102000103456.0
112000103788.0
UPDATE Class SET Number=Number-1 WHERE Clno IN ( SELECT Clno FROM Student WHERE Sname='李勇') ClnoSpecialityInyearNumberMonitor
100311計算機(jī)軟件20001192000101
200312計算機(jī)應(yīng)用20001402000103
301311計算機(jī)軟件20012202001103
UPDATE Class SET Monitor=CASE WHEN Monitor=( SELECT Sno FROM Student WHERE Sname='李勇') THEN '' END FROM Class WHERE Clno IN( SELECT Clno FROM Student WHERE Sname='李勇') ClnoSpecialityInyearNumberMonitor
100311計算機(jī)軟件2000119NULL
200312計算機(jī)應(yīng)用20001402000103
301311計算機(jī)軟件20012202001103
DELETE FROM Student WHERE Sname='李勇' SnoSnameSsexSageClno
12000102劉詩晨1900311
22000103王一鳴2000312
32000104張婷婷2100312
42001101李勇敏1901311
52001102賈向東2201311
62001103陳寶玉2001311
72001104張逸凡2101311

(29)對每個班,求學(xué)生的平均年齡,并把結(jié)果存入數(shù)據(jù)庫;

ALTER TABLE Class ADD Cage SMALLINT NULL ClnoSpecialityInyearNumberMonitorCage
100311計算機(jī)軟件2000119NULLNULL
200312計算機(jī)應(yīng)用20001402000103NULL
301311計算機(jī)軟件20012202001103NULL
UPDATE Class SET Cage=CASE WHEN Clno='00311' THEN ( SELECT AVG(Sage) FROM Student WHERE Clno='00311') WHEN Clno='00312' THEN ( SELECT AVG(Sage) FROM Student WHERE Clno='00312') WHEN Clno='01311' THEN ( SELECT AVG(Sage) FROM Student WHERE Clno='01311') END FROM Class ClnoSpecialityInyearNumberMonitorCage
100311計算機(jī)軟件2000119NULL19
200312計算機(jī)應(yīng)用2000140200010320
301311計算機(jī)軟件2001220200110320

(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'; SnoSnameSsexSageClno

(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'; SnoSnameSsexSageClno

(32)建立視圖Stu_year,由學(xué)生學(xué)號、姓名、出生年份組成;

CREATE VIEW Stu_year AS SELECT Sno AS '學(xué)號',Sname AS '姓名',(2014-Sage) AS '出生年份' FROM Student; 學(xué)號姓名出生年份
12000102劉詩晨1995
22000103王一鳴1994
32000104張婷婷1993
42001101李勇敏1995
52001102賈向東1992
62001103陳寶玉1994
72001104張逸凡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); 學(xué)號姓名出生年份

創(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。