sqlServer数据库学习笔记

时间:2024.4.21

sqlServer数据库学习笔记

作者: 骆巍

说明: 我用的数据库是sqlServer2008, sqlServer2005和sqlServer2008差不多,所以我就没有分是在哪一个数据库下面学习的, 这是我学习一期数据库的笔记总结, 我拿出来给大家分享, 希望对大家有帮助. 每一个知识点都分得很详细, 如果有相应的数据库可以直接放到数据库命令行里面去执行

------------------------------创建数据库------------------------- create database ckgl

on primary --设置文件组第一个为默认文件组即主要文件组

(--创建第一个数据文件,第一个数据文件是主文件

name = xkgldata1, --设置名字

filename = 'D:\java\Databank\DATA\xkgldata1.mdf', --设置路径要加上文件名字不要忘了最后要打逗号

size = 10, --设置初始文件的大小不写默认单位是MB

maxsize = 500, --设置文件的最大值

filegrowth = 5 --设置文件的增长率

),

(--创建第二个数据文件,后缀名要改成?ndf?

name = xkgldata2,

filename = 'D:\java\Databank\DATA\xkgldata2.ndf', size = 10,

maxsize = 500,

filegrowth = 5

)

log on --创建日志文件

(name = xkg1_log,

filename = 'D:\java\Databank\DATA\xkgllog.ldf',

size = 3,

filegrowth = 10%

)

--修改一般用?alter database + 数据库名字?

--修改数据库名字

alter database ckgl modify name = xkgl

--修改数据库里面的主要数据文件

alter database xkgl modify file

(name = xkgldata1,

newname = xkglmdata

)

--增加一个数据文件

alter database xkgl add file

(name = xkgldata3,

filename = 'D:\java\Databank\DATA\xkgldata3.ndf', size = 10,

maxsize = 500,

filegrowth = 5

)

--添加文件组

alter database xkgl add filegroup myfg

--删除文件组

alter database xkgl remove filegroup myfg

--增加一个数据文件到某个文件组

alter database xkgl add file

(name = xkgldata4,

filename = 'D:\java\Databank\DATA\xkgldata4.ndf', size = 10,

maxsize = 500,

filegrowth = 5

)

to filegroup myfg

--删除一个数据文件

alter database xkgl remove file xkgldata4

--添加日志文件

alter database xkgl add log file

(name = xkgld_lg2,

filename = 'D:\java\Databank\DATA\xkglla2.ldf', size = 3,

filegrowth = 10%

)

--删除日志文件

alter database xkgl remove file xkgld_lg2

--更改数据文件的大小或日志文件的大小

alter database xkgl modify file

(name = xkgldata3,

size = 11MB

)

/*移动数据文件或日志文件,需要先将数据文件设置为脱机状态,然后移动文件到想要的路径,

然后用SQL命令设置数据文件到目标路径,然后把数据库设置为联机状态*/ alter database xkgl set offline

alter database xkgl modify file

(name = xkglmdata,

filename = 'D:\java\Database\DATA\xkgldata1.mdf'

)

alter database xkgl modify file

(name = xkgldata2,

filename = 'D:\java\Database\DATA\xkgldata2.ndf'

)

alter database xkgl modify file

(name = xkgldata3,

filename = 'D:\java\Database\DATA\xkgldata3.ndf'

)

alter database xkgl modify file

(name = xkgldata4,

filename = 'D:\java\Database\DATA\xkgldata4.ndf'

)

alter database xkgl modify file

(name = xkg1_log,

filename = 'D:\java\Database\DATA\xkgllog.ldf'

)

alter database xkgl set online

alter database xkgl modify file

(name = xkg1_log,

newname = xkgl_log

)

alter database xkgl modify file

(name = xkglmdata,

newname = xkgldata1

)

--删除数据库

drop database xkgl ----------------------------数据库表的创建--------------------------

--创建数据表

use class --选择数据库

go

create table Department --创建表

(

DepartmentID char(4) primary key, --primary key 是设置主键

DepartmentName varchar(20) not null unique, --unique是设置唯一 DepartmentHeader varchar(8) not null, --not null 是非空

TeacherNum int

)

