sqlserver 综合总结

面向抽象编程
接口-抽象类-父类-具体类
1、 复习T-SQL
	-> 数据库的建立、表的建立和约束(DDL)
		-> 建库
			if(db_id(数据库名)) is not null
				drop database 数据库名;
			create database 数据库名;
		-> 建表
			if(object_id('表名', 'U')) is null
			create table 表名
			(
				字段 类型 [约束],
				字段 类型 [约束],
				字段 类型 [约束]
			);
		-> 建约束
			alter table 表名 add constraint 约束名 约束条件
			-> 主键约束(PK_表名_字段名)
				primary key(字段)
			-> 默认约束(DF_表名_字段名)
				default(值) for 字段
			-> 检查约束(CK_表名_字段名)
				check(表达式)
			-> 唯一约束(UQ_表名_字段名)
				unique(字段)
			-> 外键约束(FK_外键表_主键表_字段名)
				* 
				alter table 外键表 add
				constraint FK_外键表_主键表_字段名
				foreign key(字段名) references 主键表(字段名);
			
	-> 数据库操作语言(DML)
		-> 基本语言
			增
				insert into 表名(字段列表) values(值列表);-- 表是存在的
				select 字段列表 into 新表名 from 旧表;	  -- 要求新表不存在
				insert into 表名(字段列表) select查询;

			删(主外键关联的时候,删除有时会出问题)

				delete from 表名 where 条件;
				truncate table 表名;	-- 所有的数据归零
				
				drop database 数据库;
				drop table 表名;
			改
				update 表名 set 字段=值, 字段=值, ... where条件;
			查(***)
				-> from子句
				-> where子句
				-> group by子句
				-> having子句
				-> select top distinct 以及运算表达式
				-> order by子句
				核心记住流程
		-> 高级部分
			case语法
				-> if else if结构
					case
						when 表达式1 then 显示1
						when 表达式2 then 显示2
						...
						else 显示n
					end
				-> switch-case结构
					case 字段
						when 值1 then 显示1
						when 值2 then 显示2
						... 
						else 显示n
					end
			连接
				-> 交叉联接
					ANSI-89的语法:select * from 表1, 表2;
					ANSI-92的语法:select * from 表1 cross join 表2;
				-> 内连接
					ANSI-89的语法:select * from 表1, 表2 on 条件;
					ANSI-92的语法:select * from 表1 inner join 表2 on 条件;
				-> 外连接
					ANSI-92的语法:
						select * from 表1 left join 表2 on 条件;
						select * from 表1 right join 表2 on 条件;
				-> 自连接、多表连接
					表1
					inner join
					表2
					on 条件
					inner join
					表3
					on 条件
			
                         子查询
				将一个查询的结果作为另一个查询的条件
				分清出内部查询(子查询)和外部查询
				-> 独立标量子查询	字段 = (子查询)
				-> 独立多值子查询	字段 in (子查询)
			表表达式
				-> 派生表
					将查询的"结果集"作为数据源 --不能使用order by 
					select * from
					(
						select
							row_number() over(order by stuId) as num,
							*
						from 
							Student
					) as tbl
					where
			 			tbl.num between @count * (@page - 1) + 1 and @count * @page;


2、 公用表表达式(CTE)
	就是将一个查询得到的结果集用一个表的形式临时存放,并用一个变量名指定
	后面再查询直接使用变量名即可
	
	with 别名 
	as
	(
		结果集
	)
	查询



3、 考虑派生表和CTE都是临时的,而且比较臃肿,所以希望将常用的查询结构定义到数据库中
	每次使用的时候,直接使用数据库中的这个对象,这个对象中记录了这个复杂的查询规范
	由数据库执行查询
	
	那么就有了视图(虚拟表)
	
	create view vw_视图名
	as
		查询
		
	注意:视图不具备存储数据的能力,但是使用的时候就好像一张表一样



4、 (*介绍)内联表值函数
	带有参数的试图
		create function fn_名字
		(@参数 类型, ...) returns table
		as
			return 查询

