分享

SQL Server 2008 交互式SQL语言实例练习

 打枪的不要 2016-08-26

数据库学习初步

数据定义

()、基本表操作

先建立school数据库,在school数据库里做以下的操作。

1.建立基本表

1)创建学生表Student,由以下属性组成: 学号SNOINT型,主码),姓名SNAMECHAR型,长度为8,非空唯一),性别SEXCHAR型,长度为2),所在系DEPTNOINT型)。

 

2)创建课程表Course,由以下属性组成:课程号CNOINT型),课程名CNAMECHAR型,长度为20,非空),授课教师编号TNOINT型),学分CREDITINT型)。其中(CNOTNO)为主码。

 

3)创建学生选课表SC,由以下属性组成:学号SNO,课程CNO,成绩GRADE。所有属性均为INT型,其中(SNOCNO)为主码。

 

4)创建教师表Teacher,由以下属性组成:教师编号TNOINT型,主码),教师姓名TNAMECHAR型,长度为8,非空),所在系DEPTNOINT型)。

 

5)创建系表Dept,由以下属性:系号DEPTNOINT型,主码),系名DNAMECHAR型,长度为20,非空)。

 

2.修改基本表

1)在Student表中加入属性SAGE(INT)

 

2)将Student表中的属性SAGE类型改为SMALLINT型。

 

3.删除基本表

1)在所有操作结束后删除STUDENT表。

 

2)在所有操作结束后删除COURSE表。

 

3)在所有操作结束后删除SC表。

 

4)在所有操作结束后删除TEACHER表。

 

5)在所有操作结束后删除DEPT表。

 

 

()、索引操作

1.建立索引

1)在Student表上建立关于SNO的唯一索引stusno

 

2)Course表上建立关于CNO升序的唯一索引coucno

 

2.删除索引

1)删除Student表上的索引stusno

 

2)删除Course表上的索引coucno

 

()、视图操作

1.建立视图

在插入数据的Student基本表上为计算机科学与技术系的学生记录建立一个视图CS_STUDENT

 

2.删除视图

在操作结束后删除视图CS_STUDENT

 

数据操作

()、更新操作

1.插入数据

1)向STUDENT表插入下列数据:

1001,张天,,10,20

1002,李兰,,10,21

1003,陈铭,,10,21

1004,刘茜,,20,21

1005,马朝阳,,20,22

 

2)向COURSE表插入下列数据:

1,数据结构,101,4

2,数据库,102,4

3,离散数学,103,4

4,C语言程序设计,101,2

 

3)向SC表插入下列数据:

1001,1,80

1001,2,85

1001,3,78

1002,1,78

1002,2,82

1002,3,86

1003,1,92

1003,3,90

1004,1,87

1004,4,90

1005,1,85

1005,4,92

 

4)向TEACHER表插入下列数据:

101,张星,10

102,李珊,10

103,赵天应,10

104,刘田, 20

 

5)向DEPT表插入下列数据:

10,计算机科学与技术

20,信息

 

2.修改数据

将张星老师数据结构课的学生成绩全部加2

3.删除数据

删除马朝阳同学的所有选课记录

 

()、查询操作

1.单表查询

1)查询所有学生的信息。

2)查询所有女生的姓名。

3)查询成绩在8089之间的所有学生选课记录,查询结果按成绩的降序排列。

4)查询各个系的学生人数。

 

2.连接查询

查询信息系年龄在21岁以下(含21岁)的女生姓名及其年龄。

 

3.嵌套查询

1)查询修课总学分在10学分以下的学生姓名。

2)查询各门课程取得最高成绩的学生姓名及其成绩。

3)查询选修了1001学生选修的全部课程的学生学号。

4)查询选修了张星老师开设的全部课程的学生姓名。

 

 

出现的问题及解决方案:

1.在创建基本表时是否可以缺省主码?

2.对基本表进行修改,执行ALTER TABLE Student MODIFY Sage SMALLINT显示执行失败。

 

 

 

自己做的答案:

(一)  基本表操作

建立基本表

1)     建立Student

命令行操作:

