SQL Service数据库上机

本文档详细介绍了SQL数据库的创建、管理及查询操作,包括使用CREATE DATABASE语句创建数据库,定义数据文件和日志文件的大小、增长方式,以及扩展数据库空间。此外,还涉及到了表的创建、修改、删除,以及字段的增删改查。在查询方面,涵盖了各种条件查询、转换、连接和聚合函数的使用,如LIKE、RTRIM、LTRIM、SUBSTRING、GETDATE、DAY等。最后,文档还提到了索引、视图、存储过程和触发器的创建和管理。这些内容对于理解和掌握SQL数据库操作至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一,创建与管理数据库及SQL基础

二,创建与管理架构和基本表及数据操作

三,数据查询

四、创建与管理其他数据库对象、数据库保护与数据传输


一,创建与管理数据库及SQL基础

1.分别用图形化方法和CREATE DATABASE语句创建符合如下条件的数据库。

数据库的名字为students,包含的数据文件的逻辑文件名为 students_dat,物理文件名为 students.mdf,存放在D:\Test文件夹中(若D:中无此子文件夹,可先建立此文件夹,然后再创建数据库),初始大小为6MB,自动增长,每次增加1MB。日志文件的逻辑文件名为students_log,物理文件名为students.ldf,也存放在D:\Test文件夹中,初始大小为2MB,自动增长,每次增加10%。

CREATE DATABASE [students]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'students_data', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\students.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'students_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\students.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
 WITH CATALOG_COLLATION = DATABASE_DEFAULT
GO

2.分别用图形化方法和 CREATE DATABASE语句创建符合如下条件的数据库。