5、 SQL中的变量与流程控制
		-> SQL是一个脚本语言,可以认为基本的编程语句都支持
		-> 定义变量
			declare @变量名 类型名;
		-> 赋值
			set @变量名 = 值;
		-> 补充
			使用select进行赋值
				select @变量=字段 from 表名...(支持多值查询)
			使用子查询进行赋值
				set @变量 = (单值子查询); (只支持单值查询)

                >sql 2008 新的语法
		declare  @name varchar(5)='大鑫';
                select @name;
	
		-> 判断
			if(bool表达式)    begin end就等于程序中的大括号()
			begin
				-- 语句
			end
			else if(表达式)
			begin
				-- 语句
			end
			else
			begin
				-- 语句
			end
		-> 循环
			while(bool表达式)
			begin
				-- 语句
			end
                 循环练习
			--求1到100的和

			declare @jkSum int;
			declare @i int;
			set @jkSum = 0;
			set @i = 1;

			while (@i <= 100)
			begin
				set @jkSum = @jkSum + @i;
				--set @i = @i + 1;
                                ****--sql里面循环执行后要把@i+1 赋值然后执行下一次循环提供的新值
				set @i += 1;
				end

			select @jkSum;
			go



6、 为什么要有事务,事务是什么
	事务,就是SQL中一个独立执行过程
		这结果是会影响到数据库的数据结果的
		这个事务(执行过程)与其他的执行过程无关
		事务执行的时候是一个整体,要么全部成功,也么全部失败
	事务的原子性、持久性、隔离性、一致性(不能违反约束)
		
	
	SQL中每一个SQL语句实际上都是一个事务(隐式事务)
	事务就是一个最小的执行单位
	
        常见的全局变量 @@version, @@error(最后一个错误的T_SQL的信息)
                       @@identity (最后的一个插入表的自增id)
	    //查询中文的错误信息试图
	    select * from sys.messages where  where language_id=2052;

	显示声明事务
		begin transaction -- 简写begin tran
			事务内部
		-- 提交事务或回滚事务
		commit transaction	-- 表示事务内部的所有事情执行成功
		rollback transaction	-- 表示撤销事务内部所有的事情

	-> 使用try-catch块处理事务中的异常错误
		begin try
		end try
		begin catch
		end catch

7、 存储过程就是将一些列的执行步骤记录到数据库中,有点类似于方法
	-> 无参数,无返回值的存储过程
	-> 有参数,无返回值的存储过程
	-> 带有默认参数的存储过程
	-> 带有默认参数与参数返回值的存储过程
    声明一个带默认参数	@stuNameTemp nvarchar(20)='all'
    --->     []可以有,可以无
    --->     多条语句必须要加begin  end  如果是一条语句可以省略begin end         
    CREATE  PROC[EDURE]  USP_存储过程名 
    @参数1  数据类型 [= 默认值] [OUTPUT],
    @参数n  数据类型 [= 默认值] [OUTPUT]
    AS
	BEGIN
      SQL语句
	END
	
	exec 存储过程 参数;
        exec 存储过程 参数名=参数;
        exec 存储过程 参数,参数n output;
	

8、 使用ADO.net执行SQL的方法
	-> 没有返回值的存储过程
	-> 带有参数返回值的存储过程
	
		-> 连接字符串
		-> SQL语句(存储过程的名字)
		-> 创建参数
			如果是执行参数返回值的存储过程
			定义要返回的参数,不要赋值,设定Direction
		string sql = "usp_TransMoney";

            	SqlParameter[] ps = 
            	{	
               		 new SqlParameter("@from",from),
               		 new SqlParameter("@to", to),
               		 new SqlParameter("@money",money),
               		 new SqlParameter("@isAccess", SqlDbType.Int)
           	 };
          	ps[3].Direction = ParameterDirection.Output;
		-> 连接通道SqlConnection
		-> 创建执行对象SqlCommand(设定CommandType)
		-> 加入参数
		-> 打开连接
		-> 执行方法

