drop database DBS create database DBS use DBS create table 院系表 (YXBH CHAR(8) PRIMARY KEY CLUSTERED,--院系编号 YXMC CHAR(20) NOT NULL,--院系名称 YXZR CHAR(8) --院系主任 ) create table 教师表 ( jsh char(5) constraint pk_jsh primary key, jsm char(20) ) create table 课程表 ( kch char(3) constraint pk_kch primary key, kcm char(20) ) go create table 教师表 ( jsh char(5) constraint pk_jsh primary key, jsm char(20) ) create table 成绩表 ( xh char(7) references 学生表,--学号 kch char(3) references 课程表,--课程号 cj int default 0 check (cj >= 0and cj <= 100),--成绩 jsh char(5) references 教师表--教师号 constraint pk_cj primary key(xh,kch)--主码 ) CREATE TABLE 学生表 ( XH CHAR(7) CONSTRAINT PK_XH PRIMARY KEY NONCLUSTERED,--学号 XM CHAR(20) NOT NULL,--姓名 sfz char(18) unique nonclustered,--身份证 yxbh char(8) references 院系表 --院系编号,外码 ) drop table 学生表 insert into 学生表 values('0301001','李永年','350500198305214026','001') insert into 学生表 values('0301002','张丽珍','350500198512017017','001') insert into 学生表 values('0302001','陈俊雄','320300198503213042','001') insert into 学生表 values('0302002','李军','210200198409112402','001') insert into 学生表 values('0302003','王任芳','502400198401223341','001') insert into 学生表 values('0303001','赵雄伟','401200198312111123','001') select * from 学生表 select top 4 * from 学生表 select top 50 percent * from 学生表 order by xm select distinct(kch) as kch from 学生表 insert into 教师表 values('01002','王崇阳') insert into 教师表 values('01001','李穆') insert into 教师表 values('02001','吴赛') insert into 教师表 values('02002','冯远客') insert into 教师表 values('03001','李莉') insert into 教师表 values('03002','简方') insert into 教师表 values('01003','刘高') insert into 课程表 values('001','高等数学') insert into 课程表 values('002','计算机基础') insert into 课程表 values('003','网络基础') insert into 课程表 values('005','大学英语') insert into 院系表 values('001','计算机','冯远客') insert into 院系表 values('002','经管','简方') insert into 院系表 values('003','数学','黄梅') insert into 成绩表 values('0301001','001','89','01001') insert into 成绩表 values('0301002','001','78','01002') insert into 成绩表 values('0302001','002','85','02001') insert into 成绩表 values('0301001','005','69','02002') insert into 成绩表 values('0302001','001','56','01002') insert into 成绩表 values('0302002','001','93','02001') insert into 成绩表 values('0302003','001','67','01003') use DBS create login teacher with password='123',default_database=DBS create user teacher1 for login teacher exec sp_change_users_login 'update_one','teacher1','teacher';--建立登录账号与数据库用户之间的关系 exec sp_addlogin 'student','0000','DBS', sp_addlogin loginname,password,database --"创建用户" grant all on 管理系统 to student with grant option--用存储过程创建账号 revoke insert on 学生表 from student revoke all on 学生表 from public deny create database ,create table to student --5-72 declare @var1 varchar(7) --声明局部变量 select @var1='学生姓名' --为局部变量赋初始值 select @var1=xm --查询结果赋值给变量 from 学生表 where xh='0302001' select @var1 as '学生姓名' --显示局部变量结果 --5-73 declare @var1 varchar(8) select @var1='学生姓名' select @var1=xm --查询结果赋值,返回的是整个列的全部值,但最后一个给变量 from 学生表 select @var1 as '学生姓名'--显示局部变量的结果 --5-74 declare @no varchar(10) set @no='0302001'--变量赋值 select xh,xm from学生表 where xh=@no --5-75 select @@version select @@servername --本地服务器名 --5-76 select xh,cj,from 成绩表 where cj=(select max(cj) from 成绩表) --5-77 declare @StringTest char(10) SET @StringTest='Robin' select substring(@StringTest,3,Len(@StringTest)) --5-78 declare @StringTest char(10) set @StringTest=ascii('Robin ') select @StringTest --5-79 declare @StringTest char(10) set @StringTest=ascii('Robin ') select char(@StringTest) --5-80 create procedure checks_kch @param int as if(select count(kch) from 成绩表 where kch=@param)>0 return 1 else return 2 declare @param int exec @param=check_kch '001' print @param --5-81 --如果课程中有计算机课程,统计其数量,否则显示没有计算机课程 if exists(select * from 课程表 where kcm like '计算机%') select count(*) as 计算机课程数量 from 课程表 where kcm like '计算机%' else print'数据库中没有计算机课程' --5-82 if exists(select * from 课程表 where kcm='高等数学') select cpunt(*) as 选修高等数学人数 from 成绩表,课程表 where kcm='高等数学' and 成绩表.kch=课程表.kch else if exists(select*from课程表 where kcm='编译原理') select count(*) as 选修编译原理人数 from 成绩表,课程表 where kcm='编译原理' else print'高等数学和编译原理都没开' --5-83 if exists(select * from 课程表 where kcm='高等数学') begin select count(*) as 高等数学 from 课程表 where kcm-'高等数学' end else begin if exists(select * from 课程表 where kcm='编译原理') select count(*) as 编译原理 from 课程表 where kcm='编译原理' else print'高等数学和编译原理都没开!' end --5-84 declare @x int set @x=0 while @x<3 begin set @x=@x+1 print'x='+convert(char(1),@x) --类型转换函数convert end --5-85 waitfor delay '00:00:30' select * form 学生表 --5-86 waitfor time '21:20:00' select * from 学生表 --5-87 select xh,'课程数量'= case count(*) when 1 then '选修了一门课' when 2 then '选修了两门课' when 3 then '选修了三门课' end from 成绩表 group by xh --5-88 select xh,count(*) as 数量,课程数量= case when count(*)=1 then '选修了一门课' when count(*)=2 then '选修了两门课' when count(*)=3 then '选修了三门课' end from 成绩表 group by xh --5-89 --创建函数 create function age(@borntime datetime,@today datetime) --borntime 表示出生日期,today表示当前日期 returns int as begin declare #age int set @age=(year(@today)-year(@borntime)) return(@age) end--结束函数定义 do --调用函数 select DBS.dbo.age('1999-7-1',getdate()) as some_age --5-90 --创建函数 create function course_grade(@kch varchar(30)) --kch 表示课程号 returns table as return(select * from 成绩表 where kch=@kch) go --调用函数 select * from DBS.dbo.course_grade('001') --5-91 --创建函数 create function choisecourse(@xm varchar(30)) returns @choiseinfo table(学号 char(10),学生姓名 char(20), 所选课程号 char(10),成绩 numeric(5,1)) begin insert @choiseinfo select 学生表.xh,xm,kch,cj from 学生表,成绩表 where 学生表.xh=成绩表.xh and 学生表.xm=@xm return end go --调用函数 select * from DBS.dbo.choisecourse('李永年') --5-92 declare firstcur cursor for select xh,xm,sfz,yxbh from 学生表 --5-93 declare firstcur cursor for select xh,xm,sfz,yxbh from 学生表 for readonly --5-94 declare firstcur cursor for select xh,xm,sfz,yxbh from 学生表 for update --5-95 declare @stuname char(10) --定义游标学生信息_cursor declare 学生信息_cur cursor local scroll for select xm from 学生表 --打开游标 open 学生信息_cur fetch next from 学生信息_cur into @stuname --取游标中的数据 while @@fetch_status --循环开始,系统默认@@fetch_status的初始值是 begin print @stuname fetch next from 学生信息_cur into @stuname end close 学生信息_cur deallocate 学生信息_cur --5-96 select * from 学生表 where xh='0302001' begin transaction exampletrans --开始一个事务 update 学生表 --第一次更新 set YXBH='001' where xh='0302001' go save transaction change --设置保存点 update 学生表 --第二次更新 set xm='李小丽' where xh='0302001' go select * from 学生表 where xh='0302001' rollback transaction change --回滚到保存点 print'program go on' commit transaction select * from 学生表 where xh='0302001' --5-97 if exists(select name from sysobjects where name='cj_info_all' and type='P') drop procedure cj_info_all go create procedure cj_info_all as select xm as 学生姓名,kcm as 课程名,jsm as 教师姓名,cj as 成绩 from 成绩表 inner join 学生表 on 学生表.xh=成绩表.xh inner join 课程表 on 课程表.kch=成绩表.kch inner join 教师表 on 教师表.jsh=成绩表.jsh go cj_info_all 存储过程可以通过以下方法执行: execute cj_info_all --5-98 if exists(select name from sysobjects where name='cj_info' and type='P') drop procedure cj_info go create procedure cj_info @xm varchar(20) @jsm varchar(20) as select sm as 学生姓名,kcm as 课程名,jsm as 教师姓名,cj as 成绩 from 成绩表 inner join 学生表 on 学生表.xh=成绩表.xh inner join 课程表 on 课程表.kch=成绩表.kch inner join 教师表 on 教师表.jsh=成绩表.jsh where xm=@xm adn jsm=@jsm go cj_info 存储过程可以通过以下方式执行,第一条命令的运行结果 execute cj_info '张丽珍','李穆' --or execute cj_info @jsm='李穆',@xm='张丽珍' --or execute cj_info @xm='张丽珍',@jsm='李穆' --or execute cj_info '张丽珍','李穆' --or execute cj_info @jsm='李穆',@xm='张丽珍' --or execute cj_info @xm='张丽珍',@jsm='李穆' cj_info '张丽珍','李穆' --or cj_info @jsm='李穆',@xm='张丽珍' --or cj_info @xm='张丽珍',@jsm='李穆' --5-99 if exists(select name from sysobjects where name='cj_info2' and type='P') drop procedure cj_info2 create procedure cj_info2 @xm varchar(20)='李%', @jsm varchar(20)='%' as select xm as 学生姓名,kcm as 课程名,jsm as 教师姓名,cj as 成绩 from 成绩表 inner join 学生表 on 学生表.xh=成绩表.xh inner join 课程表 on 课程表.kch=成绩表.kch inner join 教师表 on 教师表.jsh=成绩表.jsh go --cj_info_all 存储过程可以通过以下方法执行: execute cj_info2 --查找张姓同学的成绩单 execute cj_info2'张%' --查找陈姓同学的成绩单 execute cj_info2 @xm='陈%' --查找张姓同学的成绩单 execute cj_info2'[陈张]%' --查找张姓同学,选修李姓老师的成绩单 execute cj_info2'张%','李%' --5-100 if exists(select name from sysobjects where name='get_avg' and type='P') drop procedure get_avg go create procedure get_avg @xm varchar(20)='张%',@avg int output as begin declare @xh varchar(7) select @xh=学生表.xh from 成绩表,学生表 where 成绩表.xh=学生表.xh and xm like @xm select @avg=avg(xj) from 成绩表 where 成绩表.xh=@xh group by 成绩白哦.xh end declare @getavg int execute get_avg '张%',@getavg output if @getavg<60 begin print'' print'张姓同学的成绩平均不及格' end else select '张姓同学的平均成绩是'+rtrim(cast(@getavg as varchar(20))) --5-101 if exists(select name from sysobjects where name='xs_cursor' and type='P') drop procedure xs_cursor go create procedure xs_cursor @xs_cursor=cursor forward_only static for select * from 学生表 open @xs_cursor go declare @mycursor cursor exec xs_cursor @xs_cursor=@MyCursor output while (@@fetch_status=0) begin fetch next from @mycursor end close @mycursor go --5-102 if exists(select name from sysobjects where name='学生选课单' and type='P') drop procedure 学生选课单 go create procedure 学生选课单 @@lname_pattern varchar(30) with recompile as select (rtrim(YXBH)+''+rtrim(xm)) as '专业及姓名' kcm as 课程名,jsm as 教师名 from 学生表 s inner join 成绩表 t on s.xh-g.xh inner join 课程表 t on g.kch=c.kch inner join 教师表 t on g.jsh=c.jsh where xm like @@lname_pattern exec 学生选课单 '李%' --5-103 if exists(select name from sysobjects where name='encryp_xs' and type='P') drop procedure encryp_xs go create procedure encryp_xs with encryption as select * from 学生表 go exec sp_helptext encryp_xs select c.id,c.text from sysobjects c inner join sysobjects o on c.id=o.id where o.name='encryp_xs' --5-104 if exists(select name from sysobjects where name='sp_showindexes' and type='P') drop procedure sp_showindexes go create procedure sp_showindexes @@table varchar(30)='sys%' as select o.name as table_name, i.name as index_name, indid as index_id from sysindexes i inner join sysobjects o on o.id=i.id where o.name like @@table go exec sp_showindexes'教%' --5-105 if exists(select name from sysobjects where name='proc1' and type='P') drop procedure proc1 go --创建一个查询并不存在的表格的存储过程 create procedure proc1 as select * from does_not_exist exec proc1 --5-106 select o.id,c.text from sysobjects o inner join syscomments c on o.id=c.id where o.type='P' and o.name='proc2' --5-107 if exists(select name from sysobjects where name='proc2' and type='P') drop procedure proc2 go --5-108 create procedure proc2 as declare @middle_init char(1) set @middle_init=null select xh,middle_init=@middle_init from 学生表 exec proc2 --5-109 select o.id,c.text from sysobjects o inner join syscomments c on o.id=c.id where o.type='P' and o.name='proc2' --5-110 if exists(select table_name from information_schema.views where table_name='学生') drop view 学生 go create view 学生 as select xh,xm,sfz from 学生表 go select * from 学生 --5-111 if exists(select table_name from information_schema.views where table_name='成绩单') drop view 成绩单 go create view 成绩单(学号,姓名,平均成绩) with encryption as select 成绩表.xh,xm,avg(cj) from 学生表,成绩表 where xm like '张%' and 学生表.xh=成绩表.xh group by 成绩表.xh,xm go select * from 成绩单 select c.id,c.text from syscomments c,sysobjects o where c.id=o.id and o.name='成绩表' go --5-112 if exists(select table_name from information_schema.views where table_name='学生_计算机') drop view 学生_计算机 go create view 学生_计算机(学号,姓名,身份证) as select xh,xm,sfz from 学生表 where ybxh='001' with check option go select * from 成绩单 --5-113 if exists(select table_name from information_schema.views where table_name='专业平均成绩统计') drop view 专业平均成绩统计 go create view 专业平均成绩统计(院系,平均成绩) as select yxbh,avg(cj) from 成绩表,学生表 where 成绩表.xh=学生表.xh group by yxbh select * from 专业平均成绩统计 --5-114 if exists(select table_name from information_schema.views where table_name='行数统计') drop view 行数统计 go create view 行数统计 as select @@rowcount 查询返回的行数 select * form 学生表 select * from 行数统计 --5-115 --创建表格并插入记录 create table 供应商1( supplyID int promary key check(supplyID between 1 and 150), supplier char(50) ) create table 供应商2( supplyID int promary key check(supplyID between 151 and 300), supplier char(50) ) create table 供应商3( supplyID int promary key check(supplyID between 301 and 450), supplier char(50) ) create table 供应商4( supplyID int promary key check(supplyID between 451 and 600), supplier char(50) ) insert 供应商1 values('1','CalifoniaCorp') insert 供应商1 values('5','BraziliaLtd') insert 供应商2 values('231','FarEast') insert 供应商2 values('280','NZ') insert 供应商3 values('321','EuroGroup') insert 供应商3 values('442','UKArchip') insert 供应商4 values('475','India') insert 供应商4 values('521','Afique') --创建一个包所有4个表格的视图 create view 所有供应商视图(供应商编号,供应商地址) as select * from 供应商1 union all select * from 供应商2 union all select * from 供应商3 union all select * from 供应商4 --查询所有供应商的视图,命令如下, select * from 所有供应商视图
相关推荐
第二次实验.sql
### 数据库第二次实验报告知识点梳理 #### 实验背景与目的 本实验旨在通过一系列实际操作加深学生对于数据库基本表数据操作的理解与掌握,包括数据的插入、更新与删除等核心功能,并利用SQL语言进行数据查询与更新...
SQL实验1数据库的创建 数据库系统原理实验名称:SQL实验1 本实验的目的是为了创建、修改和删除数据库,掌握数据库的基本操作,包括创建数据库、分离数据库、数据库文件备份、附加数据库和删除数据库等。 一、实验...
【第二次实验1】是关于使用ODBC(Open Database Connectivity)接口访问SQL数据库的实践操作,主要涉及C语言或其他支持ODBC的语言。实验的目标是理解和掌握ODBC的基本原理、API接口的使用,以及如何通过编程实现对...
本次实验旨在通过实际操作加深对数据库管理系统的理解,特别是针对SQL Server环境下的交互式SQL语句的使用。实验内容涉及数据库对象的操作,包括创建、修改与删除;表的操作,如插入、修改、删除与查询;以及常用的...
实验时间为2015至2016学年的第一学期。 实验的主要目的是让学生能够将所学的数据库理论知识(如数据库和数据表的设计、数据完整性的实现、存储过程、触发器、数据库备份与恢复以及数据库安全等)应用到实际项目中,...
在本实验“人工智能实验二 SQL注入检测”中,主要目标是构建一个分类器来识别和区分网络包中的正常访问和含有SQL注入攻击的情况。SQL注入是一种常见的网络安全威胁,攻击者通过在输入字段中插入恶意SQL代码,试图...
在本实验报告中,我们主要关注的是SQL查询和数据库操作,这些都是操作系统中数据管理的重要组成部分。以下是基于给定内容的一些关键知识点的详细说明: 1. **子查询**:实验中的多条SQL语句都涉及到了子查询。例如...
SQL查询二 2 通过本实验使学生掌握多表查询、子查询以及基本数据操作 二、实验内容 使用实验一建立的银行贷款数据库和表,完成以下查询。 1-4是多表查询和子查询,5-11是数据操作 查询经济性质为“国营”的...
【数据库第二次实验——Access实现简单应用程序】 实验的目标是让学生深入理解SQL语言的特点和基本概念,掌握在Access中如何使用占位符获取用户输入并构造查询语句,对比不同查询方法的优劣,选择最佳实现方式。...
实验二通过嵌套查询找出了GPA最低的学生。`SELECT sname FROM student WHERE gpa IN (SELECT min(gpa) FROM student)`,这里利用子查询获取最小GPA,然后在外层查询中匹配GPA相等的学生名字。 实验三需要获取计算机...
第二次数据库实验则可能进一步深入,涵盖了更复杂的SQL语句,如联接(JOIN)、子查询、视图(VIEW)和存储过程(STORED PROCEDURE)的使用。学生们可能通过设计和实现一个实际的数据库应用,比如员工管理系统,来...
数据库的创建是管理和存储数据的第一步,它为后续的所有操作提供了基础平台。 接下来,我们创建了四个关系模式表,即Product、PC、Laptop和Printer。每个表都有其特定的属性和约束。例如,Product表包含maker(制造...
在使用 SQL Server Management Studio 管理数据库引擎服务器时,需要一方面登录到服务器上,第一次登录时需要将登录界面的“服务器名称”选项修改为本地的计算机名。同时将身份验证方式改为“Windows 身份验证”获取...
#### 二、查看视图的系统存储过程 - **系统存储过程**: - `sp_helptext`:查看视图的定义和结构。 ```sql EXEC sp_helptext 'view_name'; ``` - `sp_help`:查看视图的基本信息。 ```sql EXEC sp_help '...
4. **还原完整备份+差异备份+两个日志备份**:在此基础上增加第二次日志备份的还原,再次检查数据库状态。 5. **还原至指定时间点**:还原至先前记录的时间点,确保数据库恢复到指定时刻的状态。 6. **最终还原**:...
二、实验内容 使用实验一建立的银行贷款数据库和表,完成以下查询。 1-10题为单表查询,11-25为多表查询。 查询所有法人的法人代码、法人名称、经济性质和注册资金。 查询“B1100”银行的的银行名称和电话。 查询...
数据库实验1(第一次实验课)可能侧重于数据库的创建和基本操作,实验2(第二次实验课)可能会深入到数据库的维护和完整性设计,而实验3(第三次实验课)可能涉及更复杂的问题,如性能优化或事务处理。 通过这些...
图书管理系统的设计与实现 根据给定的文件信息,我们可以总结出以下知识点: ...* 杨学全 主编, SQL Server 实例教程(第二版) * 于国防,李剑.C#语言 Windows 程序设计 * 史济民, 顾春华, 李昌武. 数据库原理及应用