数据库开发大全(呕心沥血之作)_第1页
数据库开发大全(呕心沥血之作)_第2页
数据库开发大全(呕心沥血之作)_第3页
数据库开发大全(呕心沥血之作)_第4页
数据库开发大全(呕心沥血之作)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-作者xxxx-日期xxxx数据库开发大全(呕心沥血之作)【精品文档】数据库摘要3一数据库的创建31.创建数据库库32.更改数据库的大小33.收缩数据库的大小4二、数据的操作41.创建表42.查看表的内容43.重命名表44.重命名列:45.添加新列:46.更改列的数据类型:47.删除列:48.删除表:49. 删除表的所有数据:410.创建主键约束511.创建外键约束5三、数据库的操作51.创建表52.添加数据62)选择性插入数据63)查看表64)更新数据65)删除数据6四、select查询语句61.普通查找61)显示几条72)where条件72.模糊查找73.数据总汇71)将查询数据放到新表中

2、72)查找空记录73)group by分组84)having与where在分组中84)排序85)汇总9五.多表查询与操作101.交叉查询102.交叉连接103.自然连接104.自身连接105.外部连接106.消除重复数据107.复合查找118.子查询119.带有比较运算符的子查询1210.带有ANY 或 ALL运算符的子查询1211.带有EXISTS(存在exists)运算符的子查询12六、数据的完整性12一)约束131、概念132.数据的分类133.约束类型134.检查约束135.默认约束146.删除约束14二)规则141.定义规则:142.绑定规则:143.解除绑定144.删除规则14三)

3、使用默认141、创建默认:142.默认绑定153.解除绑定154.删除默认15七、索引15一)、索引的优点15二)、索引的缺点15三)、索引的分类151、聚集索引152、非聚集索引15四)、索引的操作151、使用对象资源管器创建索引152、使用CREATE INDEX 语句在查询分析器中创建索引153.查看索引信息164.删除索引16八、视图161.创建视图16创建视图163.用视图修改数据17九、存储过程与触发器17一)创建、执行、修改、删除简单的存储过程172查询存储过程173.带条件存储过程174.查看存储过程的三种不同信息185.删除存储过程18二)触发器181.临时表182.查看触发

