设为首页 收藏本站
查看: 755|回复: 0

[经验分享] sql学习进程

[复制链接]

尚未签到

发表于 2016-11-9 08:03:16 | 显示全部楼层 |阅读模式
  一.DDL(data define language)
  1.create database:
  create database test
on
(
 name=test_dat,
 filename='c:\test.mdf',
 size=5MB,
 maxsize=25MB,
 filegrowth=5MB
  )
log on
(
 name=test_log,
 filename='c:\test.log',
 size=5MB,
 maxsize=10MB,
 filegrowth=5%
)
  
  2.alter datebase:

A. 向数据库中添加文件
  下例创建数据库,并更改该数据库以添加一个 5 MB 大小的新数据文件。

USE master
GO
CREATE DATABASE Test1 ON
(
NAME = Test1dat1,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat1.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
GO
ALTER DATABASE Test1
ADD FILE
(
NAME = Test1dat2,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat2.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
GO

B. 向数据库中添加由两个文件组成的文件组
  下例在示例 A 中所创建的 Test1 数据库中创建一个文件组,并将两个 5 MB 的文件添加到该文件组。然后下例将 Test1FG1 设置为默认文件组。

USE master
GO
ALTER DATABASE Test1
ADD FILEGROUP Test1FG1
GO
ALTER DATABASE Test1
ADD FILE
( NAME = test1dat3,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat3.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB),
( NAME = test1dat4,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat4.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP Test1FG1
ALTER DATABASE Test1
MODIFY FILEGROUP Test1FG1 DEFAULT
GO

C. 向数据库中添加两个日志文件
  下例向数据库中添加两个 5 MB 大小的日志文件。

USE master
GO
ALTER DATABASE Test1
ADD LOG FILE
( NAME = test1log2,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\test2log.ldf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB),
( NAME = test1log3,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\test3log.ldf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
GO

D. 从数据库中删除文件
  下例将示例 B 中添加到数据库 Test1 中的一个文件删除。

USE master
GO
ALTER DATABASE Test1
REMOVE FILE test1dat4
GO

E. 更改文件
  下例将示例 B 中添加到数据库 Test1 中的一个文件增加大小。

USE master
GO
ALTER DATABASE Test1
MODIFY FILE
(NAME = test1dat3,
SIZE = 20MB)
GO

F. 将主文件组设置为默认文件组
  假定原来另一个文件组设置为默认文件组,下例将主文件组设置为默认文件组。

USE master
GO
ALTER DATABASE MyDatabase
MODIFY FILEGROUP [PRIMARY] DEFAULT
GO

 
  
  3.drop database:
  drop database  test1,test2
  
  
  4.create table:
  create table test
  (
  id int primary key not null,
  name nvarchar(30),
  sex bit,
  describ nvarchar(500)
  )
  
  5.alter table:
  alter table test
  add column sys_instime datetime,
  drop column sys_instime
  alter column sys_instime year
  
  6.drop table:
  drop table test
  7.truncate table:删除表中的数据连同日志,即如果使用id为自增长,则删除之后id将从0开始
  truncate table test
  
  8.create index:(事先排序,如字典中的索引)
  唯一索引:create unique index i_name
  on test(name desc,sex)
  聚集索引:create clustered index i_name on test(name)
  非聚集索引:create nonclustered index i_name on test(name)
  复合索引:create index i_nameage on test(name,age)
  9.drop index:
  drop index test.i_name
  二.DML(data manage language)
  select:
  where子句通配符:like '%a' "%a%" '_a' '[ab]%'(以ab开头的) '[^ab]'(不以ab开头的)
  top:
  select top 1 * from test;
  select top 50 percent * from test;
      in:
  select  * from test where age in(1,2)(年龄在一,2之间)
  not in :一样用法
  
  多表查询:
  1.直接引用两个表:select * from test a,test1 b where a.cid=b.cid
  2.join:select * from test a inner join test1 b on b.cid=a.cid
  full join 左右两个表的所有记录以及他们的匹配情况。
  3.union:合并查询结果集,distinct相同记录
  union all:不 distinct相同记录
  
  数据导入和备份:
  1.select * into test_bak  from test (单表导入)
  select a.name,b.age into test_bak from test a inner join test1 b on b.pid=a.pid ;或者(where a.pid=b.pid)(多表导入)
  同时也可以指定导入到其他数据库:select * into test_bak in test3.mdf  from test
  2.insert into test_bak select * from test
  
  3.从其他表中导入数据更新现有数据:
  update test a set a.remark=b.remark from test1 b where a.cid=b.cid 
  
  4.函数:
  sqlserver 内建日期函数:
  getdate():
  datepart():d=datepart(qq,getdate())(季度),datepart(dy,getdate())一年中第几天,
  datepart(ww,getdate())(第几周),datepart(dw,getdate())一周中第几天,
  


datepart
缩写



yy, yyyy


季度
qq, q



mm, m


年中的日
dy, y



dd, d



wk, ww


星期
dw, w


小时
hh


分钟
mi, n



ss, s


毫秒
ms


微妙
mcs


纳秒
ns


datepart
缩写



yy, yyyy


季度
qq, q



mm, m


年中的日
dy, y



dd, d



wk, ww


星期
dw, w


小时
hh


分钟
mi, n



ss, s


毫秒
ms


微妙
mcs


纳秒
ns
  dateadd:在日期中加减。
  select dateadd(yy,-2,getdate())
  datediff():返回两个日期之间相差的年数,月数,日数,由datepart参数决定
  select datediff(mm,'2010-1-1','2010-2-1')
  convert().
  select convert(nvarchar(30),getdate(),23)
  year:
  select year/month/day(getdate())
  
  Sql null:
  select isnull(name,'') from test
  cast:
  cast(name as nvarchar(30))
  exp:求e的n次方
  EXP(0)
  log:求对数
  log10:求底为10对数
  square:求平方
  sqrt:求平方根
  STR:SQRT可以将数值型转换为字符型资料,允许控制小数的格式。
    语法:STR(float_expression[,length[,decimal]])
    变量:length:想要的字符串的总长度。缺省为10。
     decimal:是小数点右边的位数。四舍五入。如果不写长度则为取整,小数后四     
             舍五入。
left:从左边取多少位
  left(name,3)从左起取三个。
  right:从右边取多少位
  right(name,3)
  REVERSE:REVERSE返回字符串表达式的倒序。
    语法:REVERSE(character_expression)
    例如:REVERSE(‘PAM’)结果为‘MAP’
LTRIM:LTRIM删除字符表的前导空格。
    语法:LTRIM(character_expression)
         变量是字符表达式。
RTRIM:RTRIM删除字符表的后继空格。
    语法:RTRIM(character_expression)
         变量是字符表达式。
  NULLIF:如果一对表达式相等,NULLIF函数就返回NULL,如果它们不相等,NULLIF函数就返回第一个表达式的值。
  语法:NULLIF(expression1,expression2)
  变量:expression可以数值型,也可以是字符串。
  例如:SELECT NULLIF(134,135)返回值为134。
PI:PI函数返回pi的值3。1415926
REPLACE:REPLACE用串表达式3取代串表达式1中的表达式2。
  语法:REPLACE(‘string1’,‘string2’,‘string3’)
  例如:SELECT REPLACE(‘mydog’,‘dog’,‘car’)
STUFF:替换指定位置的字符。
    语法:STUFF(character_expression,start,length,character_expression)
  例如:select stuff('abcdefg',5,1,'1')
  substring:返回指定位置的字符。从第五个开始,去一个,即结果为e,取两个的话,结果为ef
  例如:select substring('abcdefg',5,1)
  
  replicate:重复字符串个数
  如:select replicate('a',5)

SQL Server 数据类型

Character 字符串:
  


数据类型
描述
存储


char(n)
固定长度的字符串。最多 8,000 个字符。
n


varchar(n)
可变长度的字符串。最多 8,000 个字符。
 


varchar(max)
可变长度的字符串。最多 1,073,741,824 个字符。
 


text
可变长度的字符串。最多 2GB 字符数据。
 

Unicode 字符串:
  


数据类型
描述
存储


nchar(n)
固定长度的 Unicode 数据。最多 4,000 个字符。
 


nvarchar(n)
可变长度的 Unicode 数据。最多 4,000 个字符。
 


nvarchar(max)
可变长度的 Unicode 数据。最多 536,870,912 个字符。
 


ntext
可变长度的 Unicode 数据。最多 2GB 字符数据。
 

Binary 类型:
  


数据类型
描述
存储


bit
允许 0、1 或 NULL
 


binary(n)
固定长度的二进制数据。最多 8,000 字节。
 


varbinary(n)
可变长度的二进制数据。最多 8,000 字节。
 


varbinary(max)
可变长度的二进制数据。最多 2GB 字节。
 


image
可变长度的二进制数据。最多 2GB。
 

Number 类型:
  


数据类型
描述
存储


tinyint
允许从 0 到 255 的所有数字。
1 字节


smallint
允许从 -32,768 到 32,767 的所有数字。
2 字节


int
允许从 -2,147,483,648 到 2,147,483,647 的所有数字。
4 字节


bigint
允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。
8 字节


decimal(p,s)
  固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。
  p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。
  s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。


5-17 字节


numeric(p,s)
  固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。
  p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。
  s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。


5-17 字节


smallmoney
介于 -214,748.3648 和 214,748.3647 之间的货币数据。
4 字节


money
介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。
8 字节


float(n)
从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。参数 n 指示该字段保存 4 字节还是 8 字节。float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。
4 或 8 字节


real
从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。
4 字节

Date 类型:
  


数据类型
描述
存储


datetime
从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。
8 bytes


datetime2
从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。
6-8 bytes


smalldatetime
从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。
4 bytes


date
仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。
3 bytes


time
仅存储时间。精度为 100 纳秒。
3-5 bytes


datetimeoffset
与 datetime2 相同,外加时区偏移。
8-10 bytes


timestamp
存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。
 

其他数据类型:
  


数据类型
描述


sql_variant
存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。


uniqueidentifier
存储全局标识符 (GUID)。


xml
存储 XML 格式化数据。最多 2GB。


cursor
存储对用于数据库操作的指针的引用。


table
存储结果集,供稍后处理。
  
  合计函数:
  where 不能与合计函数一起使用,所以引入having:
  select name,sum(age) from test group by name  having sum(age)=14
  lower()小写,upper()大写,substring(column,start,length),len()取长度,round(column,保留位数)四舍五入函数
  
  三.高级应用:
  存储过程:begin ,end相当于花括号而已
  例3、create procedure goods_ordersum
           @goodsname varchar(20),//输入参数
           @ordersum money output//输出参数
as
  sql_statements
例4、create procedure goods_order2//默认值
                         @goodsname varchar(20)=null
as
  sql_statements
  触发器:
  限制:1、在调用CREATE TRIGGER语句时,它必须为批中的第一个语句。
2、        触发器的基表不能为视图。
3、        WRITETEXT语句和TRUNCATE TABLE语句对触发表的资料操作不能激活触发器。
4、        由于触发器的主要用是检查和修改资料,所以在触发器不要使用能够返回结果集合的要SELECT语句和变量赋值语句。如果确实需要在触发器对变量赋值,应在触发器定义开始部分使用SET NOCOUNT语句禁止SQL SERVER返回结果集合。
  例如:
  create trigger tr_test on test
for insert,delete,update
  as
set nocount on
update test set age=2
  
  函数:只返回一个结果集
  如:create function dbo.getname()
  (
  id as int
  )
  returns nvarchar(4000)
  as
  begin
  sql_statements
  end
  游标:对表中的指定列进行操作
  DECLARE _cursor CURSOR SCROLL FOR --定义游标,并让其指向查询出来的记录
SELECT subname FROM bzk_school_position a,bzk_school_sp b
where b.school_per_cid=@cid and b.position_cid=a.cid
OPEN _cursor--打开游标
  
  FETCH NEXT FROM _cursor INTO @subname--把游标指向的第一个记录赋给中间变量
WHILE @@FETCH_STATUS = 0--当游标指向不为空的时候,循环
BEGIN
    set @result=@result+@subname+'、'--把每次循环的值依次累加给返回变量
    FETCH NEXT FROM _cursor INTO @subname --游标指向下一个记录
END
CLOSE _cursor--关闭游标
DEALLOCATE _cursor--释放游标
  
  
  系统存储过程:sp_tables/columns 查sql帮助
  
  事务处理:
  begin tran//开始事务处理
  declare @error1 int  //设置变量接收异常
set @error1=0     //初始化为0
delete...
set @error=@@error+@error1 //累加异常
delete...
set  @error=@@error+@error1 //累加异常
if @error<>0        //如果有异常 回滚
rollback tran
else
commit tran         //否则提交
go

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-297716-1-1.html 上篇帖子: SQL查询结果列转行 下篇帖子: SQL快捷键
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表