数据库总结

1.数据库三大范式
  1NF:所有属性和属性值不可再分
2NF:在满足1NF的基础上,所有非主属性完全依赖于全部的主键属性,而非依赖于部分主键属性
  3NF:在满足第二范式的基础上,非主属性间接依赖与主属性,存在传递依赖的关系。
2.存储过程
  存储过程是为了完成一组特定功能的用户自定义的一系列SQL语句,存储在数据库,经过一次编译后,以后再次调用将不在编译。由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。有局部变量参数,可传入参数,可以返回值。
基本语法形式:

CREATE proc | procedure procedure_name
    [{@参数数据类型} [=默认值] [output],
     {@参数数据类型} [=默认值] [output],
     ....
    ]
as
    SQL_statements
go
exec procedure_name

-------------创建名为GetUserAccount的存储过程----------------

create Procedure GetUserAccountRe1
@UserName nchar(20),
@UserID int output
as
if(@UserName>5)
select @UserID=COUNT(*) from UserAccount where UserID>25
else
set @UserID=1000
return @@rowcount
go

-------------执行上面的存储过程----------------

exec GetUserAccountRe1 '7',null
  1. 数据查询
    1.整个select语句的含义是,根据where子句的条件表达式,从from子句指定的基本表或视图中找出满足条件的元组,再按照select子句中的目标列表达式选出元组中的属性值形成结果表。
    2.指定别名,例如,select Sname Name,'Year of Birth:' BIRTH, 2004-age BIRTHDAY。
    3.模糊查询like的通配符表示,当字符集为ASCII时,一个汉字用两个表示,GBK时用一个表示,为了使通配符失去含义可加上 _ escape ''。
  2. where子句作用于基本表或视图,having 作用于元组,通常指group by 的分组。
  3. 在进行多表连接时,可以采用一种优化,先做条件表达式,选出符合条件的元祖形成一个中间关系,在做连接操作。
  4. order by不能在子查询的select语句中,只能出现在最终查询中。
  5. 相关子查询 找出每个学生超过他选修课平均成绩的课程号。
    select Sno,Cno from SC x where Grade >= (select AVE(Grade) from SC y where x.Sno = y.Sno);注意这个语句的执行过程:首先,从外查询中取出一个元组,将该元组的Sno传给内查询,然后内查询执行全表扫描,并统计Ave。接着外查询传入第二个元组,依次循环结束。
  6. 当子查询返回的结果不是一个单值,而是一个集合时,可使用ANY或者ALL谓语或者聚集函数,但聚集函数效率较高。

你可能感兴趣的:(数据库总结)