use class

go

create table Class

(

ClassID char(8) primary key,

ClassName varchar(20) not null,

Monitor char(8),

StudentNum int check(StudentNum >= 0), --check约束

DepartmentID char(4) foreign key references

Department(DepartmentID), --foreign key 定义外键references用于指定外键所引用的表及表的主键

)

use class

go

create table Student

(

StudentID char(12) primary key,

StudentName char(8) not null,

Sex char(2) not null check(Sex = '男' or Sex = '女'),

Birth date not null,

HomeAddr varchar(80),

EntranceTime date default getdate(), -- getdate()是得到系统时间的方法

ClassID char(8) references Class(ClassID) --行级约束时可以省略foreign key

)

create table Course

(

CourseID char(8) primary key,

CourseNmae varchar(60) not null,

BookName varchar(80) not null,

Credit int not null

)

create table Grade

(

CourseID char(8) references Course(CourseID),

StudentID char(12) references Student(StudentID),

Semester int not null,

SchoolYear int,

Grade numeric(5,1) check(Grade>= 0),

primary key(CourseID, StudentID) --在定义完CourseID和StudentID列后定义主键约束,这种约束为表级约束

)

use class

go

create table Schedule(

TeacherID char(8) references Teacher(TeacherID),

CourseID char(8) references Course(CourseID),

ClassID char(8) references Class(ClassID),

Semester int not null,

SchoolYear int not null,

ScheduleIdent varchar(40) not null,

Classroom varchar(20) not null

primary key(TeacherID, CourseID, ClassID)

)

/*

非空not null

唯一unique

默认default 默认值

检查check (约束表达式)

外键reference 表名或列名

标示identity (起始值,增量)

*/

==================================================================== ---------------------------------表的修改--------------------------- use test

go

create table goods(

goodsID varchar(10) primary key,

goodsName varchar(15) not null,

price decimal(6,2) check(price > 0),

total int check(total >= 0),

supplier varchar(20)

)

-----------------------用T—SQL语句修改表---------------------------- --格式

alter table 表名

add 列名 数据类型 约束 --添加列

alter column 列名 数据类型 --修改列

drop column 列名 --删除列

--列在userinfo表中添加一列code(邮编)char()

use xkgl

go

alter table userinfo

add code char(6)

-----------------------查看表属性信息------------------------- sp_help 对象名

sp_help userinfo -----------------------------数据查询----------------------------- --格式

select 列名

from 表名

-- * 代表所有列

--列查询学生表的所有信息

select * from Student

--指定列

--列查询所有学生的姓名与性别,先写哪个列就先显示哪个列

select StudentName, Sex from Student

select Sex, StudentName from Student

--练习查询所有课程的名称与学分

select CourseName, Credit from Course

--运算列

--列把所有成绩+10

select CourseID, StudentID, Grade, Grade+10

from Grade

--用+连接字符串

--列

select StudentName+'您好' +Sex

from Student

--使用系统函数

year() getdate()

--别名

--列名as '列标题' (as关键字可省)

--‘列标题’== 列名

--列

select CourseID '课程号', StudentID as 学号, 成绩=Grade+10

from Grade

--增加说明列

--例

select StudentName, '的性别是:',Sex

from Student

--行的选择

select StudentName, '的性别是:',Sex

from Student

where Sex = '男'

--------------------行的检索----------------------------------------- --比较运算符= > < <>

--查询学生张三的姓名与性别

select StudentName, Sex 性别

from Student

where StudentName = '张三'

--逻辑运算符and or not

--查询年以后出生的男生的信息

select *

from Student

where year(Birth) >= 1992 and Sex = '男'

--查询范围

--列名between 最小值and 最大值

--等价于:列名>= 最小值and 列名<= 最大值

--查询成绩在-80之间的成绩信息

select *

from Grade

where grade between 70 and 80

--查询列表

--列名in(值,值。。。)

--等价于列名= 值or 列名= 值。。。

--查询所有教授与副教授的信息

select *

from Teacher

where Profession in('教授', '副教授')