9.触发器
  ->特殊的存储过程.  inserted表 和 deleted表  2个临时表
  insert into back(cid,balance) output inserted.* 
  values('0004',10000); 

  for 或者 after 触发器  是执行完才能触发
  instead of  代替
  
  --添加一个触发器,删除所有数据后,在把数据插回来
  create trigger tr_DelUseInfo on 表名(bank)
  for  delete 
  as 
     insert into bank  select * from deleted;
  go
  
  
  



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文档为数据库上机实验报告,是自己认认真真一步一步写的,报告包含试验中的具体步骤,过程以及代码和实验结果截图,和实验总结。 实验一 实验题目: 数据库管理系统的使用 实验目的: 掌握SQL SERVER2005的使用和数据库设计的一般方法。 实验内容: (1)SQL SERVER2005的使用 (2)数据库的设计过程并利用SQL SERVER2005建立数据库。 实验二 实验题目: 数据库的定义 实验目的:掌握数据表建立、修改、删除、索引的SQL语句。 实验内容: (1)数据表的建立 (2)数据表的修改 (3)数据表的删除 (4)数据表的索引建立 为S表的DEPT建立唯一索引 (5)视图的建立与删除 建立一个计算机系学生基本信息视图CSV(SNO,SNAME,SEX,AGE) 查询1983年以后出生的计算机系学生基本信息。 建立一个计算机系学生成绩视图JSGV(SNO,CNO,GRADE)。 查询计算机系学生选课多于3门的学生学号。 查询计算机系学生2号课不及格的学生学号和成绩。 实验三 实验题目: 数据表的操作 实验目的: 掌握数据表数据操作的SQL语句。 实验内容: SQL语句插入数据操作 SQL语句修改数据操作 SQL语句删除数据操作 SQL语句查询数据操作 维护数据SQL语句: (1)在学生表中插入一新生信息(‘200213808’,’HUJING’,’女’,22,’计算机’) (2)删除数据库中学号为’200213801’的退学学生有关信息。 (3)将计算机系学生2号课成绩全部提高5%。 查询数据SQL语句: (4)统计有学生选修的课程门数。 (5)统计HU老师所授每门课程的学生平均成绩。 (6)统计所有选修人数多于20的课程号和选课人数,并按人数降序排列,若人数相等,则按课程号升序排列。 (7)检索所有缓考即成绩为NULL的同学学号、姓名和缓考课程号。 (8)检索‘OS’课成绩高于该课平均成绩的同学学号。 (1) 检索计算机系女生的学号和姓名。 (2) 检索全体学生姓名、出生年份和所在系。 (3) 检索未选修任何课程的学生学号。 (4) 检索WANG老师所授课程号、课程名。 (5) 检索所有姓LI同学的基本信息。 (6) 检索选修‘DATABASE’课程的学生学号。 (7) 检索年龄介于LIPING同学年龄和28岁之间的学生基本信息。 (8) 检索选修TIAN老师所授全部课程的学生学号。 实验四 实验题目: T-SQL编程 实验目的: 掌握T-SQL语句的使用。 实验内容: 1.定义一个表变量,用来存储两名学生的学号,姓名,所在系。 2.编写一个自定义的函数,该函数接受一个学生姓名,返回其学生表中基本信息及选课情况。 3.试用CASE语句输出学生表中各年龄段的学生人数。 4.编写存储过程,以系别作为参数,统计指定系别的人数,并作为存储过程的输出。 实验题目: 数据库的完整性 实验目的: 掌握数据库的完整性约束定义,完整性检查及违约处理方式。 掌握触发器的定义及使用。 实验内容: 1. 定义S, C表的完整性约束 2. 定义SC表的完整性约束,要求当其被参照表发生删除操作时,违约处理的方式为级联,当其被参照表发生修改操作时,违约处理的方式为拒绝。 3. 触发器 ☆ 建立一DML触发器,每当学生的成绩发生更新时,将更新的学号,成绩存入g-log表内 ☆ 建立一个INSTEAD OF触发器,每当修改课程表中记录时,利用触发器动作替代修改操作。 ☆ 建立一个DDL 触发器,不允许删除数据库中表,并作出响应。 实验六 实验题目: 数据库的安全性 实验目的: 掌握SQL SERVER 2005的安全控制机制 实验内容: 1. 创建登录 创建lg1,lg2,并设定口令 2. 定义用户 定义user1,user2,user1以lg1登录,user2以lg2登录,user1定义角色ddl_admin,datareader,datawriter 3. 掌握SQL SERVER 2005架构和用户分离的概念 为user1创建架构u1,并建立test表,通过授权模式的方法,授权给user2表访问test的权限 4. 数据库的授权、收权语句 ☆ 将查询SC表和修改GRADE属性的权限授予用户user1。 ☆ 将对表S的插入权限授予用户user2,并允许他将此权限授予其他用户。 ☆ 收回所有用户对表S的插入权限。 实验七 实验题目: 数据库的设计 实验目的: 掌握数据库的概念结构设计和逻辑结构与设计,掌握ER图的表示方法即如何将ER模型转化为关系模型 1.学校有若干系,每个系有若干班级和教研室,每个教研室有若干教师,其中有教授和副教授每人各带若干研究生,每个班有若干学生,每个学生选修若干课程,每门课有若干学生选修。 2.某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料组成,不同零件所用的材料可以相同。有些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值