2023年6月21日发(作者:)

例如1] 定义一学生-课程模式

CREATE SCHEMA “S-T” AUTHORIZATION WANC

[例5] 建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号为主码,并且姓名取值也唯一。

CREATE TABLE Student

(Sno CHAR(9) PRIMARY KEY,

Sname CHAR(20) UNIQUE,

Ssex CHAR(2) ,

Sage SMALLINT,

Sdept CHAR(20)

);

[例6] 建立一个“课程”表Course。

CREATE TABLE Course

(Cno CHAR(4) PRIMARY KEY ,

Cname CHAR(40),

Cpno CHAR(4),

Ccredit SMALLINT,

FOREIGN KEY (Cpno) REFERENCES Course(Cno)

);

[例7] 建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno, 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)

);

[例8] 向Student表增加“入学时间”列,其数据类型为日期型。

ALTER TABLE Student ADD Scome DATE;

[例9] 将年龄的数据类型改为整数。

ALTER TABLE Student MODIFY Sage SMALLINT;

[例10] 删除学生姓名必须取唯一值的约束。

ALTER TABLE Student DROPUNIQUE(Sname);

例11] 删除Student表

DROP TABLE Student ;

[例14] 为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。

CREATE UNIQUE INDEX Stusno ON Student(Sno);

CREATE UNIQUE INDEX Coucno ON Course(Cno);

CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC); [例15] 删除Student表的Stusname索引。

DROP INDEX Stusname;

[例1] 查询全体学生的学号与姓名。

SELECT Sno,Sname FROM Student;

[例2] 查询全体学生的姓名、学号、所在系。

SELECT Sname,Sno,Sdept FROM Student;

[例3] 查询全体学生的详细记录。

SELECT Sno,Sname,Ssex,Sage,Sdept

FROM Student;

例4] 查全体学生的姓名及其出生年份。

SELECT Sname,2006-Sage FROM Student;

[例5] 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。

SELECT Sname,'Year of Birth: ',2006-Sage,

ISLOWER(Sdept)

FROM Student;

[例6] 查询选修了课程的学生学号。

(1) SELECT Sno

FROM SC;

例10] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage BETWEEN 20 AND 23;

[例11] 查询年龄不在20~23岁之间的学生姓名、系别和年龄。

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage NOT BETWEEN 20 AND 23;

例12]查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。

SELECT Sname,Ssex

FROM Student

WHERE Sdept IN ( 'IS','MA','CS' );

例13]查询既不是信息系、数学系,也不是计算 机科学系的学生的姓名和性别。

SELECT Sname,Ssex

FROM Student

WHERE Sdept NOT IN ( 'IS','MA','CS' );

例14] 查询学号为200215121的学生的详细情况。

SELECT *

FROM Student

WHERE Sno LIKE ' 200215121 ';

例15] 查询所有姓刘学生的姓名、学号和性别。

SELECT Sname,Sno,Ssex

FROM Student

WHERE Sname LIKE „刘%‟;

[例16] 查询姓"欧阳"且全名为三个汉字的学生的姓名。

SELECT Sname

FROM Student

WHERE Sname LIKE „欧阳__‟;

例17] 查询名字中第2个字为"阳"字的学生的姓名和学号。

SELECT Sname,Sno

FROM Student

WHERE Sname LIKE '__阳%';

例18] 查询所有不姓刘的学生姓名。

SELECT Sname,Sno,Ssex

FROM Student

WHERE Sname NOT LIKE „刘%‟;

[例19] 查询DB_Design课程的课程号和学分。

SELECT Cno,Ccredit

FROM Course

WHERE Cname LIKE 'DB_Design' ESCAPE '„;

[例20] 查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。

SELECT *

FROM Course

WHERE Cname LIKE 'DB_%i_ _' ESCAPE ' ';

例21] 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。

SELECT Sno,Cno FROM SC

WHERE Grade IS NULL;

[例22] 查所有有成绩的学生学号和课程号。

SELECT Sno,Cno FROM SC

