create database zouxiou
use zouxiou
--1仓库(WareHouse)
create table WareHouse
(
cwcode varchar(20) not null primary key, --仓库编码
cwname varchar(100) , --仓库名称
cwadd varchar(100) , --地址
cwtel varchar(50) , --电话
cwadmin varchar(50) --管理员
)
--2.采购单主表
create table Stock
(
ccode varchar(20) not null primary key , --编号
dDate datetime , --采购日期
cbuyer varchar(50) , --采购人
cwcode varchar(20) foreign key references WareHouse(cwcode) , --仓库编码
cmaker varchar(50) , --制单人
cassessor varchar(50) , --审核人
cremark varchar(200) --备注
)
--3.采购单子表(Stocks)
create table Stocks
(
ccode varchar(20) foreign key references Stock(ccode), --主表编号
cpcode varchar(20) not null primary key , --产品编码
cpname varchar(50) , --产品名称
cspec varchar(50) , --规格型号
cvendor varchar(100) , --供应商
cunit varchar(20) , --计量单位
nprice real , --单价
iamount int --数量
)
insert WareHouse(cwcode,cwname,cwadd) values('01','1号仓库' , '济南市文化东路')
insert WareHouse(cwcode,cwname,cwadd) values('02','2号仓库' , '济南市山大路' )
insert Stock(ccode,dDate,cbuyer,cwcode) values('jn-0001','2009-3-6' , '张三丰','01')
insert Stock(ccode,dDate,cbuyer,cwcode) values('jn-0002','2009-3-16', '张学友','02')
insert Stock(ccode,dDate,cbuyer,cwcode) values('jn-0003','2009-11-6', '张信哲','01')
insert Stocks(ccode,cpname,cpcode,nprice,iamount) values('jn-0001','计算机','pc0001',2000,30)
insert Stocks(ccode,cpname,cpcode,nprice,iamount) values('jn-0002','计算机','pc0002',3000,20)
insert Stocks(ccode,cpname,cpcode,nprice,iamount) values('jn-0003','计算机','pc0003',2050,10)
insert Stocks(ccode,cpname,cpcode,nprice,iamount) values('jn-0001','计算机','pc0004',2560,20)
insert Stocks(ccode,cpname,cpcode,nprice,iamount) values('jn-0002','打印机','pr0001',2430,50)
select * from warehouse
select * from stock
select * from stocks
--声明变量
declare @a varchar(20) , @b int
--变量赋值
set @a='abc'
set @b=123
--输出显示
select @a as 产品名称 ,@b as 数量
--仓库
declare @code varchar(20) ,@name varchar (5)
select @code= cwcode,@name =cwname from warehouse where cwcode='01'
select @code ,@name
--练习
declare @name varchar(20),@buy float,@much int ,@查询条件 varchar(10)
--set @查询条件='jn-0001' //set 和select都可用于与变量赋值
select @查询条件='jn-0001'
select @name=cpname, @buy=nprice, @much=iamount,@查询条件='"jn-0001"'from stocks where ccode=@查询条件
select @name, @buy,@much
--print @查询条件//显示@后面的数值
declare @xh char(10) ,@xm char (6)
set @xh='200610028'
select @xh='2007051382',@xm='黎明'
--print @xh
select @xh,@xm
-- 全局变量
select @@SERVERNAME as 服务器名, @@ROWCOUNT 行列数目, @@error 显示最后执行的错误代码0无错误非零的数值错误号,
@@TRANCOUNT 当前事务的数目,@@CPU_BUSY 最近启用CPU的工作时间,@@VERSION 安装版本信息,@@OPTIONS 当前set选项信息
select @@error
--数学函数
--平方2的10次方
select power(2,10)
--开根
select sqrt(10)
--四舍五入
select round(10/3.0,2)
select round(3.123,2)
--ceiling获取大于或等于传递参数的最小值
select ceiling (10)
--floor 获取小于或等于传递的最大的整数
select floor(10)
--练习
--查询stocks表,输出价格的平方根,输出价格的平方根四舍五入保留两位有效数字的值,输出数量的平方,大于价格的平方根的最小的整数,
--小于价格平方根的最大的整数,查询条件是数量的平方大于1000
select sqrt(nprice) as 价格的平方根,round(sqrt(nprice),2) 价格的平方根四舍五入保留两位有效数字的值,power(iamount,2) 数量的平方,
ceiling(sqrt(nprice)) 大于价格的平方根的最小的整数,floor(sqrt(nprice)) 小于价格平方根的最大的整数 from stocks where power(iamount,2)>1000
--字符串函数
--ascii 返回ascii码值
select ascii('abc')
--char 返回ascii码值
select char('97')
--lower,upper转换英文字符的大小写形式
select lower('ASDFG')
select upper('asdfg')
--left,right 截取左侧右侧的字符
select left('法兰西共和国',3)
select right('法兰西共和国',5)
--substring 截取指定位置制定长度的字符串
select substring('法兰西共和国',4,3)
--charindex查找字符串的索引位置
select charindex('wee','qwweetyy')
select substring('法兰西共和国', charindex('共和国','法兰西共和国'),3)
--len获取字符串长度
select len('法兰西共和国')
--replace 替换
select replace ('法兰西共和国','法兰西','中华人民')
--space 生成空格
select space(10)+'asd'
--replicate 重复指定的字符串
select replicate('abc',10)
--reverse 反转字符串
select reverse('abcd')
--练习
select *from warehouse
select len(cwadd)from warehouse
select left(cwadd,2),right(cwadd,3)from warehouse
select reverse (substring (cwadd,charindex('市',cwadd),4)) from warehouse
update warehouse set cwadmin=space(2)+replicate('a',10)+space(3)from warehouse
declare @cpwhere varchar(20)
select @cpwhere='pc0001'
select nprice =case
when nprice <2500 then '物美价廉'
when (nprice <2900 )and (nprice>2500)then '价格适中'
when nprice >2900 then '有点贵'
END
FROM stocks where cpcode=@cpwhere
select nprice=case
when nprice <2500 then '物美价廉'
when (nprice <2900 )and (nprice>2500)then '价格适中'
when nprice >2900 then '有点贵'
else ''
end
from stocks
--while 循环
--格式
/* while 条件表达式
begin
语句块
continue
break
end
*/
--从1到100之间的偶数和
declare @num int ,@i int
select @num=0,@i=1
while (@i<=100)
begin
if(@i%2=0)
begin
select @num = @i+@num
end
set @i=@i+1
end
print @num
--输出从1到100之间的所有的素数(只能被1和本身整除的数)
--wait for 延迟语句
--格式 waitfor(delay|time)时间 SQL语句
--作用:等待一段时间或到某个时间开始执行SQL语句
waitfor delay '12:00:05'
select *from stocks
waitfor time '15:33:05'
select *from stocks
set nocount on --关闭影响行提醒
select *from stocks
--esec函数
--获取数据库服务器上的所有数据
exec sp_helpdb
--获取数据库服务器上的所有数据
exec sp_helpdb
--修改数据库名
exec sp_rename 源表名,视图名,存储过程名,函数名, 目的表名,视图名,存储过程名,函数名
exec sp_tables-- 获取当前数据库下的表名
exec sp_columns v2 --获取 指定的表名或视图的列
--定义存储过程格式
CREATE PROC[EDURE] 存储过程名
@参数1 数据类型 = 默认值 OUTPUT,
…… ,
@参数n 数据类型 = 默认值 OUTPUT
AS
SQL语句
/*
格式
creat proc[edure] 存储过程名
[参数列表]
as
<sql语句>
*/
create proc sp_p2
as
select *from stocks
--创建带参数的存储过程
create proc sp_p5
@swhere varchar(20)
as
select *from stocks where cpcode=@swhere
--执行存储过程,查询的条件为cpcode=pc0004
create proc sp_p6
@swhere varchar(20)
as
select *from stocks where cpcode='pc0004'
--练习
create proc sp_p9
@swhere varchar(50) ,@where varchar(20)
as
select*from stocks where ccode in (select ccode from stock where cwcode=
(select cwcode from warehouse where cwname=@swhere) )and ccode=@where
1.select cwcode from warehouse where cwname=@swhere
2.select ccode from stock where cwcode=1
3.select * from stocks where ccode in 2 and ccode=@where
alter proc sp_p1
as
select *from stock
--修改存储过程
/*alter proc[edure]存储过程名称
[参数列表]
as
<SQL语句>
*/
/*
drop proc[endure]存储过程名
*/
<PIXTEL_MMI_EBOOK_2005>2 </PIXTEL_MMI_EBOOK_2005>
--------rank()排序
--rank方法:当所按排序的字段有相同值时,序号相同,而下一条不同的数据行会根据当前记录数生成序号
--:序号不连续(1,1,1,4,5,5,7)
select * from Score
select RANK() over(order by score desc) id,* from Score
select RANK() over(order by Coid desc) id,* from Score
order by 是排序,rank()可自动生成序号
order by ID 如果ID相同则序号相同
序号不连续(1,1,1,4,5,5,7)
表示前三条记录的ID相同