数据库包含两个数据文件和两个日志文件。数据库的名称为:财务信息数据库,该数据库包含两个数据文件和两个日志文件。数据文件1的逻辑文件名为财务数据1,物理文件名为财务数据1.mdf,存放在“D:\财务数据”目录下(若D:中无此文件夹,可先建立此文件夹,然后再创建数据库,初始大小为4MB,自动增长,每次增加IMB;数据文件2的逻辑文件名为财务数据2,物理文件名为财务数据2.ndf,与主要数据文件存放在相同的文件夹中,初始大小为3MB,自动增长,每次增加10%。日志文件1的逻辑文件名为财务日志1,物理文件名为财务日志1.ldf,存放在“D:\财务日志”文件夹中,初始大小为2MB,自动增长,每次增加10%;日志文件2的逻辑文件名为财务日志2,物理文件名为财务日志2ldf,存放在“D:\财务日志”文件夹中,初始大小为2MB,不自动增长。

CREATE DATABASE [财务信息数据库]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'财务数据1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\财务数据1.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),
( NAME = N'财务数据2', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\财务数据2.ndf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)
 LOG ON 
( NAME = N'日志文件1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\财务日志1.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%), 
( NAME = N'日志文件2', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\财务日志2.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 0)
 WITH CATALOG_COLLATION = DATABASE_DEFAULT
GO

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [财务信息数据库].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO

3.分别用图形化方法和 Transact-SQL语句对上机练习中第1题所建立的“students”数据库空间进行如下扩展:增加一个新的数据文件,文件的逻辑名为“students_dat2”,存放在新文件组Group1中,物理文件名为 students2.ndf,存放在“D:\Test”文件夹中,文件的初始大小为2MB,不自动增长。

CREATE DATABASE [students]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'students_data', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\students.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
 FILEGROUP [Group1] 
( NAME = N'student_2', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\students1.ndf' , SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0)
 LOG ON 
( NAME = N'students_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\students.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
 WITH CATALOG_COLLATION = DATABASE_DEFAULT
GO

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [students].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO

4.将上机练习中第4题新添加的“students_dat2”文件的初始大小改为6MB。

CREATE DATABASE [students]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'students_data', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\students.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
 FILEGROUP [Group1] 
( NAME = N'student_2', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\students1.ndf' , SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0)
 LOG ON 
( NAME = N'students_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\students.ldf' , SIZE = 6144KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
 WITH CATALOG_COLLATION = DATABASE_DEFAULT
GO

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [students].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO

5.定义一个int的整形变量,并分别给其赋值67、123067。

declare @a int = 67;
declare @b int = 123067
print @a
print @b

6.定义一个长度为11的可变长形字符变量,并分别给其赋值“Hello World!”和“How are you?”。

declare @a char(11) = 'Hello World'
declare @b char(11) = 'How are you?'
print @a
print @b

7.分别将字符串“WELCOME”和“student”转换成小写、大写字母。

declare @a varchar(10) ='WELCOME'
declare @b varchar(10) ='student'
SELECT LOWER(@a)
SELECT UPPER(@b)
print @a
print @b

8.使用RTRIM和LTRIM函数分别去掉字符串“ 信电分院 ”右边和左边的空格,再与“学生选课”连接起来。

select rtrim(' 信电分院 ') + ltrim(' 学生选课 ')

9.使用SUBSTRING将字符串“ABCDEFG”中的“CDE”显示出来。

select SUBSTRING ('ABCDEFG',3,3)

10.使用GETDATE( )函数返回系统当前日期。

select getdate() as sysdate

11.使用DAY( )函数提取当前日期的日期部分的整数。

SELECT DAY('2021-10-16') [DAY]

12.使用T-SQL流程控制语句求两个数的最大公约数和最小公倍数。

        1,最大公约数

create function GetGys(@num1 int,@num2 int) 
returns int --返回值 
as 
begin 
declare @times int  --计数器 
declare @min int    --存储两个数的较小者 
declare @result int  --保存结果 
if(@num1>=@num2) 
set @min=@num2 
else 
set @min=@num1 
set @times=@min 
while(@times<=@min) --循环 
begin 
if(@num1%@times=0 and @num2%@times=0) 
begin 
set @result=@times 
break 
end 
set @times=@times-1 
end 
return @result 
end 

        2,最小公倍数

create function GetGbs(@num1 int,@num2 int) 
returns int 
as 
begin 
declare @result int  --结果 
declare @max int  --保存两个数的大者 
declare @times int 
if @num1<=@num2 
set @max=@num2 
else 
set @max=@num1 
set @times=@max 
while(@times>=@max) 
begin 
if(@times%@num1=0 and @times%@num2=0) 
begin 
set @result=@times 
break 
end 
set @times=@times+1 
end 
return @result 
end 

14.使用T-SQL流程控制语句求斐波那契数列中小于100的所有数。

/*求小于100的斐波那契数列*/
declare @i int
declare @j int
declare @t int
declare @s varchar(2000)
set @i=1
set @j=2
set @s=''
set @s=cast(@i as varchar(10))+','+cast(@j as varchar(10))
while (@j<100)
begin
set @t=@j
set @j=@j+@i
set @i=@t
if(@j<100)
set @s=@s+','+cast(@j as varchar(10))
end
print @s

二,创建与管理架构和基本表及数据操作

1,依据数据表的结构创建相对应的数据表,表结构如下所示;

 三张表的代码分别如下。

/*学生表*/
CREATE TABLE student
(
   Sno      Char(9)		/*学生信息*/ PRIMARY KEY,
   Sname    Char(6)	    /*学生姓名*/ NOT NULL,
   Ssex	    Char(2),    /*学生性别*/	
   Sage	    Int,	    /*学生年龄*/	
   Sdept 	VarChar(8),	/*学生所在院系*/	
)
/*课程信息表*/
CREATE TABLE course
( 
  Cno	    Char(4)	       /*课程编号*/	PRIMARY KEY,
  Cname	    VarChar(20)	   /*课程名称*/	NOT NULL,
  Cpno	    Char(4),	   /*先行课*/	
  Ccredit	Int,	       /*学分*/	    
)
/*选课信息表*/
CREATE TABLE sc
 (
   Sno	    Char(9)	/*学生学号*/,
   Cno	    Char(4)	/*课程编号*/,
   Grade	Int	        /*成绩*/,
   primary key(Sno,Cno)
 )

2.在表student中增加新字段 “班级名称(sclass)“;

ALTER TABLE student ADD sclass  NCHAR(5)

3.在表student中删除字段“班级名称(sclass)”;

ALTER TABLE student DROP COLUMN Sclass

4.修改表student中字段名为“sname”的字段长度由原来的6改为8;

ALTER TABLE student ALTER COLUMN Sname char(8)

5.修改表student中字段“sdept”名称为“dept”,长度为20;

exec sp_rename '[student]. sdept ',' dept '
ALTER TABLE student ALTER COLUMN Sdept varchar(20)

6.修改表student中sage字段名称为sbirth,类型为smalldatetime

exec sp_rename '[student].Sage','sbirth'
alter table student alter column Sbirth smalldatetime
7. 修改表student新名称为stu_info;
exec sp_rename @objname='student',@newname='stu_info'

8.删除数据表student。

DROP TABLE stu_info

1,创建教师授课管理数据库JSSK,并完成以下内容;

 创建JSSK数据库,在数据库JSSK中创建下列三张表;

CREATE DATABASE JSSK;    /*创建数据库*/
/*创建教师表*/
CREATE TABLE teachers(
	Tno varchar(7) primary key ,
	Tname varchar(10)  NOT NULL,
	Tsex varchar(2) default '男',
	Birthday smalldatetime NULL,
	Dept varchar(20) NULL,
	Sid varchar(18),
);
/*创建课程表*/
CREATE TABLE lessons(
	Cno varchar(10) primary key,
	Cname varchar(20) NOT NULL,
	Credit smallint,
	property varchar(10),
);
/*授课表*/
CREATE TABLE shouke(
	Tno varchar(7),
	Cno varchar(10),
	primary key(Tno,Cno),
	Hours int,)

2,在shouke表里添加一个授课类别字段,列名为Type,类型为Char,长度为4;

ALTER TABLE shouke ADD Type Char(4)

3,将shouke表的Hours的类型改为smallint;

ALTER TABLE shouke ALTER COLUMN Hours smllint

4,删除lessons表中的property列。

ALTER TABLE lessons DROP COLUMN property

1,创建产品销售数据库CPXS,数据文件的逻辑文件名为cpxs_data,物理文件名为D:\sql\cpxs.mdf;文件初始大小为2MB,自动增长,每次增长1MB;日志文件逻辑文件名为cpxs_log,物理文件为D:\sql\cpxs.ldf;文件初始大小2MB,自动增长,每次增长15%;

         在数据库CPXS中创建下列三张表;

CREATE DATABASE CPXS        /*创建数据库*/
ON
(
	NAME  =cpxs_data,
	FILENAME = 'D:\sql\cpxs_data.mdf',
	SIZE = 2,
	FILEGROWTH = 1
)
/*创建产品表*/
CREATE TABLE cp(
	Cpbh varchar(6) primary key,
	Cpmc varchar(30) NOT NULL,
	Jg float(8) NULL,
	Kcl int NULL
);
/销售商表*/
CREATE TABLE xss(
	Xsbh varchar(6) primary key,
	Xsmc varchar(30) NOT NULL,
	Dq varchar(10) NULL,
	Fzr varchar(8) NULL,
	Dh varchar(12) NULL,
	Bz ntext NULL
);
/产品销售表*/
CREATE TABLR cpxs(
	Cpbh varchar(6),
	Xsbh varchar(6),
	primary key(Cpbh,Xsbh),
	Xssj DATETIME NOT NULL,
	Sl int NOT NULL,
	Je float(8) NOT NULL
);

三,数据查询

  1. 列出所有不姓张的所有学生;
    SELECT sname FROM student 
     WHERE sname NOT LIKE '刘%'
  2. 列出姓“张”且全名为3个汉字的学生;
    SELECT sname
    	FROM student
    	WHERE sname  LIKE '[张]%' AND LEN(sname)=3
  3. 显示在2002年以后出生的学生的基本信息;
    SELECT * FROM student WHERE sage>19
  4. 按照“性别、学号、姓名、年龄、院系”的顺序列出学生信息,其中性别按以下规定显示:性别为男显示为男 生,性别为女显示为女 生,其他显示为“条件不明”
    SELECT CASE ssex
    	  WHEN '男' THEN '男生' 
    	  WHEN '女' THEN '女生'
    	  ELSE '条件不明' END  ,
    	  sno,sname,sage,sdept
    	FROM student
  5. 查询出课程名含有“数据”字串的所有课程基本信息;
    SELECT cname,cno,cpno,ccredit
    	FROM course
    	WHERE cname LIKE '数据%'
  6. 显示学号第八位或者第九位是1、2、3、4或者9的学生的学号、姓名、性别、年龄及院系;
    SELECT sno,sname,ssex,sage,sdept
    	FROM student
    	WHERE sno LIKE '________[12349]' or  sno LIKE'________[12349]'
  7. 列出选修了‘1’课程的学生,按成绩的降序排列;
    SELECT sno,grade  FROM sc
    	WHERE cno='1'
    ORDER BY grade DESC
  8. 列出同时选修“1”号课程和“2”号课程的所有学生的学号;
    SELECT 
    sno FROM sc WHERE cno='1'
    AND
    sno IN (SELECT sno FROM sc WHERE cno='2')
  9. 列出课程表中全部信息,按先修课的升序排列;
    SELECT *  FROM course
    	ORDER BY cpno ASC 
  10. 列出年龄超过平均值的所有学生名单,按年龄的降序显示;
    SELECT * FROM student
    WHERE sage>(SELECT AVG(sage) FROM student)
    ORDER BY sage DESC
  11. 按照出生年份升序显示所有学生的学号、姓名、性别、出生年份及院系,在结果集中列标题分别指定为“学号,姓名,性别,出生年份,院系”;
    SELECT sno,sname,ssex,YEAR(GETDATE()) -sage,sdept from student
    	ORDER BY YEAR(GETDATE()) -sage asc 
  12. 按照院系降序显示所有学生的 “院系,学号、姓名、性别、年龄”等信息,其中院系按照以下规定显示:院系为CS显示为计算机系,院系为IS显示为信息系,院系为MA显示为数学系,院系为EN显示为外语系,院系为CM显示为中医系,院系为WM显示为西医系,其他显示为院系不明;
    SELECT CASE sdept
    	   WHEN 'CS' THEN '计算机系'
    	   WHEN 'IS' THEN '信息系'
    	   WHEN 'MA' THEN '数学系'
    	   WHEN 'EN' THEN '外语系'
    	   WHEN 'CM' THEN '中医系'
    	   WHEN 'WM' THEN '西医系'
    	   ELSE  '院系不明' END as 
           sdept,sno,sname,ssex,sage
    	   FROM student
  13. 显示所有院系(要求不能重复,不包括空值),并在结果集中增加一列字段“院系规模”,其中若该院系人数>=5则该字段值为“规模很大”,若该院系人数大于等于4小于5则该字段值为“规模一般”, 若该院系人数大于等于2小于4则该字段值为“规模稍小”,否则显示“规模很小”;
    SELECT  sdept,sdept=
    		CASE
    		WHEN COUNT(DISTINCT sno)>=5 THEN '规模很大'
    		WHEN COUNT(DISTINCT sno)>=4 AND COUNT(DISTINCT sno)<5 THEN '规模一般'
    		WHEN COUNT(DISTINCT sno)>=2 AND COUNT(DISTINCT sno)<4 THEN '规模稍小'
    		ELSE '规模很小' END
    		FROM student
    		GROUP BY sdept
  14. 按照课程号、成绩降序显示课程成绩在70-80之间的学生的学号、课程号及成绩;
    SELECT sno,cno,grade
    	FROM sc
    	WHERE grade>=70 AND grade<=80
    	ORDER BY cno DESC,grade DESC 
  15. 显示学生信息表中的学生总人数及平均年龄,在结果集中列标题分别指定为“学生总人数,平均年龄”;
    SELECT '学生人数'=COUNT(distinct sno),'平均年龄'=AVG(sage)
    	FROM student
  16. 显示选修的课程数大于3的各个学生的选修课程数;
    SELECT sno, COUNT(*)  AS '选修课程大于3' FROM sc
    	GROUP BY sno
    	having count(*)>3
  17. 按课程号降序显示选修各个课程的总人数、最高成绩、最低成绩及平均成绩;
    SELECT cno,'总人数'=COUNT(distinct sno),
    		   '最高成绩'=MAX(grade),
    		   '最低成绩'=MIN(grade),
    		   '平均成绩'=AVG(grade)
    FROM sc
    GROUP BY cno
    ORDER BY cno DESC
  18. 显示平均成绩大于“200515001”学生平均成绩的各个学生的学号、平均成绩;
    SELECT sno,'平均成绩'=AVG(grade)
    FROM sc
    GROUP BY sno
    HAVING AVG(grade)>(SELECT AVG(grade) 
    				   FROM sc
    				   WHERE sno='200515001')
  19. 显示选修各个课程的及格的人数、及格比率;
    SELECT Cno,SUM(CASE WHEN Grade>=60 THEN 1 ELSE 0 END) AS '及格人数',
    COUNT(*) AS '总人数',
    CONVERT(nvarchar, SUM(CASE WHEN grade>=60 THEN 1 ELSE 0 END)*100/COUNT(*))+'%' AS '及格率'
    FROM sc
    GROUP BY Cno
  20. 显示选修课程数最多的学号及选修课程数最少的学号;
    SELECT sno,'选课数'=CASE
    	WHEN MAX(cno)=COUNT(cno) THEN '课程数最多'
    	WHEN MIN(cno)=COUNT(cno) THEN '课程数最少'
    	end
    FROM sc
    GROUP BY SNO
    HAVING MAX(cno)=COUNT(cno) OR MIN(cno)=COUNT(cno)
  21. 显示各个院系男女生人数,其中在结果集中列标题分别指定为“院系名称、男生人数、女生人数”;
    SELECT sdept AS '院系名称',
    	'男生人数'=SUM(CASE WHEN ssex='男' THEN 1 ELSE 0 END),
    	'女生人数'=SUM(CASE WHEN ssex='女' THEN 1 ELSE 0 END)
    	FROM student
    	GROUP BY sdept
  22. 列出有二门以上课程(含两门)不及格的学生的学号及该学生的平均成绩;
    SELECT sno,AVG(GRADE) AS'平时成绩'
    FROM sc
    group by sno
    having SUM( CASE WHEN grade<60 then 1 END)>=2
  23. 查询与“张立“(假设姓名唯一) 年龄不同的所有的学生的信息;
    ELECT * FROM student
    WHERE sage NOT IN(SELECT sage FROM student WHERE sname='张力')

四、创建与管理其他数据库对象、数据库保护与数据传输

1.在student表的sno列上创建唯一性聚集索引index_sno

use stu 
go
create unique clustered index index_sno
on student(sno)

2.在student表的sname列上创建唯一性非聚集索引index_sname

use stu
go
create unique nonclustered index index_sname
on student(sno)

3.在student表的sage列上创建非聚集索引index_sage

use stu
go
create nonclustered index index_sage
on student(sage)

4.在sc表的sno列和cno列上创建复合非聚集索引index_sno_cno

use stu
go
create  index index_sno_cno
on sc(sno,cno)

5.将索引index_sno_cno更名为index_snocno

exec sp_rename 'sc.[index_sno_cno]','index_snocno','index'

6.删除上面的索引index_snocno

use stu
go
drop index index_snocno
on sc

7.查看student表的索引基本信息

exec sp_helpindex student

8.创建一个只选修8号课程的学生情况的视图信息

use stu
go
create view xuanxiu_8
as
select student.sno,
           sname,sage,sdept,ssex
from student,sc
where student.sno=sc.sno and cno='8'
group by student.sno,sname,sage,sdept
having count(cno)=1

9.创建一个视图view_stu,只包含学生的学号,姓名,年龄信息

create view view_stu
as
select sno as 学生学号,
       sname as 姓名,
	   sage as 年龄
from student

10.在上一题视图的基础上创建年龄在20岁以上的的学生的视图

create view view_stu1
as
select sno as 学生学号,
       sname as 姓名,
	   sage as 年龄,
from student
where sage>20

11.创建一个包含不及格同学及90分以上同学的学号、姓名、课程名称及成绩的视图

create view view_stu2
as
select student.sno as 学生学号,
       sname as 姓名,
	   cname as 课程名,
	   grade as 成绩
from student,sc,course
where student.sno=sc.sno
and sc.cno=course.cno
and grade<60 and grade>90

12.选择一个上面创建的视图,查看视图的信息

select * from view_stu1 go

13.选择一个上面创建的视图,修改删除其中的一列

delete view_stu1
where 学生学号='200515015'
select * from view_stu1

14. 选择一个上面创建的视图进行删除操作

drop view view_stu1

15.从视图view_stu中查询19岁的男生记录

select * from view_stu where 年龄=19

16.通过视图view_stu中插入一行数据。学号:2006010010,姓名:赵青,年龄:

insert into view_stu
values('200610010','赵青','20')
select * from view_stu

17.将视图view_stu中姓名为“李蕾”的年龄改为“22”

update view_stu
set 年龄='22'
where 姓名='李蕾’

18.通过视图 view_stu将姓名为“李贵”的记录删除

delete view_stu
where 姓名='李贵’

19.自行选择上面创建的一个视图插入一个记录。

insert into view_stu
values('200515029','王振','29')
select * from view_stu

20.自行选择一个视图根据一定的条件进行查询。

select * from view_stu
where 年龄>20

21.自行选择联合一张表和某个视图进行复合查询。

select distinct 学生学号,姓名,年龄
from view_stu,sc
where view_stu.学生学号=sc.sno
and grade>80

22.创建存储过程返回全部男生选课及成绩等相关信息

create procedure stu_info
as
select distinct a.sno,sname,ssex
from student a,sc
where a.sno=sc.sno
and ssex='男'
use stu
exec stu_info

23.创建一个带输入参数的存储过程,能够根据参数向学生表中插入一条记录

create procedure student_insert (@sno char(9),@sname
char(8),@ssex char(2),@sage int,@sdept char(4))
as
insert into student (sno,sname,ssex,sage,sdept)
values(@sno,@sname,@ssex,@sage,@sdept)
EXEC student_insert '200515002','汪汪','女',20,'it'

24.创建一个带输入参数的存储过程,根据不同的学生名参数,返回该学生的所有课程成绩。

USE stu
GO
CREATE PROCEDURE stu_sc2(@yx char(6))
AS SELECT DISTINCT a.sno,sname,cno,grade
FROM student a,sc
WHERE a.sno=sc.sno and sname =@yx
GO
exec stu_sc2'张力'

25.创建一个带输入输出参数的存储过程,根据输入的系部名,统计该系学生的平均成绩并输出。

USE stu
GO
CREATE PROCEDURE PINGJUN
@stu_sdept varchar(8), @average int OUTPUT
AS
SELECT @average=avg(grade)
FROM student,sc
WHERE student.sno=sc.sno AND sdept=@stu_sdept
GO
DECLARE @G int
EXEC PINGJUN'CS',@G OUTPUT
SELECT @G

26.查看第22和23题的存储过程的有关信息,并查看它们的定义。修改第22题的存储过程,改为查询全部女生的资料。删除第23题的存储过程。

alter procedure stu_info
as
select distinct a.sno,sname,ssex
from student a,sc
where a.sno=sc.sno
      and ssex='女'
use stu exec stu_info
drop procedure student_insert

27.创建student表的DELETE触发器,当一个学生退学后,信息从student表中删除,触发在sc表中删除该生选课情况。

create trigger deleteestu1
on student after delete
as
select sname,ssex,sgae,sdept from deleted
delete from student where sname='张三'
select * from student where sname='张三

28.创建一个触发器,检查在sc表中输入一门课程成绩,必须符合在0到100分范围内。

reate trigger insertsc_grade
on sc after insert
as
  if exists(select * from inserted where(grade>100 or grade<0))
  begin
   print'成绩应在100'
   rollback
   end
   go
   insert sc values(1,2,101)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值