4、器信息193.删除触发器19十、函数19一)聚合函数19二)数学函数20三)配置函数20四)时间函数20五)、字符串函数20六)rank()返回结果集的分区内每行的排名21十一、备份数据库22十二、还原数据库231.分离数据库232.还原数据库23摘要 Sql server2005是一个全面的数据库平台,它是基于C/S模式(Client/Server 即客户端/服务器模式)的大 型分布式关系型数据库管理系统,它对数据库中的数据提共有效的管理,有效地实现数据完整性和安全性。 Sql server 2005共有六个不同的版本,分别是企业版、标准版、工作组版、开发版、简易版、移动版。 数据(Data

5、):所谓数据就是对事物的描述。 数据库(Database)是指以一定的组织形式存放在计算机存储介质上的相互关联的数据的集合。CREATE DATABASE xiaoyue ON PRIMARY(NAME=bao.mbf ,FILENAME= f:bao.mbf,SIZE=5mb,MAXSIZE=50mb,FILEGROWTH=10%)一数据库的创建CREATE DATABASE bao_wen(数据库名称) ON PRIMARY(NAME= , (逻辑名称)FILENAME= e , (存储位置)SIZE=5mb, (数据库大小)MAXSIZE=40mb, (最大值)FILEGROWTH=10

6、% (增长值)/ 最后这个不需要用逗号;)ALTER DATABASE xiaoyue MODIFY FILE( NAME=bao.mbf, SIZE=15mb)DBCC SHRINKDATABASE(xiaoyue,1) /dbcc数据库控制台指令EXEC SP_RENAMEDB xiaoyue, baowenweiDROP DATABASE bao_wen选中需要分离的数据库点击右键任务分离即可。二、数据的操作 create table table_name(学号int primary key identity ,名称char(6) not null,专业方向varchar(10) not

7、 null,系部代码char(2) not null,备注varchar(50)EXEC sp_help table_name:EXEC sp_help old_table_name,new_table_name4.重命名列:exec sp_rename table_name.old_name,new_name,column如: exec sp_rename table_name.备注,说明,column它是将table_name表中的备注,改为说明。5.添加新列:alter table table_name add 新的一列varchar(33)6.更改列的数据类型:alter table

8、table_name alter column 新的一列int注:在修改和创建过程中,要注意空格。7.删除列:alter table table_name drop column 新的一列8.删除表:drop table table_name9. 删除表的所有数据:Truncate table table_name10.创建主键约束手动设置:展开工作表选择需要设为主键的列点击右键修改在预设主键哪里点击右键设为主键。alter table bao add constraint pk /pk为主键关键字,就是将bao这个表里面的id设置为主键primary key clustered (id)注:

9、1.主键一般都用int类型的数据做主键;他的好处就是,在设计表下面有个标识规范(将他下面的一个选项“是标识”设置为“是”),那么我们在插入新数据行的时候就会自动添加主键,从而防止了两个人同时插入新数据时重复插入主键。uniqueidentifier数据类型(guid),他通过guid算法,自动产生,他永远不会重复;(目前也是企业主流);用sql语句创建guid,select newid();在插入数据时用guid做id值可以这样写:INSERT into 系部(id,专业,姓名) VALUES (newid(),计算机,张)注:1.int型做主键缺点是导入导出时很困难;而第二种数据的缺点是占用

10、数据库空间太大;2.获取主键自动增长的值:在values前加:output inserted.id VALUES (Users, PassWord, Email),然后再属性栏里面更改ExecuteMode的属性值为Scalar即可。在调用时即可获取主键自动增长的值。long userId=Convert.ToInt64(adapter.InsertUser(tbUserName.Text,tbPassWord2.Text,tbEmail.Text);userId即是主键自动增长的值。手动设置:展开表选择键点击右键新建外键在标识名称哪里给外键起个名字在表和列规范后面那个空里点击一下会弹出一个“

11、表和列”主键选择我们需要和他有联系的表然后下面空白处点击一下设置一下主键表的主键然后点击外键表下面空白处选择需要设置外键的列表名。alter table tian add constraint wz /wz是外键关键字 foreign key (id) /我们想要设置的键,将id设置为“bao表”的外键references bao(id)说明:这里我们是将tian这个表的id设置为bao表的外键三、数据库的操作create table 系部(系部代码char(6) not null primary key,系部名称varchar(30) not null,系主任char(8)create ta

12、ble 专业(专业代码char(4) not null primary key,专业名称varchar(20) not null,系部代码char(6) constraint wz11 references 系部(系部代码)create table 班级(班级代码char(9) not null primary key,班级名称varchar(20),专业代码char(4) constraint wz1 references 专业(专业代码),系部代码char(6) constraint wz2 references 系部(系部代码)create table 学生(学号char(12) not

13、 null primary key,姓名char(8),性别char(2),出生日期datetime,入学日期datetime,班级代码char(9) constraint wz3 references 班级(班级代码),系部代码char(6) constraint wz4 references 系部(系部代码),专业代码char(4) constraint wz5 references 专业(专业代码)1)向表里插入数据INSERT into 系部 VALUES (10,计算机,张)2)选择性插入数据INSERT into 系部(系部代码,系部名称) VALUES (11,计信)注意:在选择

14、性插入中,非空值必须插入。3)查看表select * from 系部说明:查询“系部”里面的全部数据select 系部代码,系部名称,系主任from 系部说明:在表“系部”里面查询“系部代码,系部名称,系主任”4)更新数据UPDATE 系部SET 系部代码=20说明:系部代码全部变为20;UPDATE 系部SET 系部代码=20 where 系部代码=10说明:将“系部代码=10”的更改为20;注:如果插入的数据是中文,有时会出错误,那么在前面加一个N即可;如:UPDATE 系部SET 系部代码=N保文伟5)删除数据DELETE 系部说明:删除系部表里面的所有数据DELETE 系部WHERE

15、系部代码=20说明:除系部表里面系部代码等与20的记录;四、select查询语句select 系部代码,系部名称from 系部说明 :查看的是“系部代码,系部名称”这个两个字段的,显示的时候也只显示这个两个字段的数据;select 系部代码as 别名,系部名称as 别名from 系部说明:本来显示出来的列表名为“系部代码”但这样显示出来的列表名变为“别名”;因为有时我们为了更好的明白可以将这行列是什么,我们需要取一个别名来显示列表名;需要注意的是别名只是显示的时候代替了原来的名称,并没有更改原来的名称; 1)显示几条select top 1 * from 系部说明:显示一条记录 2)where