WHERE Grade IS NOT NULL;

[例23] 查询计算机系年龄在20岁以下的学生姓名。

SELECT Sname

FROM Student

WHERE Sdept= 'CS' AND Sage<20;

例24] 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。

SELECT Sno,Grade

FROM SC

WHERE Cno= ' 3 '

ORDER BY Grade DESC;

例26] 查询学生总人数。

SELECT COUNT(*)

FROM Student;

[例27] 查询选修了课程的学生人数。

SELECT COUNT(DISTINCT Sno)

FROM SC;

例28] 计算1号课程的学生平均成绩。

SELECT AVG(Grade)

FROM SC

WHERE Cno= ' 1 ';

[例29] 查询选修1号课程的学生最高分数。

SELECT MAX(Grade)

FROM SC

WHER Cno= ' 1 ';

30] 查询学生200215012选修课程的总学分数。

SELECT SUM(Gcredit)

FROM SC,Course

WHER Sno= ' 200215012 ' AND =;

例32] 查询选修了3门以上课程的学生学号。

SELECT Sno

FROM SC

GROUP BY Sno

HAVING COUNT(*) >3;

例33] 查询每个学生及其选修课程的情况。

SELECT Student.*,SC.*

FROM Student,SC

WHERE = ;

[例35] 查询每一门课的间接先修课(即先修课的先修课)

SELECT ,

FROM Course FIRST,Course SECOND

WHERE = ;

[例 36] 查询每个学生及其选修课程的情况包括没有选修课程的学生----用外连接操作

SELECT ,Sname,Ssex, Sage,Sdept,Cno,Grade

FROM Student LEFT OUT JOIN SC ON (=);

[例37]查询选修2号课程且成绩在90分以上的所有学生的学号、姓名

SELECT ,

FROM Student, SC

WHERE = AND /* 连接谓词*/

= „ 2 ‟ AND /* 其他限定条件 */

> 90;

例38] 查询每个学生的学号、姓名、选修的课程名及成绩。

SELECT ,Sname,Cname,Grade

FROM Student,SC,Course

WHERE =

and = ;

例39] 查询与“刘晨”在同一个系学习的学生。

SELECT Sno,Sname,Sdept

FROM Student S1

WHERE IN

(SELECT Sdept

FROM Student S2

WHERE = „ 刘晨 ‟);

例40]查询选修了课程名为“信息系统”的学生学号和姓名

SELECT Sno,Sname ③ 最后在Student关系中

FROM Student 取出Sno和Sname

WHERE Sno IN

(SELECT Sno ② 然后在SC关系中找出选

FROM SC 修了3号课程的学生学号

WHERE Cno IN

(SELECT Cno ① 首先在Course关系中找出“信

FROM Course 息系统”的课程号,结果为3号

WHERE Cname= „信息系统‟));

[例41]找出每个学生超过他选修课程平均成绩的课程号。

SELECT Sno,Cno

FROM SC x

WHERE Grade>=( SELECT AVG(Grade)

FROM SC y

WHERE = );

[例1] 将一个新学生记录:(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。

INSERT

INTO Student

VALUES (' 200215128 ','陈冬','男','IS',18);

[例2] 将学生张成民的信息插入Student表中。

INSERT

INTO Student

VALUES („ 200215126 ‟,„张成民','男',18,„CS');

[例3] 插入一条选课记录( „200215128','1 ')。

INSERT

INTO SC(Sno,Cno)

VALUES (' 95020 ',' 1 ');

例5] 将学生200215121的年龄改为22岁。

UPDATE Student

SET Sage=22

WHERE Sno=' 200215121 ';

例6] 将所有学生的年龄增加1岁。

UPDATE Student

SET Sage= Sage+1;

例7] 将计算机科学系全体学生的成绩置零。

UPDATE SC

SET Grade=0

WHERE 'CS'=

(SELETE Sdept

FROM Student

WHERE = );

[例8] 删除学号为20021528的学生记录

DELETE

FROM Student