CREATE TABLE Student

( SNO INTNOTNULLPRIMARY KEY,

  SNAME CHAR(8)NOTNULL,

  SEX CHAR(2)NOTNULL,

  DEPTNO INT NOT NULL)

 

2)     建立Course

命令行操作:

CREATE TABLE Course

(

    CNO INT NOT NULL,

    CNAME CHAR(20)NOTNULL,

    TNO INT NOT NULL,

    CREDIT INT NOT NULL,

    PRIMARY KEY(CNO, TNO)

)

3)     建立SC

命令行操作:

CREATE TABLE SC

(

   SNO INT NOT NULL,

   CNO INT NOT NULL,

   GRAGE INT NOT NULL,

   PRIMARY KEY(SNO, CNO)

)

4)     建立Teacher

命令行操作:

CREATE TABLE Teacher

( TNO INTNOTNULL,

  TNAME CHAR(8)NOTNULLPRIMARY KEY,

  DEPTNO INT NOT NULL

)

5)     建立Depth

命令行操作:

 CREATETABLE Dept

(

  DEPTNO INT NOT NULL PRIMARYKEY,

  DNAME CHAR(20)NOTNULL

)

2.修改基本表

1)在Student表中加入属性SAGE(INT)

命令行操作:

ALTER TABLE Student ADD SAGEINT;

2)将Student表中的属性SAGE类型改为SMALLINT型。

     命令行操作:

         ALTERTABLEStudentalter column SAGESMALLINT;

 

 

3.删除基本表

1)在所有操作结束后删除STUDENT表。

命令行操作:

DROP TABLE Student;

2)在所有操作结束后删除COURSE表。

DROP TABLE Course;

3)在所有操作结束后删除SC表。

DROP TABLE SC;

4)在所有操作结束后删除TEACHER表。

DROP TABLETeacher;

5)在所有操作结束后删除DEPT表。

DROP TABLE Dept;

 

()、索引操作

1.建立索引

1)在Student表上建立关于SNO的唯一索引stusno

CREATE UNIQUEINDEXstusnoON Student(SNO);

2)Course表上建立关于CNO升序的唯一索引coucno

CREATE UNIQUE INDEX coucno ONCourse(CNO);

 

2.删除索引

1)删除Student表上的索引stusno

DROP INDEXStudent.stusno;

2)删除Course表上的索引coucno

DROP INDEX Course.coucno;

 

()、视图操作

1.建立视图

在插入数据的Student基本表上为计算机科学与技术系的学生记录建立一个视图CS_STUDENT

 

CREATE VIEWCS_STUDENT

  AS

  SELECT SNO,SNAME,SEX,DEPTNO,SAGE

  FROM Student

  WHERE DEPTNO=10

  WITH CHECK OPTION

2.删除视图

在操作结束后删除视图CS_STUDENT

 DROPVIEWCS_STUDENT;

 

二、数据操作

()、更新操作

1.插入数据

1)向STUDENT表插入下列数据:

1001,张天,,10,20

1002,李兰,,10,21

1003,陈铭,,10,21

1004,刘茜,,20,21

1005,马朝阳,,20,22

命令行操作:

INSERT INTOStudent

VALUES(1001,'张天','',10,20);

INSERT INTOStudent

VALUES(1002,'李兰','',10,21);

INSERT INTOStudent

VALUES(1003,'陈铭','',10,21);

INSERT INTOStudent

VALUES(1004,'刘茜','',20,21);

INSERT INTOStudent

VALUES(1005,'马朝阳','',20,22);

2)向COURSE表插入下列数据:

1,数据结构,101,4

2,数据库,102,4

3,离散数学,103,4

4,C 语言程序设计,101,2

命令行操作:

INSERT INTOCourse

VALUES(1,'数据结构',101,4);

INSERT INTOCourse

VALUES(2,'数据库',102,4);

INSERT INTOCourse

VALUES(3,'离散数学',103,4);

INSERT INTOCourse

VALUES(4,'C语言程序设计',101,2);

 

3)向SC表插入下列数据:

1001,1,80

1001,2,85

1001,3,78

