目录

一、实验原理

(一)视图操作SQL语句基本格式

1.创建视图

2.删除视图

(二)索引操作SQL语句基本格式

1.创建索引

2.修改索引

3.删除索引

(三)数据表记录操作SQL语句基本格式

1.SELECT语句一般格式

2.使用索引检索数据

二、实验结果

(一)数据表数据的查询

1.单表查询

(二)视图的操作

1.定义视图

一、实验原理

(一)视图操作SQL语句基本格式

1.创建视图

CREATE  VIEW  <视图名>  [(<列名>  [,<列名>]…)]

AS  <子查询>

[WITH  CHECK  OPTION];

说明:需要指定视图列名的情形

(1) 某个目标列是聚集函数或列表达式

(2) 多表连接时选出了几个同名列

(3) 需要在视图中为某个列启用新的更合适的名字

2.删除视图

DROP  VIEW  <视图名>[CASCADE];

(二)索引操作SQL语句基本格式

1.创建索引

CREATE [UNIQUE] [CLUSTER] INDEX <索引名>

ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);

说明

(1)<次序>:指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC

(2)UNIQUE:此索引的每一个索引值只对应唯一的数据记录;CLUSTER:表示要建立的索引是聚簇索引

2.修改索引

ALTER INDEX <旧索引名> RENAME TO <新索引名>

3.删除索引

DROP INDEX <索引名>;

删除索引时,系统会从数据字典中删去有关该索引的描述。

(三)数据表记录操作SQL语句基本格式

1.SELECT语句一般格式

SELECT [ALL|DISTINCT] <目标列表达式> [别名] [ ,<目标列表达式> [别名]] …

 FROM     <表名或视图名> [别名]

                [ ,<表名或视图名> [别名]] …

                |(<SELECT语句>)[AS]<别名>

 [WHERE <条件表达式>]

 [GROUP BY <列名1>[HAVING<条件表达式>]]

 [ORDER BY <列名2> [ASC|DESC]];

2.使用索引检索数据

SELECT……FROM……WITH (INDEX=索引名称) WHERE……

二、实验结果

(实验前请准备好各数据表实验所需数据)你所建的表的名字和学号一定要前后一致。

(一)数据表数据的查询

1.单表查询

(1)设定条件,查询Student表中自己的信息。

SELECT *

FROM Student

WHERE Sname='你的名字';

(2)按照成绩降序查看SC表信息

SELECT*

FROM SC

ORDER BY grade DESC;

(3)统计每门课程的选课人数,查询选课人数大于3的课程编号和相应选课人数。

select cno,COUNT(*)

from sc

group by cno

having COUNT(*)>3

(4)按照平均分降序查询每门课程的选课人数、最高分、最低分、总分、平均分,并用别名显示查询结果。

SELECT COUNT(*)选课人数,MAX(grade)最高分,MIN(grade)最低分,sum(grade)总分,AVG(grade)平均分

from sc

group by cno

order by AVG(grade) desc

2.连接查询

(1)查看自己的所有考试成绩,要求查询结果包含姓名、课程名称、成绩信息。

select sname,Cname,grade

from student,course,sc

where Student.Sno=Sc.Sno and Course.Cno=SC.Cno and sc.Sno='你的学号'

(2)查询1号课程成绩小于2号课程成绩的学生姓名、相应的1号课程和2号课程成绩,成绩通过别名显示为:1号课成绩、2号课成绩

select sname,a.grade 一号成绩,b.grade 二号成绩

from sc a,sc b,student

where a.sno=b.sno and a.sno=student.sno and a.cno='1'and b.cno='2' and a.grade>b.grade;

3.嵌套查询:查询2号课程成绩高于自己的学生信息。

select *

from Student

where Sno

in

(

select sno

from SC 

where Cno='2' and grade

>

(select grade

from SC 

where Sno='你的学号'and Cno=2)

)

4.集合查询:查询平均成绩大于85且已完成所有选课任务的学生信息。(假设所有课程在SC表均有记录)

select *
from student
where sno in (
select sno
from sc
group by sno
having AVG(grade)>=85)
intersect
select *
from student
where sno in(
select sno
from sc
group by sno
having COUNT(*) =
(
select count(distinct cno)
from sc
)
)

(二)视图的操作

1.定义视图

(1)将查询Student表所有信息作为子查询创建视图,视图名为“VIEW_姓氏首字母”

create VIEW 你的姓氏_Student

AS

select *

from Student;

(2)将上文的集合查询作为子查询创建视图,要求视图名称为“VIEW_YX”

create VIEW YX

AS

select *

from 你的姓氏_Student;

2.查询,查询所创建视图中姓“李”的学生信息。

Select *

From YX 

where Sdept='YX' and Sname LIKE '李%';

3.更新,通过(1)中所定义视图,更新Student表信息,添加一名学生信息。

insert

into  你的姓氏_Student(sno,sname,ssex,sage,sdept)

values('12845678910','王利明','男',20,'IS');

(三)数据表索引操作

1.建立,为每张数据表建立索引,要求至少有一个索引名称为“INDEX_姓名首字母大写”

create unique index 你的姓名大写首字母_StuSno on Student(Sno);

create unique index CouCno on Course(Cno);

create unique index SCno on SC(Sno asc,Cno desc);

2.打开,使用带有自己姓名的索引查询数据

select *

    from 你的姓名大写首字母_StuSno where Sno ='你的学号';

3.更新,修改带有自己姓名的索引名称为“INDEX_XSGL”*

alter index 你的姓名大写首字母_StuSno RENAME TO XSGL

4.删除,删除其他两个索引

DROP INDEX CouCno on course;

DROP INDEX SCno on sc