16、条件select * from 系部where 系部代码=10说明:查找系部代码等于10的记录;如果是int类型还可以用大于,等于。select * from 系部where 系部代码between 10 and 20说明:查找系部代码从10到20之间的数据;注意他们要是int类型,如果是字符型就不可以。select * from 系部where 系部代码10 and 系部代码1/错误的语法,因为where不能用聚合函数;那么就用having来做;where chongjia10 /正确;因为这里是先筛选出数据,然后再分组; group by gname改select gname from g

17、ood group by gname having count(*)1说明:将gname分组后统计总数大于1的组;select gname from good group by gname having gname上海毛巾说明:在分组中不包含“上海毛巾”注:having是用在分组后的信息过滤;必须用在和select列中相同的列;就是说select gname from good group by gnamehaving changjia10/错误;因为已经按gname排好序了,又怎么能从changjia里面筛选大于10的数据呢?所有这里这能用where。看上面;4)排序select * fro

18、m good order by mstore asc说明:将mstore按asc排序;asc是排升序;desc是排降序。select top 3 * from good order by mstore desc说明:先降序,然后再找出前三名来。select * from 系部order by 系部代码asc , 系主任desc说明:先按“系部代码”排升序,如果“系部代码”相同的那么就按“系主任”排降序。select * from 系部where 系部代码10order by 系部代码asc , 系主任desc说明:显示系部代码大于10的,然后再先按“系部代码”排升序,如果“系部代码”相同的那么

19、就按“系主任”排降序。注:where 语句必须在 order by前面;5)汇总select count(*) from good说明:总数是多少select count(*) as 总数from good说明:总数是多少,然后将数据的列表名定义为“总数”,上面的没有列表名。select count(form) as 总数from good说明:对某一列查询中数是多少select * from good order by go# compute sum(lstore)说明:先将go#排序,然后求出lstore的总和来。select go#,count(*) listfrom goodgroup

20、 by go#说明:通过go#分类后,再求出go#列表中的每组的总和,列表名为list;比如:go#中有5个老师,第一个老师在go#中出现过三次,第二个老师在go#中出现过2次,那么通过上面的统计后将显示:老师一 3,老师二 2;而下面的求解后将得出go#等于5,因为go#中有5个老师; select count(go#) from good 说明:这个是求出go#的总数select go#,count(lstore),avg(mstore)from goodgroup by go#compute avg(avg(mstore)说明:将go#分组,然后求出“lstore”的总数,在将“msto

21、re”求平均值然后再将mostore的平均值求出总平均值。第一个平均值是求go#的各项mstore的平均值,后一个是将go#的平均值在来一个总的平均值。五.多表查询与操作select * from good cross join buyer说明:查找good表和buyer表select good.go#,good.gname,buyer.bu# from good cross join buyer说明:查找good表里面的gname,和go#并且查找buyer表里面的bu#。select 学生.姓名,学生.性别,班级.班级名称from 学生cross join 班级where 学生.班级代码=

