一 . 数据库结构设计三范式
1.属性的原子性:要求属性具有原子性,不可再分解
2.记录的唯一性:要求记录有唯一的标识,即实体的唯一性,不存在部份依赖
3.字段无冗余:要求任何字段不能由其他字段派生出来,不存在传递依赖
二 . T-SQL语句
1.信息打印
print ‘Hello’
select ‘Hello’
2.变量
局部变量:以@开头:先声明,再赋值
语法:declare @变量名 数据类型
declare @str varchar(20)
set @str = 'Hello sql'
--select @str = 'Hello sql'
print @str
set 和 select 进行赋值的区别
set:赋值给变量一个指定的值
select:一般用于表中查询出的数据赋值给变量,如果查询结果有多条数据,只取最后一条数据赋值给变量
举例:select @a = select 字段名 from 表名
当前表最后一行的某个字段赋值给@a
declare @AccountID int --定义变量
select @AccountID = (select AccountID from AccountInfo where AccountCode = '431098198906038754') --通过查询语句赋值
select CardNo 卡号,CardMoney 余额 from BankCard
where AccountID = @AccountID --通过变量查询信息
全局变量:以@@开头:由系统定义和维护,可直接使用,只读
@@ERROR:返回执行的上一个语句的错误号
@@IDENTITY:返回最后插入的标识值
@@MAX_CONNECTIONS:返回允许同时进行的最大用户连接数
@@ROWCOUNT:返回上一语句受影响的行数
@@SERVERNAME:返回运行SQL SERVER的本地服务器的名称
@@SERVICENAME:返回SQL SERVER正在其下运行的注册表项的名称
@@TRANCOUNT:返回当前连接的活动事务数
@@LOCK_TIMEOUT:返回当前会话的当前锁定超时设置(毫秒)
三 . go语句
(1)等待go语句之前代码执行完成之后才能执行后面的代码
create database DBTEST
go ----必须等到上方创建数据库的命令执行完成后才执行下方切换数据库的命令
use DBTEST
(2)批处理结束的一个标志
declare @num int
set @num = 100
set @num = 200
declare @num1 int
set @num1 = 100
go
set @num1 = 200 --此行会报错,num1的作用范围在go语句之前,此num1相当于没有声明
四 . 运算符
算术运算符:加(+),减(),乘(*),除(/),模(%)
逻辑运算符:AND,OR,LIKE,BETWEEN,IN,EXISTS,NOT, ALL, ANY
赋值运算符:=
字符串运算符:+
比较运算符:=,>,<,>=,<=,<>
位运算符:|,&,^
符合运算符:+=,-=,/=,%=,**=
数据类型转换函数
Convert(转换后数据类型,需转换值)
Cast(需转换值 as 转换后数据类型)
举例
declare @area int = 20
print '面积值:' + Convert(varchar(10),@area)
print '面积值:' + Cast(@area as varchar(10))
2.查询姓名中含有“刘”的账户信息及银行卡信息
select * from AccountInfo
inner join BankCardInfo on BankCardInfo.ID = AccountInfo.BackCardID
where AccoutInfo.Name like '%刘%'
3.查询出余额在2000-5000的银行卡信息
语法:between min and max
select * from BankCardInfo
where CardMoney between 2000 and 5000
3.查询出状态为冻结或注销的银行卡信息
语法:between min and max
select * from BankCardInfo
where CardState in (3,4)
4.关羽身份证:420107199507104133,关羽到银行来开户
查询此身份证再账户表是否存在,不存在则进行开户开卡,存在则不开户直接开卡
if…eles…语法:
if 条件
begin
end
else
begin
end
declare @AccountID int
if exists(select * from AccountInfo where AccountCode = '420107199507104133')
begin ---存在此人
select @AccountID = (select AccountId from AccountInfo where AccountCode = '420107199507104133')
insert into BackCardInfo(CardNo,AccountId,CardPwd,CardMoney,CardState)
values('6225547858741264',@AccountId,'122345',0,1)
end
else
begin ---不存在此人
insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime)
values('420107199507104133','13656565656','关羽',getdate())
set @AccountID = @@IEDNTITY
insert into BankCardInfo(CardNo,AccountId,CardPwd,CardMoney,CardState)
values('6225547858741264',@AccountID,'123456',0,1)
end
5.查询银行卡账户余额,是不是所有账户余额都超过了3000
使用All时,数字只能放前面,即 3000 < All(查询结果)
不能写成 : All(查询结果) > 3000
if 3000 < All(select CardMoney from BankCardInfo)
begin
end
else
begin
end
6.查询银行卡账户余额,是否含有账户余额超过3000000的信息
即:有一个账户余额超过3000000条件就成立
if 3000000 < Any(select CardMoney from BankCardInfo)
begin
end
else
begin
end
五.流程控制
if…begin…end…else…begin…end语句
if 条件
begin
end
else
begin
end
选择分支
case…when…then…end语句
case
when 条件1 >= 200 then '1'
else '2'
end 用户等级 ----别名
case CardState
when 1 then '正常'
when 2 then '挂失'
end
循环结构
while
1.循环打印九九乘法表
declare @i int = 1
while @i <= 9
begin
declare @@str varchar(500) = ''
declare @j int = 1
while @j <= @i
begin
set @str = @str + cast(@1 as varchar(1)) + '*' + cast(@J as varchar(1)) + '=' + cast(@i *@j as varchar(2)) + char(9)
set @j = @j + 1
end
set @i = @i + 1
print @str
end
特殊字符
char(9):制表符 char(10):换行符