--字符串模糊匹配% _ [] [^]

--查询所有姓张与姓李的学生信息

select *

from Student

where StudentName like '[张李]%'

--控制判定

--查询所有成绩为null的成绩记录

select *

from grade

where Grade is null

-- distinct 关键字

--从返回的结果数据中删除重复的行(实际不物理删除) --在学生表中查询所有学生所在班级编号,并消除重复记录 select distinct ClassID, StudentName

from Student

--top关键字

--top 你返回前n个数据

--top n percent 返回前百分之n行数据

-- 排序

--order by 列名asc/desc

--asc 是升序可以省略desc是降序

select *

from Student

order by Sex, Birth desc

--------------------数据输入---------------------------------- --格式

insert into 表名(列名....)

values(值....)

--注:列名与值一一对应

--列在Department表中输入dp01计科系。。。

use xkgl

go

select * from Department --查询

insert into

Department(DepartmentID,DepartmentName,DepartmentHeader,TeacherNum) values('DP01','计科系','张三',120)

--等价于

insert Department

values('DP01','计科系','张三',120)

-----在userinfo注册一个用户

insert into userinfo (email,pwd,tel,regdate,uname,question,answer) values('soft678@ccniit.com','987654',null,default,default,default) --如果某列由系统指定数据那么输入时就把那一行当做没有

--练习:输入信管系、外语系、艺术系的信息

insert into

Department(DepartmentID,DepartmentName,DepartmentHeader,TeacherNum) values('DP02','外语系','李四',20)

insert into

Department(DepartmentID,DepartmentName,DepartmentHeader,TeacherNum) values('DP03','艺术系','王五',20)

insert into

Department(DepartmentID,DepartmentName,DepartmentHeader,TeacherNum) values('DP05','信管系','赵六',20)

---------------------------数据删除-------------------------------- --格式

delete 表名

where 条件

--注:列名= < > != like 值

--列删除计科系的信息

delete Department

where DepartmentName = '计科系'

select * from Department

--练习删除教师人数在人以下部门信息

delete Department

where TeacherNum < 50

--练习删除所有系主任性王的

delete Department

where DepartmentHeader like '王%'

select * from Department

-------------------------------修改数据------------------------------ --格式

update 表名

set 列名=值

where 条件

--列将信管系的人数改为人

update Department

set TeacherNum = 103

where DepartmentName = '信管系'

--练将人数大于的部门名改为信管系

update Department

set DepartmentName = '信管系'

where TeacherNum > 100 -------------------------------多表连接--------------------------- --找出公共字段

--格式

select 列名

from 表一

[连接类型] join 表二 on 表一.列名 = 表二.列名

[连接类型] join 表 on 表/2.列名 = 表.列名

......

--[连接类型]

--内连接inner (可省略) 两个表都有的才输出

--左链接left 左边的表有的字段都要输出

--右链接right 右边的表的字段都要输出

--全连接full 只要有的字段都要输出

--查询‘软件技术班’的所有学生信息

select StudentName, Sex, HomeAddr, ClassName, student.ClassID from Student

join class on Student.ClassID = class.ClassID

where ClassName = '09软件技术班'

select * from class

select *

from Student

join class on Student.ClassID = class.ClassID

--查询所有班级的班级号,班级名,学生人数,系别名称

select classid, classname, studentnum, Departmentname

from class c join department d on c.departmentid = d.DepartmentID

--查询所有学生的学号,姓名,课程名称,成绩

select student.StudentID, StudentName, CourseName, Grade

from Student left join Grade on Student.StudentID = Grade.StudentID left join course on Course.CourseID = Grade.CourseID order by StudentID --排序

----查询所有没有选课的学生的学号,姓名

select student.StudentID, StudentName

from Student left join Grade on Student.StudentID = Grade.StudentID left join course on Course.CourseID = Grade.CourseID where Grade.StudentID is null

--查询所有还没有班级的系部名称

select *

from class right join Department on class.DepartmentID =

Department.DepartmentID

where ClassID is null -- 查询什么为空一般查询该表的主键

--查询数据库原理与应用的任课老师是谁

select distinct teachername