22、班级.班级代码说明:将班级和学生连接,连接条件是:“学生.班级代码=班级.班级代码”;然后连接的内容是:“学生.姓名,学生.性别,班级.班级名称”。“学生表”里面没有班级名称,所以我们要连接“班级表”连接的条件是:学生拿着自己所在的班级代码去找班级,而每个班级都有各自的班级代码,这样学生就能找到自己所在的班级。如果班级代码相同那么他们就在同一个班级。 select 学生.姓名,学生.性别,班级.班级名称from 学生join 班级on 学生.班级代码=班级.班级代码同上一样。select a.姓名,b.性别from 学生as a join 学生as b on a.学号=b.学号说明:自身连接需

23、要从新给定一个名字来设定。select * from 产品right join 产品销售on 产品.产品编号=产品销售.产品编号select * from 产品left join 产品销售on 产品.产品编号=产品销售.产品编号select * from 产品join 产品销售on 产品.产品编号=产品销售.产品编号完全连接:select * from 产品full join 产品销售on 产品.产品编号=产品销售.产品编号说明:a.左连接是左边(产品)全部显示,而右边(产品销售)根据给出的条件“产品.产品编号=产品销售.产品编号”来列出,如果左边有的而右边没有的则显示为null ;如果右边有

24、的左边没有的则不显示。b.直接用 join 来,那么只显示他们相同的,其余一例不显示。 c.如果用full来连接那么将全部连接。互相没有的用空值来表示。select 姓名,性别,出生日期from 学生union allselect 姓名,性别,出生日期from 学生(也可以是另一个表)注:union 主要用在将两个表联系起来查询,但插叙的字段必须在两个表中都出现,个数(这里有三个字段)也必须相同;Union也可以将表里面的重复数据给消除,在这里用union all是将“姓名,性别,出生日期”字符类类似与求“或”运算,那么重复的更定只显示一条了。select 姓名,学费from 学生union

25、select 学费总计 count(学费) from 学生说明:先显示”姓名,学费”;然后姓名的最后一列将多出来一个“学费总计”,而学费最后一列将出现学费的综合数;注:“count(学费)”这一列将统计对应着上面的“学费”这一列;不能乱写的。select distinct 系部代码from 系部说明:查看系部中的系部代码,如果系部代码有重复的,那么重复数据只显示重复中的一条记录;注:distinct是如果被查询的字段是两个字段(或两个字段以上),那么要两个字段都重复就就只显示一条记录,而两个字段仅一个字段重复仍然全部显示;SELECT 学生.学号,学生.姓名,学生.性别,班级.班级名称FROM

26、 学生JOIN 班级 ON 学生.班级代码=班级.班级代码and 性别=男说明:在“学生”与“班级”中查找条件为“学生.班级代码=班级.班级代码and 性别=男”SELECT 学生.学号,学生.姓名,学生.性别,班级.班级名称,专业.专业名称,系部.系部名称FROM 学生JOIN 班级ON 学生.班级代码=班级.班级代码 JOIN 专业ON 学生.专业代码=专业.专业代码 JOIN 系部ON 学生.系部代码=系部.系部代码说明:a.查找内容为:学生.学号,学生.姓名,学生.性别,班级.班级名称,专业.专业名称,系部.系部名称 b.查找范围和条件:FROM 学生JOIN 班级ON 学生.班级代码