WHERE Sno=„200215128';

例9] 删除所有的学生选课记录。

DELETE

FROM SC;

[例9`] 删除2号课程的所有选课记录。

DELETE

FROM SC;

WHERE Cno='2';

[例10] 删除计算机科学系所有学生的选课记录。

DELETE

FROM SC

WHERE 'CS'=

(SELETE Sdept

FROM Student

WHERE =);

例1] 建立信息系学生的视图。

CREATE VIEW IS_Student

AS

SELECT Sno,Sname,Sage

FROM Student

WHERE Sdept= 'IS';

例2] 建立信息系学生的视图,并要求透过该视图进行的更新操作只涉及信息系学生。

CREATE VIEW IS_Student

AS

SELECT Sno,Sname,Sage

FROM Student

WHERE Sdept= 'IS'

WITH CHECK OPTION;

例3] 建立信息系选修了1号课程的学生视图。

CREATE VIEW IS_S1(Sno,Sname,Grade)

AS

SELECT ,Sname,Grade

FROM Student,SC

WHERE Sdept= 'IS' AND

= AND

= '1';

[例4] 建立信息系选修了1号课程且成绩在90分以上的学生的视图。

CREATE VIEW IS_S2

AS

SELECT Sno,Sname,Grade

FROM IS_S1

WHERE Grade>=90;

例5] 定义一个反映学生出生年份的视图。

CREATE VIEW BT_S (Sno,Sname,Sbirth)

AS

SELECT Sno,Sname,2004-Sage

FROM Student;

6] 将学生的学号及他的平均成绩定义为一个视图。假设SC表中“成绩”列Grade为数字型。

CREAT VIEW S_G (Sno,Gavg)

AS

SELECT Sno,AVG(Grade)

FROM SC

GROUP BY Sno;

[例 7 ]将Student表中所有女生记录定义为一个视图。

CREATE VIEW

F_Student1(stdnum,name,sex,age,dept)

AS SELECT *

FROM Student

WHERE Ssex='女';

2023年6月21日发(作者:)

例如1] 定义一学生-课程模式

CREATE SCHEMA “S-T” AUTHORIZATION WANC

[例5] 建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号为主码,并且姓名取值也唯一。

CREATE TABLE Student

(Sno CHAR(9) PRIMARY KEY,

Sname CHAR(20) UNIQUE,

Ssex CHAR(2) ,

Sage SMALLINT,

Sdept CHAR(20)

);

[例6] 建立一个“课程”表Course。

CREATE TABLE Course

(Cno CHAR(4) PRIMARY KEY ,

Cname CHAR(40),

Cpno CHAR(4),

Ccredit SMALLINT,

FOREIGN KEY (Cpno) REFERENCES Course(Cno)

);

[例7] 建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno, 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)

);

[例8] 向Student表增加“入学时间”列,其数据类型为日期型。

ALTER TABLE Student ADD Scome DATE;

[例9] 将年龄的数据类型改为整数。

ALTER TABLE Student MODIFY Sage SMALLINT;

[例10] 删除学生姓名必须取唯一值的约束。

ALTER TABLE Student DROPUNIQUE(Sname);

例11] 删除Student表

DROP TABLE Student ;

[例14] 为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。

CREATE UNIQUE INDEX Stusno ON Student(Sno);

CREATE UNIQUE INDEX Coucno ON Course(Cno);

CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC); [例15] 删除Student表的Stusname索引。

DROP INDEX Stusname;

[例1] 查询全体学生的学号与姓名。

SELECT Sno,Sname FROM Student;

[例2] 查询全体学生的姓名、学号、所在系。

SELECT Sname,Sno,Sdept FROM Student;

[例3] 查询全体学生的详细记录。

SELECT Sno,Sname,Ssex,Sage,Sdept

FROM Student;

例4] 查全体学生的姓名及其出生年份。

SELECT Sname,2006-Sage FROM Student;

[例5] 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。

SELECT Sname,'Year of Birth: ',2006-Sage,

ISLOWER(Sdept)

FROM Student;

[例6] 查询选修了课程的学生学号。

(1) SELECT Sno

FROM SC;

例10] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage BETWEEN 20 AND 23;

[例11] 查询年龄不在20~23岁之间的学生姓名、系别和年龄。

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage NOT BETWEEN 20 AND 23;

例12]查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。

SELECT Sname,Ssex

FROM Student

WHERE Sdept IN ( 'IS','MA','CS' );

例13]查询既不是信息系、数学系,也不是计算 机科学系的学生的姓名和性别。

SELECT Sname,Ssex

FROM Student

WHERE Sdept NOT IN ( 'IS','MA','CS' );

例14] 查询学号为200215121的学生的详细情况。

SELECT *

FROM Student

WHERE Sno LIKE ' 200215121 ';

例15] 查询所有姓刘学生的姓名、学号和性别。

SELECT Sname,Sno,Ssex

FROM Student

WHERE Sname LIKE „刘%‟;

[例16] 查询姓"欧阳"且全名为三个汉字的学生的姓名。

SELECT Sname

FROM Student

WHERE Sname LIKE „欧阳__‟;

例17] 查询名字中第2个字为"阳"字的学生的姓名和学号。

SELECT Sname,Sno

FROM Student

WHERE Sname LIKE '__阳%';

例18] 查询所有不姓刘的学生姓名。

SELECT Sname,Sno,Ssex

FROM Student

WHERE Sname NOT LIKE „刘%‟;

[例19] 查询DB_Design课程的课程号和学分。

SELECT Cno,Ccredit

FROM Course

WHERE Cname LIKE 'DB_Design' ESCAPE '„;

[例20] 查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。

SELECT *

FROM Course

WHERE Cname LIKE 'DB_%i_ _' ESCAPE ' ';

例21] 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。

SELECT Sno,Cno FROM SC

WHERE Grade IS NULL;

[例22] 查所有有成绩的学生学号和课程号。

SELECT Sno,Cno FROM SC

WHERE Grade IS NOT NULL;

[例23] 查询计算机系年龄在20岁以下的学生姓名。

SELECT Sname

FROM Student

WHERE Sdept= 'CS' AND Sage<20;

例24] 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。

SELECT Sno,Grade

FROM SC

WHERE Cno= ' 3 '

ORDER BY Grade DESC;

例26] 查询学生总人数。

SELECT COUNT(*)

FROM Student;

[例27] 查询选修了课程的学生人数。

SELECT COUNT(DISTINCT Sno)

FROM SC;

例28] 计算1号课程的学生平均成绩。

SELECT AVG(Grade)

FROM SC

WHERE Cno= ' 1 ';

[例29] 查询选修1号课程的学生最高分数。

SELECT MAX(Grade)

FROM SC

WHER Cno= ' 1 ';

30] 查询学生200215012选修课程的总学分数。

SELECT SUM(Gcredit)

FROM SC,Course

WHER Sno= ' 200215012 ' AND =;

例32] 查询选修了3门以上课程的学生学号。

SELECT Sno

FROM SC

GROUP BY Sno

HAVING COUNT(*) >3;

例33] 查询每个学生及其选修课程的情况。

SELECT Student.*,SC.*

FROM Student,SC

WHERE = ;

[例35] 查询每一门课的间接先修课(即先修课的先修课)

SELECT ,

FROM Course FIRST,Course SECOND

WHERE = ;

[例 36] 查询每个学生及其选修课程的情况包括没有选修课程的学生----用外连接操作

SELECT ,Sname,Ssex, Sage,Sdept,Cno,Grade

FROM Student LEFT OUT JOIN SC ON (=);

[例37]查询选修2号课程且成绩在90分以上的所有学生的学号、姓名

SELECT ,

FROM Student, SC

WHERE = AND /* 连接谓词*/

= „ 2 ‟ AND /* 其他限定条件 */

> 90;

例38] 查询每个学生的学号、姓名、选修的课程名及成绩。

SELECT ,Sname,Cname,Grade

FROM Student,SC,Course

WHERE =

and = ;

例39] 查询与“刘晨”在同一个系学习的学生。

SELECT Sno,Sname,Sdept

FROM Student S1

WHERE IN

(SELECT Sdept

FROM Student S2

WHERE = „ 刘晨 ‟);

例40]查询选修了课程名为“信息系统”的学生学号和姓名

SELECT Sno,Sname ③ 最后在Student关系中

FROM Student 取出Sno和Sname

WHERE Sno IN

(SELECT Sno ② 然后在SC关系中找出选

FROM SC 修了3号课程的学生学号

WHERE Cno IN

(SELECT Cno ① 首先在Course关系中找出“信

FROM Course 息系统”的课程号,结果为3号

WHERE Cname= „信息系统‟));

[例41]找出每个学生超过他选修课程平均成绩的课程号。

SELECT Sno,Cno

FROM SC x

WHERE Grade>=( SELECT AVG(Grade)

FROM SC y

WHERE = );

[例1] 将一个新学生记录:(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。

INSERT

INTO Student

VALUES (' 200215128 ','陈冬','男','IS',18);

[例2] 将学生张成民的信息插入Student表中。

INSERT

INTO Student

VALUES („ 200215126 ‟,„张成民','男',18,„CS');

[例3] 插入一条选课记录( „200215128','1 ')。

INSERT

INTO SC(Sno,Cno)

VALUES (' 95020 ',' 1 ');

例5] 将学生200215121的年龄改为22岁。

UPDATE Student

SET Sage=22

WHERE Sno=' 200215121 ';

例6] 将所有学生的年龄增加1岁。

UPDATE Student

SET Sage= Sage+1;

例7] 将计算机科学系全体学生的成绩置零。

UPDATE SC

SET Grade=0

WHERE 'CS'=

(SELETE Sdept

FROM Student

WHERE = );

[例8] 删除学号为20021528的学生记录

DELETE

FROM Student

WHERE Sno=„200215128';

例9] 删除所有的学生选课记录。

DELETE

FROM SC;

[例9`] 删除2号课程的所有选课记录。