from Teacher join Schedule on Teacher.TeacherID = Schedule.TeacherID join Course on Course.CourseID = Schedule.CourseID where CourseName = '数据库原理与应用'

select * from Schedule

select * from Course

select * from Department

--查询所有教师的教师号,教师名,系部名

select TeacherID, TeacherName, DepartmentName

from Teacher left join Department on Teacher.DepartmentID =

Department.DepartmentID

--查询所有老师的授课情况,输出教师名,课程名

select distinct TeacherName, CourseName

from Teacher left join Schedule on Teacher.TeacherID = Schedule.TeacherID left join Course on Course.CourseID = Schedule.CourseID

--可以右击视图选择新建视图,再选择要关联的表 --------------------------------备份和恢复-------------------------- --备份数据库格式

backup database 要备份的数据库名 to disk ='要备份到的路径(要写备份的文件名)'

--列把xkgldata备份到D:/java/Database/backup文件名是xkgldata.bak --备份的文件名可以随便取名,恢复数据库时会重新命名的

backup database xkgldata to disk =

'D:/java/Database/backup/xkgldata.bak'

--恢复数据库格式

restore database 要恢复的数据库名 from disk = '备份数据库的路径'

--有时可能不需要备份整个数据库所以也可以备份表 -------------------------------子查询---------------------------- --格式

select 列名

from 表名

where 列名 in(select 列名 from 表名...)

--把一个查询的结果作为另一个查询的条件

--查询与赵宏同班同学的信息

select *

from Student

where ClassID in(select ClassID

from Student

where StudentName = '张宏')

--查询'09软件技术班'的所有学生的学号,姓名

select StudentID, StudentName

from Student

where ClassID = (select ClassID

from class

where ClassName = '09软件技术班')

--一个可以用"="多个可以用"in",一般都用"in"

--将计算机系的男老师的宿舍改为"东软宿舍栋"

update Teacher

set HomeAddr = '东软宿舍栋'

where Sex = '男' and DepartmentID in(select DepartmentID

from Department

where DepartmentName = '计算机系')

select * from Teacher

--删除信管系的所有学生信息

delete Student

where ClassID in(select ClassID

from class

where DepartmentID in(select DepartmentID

from Department

where DepartmentName = '信管系'))

--查询张宏的所有成绩记录

select *

from Grade

where StudentID in(select StudentID

from Student

where StudentName = '张宏')

-----------------------------在insert中使用子查询---------- --格式

insert into 表名(列名) select语句

--创建stubak 表

create table stubak(

studentID char(12) primary key,

studentName char(8),

sex char(2)

)

--将所有学生的学号,姓名,性别插入到stubak表中

insert into stubak(studentID, studentName, sex)

select studentid, Studentname, sex from Student

select * from stubak

--清空stubak

delete stubak

--例将计算机系的所有学生记录插入到stubak表中(利用的是多表连接)

insert into stubak(studentID, studentName, sex)

select StudentID, StudentName, Sex

from Student join class on student.ClassID = class.ClassID

join Department on Department.DepartmentID =

class.DepartmentID

where DepartmentName = '计算机系'

select * from class

--例将计算机系的所有学生记录插入到stubak表中(利用的是子查询)

insert into stubak(studentID, studentName, sex)

select StudentID, StudentName, Sex

from Student

where ClassID in(select ClassID

from class

where DepartmentID in(select DepartmentID

from Department

where DepartmentName = '计算机系'))

--------------------------select into 语句----------------------- --格式

select 列名 into 新表名

from 表名

--将所有学生的学号,姓名,性别插入到stubak1表中(不用手动建表,功能强大) select StudentID, StudentName, Sex into stubak1

from Student

select * from stubak1

--将所有男生的记录插入到stubak2表中

select * into stubak2

from Student

where Sex = '男'

select * from stubak2

--------------------------联合查询-------------------------

--功能:把两个或多个select语句查询的结果组合成一个结果集

select 语句

union [all]

select 语句

--联合查询student与stubak表

select StudentID, StudentName, sex from Student

union all--不写all则代表去掉重复的行

select * from stubak