27、=班级.班级代码 JOIN 专业ON 学生.专业代码=专业.专业代码 JOIN 系部ON 学生.系部代码=系部.系部代码SELECT * FROM 学生WHERE 班级代码IN (SELECT 班级代码FROM 班级WHERE 专业代码IN (SELECT 专业代码FROM 专业WHERE 系部代码IN (select 系部代码from 系部where 系部代码in (01) )说明:本来用SELECT * FROM 学生WHERE 系部代码IN(01)也能查找到的。但如果系部代码中没有(01)这时我们就要通过学生和外部的联系来一层一层的找到。例:根据学生姓名查出学生所在的系部信息select

28、 * from 系部where 系部代码= (select 系部代码from 专业where 专业代码= (select 专业代码from 班级where 班级代码= (select 班级代码from 学生where 姓名=刘德华) )select * from 学生where 学号not in(select top 3 学号from 学生order by 学号desc)order by 学号desc说明:查询不在前3条的所有学生,然后排序;SELECT * FROM 学生WHERE 出生日期(SELECT 出生日期FROM 学生WHERE 姓名=刘德华)说明:先查出“刘德华”的出生日期,然后

29、再查出大于这个生产日期的记录来。10.带有ANY 或 ALL运算符的子查询select * from 学生where 高考分数all(select 高考分数from 学生where 学号in(,)说明:查处大于学好为(,)的所有学生。11.带有EXISTS(存在exists)运算符的子查询使用EXISTS运算符后,子查询不返回任何数据,此时,若子查询结果非空(即至小存在一条记录) 则父查询的WHERE 子句返回真(TRUE),否则返回假(FLASE)select * from 学生where exists (select *from 学生where 姓名=林俊杰)说明:先查“林俊杰”如果有,再

30、将全部学生的记录显示出来,如果没有那么就不显示。select * from 学生 where exists (select *from 系部where 学生.系部代码=系部.系部代码)说明:查出学生的系部代码=系部的系部代码来。六、数据的完整性 第五章介绍了数据库的基本操作,对于数据的添加、删除、修改操作都可能对数据库中的数据造成破坏或出现相关数据不一致的现象。要保证数据的正确无误和相关数据的一致性,除了认真地进行操作外,更重要的时数据库系统本身需要提供维护机制。一)约束1、概念:数据完整性是指数据的精确性,和可靠性。它是防止数据库中存在不符合语义规定的数据。“学生” 表中有 学号,姓名,性别

31、,班级代码,等等。在这张表中都应该有唯一的学号,不能有两个或多个学生的学号相同;在 性别 字段里数据只能为 男 或 女 不可能有其它数据。:完整的数据类型分四类:实体完整性、域完整性、参照完整性、用户定义的完整性。SQL Server 2005a、实体完整性 实体完整性,规定表中的每一行在表中是唯一的实体。也可以这样说,在表中不可能存在完全相同的记录,主键的存在保证了任何记录都不重复的。b、域完整性域完整性是指数据表中的字段必须满足某种特定的数据类型或约束。其中约束又包括取值范围、精度等规定。c、参照完整性 参照完整性是指两个表的主键和外键的数据应对应一致。它确保存了主键的表中对应其它表的外键

32、的存在,即保证了表之间数据的一致性,防止了数据丢失或无意义的数据。禁止在从表中插入包含主表中不存在的关键字的数据行。d、用户定义的完整性不同关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性针对某个特定关系数据库的约束条件,它反映了某一具体应用所涉及的数据必须满足的语义要求。alter table 班级add constraint bjwyunique nonclustered(班级名称)说明:将“班级”表中的“班级名称”设置为索引,并且唯一标识。这样在录入数据时就不能录入重复的班级名称。:检查约束对输入的数据的值做检查,可以限定数据输入,从而维护数据的域完整性

33、。操作:(1)在 “对象资源管理器” 窗口中,右击需要设置唯一约束的表,在弹出的菜单中选“修改”命令。(2)在 ”表设计器” 窗口中右击需要创建检查约束的字段,选择“CHECK约束”命令,然后添加栓查约束如图设置 用代码:ALTER TABLE 学生ADD CONSTRAINT ck_CHECK(高考分数300 and 高考分数300 and a600注:是必须写的。2.绑定规则:execute sp_bindrule gz,学生.高考分数说明:将“gz”规则绑定到“学生.高考分数”中去。还可以将规则绑定到其他表中的列去,比如:老师.专业分数;这就是可以被多个表使用。EXECUTE sp_un

34、bindrule 学生.高考分数DROP RULE gz三)使用默认默认(也称默认值)是一种数据对象,它与DEFAULT(默认)约束的作用相同,也是当向表中插入数据时,没有为列输入值时,系统自动给列赋一个 “默认值”。与DEFAULT 不同的是它类似规则,通过一次定义,可以多次使用。1、创建默认:在查询分析器中,创建默认对象的语法格式如下:CREATE DEFAULT default_nameas 常量表达式,可以包含常量、内置函数或数学表达式例:CREATE DEFAULT d as 男EXECUTE sp_bindefault d,学生.性别说明:当我们填写学生表时,如果是性别是男的我们就

35、可以不用填写了,我们设定的默认值为男。EXECUTE sp_unbindefault 学生.性别DROP DEFAULT 说明:在删除时必须先解除绑定七、索引一)、索引的优点1.创建唯一性索引,保证数据库表中每一行数据的唯一性2.大大加快数据的检索速度,这也是创建索引的最主要的原因3.加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。二)、索引的缺点1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。3.当

36、对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度三)、索引的分类1、聚集索引聚集索引是指数据行在表中的物理存储顺序 。当为一个表的某列创建聚集索引时,表中的数据会按该列进行重新排序,然后再存储到磁盘上。因此,每个表只能创建一个聚集索引。2、非聚集索引非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。 四)、索引的操作1、使用对象资源管器创建索引在“对象资源管理器“ 窗口中,选择要建立索引的表,然后展开表结点,右击“索引”结点,在弹出的菜单中选择“新建索引”。2、使用CREATE INDEX 语句在查询分析器中

