1. 创建数据库teaching(包括course,score,teacher,class,teach_class表)。
- use master
- go
- if exists(select * from sysdatabases where name='teaching')
- drop database teaching
- create database teaching
- on (name =teaching,filename ='g:/SQL/teaching.mdf')
- log on(name=teaching_log,filename='g:/SQL/teaching_log.ldf')
a. 创建course表的结构:
- create table course(
- courseno nchar(6) not null,
- cname nchar(20) not null,
- type nchar(8) not null,
- period tinyint not null,
- credit numeric(4,1) not null,
- constraint PK_course primary key clustered
- (courseno ASC)
- )
- insert course values('c1111','电子技术','必修',74,4)
1). 查询student表中所有年龄大于20岁的男生的姓名和年龄。
- select sname as 姓名,year(getdate())-year(birthday) as 年龄
- from student
- select count(*)as 人数
- from score
- where final is not null and courseno in(select courseno from course where type='选修')
- select studentno as 学号,count(*) as 选修课程数目,sum(final) as 总成绩
- into 学生选课统计表
- from score
- groupby studentno
- select top 5 studentno as 学生学号,coursenoas 课程号,final as 期末成绩
- from score
- order by final DESC
- select courseno 课程号,count(*) 选修人数,avg(final) 期末平均分
- from score
- where courseno like'c05%'
- group by courseno
- having count(*)>=3 and avg(final)>75
- order by avg(final)desc
- select studentno 学生编号,courseno 课程号,final 期末成绩
- from score
- where'08'=substring(studentno,1,2)
- compute avg(final)
- update student set sex='女'where studentno='0922221326'
- delete from student
- where studentno='0922221324'
- ①为student表增加民族nation列,数据类型为varchar(10),允许为空。
- alter table student add nation varchar(10)
- ②修改student表中的nation列的数据类型为varchar(10)。
- alter table student alter column nation varchar(12)
- ③删除student中的列nation。
- alter table student drop column nation
- if object_id('v_age','view')is not null
- drop view v_age
- go
- create view v_age
- as
- select studentno,sname,sex,birthday,classno
- from student
- where year(getdate())-year(birthday)>=18
- drop view v_age
利用T-SQL语句在teaching数据库中teacher表的tname列上创建非聚集唯一索引UQ_tname。若该索引已经存在,则删除后重建。
- if exists(select name from sys.indexes where name='UQ_tname')
- drop index UQ_tname on teacher
- go
- create unique nonclustered index UQ_tnameon teacher(tname)
- drop index UQ_tnameon teacher
a. 使用游标输出学生姓名、选修课程名称和期末考试成绩。
- print'姓名 课程 期末成绩'
- declare @sname varchar(20),@cname varchar(20),@final varchar(20)
- declare stu_cursor cursor
- for
- select sname,cname,final
- from student a join score b on a.studentno=b.studentno join course c on
- b.courseno=c.courseno
- open stu_cursor
- fetch next from stu_cursor into @sname,@cname,@final
- while @@fetch_status=0
- begin
- print @sname+@cname+@final
- fetch next from stu_cursor into @sname,@cname,@final
- end
- close stu_cursor
- deallocate stu_cursor
- create proc ProcAvg
- @classno nchar(10),
- @cname nchar(20),
- @avg int output
- as
- select @avg=avg(final)
- from student a join score b on a.studentno=b.studentno join course c on b.courseno=c.courseno
- where a.classno=@classnoand c.cname=@cname
- declare @avg1 int
- exec ProcAvg '080601','机械制图', @avg1 output
- print @avg1
- create trigger trigclassname
- on class
- for insert,update
- as
- declare @classname1nchar(12)
- select @classname1=classname from inserted
- if exists(select classname from class
- where classname=@classname1 group by classname having count(*)>=2)
- begin
- raiserror('出现班级名称重复',16,1)
- rollback
- end
- else
- raiserror('成功!',16,2)
1). 定义一个事物,在teaching数据库的student表和score表中新增一名学生的基本信息记录和选课记录,并提交事物。
- begin transaction trans_insert
- insert into student values('0922221326','wyz2','男','1988-09-02','2','444','4','4');
- insert into score values('0922221326','c05104','11','11');
- commit tran trans_insert
- begin transaction
- update student set sex='女' where studentno='0922221326'
- save tran savepoint
- update score set final=88 where studentno='0922221326'
- rollback tran savepoint
- commit tran
- a.
- grant insert,delete on student to U1
- b.
- revoke select on student from U1 cascade
- c.
- deny select to U1
a.对teaching数据库进行备份,使用T-SQL语言创建一个名为“teachbak”的备份设备,该设备在硬盘中所对应的完整文件名为“D:\SQL\teaching.bak”。
- Exec sp_addump device'disk','teachbak','D:\SQL\teaching.bak'
- backup database teaching to teachbak
- backup database teaching to disk='D:\SQL\teaching.bak'
- restore database teaching from disk='D:\SQL\teaching.bak'with file=1