-------------------------------在子查询中使用all或any---------------- --如果子查询中返回的是单列多值,则必须在子查询前使用关键字all或any --查询比张宏/姜明凡年龄都大的学生信息

select *

from Student

where Birth <all (select Birth

from Student

where StudentName in('张宏', '姜明凡'))

------------------------复习查询--------------------------------- select [distinct] [top n] 列名 [into 新表名]

from 表 [连接类型] join 表 on 表.列 = 表.列

where 条件

order by 列名 asc/desc -----------------------------------------数据汇总

--------------------------------------

--聚合函数

avg() --平均值

max() --最大值

min() --最小值

sum() --求和

count() --记数

datediff(类型, 日期, 日期) --返回两个日期的差

--查询所有女生的人数,平均年龄

select COUNT(*) 记数, avg(DATEDIFF(YY, Birth, GETDATE()))平均年龄 from Student

where Sex = '女'

select * from Student

--查询张宏的平均成绩,最高成绩,最低成绩,总成绩,修课门数

select AVG(Grade) 平均成绩,

MAX(Grade) 最高成绩,

MIN(Grade) 最低成绩,

SUM(Grade) 总成绩,

COUNT(*) 修课门数

from Grade join Student on Grade.StudentID = Student.StudentID where studentname = '张宏'

--用子查询

select AVG(Grade) 平均成绩,

MAX(Grade) 最高成绩,

MIN(Grade) 最低成绩,

SUM(Grade) 总成绩,

COUNT(*) 修课门数

from Grade

where StudentID in(select StudentID

from Student

where StudentName = '张宏')

-----------------------------------分类汇总

-----------------------------------------------

--功能:将表中的数据分成多个组,每一个组都会返回一个统计值

--注意如果分类汇总有where语句,则选进行where语句再分类汇总

--格式

group by 分组列

having 条件 --对统计结果进行筛选

--查询男女生的人数

select sex, --分组列可以输出

count(*) 人数,

avg(DATEDIFF(YY, Birth, GETDATE()))平均年龄

from Student

group by Sex

--查询每个学生的平均成绩,最高成绩,最低成绩,总成绩,修课门数(组合分组)

select grade.StudentID,

studentName,

sex,

AVG(Grade) 平均成绩,

MAX(Grade) 最高成绩,

MIN(Grade) 最低成绩,

SUM(Grade) 总成绩,

COUNT(*) 修课门数

from Grade join Student on Grade.StudentID = Student.StudentID group by grade.StudentID, StudentName, sex

having AVG(Grade) >= 80 --对统计完成的结果再进行筛选

---------------------------明细汇总

-----------------------------------------

--格式

[order by 分组列] --不是必须的

compute 聚合函数 by 分组列

--注:必须先按分组列排序

--例

select *

from Student

compute count(studentid)

--例:查询男女生人数,输出详细信息与统计结果

select *

from Student

order by sex

compute count(studentid) by sex

--查询每个学生的平均成绩,最高成绩,最低成绩,总成绩,修课门数(组合分组) select grade.StudentID,

studentName,

sex,

AVG(Grade) 平均成绩,

MAX(Grade) 最高成绩,

MIN(Grade) 最低成绩,

SUM(Grade) 总成绩,

COUNT(*) 修课门数

from Grade join Student on Grade.StudentID = Student.StudentID group by grade.StudentID, StudentName, sex

having AVG(Grade) >= 80 --对统计完成的结果再进行筛选

select * from V_jsj

where avggrade < 60

------------------------------创建视图

-------------------------------------------------

create view 视图

as

select 语句

-------------------修改视图---------------------------------- alter view 视图名

as

select 语句

alter view v_student

as

select * from Student

select * from v_student

-------------------------删除视图-------------

drop view 视图名

--使用系统存储过程查看视图信息

sp_help----显示数据库对象的特征

sp_helptext----查看数据库对象在系统表中的定义

sp_depends----显示数据库对象所依赖的关系

sp_help student

sp_helptext v_stu_cur_grad

sp_depends v_stu_cur_grad

--修改v_stu_cur_grad视图,添加性别,出生日期,课程学分