37、创建索引CREATE UNIQUECLUSTEREDNONCLUSTERED INDEX 索引名ON 表名(列名)UNIQUE CLUSTERED NONCLUSTERED 唯一索引 聚集索引 非聚集索引例:CREATE CLUSTEREDINDEX 索引ON 产品(产品编号)说明:这里创建了一个聚集索引a.使用对象资源管器查看索引信息右击表中已建的索引,选择属性,打开“索引属性”。b.使用系统存储过程查看索引信息sp_helpindex table_name 查看索引信息exec sp_helpindex 产品说明:前面加exec为系统索引。和不加exec的区别我目前还没发现。a使用对象资源

38、管理器删除索引展开“表”结点,再展开“索引”结点,右击要删除的索引。b、便用SQL语句删除索引例:DROP INDEX 产品.索引八、视图视图是一个虚似表,和真实的表一样,视图包含一系列带有名称的列和行数据。为了屏蔽数据的复杂性,简化用户对数据的操作,保护数据安全,常常创建不同的视图。CREATE VIEW V1 ASSELECT 学生.学号,学生.姓名,班级.班级名称,专业.专业名称,系部.系部名称 FROM 学生join 班级ON 学生.班级代码=班级.班级代码join 专业ON 班级.专业代码=专业.专业代码join 系部ON 专业.系部代码=系部.系部代码查看视图:select * f

39、rom v1说明:SELECT 学生.学号,学生.姓名,班级.班级名称,专业.专业名称,系部.系部名称 FROM 学生join 班级ON 学生.班级代码=班级.班级代码join 专业ON 班级.专业代码=专业.专业代码join 系部ON 专业.系部代码=系部.系部代码本来可以用上面的代码来直接看到我们想要查看的数据,视图是由我们创建的,当我们想看时用 select * from v1 直接来查看即可而不必用上面的代码来查看。视图的用途是方便用户查询,而且我们在创建视图时可以选择性的来定义,有些重要数据我们不必创建,当用户查从视图查看时就看不到数据了。2.t-sql创建视图CREATE VIEW

40、 视图名WITH ENCRYPTION SCHEMABTNDINGAS 查询语句 ENCRYPTION 加密视图SCHEMABTNDING 视图及表的架构绑定例:加密视图:create view 加密视图with encryptionas select * from 班级说明:加密视图不可以修改。例:架构视图create view 架构视图with schemabindingas select 班级名称,专业代码,系部代码from dbo.班级注:架构视图必须按照上面select这种格式。插入数据:insert v2(班级代码,班级名称,系部代码) values (010,网络版,02)修改数

