2020-03-03 16:41:57 来源:范文大全收藏下载本文
一、数据库创建
1、Create语句:用来创建新的数据库对象; Create database database name
2、alter语句:用来修饰已有对象的结构; Alter database database name
3、drop语句:用来删除已有的数据库对象;
4、insert语句:用来在数据表或视图中插入一行数据;
二、表与表数据操作
在表sxb中增加1个新列为奖学金等级,然后删除该列 USE psxcj go
alter table xsb
add 奖学金等级 tinyint NULL go
alter table xsb
drop column 奖学金等级 select *from kcb select *from xsb select *from cjb查询全体的学生的详细记录 Select * from Student 查询全体学生的姓名与学号 Select Sname Sno from Student 查询全体学生的姓名及其年龄
Select Sname,YEAR(getdate()-year(sbirthday)) as age
From Student
--单表查询
查询计算机系全体学生的信息 /*语句块*/
select * from xsb
where 专业='计算机'
--查询姓“张”的学生的学号和姓名 select 学号,姓名 from xsb where 姓名 like '张%'
--查询xsb中备注信息为空的学生信息 select * from xsb where 备注 isnull
--查询成绩在90分以上的学生信息 select distinct 学号 from cjb where 成绩>=90
--查询同时选修了课程101和102的学生记录 select 学号 from cjb
where 课程号='101' or 课程号='102' group by 学号 having count(*)=2
select * from cjb
select count(学号) 选修人数,课程号 from cjb
group by 课程号
--查询选修了两门以上的课程的学生学号和课程数 select 学号,count(课程号) as 选修门数 from cjb group by 学号
having count(*)>=2
--查询选修课程数大于或等于2的学生学号,平均成绩和选修课门数,并按平均成绩降序排序
select 学号,avg(成绩),count(*) as 选修门数 from cjb group by 学号 having count(*)>=2 order by avg(成绩) desc
--查询姓“张”的前两个学生的学号和姓名 Top 2
--多表查询
查询选修了(数据库原理)的计算机系的学生学号和姓名 Select 学号,姓名 from xsb,kcb,cjb
where xsb.学号=cjb.学号 and kcb.课程号=cjb.课程号 and 课程名='计算机基础' and 专业='计算机'--查询学生的学号、姓名、选修课程的名称和成绩 select xsb.学号, 姓名,课程名,成绩from xsb,cjb,kcb
where xsb.学号=cjb.学号and cjb.课程号=kcb.课程号 --查询选修了课程的学生姓名-- select *from kcb
select distinct 姓名 from xsb,cjb where xsb.学号=cjb.学号
--查询所有学生的信息和所选修的课程--
select xsb.*,[kcb.]课程名 from xsb left outer join cjb on xsb.学号=cjb.学号
left join kcb on cjb.课程号=kcb.课程号 --查询已被选修的课程的情况和所有课程的名字--
Select cjb*,课程名 from xsb left join cjb
On xsb.学号=cjb.学号
--查找计算机系的学生选修课程数大于2的学生的姓名、平均成绩和选课门数,并按平均成绩降序排列 select xsb.姓名,avg(成绩)as平均成绩,count(*)as 选课门数 from xsb,cjbwhere xsb.学号=cjb.学号and 专业='计算机'
group bycjb.学号,姓名 having count(*)>2 order byavg(成绩) desc
--嵌套查询和组合查询--
--1.统计选修了【数据库原理】课程的学生学生
select 课程号 from kcb where 课程名='数据库原理'
select count(*) fromcjbwhere 课程号 in
(select 课程号 from kcb where 课程名='数据库原理')
2.查询没有选修【数据库原理】课程的学生信息 select * from xsb where 学号 not in (select 学号 from cjb where 课程号 in
(select 课程号 from kcb where 课程名='数据库原理'))
3.查询其他系中比计算机系学生年龄都小的学生 select *from xsb
where 出生时间'计算机'
--4.查询被081101学生或081102学生所选修的课程的课程号(用UNION组合查询与IN条件查询两种方法实现)并集
select 课程号 from cjbwhere学号='081101' union
select 课程号 from cjbwhere学号='081102' --5.查询081101学生和081102学生同时选修的课程的课程号(用INTERSECT组合查询与EXISTS嵌套子查询两种方法实现)(自连接)
select 课程号 from cjbcjb1
where exists(select * from cjb cjb2
where cjb1.课程号=cjb2.课程号 and
cjb2.学号='081102') and 学号='081101'
select 课程号 from cjb where 学号='081101' intersect
select 课程号 from cjbwhere学号='081102' --6.查询被081101学生选修,但没有被081102学生所选修的课程的课程号(用EXCEPT组合查询与NOT EXISTS嵌套子查询两种方法实现)
select 课程号 from cjb where 学号='081101' except
select 课程号 from cjbwhere学号='081102'
create procedure proc_cjcxb
as
select xsb.学号,姓名,课程名,成绩 from xsb,kcb,cjb
where xsb.学号=cjb.学号 and cjb.课程号=kcb.课程号
--
7、查询选修了101课程的学生姓名 select 姓名
from xsb
where EXISTS (select *
from cjb
where xsb.学号=cjb.学号 and 课程号='101')
--存储过程
--创建查询
create procedure proc_cjcx as
select xsb.学号,姓名,课程名,成绩 from xsb,kcb,cjb
where xsb.学号=cjb.学号 and cjb.课程号=kcb.课程号
execute proc_cjcx alte修改查询r
--输入学好查询学生的学号,姓名,课程名,成绩 alter procedure proc_cjcx@xh char(6)='%' as
select xsb.学号,姓名,课程名,成绩 from xsb,kcb,cjb
where xsb.学号=cjb.学号 and cjb.课程号=kcb.课程号
andxsb.学号 like rtrim(@xh) execute proc_cjcx '081101'
--存储过程
select * from kcb
create proc proc_kcbinsert
@kch char (3),@kcm char(16),@kkxq tinyint,@xs tinyint,@xf tinyint as
insert into kcb
values(@kch,@kcm,@kkxq,@xs,@xf)
proc_kcbinsert '405','server程序设计',4,72,4 查找单科最高成绩
select xsb.学号,姓名,课程名,成绩
from xsb,cjb,kcb
where xsb.学号=cjb.学号 and kcb.课程号=cjb.课程号
and exists
(select *from cjb,
(select 课程号,max(成绩)as 最高分 from cjb
group by课程号)as tempwhere cjb.课程号=temp.课程号 and cjb.成绩=temp.最高分
)(相关子查询)
select xsb.学号,姓名,课程名,成绩
from xsb,cjb,kcb(select 课程号,max(成绩)as 最高分 from cjb group by课程号)as temp
where xsb.学号=cjb.学号 and kcb.课程号=cjb.课程号 and cjb.课程号=temp.课程号 and cjb.成绩=temp.最高分 触发器
Create trig trig_cheakgrods on cjb For update
As Declare @..........创建视图 创建学生平均成绩的视图
create view view_选修课平均成绩
as
(select xsb.学号,姓名,avg(成绩)as平均成绩 from cjb, xsb
where xsb.学号=cjb.学号group by xsb.学号,姓名)
需要查找该表的结果语句如下:
select * from view_选修课平均成绩
修改选修课平均成绩视图,显示所有学生的学号,姓名,平均成绩
alter view view_选修课平均成绩
as
(select xsb.学号,姓名,avg(成绩)as平均成绩 from xsb left join cjbon xsb.学号=cjb.学号
group by xsb.学号,姓名)
查询学生的姓名,性别,平均成绩
select xsb.学号,xsb.姓名,性别,平均成绩 from xsb, view_选修课平均成绩
where xsb.学号=view_选修课平均成绩.学号 更新选修课成绩表视图
update view_选修课平均成绩 set平均成绩=80 where 姓名='王林'
删除选修课平均成绩视图、
drop view view_选修课平均成绩 插入
insert into xsb(学号,姓名) values('100511','张四') --备份数据库
backup database Pxscj
to disk='E:\1\PxscjDiff.bak'with differential
insert into xsb(学号,姓名) values('100512','李四')
--备份数据库日志文件 backup log Pxscj
to disk='E:\1\Pxscjlog.bak'
use master
drop database Pxscj
use Pxscj
select * from xsb--用语句还原数据库 restore database Pxscj
from disk='E:\1\PxscjDiff.bak'
--还原第三次备份的数据库 restore database Pxscj from
disk='c:\Program
Files\Microsoft
Server\MSSQL.1\MSSQL\Backup\Pxscj.bak' with norecovery select * from xsb
--还原第三次备份的日志文件 restore log Pxscj
from disk='E:\1\Pxscjlog.bak' --差异备份
backup database Pxscj
to disk='E:\SQL-server\PxscjDiff.bak' with differential
insert xsb(学号,姓名) values('100512','王五')
backup log Pxscj
to disk='E:\SQL-server\Pxscjlog.bak'
--删除Pxscj use master
drop database Pxscj
SQL
人人范文网 m.inrrp.com.cn 手机版