DELETE

FROM SC;

WHERE Cno='2';

[例10] 删除计算机科学系所有学生的选课记录。

DELETE

FROM SC

WHERE 'CS'=

(SELETE Sdept

FROM Student

WHERE =);

例1] 建立信息系学生的视图。

CREATE VIEW IS_Student

AS

SELECT Sno,Sname,Sage

FROM Student

WHERE Sdept= 'IS';

例2] 建立信息系学生的视图,并要求透过该视图进行的更新操作只涉及信息系学生。

CREATE VIEW IS_Student

AS

SELECT Sno,Sname,Sage

FROM Student

WHERE Sdept= 'IS'

WITH CHECK OPTION;

例3] 建立信息系选修了1号课程的学生视图。

CREATE VIEW IS_S1(Sno,Sname,Grade)

AS

SELECT ,Sname,Grade

FROM Student,SC

WHERE Sdept= 'IS' AND

= AND

= '1';

[例4] 建立信息系选修了1号课程且成绩在90分以上的学生的视图。

CREATE VIEW IS_S2

AS

SELECT Sno,Sname,Grade

FROM IS_S1

WHERE Grade>=90;

例5] 定义一个反映学生出生年份的视图。

CREATE VIEW BT_S (Sno,Sname,Sbirth)

AS

SELECT Sno,Sname,2004-Sage

FROM Student;

6] 将学生的学号及他的平均成绩定义为一个视图。假设SC表中“成绩”列Grade为数字型。

CREAT VIEW S_G (Sno,Gavg)

AS

SELECT Sno,AVG(Grade)

FROM SC

GROUP BY Sno;

[例 7 ]将Student表中所有女生记录定义为一个视图。

CREATE VIEW

F_Student1(stdnum,name,sex,age,dept)

AS SELECT *

FROM Student

WHERE Ssex='女';