drop view v_stu_cur_grad

SELECT dbo.Student.StudentID AS 学号,

dbo.Student.StudentName AS 姓名,

dbo.Course.CourseName AS 课程名,

dbo.Grade.Grade AS 成绩,

Sex,

Birth,

Credit

FROM dbo.Course INNER JOIN

dbo.Grade ON dbo.Course.CourseID = dbo.Grade.CourseID INNER JOIN

dbo.Student ON dbo.Grade.StudentID =

dbo.Student.StudentID

----------------------------对视图的文本加密------------------ alter view 视图名

with encryption --这里加上这个语句就可以加密

as

select 语句

------------------视图改名----------------------

sp_rename 旧名, 新名 ----------------数据库分页-----------------

select top 每一页的大小 *

from 表名

where id not in(select top (每一页的大小*(页数-1)) id

from 表名

order by id)

order by id

select top 4 * from article

where pid = 0 and id not in(select top (4*1) id

from article

where pid = 0

order by pdata desc)

order by pdata desc

select * from article

where pid = 0

order by pdata desc ------------------数据库对象命名规则-------

服务器名.数据库名.拥有者名.对象名

select * from xkgldata.dbo.student

------------------------变量类型---------------

--全局变量

select @@ERROR--返回最后执行的Transact-SQL 语句的错误代码

select @@CONNECTIONS --连接的次数

select @@IDENTITY --返回最后插入的列值

select @@ROWCOUNT --返回受上一语句影响的行数

--局部变量

--创建局部变量

declare 局部变量名 数据类型[...n]

--局部变量赋值

set 变量名=值

select 变量名=值[,...n]

--查询与张宏同班的学生信息

--声明变量

declare @cid char(10)

--赋值

select @cid = classid from Student where StudentName = '张宏' select * from Student where ClassID = @cid

---------------------函数---------------------------

--数学函数

CEILING (数值) --朝上取整

FLOOR (数值) --朝下取整

ROUND (数值, 保留位数) --将给定的数据四舍五入到给定的位数

PI() --常量3.14159265358979

RAND([seed]) --返回到之间的随机float值(给定了seed就是得到不变的-1的数值)

select PI(), CEILING(PI()),FLOOR(PI()), ROUND(PI(), 2),

ROUND(PI(), 3), ROUND(PI(), -1), ROUND(123456, -2)

select floor(RAND(1)*10000000)

--字符串函数

LTRIM(字符串) --删除字符串前面的空格

RTRIM(字符串) --删除字符串后面的空格

left(字符串, 长度) --返回字符串从左边开始指定个数的字符串

right(字符串, 长度) --返回字符串从右边开始指定个数的字符串

substring(字符串,起始位置, 长度) --返回字符串从指定位置到指定的长度的字符串

select 'a'+RTRIM(LTRIM(' b '))+'c'

---------------------转换函数---------------------------

cast --将一个数据类型强制转换成另一个数据类型

cast(表达式 as 新的数据类型)

--CONVERT 函数允许用户把表达式从一种数据类型转换为另一种数据类型, --并且还在日期的不同显示格式之间进行转换。(一般用在日期转换) --CONVERT(新的数据类型,表达式[,日期显示格式])

--style参数:提供了各种日期显示格式。

select '123'+2 --一个字符串加一个整型,系统会先把字符串转换成整型 select '123'+CAST(2 as CHAR(1))

select getdate(), LEFT(GETDATE(), 10), CONVERT(char(10), GETDATE(), 20)

--例

select * from Student

where ClassID = 'Cs010902'

select left(StudentID, 11) + cast(RIGHT(studentID, 1)+1 as CHAR(1)), StudentName

from Student

where ClassID = 'Cs010902'

--------------日期函数----------------------

datediff(日期部分, 开始日期, 结束日期)

getdate() --当前系统日期

year(日期)

month(日期)

day(日期)

select DATEDIFF(DD, GETDATE(), '2012-7-18')

-----------------------系统函数-------------------

--COALESCE(参数...):返回其参数中第一个非空表达式。

--ISNULL(表达式,值):用指定值替换表达式中的指定空值

