当前位置:   article > 正文

sql server 基础

sql server

 目录

 若没有想看的可离开,从目录点击可到指定地方

一.创建库、创建表、注释增删改、字段增删改、常用数据类型

1.创建库

2. 创建表  

3.注释增删改       

4.字段增删改

 5.常用数据类型

二、基本增删改查、关联删改查

1.基本增删改查

​编辑

 2.关联删改查

三、视图、存储过程、触发器、游标、函数

1.视图 

2.存储过程

3.触发器

4.游标

5.函数

四、临时表、表复制

1.临时表,表复制

五、while、if、case when语句

1.while语句

2.if语句

3.case when语句

六、set和select变量赋值的区别

七、一些函数的使用

1.output

2.is null

3.len

4.right left

5.replace

6.stuff

7.rtrim ltrim

8.convert

9.charIndex

10.reverse

11.substring

12.replicate

13.<>

14.union all

15.case when 和行转列

16.常用的时间函数



一.创建库、创建表、注释增删改、字段增删改、常用数据类型

1.创建库

  1. create database JinDong on primary
  2. (
  3. name='JinDong_data',
  4. filename='D:\dataDGY\JinDong_data.mdf',
  5. size=3MB,
  6. maxSize=256MB,
  7. fileGrowth=10%
  8. )
  9. log on
  10. (
  11. name='JinDong_log',
  12. filename='D:\dataDGY\JinDong_log.ldf',
  13. size=3MB,
  14. maxSize=256MB,
  15. fileGrowth=20%
  16. )

2. 创建表  

  1. use jindong
  2. create table product(
  3. ID nvarchar(50) primary key,
  4. Pname nvarchar(20),
  5. Detail nvarchar(max),
  6. Price decimal(12,4),
  7. DiscountPrice numeric(12,4),
  8. Penable bit,
  9. Istate tinyint,
  10. CreateDate datetime,
  11. MidifiedDate timestamp null
  12. )

3.注释增删改       

表注释

exec sp_addextendedproperty N'MS_Description','商品表',N'SCHEMA',N'dbo',N'table',N'product',NULL,NULL

exec执行,sp_addextendedproperty增加扩展属性,后面是参数名和参数值

一共四对,第一对注释名和值,第二对架构,第三对表,第四对字段

字段注释

添加字段注释

exec sp_addextendedproperty N'MS_Description','商品表',N'SCHEMA',N'dbo',N'table',N'product',N'column',N'id'

修改字段注释,格式不变,sp_addextendedproperty改成sp_updateextendedproperty      

exec sp_updateextendedproperty N'MS_Description','商品表',N'SCHEMA',N'dbo',N'table',N'product',N'column',N'id'

删除字段注释,格式变化,具体自看         

exec sp_dropextendedproperty N'MS_Description',N'SCHEMA',N'dbo',N'table',N'product',N'column',N'id'

4.字段增删改

  1. --增加字段名
  2. alter table product add unit nvarchar(10) not null
  3. --修改字段名
  4. exec sp_rename 'product.unit','uuit'
  5. --删除字段名
  6. alter table product drop column unit
  7. --修改表名
  8. exec sp_rename 'product','productData'

 5.常用数据类型

        字符型数据类型

        char()                1~8000个字符

        固定长度类型。例如,定义数据类型是char(5),那么该类型可以存储5个字符,即使存入2个字符,剩下3个字符也会用空格补齐

        varchar()           1~8000个字符

        可变长度类型。例如,定义数据类型varchar(5),表示该类型可以存储5个字符,如果存储了2个字符,字符长度就是2而不是5

        text                   最多可以存储2147483647个字符

        nchar()                Unicode字符数据。n值必须在1~4000之间,每一个存储单位占两个字节

        nvarchar ()         max指最大存储大小为2的31次方-1字节,Unicode字符数据。n值必须                                             在 1~4000之间,每一个存储单位占两个字节

        数值型数据类型

        int                -2^31到2^31-1

        smallint        -2^15到2^15-1

        tinyint           0到255

        bigint            -2^63到2^63-1

        bit                 0,1或者NULL

        numeric        -10^38+1~10^38-1

        dccimal        -10^38+1~10^38-1

        日期/时间型数据类型

        date                公元元年1月1日到公元9999年12月31日,精确到一天

        time                00:00:00.0000000到23:59:59.99999999,精确到100纳秒

        datetime         公元元年1月1晶到公元9999年12月31日日间范围:00:00:00到23:59: 59.99999999,精确到100纳秒

        timestamp      时间戳数据类型, 是一个单调上升的计数器,此列的值被自动更新       

二、基本增删改查、关联删改查