41、据:update v2 set 班级代码=020 where 班级代码=010查看视图:exec sp_helptext v2删除视图:drop view v2九、存储过程与触发器存储过程由一组预先编辑好的SQL语句组成。将其放在服务器上,由用户通过指定存储过程的名称来执行。 触发器是一种特殊类型的存储过程,它不是由用户直接调用的,而是当用户对数据进行操作(包括数据的INSERT、UPDATE、DELETE操作)时自动执行。一)创建、执行、修改、删除简单的存储过程在SQL Server 中通常可以使用查询分析器执行SQL语句创建存储过程。CREATE PROC 储存过程名parameter d

42、ata_type =default OUTPUT,.ASSQL语句例:1创建存储过程CREATE proc V ASSELECT 学生.学号,学生.姓名,班级.班级名称,专业.专业名称,系部.系部名称 FROM 学生join 班级ON 学生.班级代码=班级.班级代码join 专业ON 班级.专业代码=专业.专业代码join 系部ON 专业.系部代码=系部.系部代码2查询存储过程:execute vCREATE proc Vssex varchar(10),id varchar(10) ASSELECT 学生.学号,学生.姓名,班级.班级名称,专业.专业名称,系部.系部名称 FROM 学生joi

43、n 班级ON 学生.班级代码=班级.班级代码and 学生.性别=sexjoin 专业ON 班级.专业代码=专业.专业代码join 系部ON 专业.系部代码=系部.系部代码and 系部.系部代码=id查询:execute vs 男,01说明:先定义两个变量,然后再给两个变量设置赋值关系,在查询时就可以为其添加条件。create proc p3set varchar(10),get varchar(10) outputasselect get=学号from 学生where 姓名=setexecute sp_helptext p3execute sp_depends p3execute sp_hel

44、p p3drop procedure p3+二)触发器触发器的优点(1)触发器自动执行.在对表中的数据做了任何修改之后立即被激活.(2)触发器能够对数据库中的相关表实现级联更改.inserted表和deleted表用于存放对表中数据行的修改信息。他们是触发器执行时自动创建的。当触发器工作完成,它们也被删除。它们是只读表,不能向它们写入内容。a.inserted表:用来存储INSERT和UPDATE语句所影响的行的副本。意思就是在inserted表中临时保存了被插入或被更新后的记录行。在执行 INSERT 或UPDATE 语句时,新加行被同时添加到inserted表和触发器表中。CREATE T

45、RIGGER chufaqi3(自定义的触发器名称)ON 产品FOR INSERTasdeclare a char(10)select a=产品编号from inserted(inserted表)insert into 产品销售values(a,0)说明:在产品表中添加一个触发器(临时表的触发器)然后定义在录入产品数据时,将“产品编号”的值赋给a,而a又被产品销售所调用(产品中有“产品编号,产品名称”;而产品销售表中“产品编号,销量”)就是说,当往产品表中插入数值时,(因为产品销售中也有“产品编号”而且他们是有联系的)那么同时往产品销售中也要插入数据,相同值我们用a来赋值,产品销售表中没有的就

46、用0来代替。insert 产品values(01,电视)insert 产品values(02,彩电)结果是:b.deleted表:用来存储DELETE和UPDATE语句所影响行的副本。意思是在delete表中临时保存了被删除或被更新前的记录行。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传到deleted表中。所以可以从deleted表中检查删除的数据行是否能删除。所以当表中某条记录的某项值发生变化时,变化前的值已经通过系统自动创建的临时表deleted表和inserted表保存了被删除行或插入的记录行的副本。我们可以从这两个表中查询出变化前的值并赋给变量。sql编程

47、:CREATE TRIGGER trigger_nameON table | view FOR INSERT,DELETE,UPDATESQL语句例:CREATE TRIGGER chufaqi4ON 产品FOR deleteasdeclare a char(10)select a=产品编号from deleteddelete 产品销售where 产品编号=a删除数据:delete 产品where 产品编号=02exec sp_helptrigger 产品DROP TRIGGER chufaqi3十、函数一)聚合函数AVG ()-平均值COUNT ()-返回行中项目的数量MAX ()-最大值MIN ()-最小值SUM ()-求和用法:select 班级名称, avg(学生.高考分数) from 班级join 学生on 班级.班级代码=学生.班级代码group by 班级名称说明:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论