1002,1,78

1002,2,82

1002,3,86

1003,1,92

1003,3,90

1004,1,87

1004,4,90

1005,1,85

1005,4,92

命令行操作:

INSERT INTOSC(SNO,CNO,GRAGE)

SELECT 1001,1,80union

SELECT 1001,2,85union

SELECT 1001,3,78union

SELECT 1002,1,78union

SELECT 1002,2,82union

SELECT 1002,3,86union

SELECT 1003,1,92union

SELECT 1003,3,90union

SELECT 1004,1,87union

SELECT 1004,4,90union

SELECT 1005,1,85union

SELECT 1005,4,92

4)向TEACHER表插入下列数据:

101,张星,10

102,李珊,10

103,赵天应,10

104,刘田, 20

命令行操作:

INSERT INTOTeacher(TNO,TNAME,DEPTNO)

SELECT 101,'张星',10union

SELECT 102,'李珊',10union

SELECT 103,'赵天应',10union

SELECT 104,'刘田', 20

 

5)向DEPT表插入下列数据:

10,计算机科学与技术

20,信息

命令行操作:

INSERT INTODept(DEPTNO,DNAME)

SELECT 10,'计算机科学与技术'union

SELECT 20,'信息'

 

2.修改数据

将张星老师数据结构课的学生成绩全部加2

UPDATE SC

SET GRAGE=GRAGE + 2

WHERE CNOIN

      (SELECTCNO

       FROMCourse

       WHERECNAME='数据结构'andcnoin

       (SELECTcno

        FROM Teacher

        WHERE TNAME='张星')

        )

3.删除数据

删除马朝阳同学的所有选课记录

DELETE

FROM SC

WHERE SNO =1005

()、查询操作

1.单表查询

1)查询所有学生的信息。

SELECT SNO,SNAME,SEX,DEPTNO,SAGE

FROM Student;

 

2)查询所有女生的姓名。

SELECT SNAME

FROM Student

WHERE SEXIN('');

 

3)查询成绩在8089之间的所有学生选课记录,查询结果按成绩的降序排列。

SELECT CNO

FROM SC

WHERE GRAGE BETWEEN 80 AND 89;

4)查询各个系的学生人数。

SELECT DISTINCTDEPTNO

FROM Dept;

2.连接查询

查询信息系年龄在21岁以下(含21岁)的女生姓名及其年龄。

SELECT SNAME,SAGE

FROM Student,Dept

WHERE DNAME = '信息'ANDSAGE<> 21 AND SEX= '';

3.嵌套查询

1)查询修课总学分在10学分以下的学生姓名。

SELECT SNAME

FROM Student,Course

WHERE CREDIT 10;

2)查询各门课程取得最高成绩的学生姓名及其成绩。

SELECT SNAME,GRAGE,

FROM Student,SC

WHERE Student.SNO=SC.SNOANDGRAGEIN

       (SELECTMAX(GRAGE)

        FROM SC

        GROUP BYCNO);

3)查询选修了1001学生选修的全部课程的学生学号。

 

SELECT DISTINCTSNO

FROM SCSCX

WHERE SNO!= 1001 AND NOT EXISTS

    (SELECT*

    FROM SCSCY

    WHERE SCY.SNO = 1001 AND

       NOT EXISTS

       (SELECT*

       FROM SCSCZ

       WHERE SCZ.SNO = SCX.SNOAND

             SCZ.CNO= SCY.CNO))

4)查询选修了张星老师开设的全部课程的学生姓名。

 

SELECT SNAME

FROM Student

WHERE SNOIN

    (SELECTSNO

     FROMSC

     WHERECNOIN

       (SELECTCNO

        FROM Course

        WHERE TNO IN

           (SELECTTNO

           FROM Teacher

           WHERE TNAME='张星')

           )

       )

 

出现的问题及解决方案:

1.在创建基本表时是否可以缺省主码?

解:可以

2.对基本表进行修改,执行ALTER TABLE Student MODIFY Sage SMALLINT显示执行失败。

解:将MODIFY更改为alter column就可以解决。

 

 

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多