SQL复习提要

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

大学语文复习提要

儿童文学复习提要

《邓小平理论》复习提要

自然辩证法_复习提要

高等数学复习提要

中国国防复习提要

军事理论复习提要

《工程力学》期末复习提要

七下语文复习提要

通信技术复习提要

《SQL复习提要.doc》
SQL复习提要
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文