1.基本增删改查

 2.关联删改查

  1. --关联查
  2. select a.id,a.Pname,b.Mid,b.model,b.stock
  3. from product a
  4. join Pmodel b on a.id=b.id
  5. where a.id='A2185FAA-C9F9-4E57-8713-E70781B05570'
  6. --关联改
  7. update b set b.stock=b.stock-30
  8. from product a
  9. join Pmodel b on a.id=b.id
  10. where a.id='A2185FAA-C9F9-4E57-8713-E70781B05570'
  11. and b.model='5号'
  12. --关联删
  13. delete b
  14. from product a
  15. join Pmodel b on a.id=b.id
  16. where a.id='A2185FAA-C9F9-4E57-8713-E70781B05570'
  17. and b.model='5号'

三、视图、存储过程、触发器、游标、函数

1.视图 

  1. --创建视图
  2. create view ProductAndModel
  3. as
  4. select a.Pname,a.price,b.model,b.stock
  5. from product a
  6. join Pmodel b on a.id=b.id
  7. --查询视图
  8. select * from ProductAndModel

2.存储过程

  1. --创建存储过程
  2. create proc productById( @id nvarchar(50))
  3. as
  4. select a.Pname,a.price,b.model,b.stock
  5. from product a
  6. join Pmodel b on a.id=b.id
  7. where a.id=@id
  8. --执行存储过程
  9. exec productById 'A2185FAA-C9F9-4E57-8713-E70781B05570'

3.触发器

  1. --创建触发器
  2. create trigger dePdePm on product
  3. after delete
  4. as
  5. delete Pmodel where id=(select id from deleted)
  6. --执行触发器
  7. delete product where id='E3B86599-4A35-4AF7-B034-3DF1FE34CCE2'

4.游标

  1. --创建游标
  2. declare PDetail scroll cursor for select * from inventory
  3. --打开游标
  4. open PDetail
  5. --得到第一行数据
  6. fetch first from PDetail
  7. --得到第二行数据
  8. fetch absolute 2 from PDetail
  9. --得到下一行数据
  10. fetch relative 1 from PDetail
  11. --得到上一行数据
  12. fetch prior from PDetail
  13. --关闭游标
  14. close PDetail
  15. --删除游标
  16. deallocate PDetail
  17. --得到全部数据
  18. declare @i int,@rows int
  19. select @i=1,@rows=@@cursor_rows
  20. while(@i<=@rows)
  21. begin
  22. fetch absolute @i from PDetail
  23. set @i=@i+1
  24. end

5.函数

表值函数

  1. --创建
  2. create function prduct()
  3. returns table
  4. as
  5. return
  6. (
  7. select * from inventory
  8. );
  9. --执行,返回的是表
  10. select * from prduct()

标量值函数 

  1. --统计一共有多少中商品
  2. create function [dbo].[countProduct]()
  3. returns int
  4. begin
  5. declare @i int;
  6. set @i=(select count(*) from inventory where Istate=0)
  7. return @i;
  8. end
  9. --函数执行
  10. select dbo.countProduct()

四、临时表、表复制

1.临时表,表复制

  1. --全部复制
  2. select a.* into #mode from dbo.inventorySubModel a where 1=1
  3. --只复制字段
  4. select a.* into ##mode from dbo.inventorySubModel a where 1=2
  5. --复制内容
  6. insert into ##mode select * from dbo.inventorySubModel
  7. --创建临时表
  8. create table ##model(
  9. id nvarchar(50) primary key
  10. )

五、while、if、case when语句

1.while语句

  1. declare @i int
  2. set @i=1
  3. while(@i<=10)
  4. begin
  5. print @i
  6. set @i=@i+1
  7. end

2.if语句

  1. declare @i int
  2. set @i=1
  3. if @i>0
  4. begin
  5. print 'yes'
  6. end
  7. else
  8. begin
  9. print 'no'
  10. end

3.case when语句

  1. declare @i int
  2. set @i=1
  3. print case @i
  4. when '1' then 'one'
  5. when '2' then 'two'
  6. else '其他'
  7. end

六、set和select变量赋值的区别

1、SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值

2、表达式返回多个值时,用SET将会出错,而SELECT将取最后一个值

3、表达式无返回值时,用SET将置变量值为NULL,用SELECT变量将保持原值

4、使用标量子查询时,如果无返回值,SET和SELECT一样,都将置为NULL

七、一些函数的使用

1.output

  1. --output,有返回值的存储过程
  2. alter proc getZF(@P_id nvarchar(50),@P_semester int,@P_zf int output)
  3. as
  4. begin
  5. select @P_zf=sum(b.score)
  6. from student a
  7. join grading b on a.id=b.id
  8. where 1=1
  9. and b.semester=@P_semester
  10. and a.id=@P_id
  11. end
  12. --也可以被用作修改数据后插入其他表
  13. update a set a.name='mary' output inserted.name into test_back from test a
  14. where id=1

2.is null

         作用:判断是否为空

  1. declare @t_a nvarchar(50)
  2. set @t_a='1'
  3. if @t_a is null
  4. print 0
  5. if @t_a is not null
  6. print 1