select coalesce(null, 456, null, 123, null)

select Studentid, studentname, isnull(homeaddr, '暂无地址')

from student

------------------------用户自定义函数------------------------------ /*1. 创建用户自定义函数的语法形式如下:

CREATE FUNCTION 函数名(形式参数名称AS 数据类型)

RETURNS 返回数据类型

BEGIN

函数内容

RETURN 表达式

END

2. 调用用户自定义函数的基本语法:

变量=用户名.函数名(实际参数列表)

*/

--例创建一个函数IDToName(sid)

create function IDToName(@sid as char(12))

returns char(8)

begin

declare @sname char(8)

select @sname = StudentName from Student where StudentID = @sid return @sname

end

select dbo.IDToName('St0109020001')

select studentid, dbo.IDToName(StudentID), Grade from grade

------------------流程控制--------------------

1.begin ... end

2.if ... else

if (条件)

sql代码

else 代码

sql代码

if (@@ERROR <> 0)

print'出错了'

else

print '成功了'

3.case 语句

case

when 条件 then 结果

...

else 结果

end

select studentId, grade,

case

when grade >= 90 then '优秀'

when grade >= 75 then '良好'

when grade >= 60 then '及格'

else '不及格'

end 等级

from grade

/*

4.WHILE…CONTINUE…BREAK语句

SQL语言中的循环语句,用来重复执行SQL 语句或语句块的 */

--例求*2*3...*10的值

declare @i int, @j int

select @i = 1, @j = 1

while (@i <= 10)

begin

set @j = @j*@i

set @i = @i+1

end

select @j ---------------------------------

--格式

create proc 存储过程名

@参数

as

程序代码

--调用

exec 存储过程名 参数

--删除

drop proc 存储过程名

--例创建一个存储过程返回教师表的所有信息up_select_teacher create proc up_select_teacher

as

select * from Teacher

--调用

exec up_select_teacher

--例创建一个通过教师号查询教师信息的存储过程

create proc up_select_teacher_id

@tid char(8)

as

select * from Teacher where TeacherID = @tid

--调用

exec up_select_teacher_id 'dep01005'

--练习通过学号查询学生详细信息的存储过程

create proc up_select_student_id

@sid char(12)

as

select * from student where StudentID = @sid

exec up_select_student_id '11311110805'

--练习写一个分页的存储过程

create proc up_paging

@

--创建一个输入教师信息的存储过程

create proc up_insert_teacher

@teacherID char(8),

@teacherName char(12),

@sex char(2),

@birth datetime,

@profession char(8),

@telephone varchar(20),

@homeAddr varchar(50),

@departmentID char(4)

as

insert into Teacher

values(@teacherID, @teacherName, @sex, @birth, @profession,@homeAddr, @departmentID)

select * from Teacher

--创建一个修改教师信息的存储过程

create proc up_update_teacher

@teacherID char(8),

@teacherName char(12),

@sex char(2),

@birth date,

@profession char(8),

@telephone varchar(20),

@homeAddr varchar(50),

@departmentID char(4)

as

update Teacher

set TeacherName = @teacherName, @telephone,

Sex = @sex,

Birth = @birth,

Profession = @profession,

Telephone = @telephone,

HomeAddr = @homeAddr,

DepartmentID = @departmentID

where TeacherID = @teacherID

--创建一个修改教师信息的存储过程

create proc up_delete_teacher

@tid char(8)

as

delete teacher where teacherID = @tid ---------------------------------

--格式

create trigger 触发器名

on 表或视图名

触发时机 触发事件

as

程序代码

-------------------------------注意---------------------------------- 触发时机: after/for(后) 在操作完成后触发

instead of(前) 在操作完成前出发,不执行操作本身

触发事件: insert, update, delete

两个特殊表: inserted, deleted

-------------------------------------------------------------------------

--例让student表只读

create trigger tr_student_readonly

on student

instead of insert, update, delete

as

print'student is readonly'

delete student where StudentName = '张宏'

update student set Sex = '女' where StudentName = '张宏'

select * from student

--删除

drop trigger tr_student_readonly

