目录
一、实验原理
(一)视图操作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