3.len

         作用:计算字符串的长度

  1. declare @t_a nvarchar(50)
  2. set @t_a='hhlj/j/g'
  3. print len(@t_a)

4.right left

         作用:截取字符串,向左或向右

  1. print right('www.4399.com',3)
  2. print left('www.4399.com',3)

5.replace

         作用:替换字符串

print replace('终 于到五一了','于','')

6.stuff

        作用:将字符串插入到另一个字符串中。 它从第一个字符串的开始位置删除指定长度的字符;然后将第二个字符串插入到第一个字符串的开始位置

print stuff('终 于到五一了',2,1,'')

7.rtrim ltrim

         作用:消除空格

  1. print rtrim('sdf ')
  2. print ltrim(' sdf')

8.convert

         作用:格式转换,比cast好用

  1. print convert(nvarchar(50),convert(int,'1234')+2345)+'abc'
  2. print convert(nvarchar(19),getdate(),20)

9.charIndex

         作用:确定字符串再另一个字符串的第几位

print charIndex('h','oasdh')

10.reverse

         作用:将字符串反转

print reverse('abcd')

11.substring

         作用:截取字符串

print substring('终 于到五一了',1,1)+substring('终 于到五一了',3,7)

12.replicate

         作用:将内容重复设定的次数

print replicate('abc',6)

13.<>

        作用:做判断,含义为不等于

  1. declare @t_a int
  2. set @t_a=0
  3. if @t_a<>0
  4. print 'abc'
  5. if @t_a<>1
  6. print 'def'

14.union all

        作用:将多个结果集合并为一个

  1. select * from xsdd
  2. union all
  3. select 'asldjasl','PC123431','2023-04-28 09:42:41.650','预付','2500.0000','10200.00','......'

15.case when 和行转列

  1. --行转列,第一种
  2. select a.cname,
  3. convert(nvarchar(7),b.createdate,20) yearMonth,
  4. sum(case when b.accessrecord=0 then b.amountrecord else 0 end) 'out',
  5. sum(case when b.accessrecord=1 then b.amountrecord else 0 end) 'in',
  6. (sum(case when b.accessrecord=0 then b.amountrecord else 0 end)-sum(case when b.accessrecord=1 then b.amountrecord else 0 end)) balance
  7. from costom a
  8. join balanceaccessrecord b on a.id=b.id
  9. where year(b.createdate)=2022
  10. group by convert(nvarchar(7),b.createdate,20),a.cname
  11. --行转列,第二种
  12. with t as
  13. (
  14. select cname,createdate,[0] as 'Pout',[1] as 'Pin' from
  15. (
  16. select a.cname,b.accessrecord,b.amountrecord,b.createdate from costom a
  17. join balanceaccessrecord b on a.id=b.id
  18. ) p
  19. pivot(sum(amountrecord) for accessrecord in ([0],[1])) piv
  20. )
  21. select cname,convert(nvarchar(7),createdate,20) as yearMonth,sum(Pout) Pout,sum(Pin) Pin from t where 1=1
  22. and year(createdate)=2022
  23. and cname='李四'
  24. group by cname,convert(nvarchar(7),createdate,20)
  25. select cname,convert(nvarchar(7),createdate,20) as yearMonth,sum(Pout) Pout,sum(Pin) Pin
  26. from
  27. (
  28. select cname,createdate,[0] as 'Pout',[1] as 'Pin' from
  29. (
  30. select a.cname,b.accessrecord,b.amountrecord,b.createdate from costom a
  31. join balanceaccessrecord b on a.id=b.id
  32. ) p
  33. pivot(sum(amountrecord) for accessrecord in ([0],[1])) piv
  34. ) piv
  35. where 1=1
  36. and year(createdate)=2022
  37. and cname='李四'
  38. group by cname,convert(nvarchar(7),createdate,20)
  39. --行转列,第三种字符串拼接
  40. --与上不同
  41. declare @sql_str nvarchar(1000)
  42. declare @sql_col nvarchar(100)
  43. --取列中不同的数据当做列
  44. select @sql_col=isNUll(@sql_col+',','')+quotename([model]) from inventorysubmodel order by model
  45. --拼进去
  46. set @sql_str='
  47. select * from
  48. (
  49. select a.iname,b.model,b.stock from inventory a join inventorysubmodel b on a.id=b.id
  50. )
  51. p pivot(sum(stock) for model in ('+@sql_col+')) as piv
  52. ORDER BY piv.iname'
  53. exec (@sql_str)

16.常用的时间函数

  1. YEAR(GetDate()) --年
  2. MONTH(GetDate()) --月
  3. DAY(GetDate()) --日

 获取当前系统时间

GetDate()

      

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/442885
推荐阅读
相关标签
  

闽ICP备14008679号