--例创建一个stu表,并让它与student同步

--创建stu表

select * into stu from student

select * from stu

--创建insert触发器

create trigger tr_student_insert

on student

after insert

as

insert into stu select * from inserted

insert into student values('1011', 'jack', '男', '2011-09-09', null, null, null)

--创建delete触发器

create trigger tr_student_delete

on student

after delete

as

delete stu where studentid in(select studentid from deleted )

delete student where StudentID = '101'

--创建update触发器

create trigger tr_student_update

on student

after update

as

delete stu where studentid in(select studentid from deleted)

insert into stu select * from inserted

update student set Sex = '女' where StudentName = '张宏'

update student set ClassID = 'Cs010901' where ClassID is null grant --授予权限

revoke --收回权限

deny --拒绝权限

更多相关推荐:
如何修改SQLserver 端口号

如何修改SQLserver端口号开始程序Mcirosoftserver配置管理器点击TCPIP右键点击属性即可修改TCP端口号重启服务即可

sqlserver20xx修改默认端口号图解

sqlserver20xx修改默认端口号图解很多新手在用sqlserver20xx与jdbc连接时都会出现MicrosoftSQLServer20xxDriverforJDBCErrorestablishing...

修改SQL_Server_20xx的端口号

Oneline之一修改SQLserver20xx的端口号一看ping服务器IP能否ping通这个实际上是看和远程sqlserver20xx服务器的物理连接是否存在如果不行请检查网络查看配置当然得确保远程sqls...

更改SQL Server 20xx 端口号

查看sqlserver的端口号通过SqlServer配置管理器SSCM步骤一首先打开SSCM如下图所示然后再sqlserver网络配置中开启TCPIP协议如下图所示在这里我们要将协议中的TCPIP协议开启然后修...

SQLserver20xx-tcp-ip 端口设置启动1433的配置

SQLServer20xx连接本地端口1433解决方案刚装的SQLserver20xx数据库完成后一般无法直接连接端口1433此时连接一般会失败现在把在装完程序后连接端口1433前要做的几件事情和注意事项总结一...

如何打开sql server 20xx 的1433端口

如何打开sqlserver20xx的1433端口1433端口是SQLServer默认的端口SQLServer服务使用两个端口TCP1433UDP1434其中1433用于供SQLServer对外提供服务1434用...

SQL Server20xx 数据库引擎分配 TCPIP 端口号

为SQLServer数据库引擎分配TCPIP端口号1在SQLServer配置管理器的控制台窗格中依次展开SQLServer网络配置lt实例名gt的协议然后双击TCPIP2在TCPIP属性对话框的IP地址选项卡上...

连接SQL server20xx数据库端1433端口的正确方法

连接SQLserver20xx数据库端1433端口的正确方法20xx0220204949阅读14评论0字号大中小订阅安装完程序后连接端口1433前要做的几件事情和注意事项总结一下步骤1关闭数据库引擎关闭数据库引...

win7系统java 连接 sqlServer20xx 图文详解

java连接sqlServer20xx图文详解20xx05272211呼呼真不容易啊终于能在eclipse下成功连接数据库了碰到好多问题上了好多网站问了好多高手终于能用啦OO哈哈哈下面我就把具体的步骤和可能会碰...

如何打开sql server 20xx 的1433端口

如何打开sqlserver20xx的1433端口配置工具gtSqlServerConfigurationManagergtMSSQLSERVER的协议看看TCPIP协议是否启动如果启动右键菜单点quot属性qu...

如何打开sql server 20xx 的1433端口

如何打开sqlserver20xx的1433端口配置工具gtSqlServerConfigurationManagergtMSSQLSERVER的协议看看TCPIP协议是否启动如果启动右键菜单点quot属性qu...

远程连接sql server 20xx无法打开1433端口的解决办法

如果你的sqlserver20xx远程连接时无法打开1433端口请按照以下顺序进行检查和修正1如果你是win20xx那么一定要安装sql的补丁sp3a检查你的SQL有没有打补丁没有的话要打上补丁检查的方法是在查...

sqlserver端口号(19篇)