SQL server基础和部分常用内置函数

本文介绍了SQL Server的基础特性,如高性能、系统管理与事务处理,详细讲解了数据库操作(创建、修改、删除)、备份还原方法,以及数据类型、表操作、插入查询、聚合函数和内置函数等内容。适合初学者快速上手。
摘要由CSDN通过智能技术生成

SQL server基础和部分内置函数

摘要

笔者在曾经学习过mysql的基础上,对sql server基础一个基本学习。

一、特性

  • 高性能特性 充分利用windowNT优势
  • 系统管理先进 支持windows GUI 支持本地和远程
  • 强壮的事物处理功能
  • 支持对此处理器结构、存储过程、ODBC、自主的SQL语言

二、数据库基本操作

创建

if exists(select * from sys.databases where name='TestDB')
drop database TestDB        --查询数据库名为TestDB的数据库,如果有则删除。
GO
create database TestDB		--创建数据库,TestDB
on primary					--定义在主文件组上的文件
(name='db_hj',      --逻辑名称为student_date1(只在DBMS上存储)
filename='C:\project\db_hj.mdf',  --物理名称(存储在磁盘上的文件)
size=20MB,					--主文件初始大小为20mb
maxsize=unlimited,			--主文件最大限制为无限大
filegrowth=0)				--主数据文件增长幅度为0
LOG ON						--定义事务日志文件
(name='db_hj_log',		--逻辑名称为student_log1
filename='C:\project\db_hj_log.ldf',   --物理名称
size=5MB,					--事务日志初始大小为5MB
maxsize=10MB,				--事务日志最大限制为10MB
filegrowth=0)				--事务日志增长幅度为0

修改

alter database TESTDB_HJ  
modify name = testhj			--修改数据库名称


alter database testhj			--修改逻辑文件名称名称
modify file(
name = 'TESTDB_HJ',				--这里填数据库逻辑文件名称名称
size = 20MB,
maxsize = 50MB,
filegrowth = 10MB
)

删除

drop database testhj 

相关命令

exec sp_helpdb DBNAME  --显示有关 DBNAME 数据库的信息
exec sp_helpdb --返回有关所有数据库的信息
exec sp_rename 'CountProce','CountProce1';   ------重命名存储过程名;
exec sp_rename 'fruits.f_name','f_names','COLUMN';--重命名字段名;
exec sp_rename 'suppliers','supplier';   -----------重命名表名;
 
参考:https://blog.csdn.net/baidu_32731497/article/details/51523236 

三、备份还原

备份

1.SQL server Management Studio 连接数据库 找到要备份的数据库 右键->任务->备份;

2.在弹出的窗口中选择备份数据库,备份类型,默认是当前右键选择的数据库,备份类型是完整备份,并选择备份路径和文件名称;

3.点击确定,生成备份文件。

还原

1.在本机上新建一个数据库,这个库是空的,没有任何表的其他信息。是右键选择新建数据库生成的;

2.在新建的这个数据库上,选择右键,任务->还原->数据库;

3.在窗口中,选择设备为上面备份的文件,目标数据库为新建的库。

四、数据类型

类型范围存储
bigint-2^63 -2^63-18字节
int-223-223-14字节
samllint-215-215-12字节
tinyint0-2551字节
float-1.79E+ 308至-2.23E - 308、0以及2.23E - 308至1.79E + 308取决于n的值
类型输出
time12:35:29.1234567
date2020-11-10
smalldatetime2020-11-10 12:35:29
datetime2020-11-10 12:35:29.123
datetime22020-11-10 12:35:29.1234567

char[1-8000] nchar[1-4000] 固定长度

varchar[1-8000] nvarchar[1-4000] 可变长度

五、数据表

create table T_USERS
(
ID int IDENTITY (1000,1),
NAME NVARCHAR(20)
);									--自增列
 
create type 数据类型名称  			--创建自定义数据类型
from 数据类型 [NOT NULL]

drop type 数据类型名称 				--删除自定义数据类型

EXEC SP_HELP 对象名称;					--查看定义
select * from SYS.TABLES
   where NAME=‘对象名称’;

alter table 表名                         
add 列名 数据类型,列名 数据类型  				--增加列

add constraint KID primary key (ID)			--增加主键

alter table 从表 
constraint 外键名 foreign key (从表字段)
references 主表(主表字段)						--增加外键


alter table 表名                             
alter COLUMN 列名 数据类型					--修改列

alter table 表名							--删除列
drop COLUMN 列名,列名

drop table 表名						--删除表

插入

insert into 表名 (字段一,字段二..) values(value1,value2...)  --单行插入

insert into 表名 (字段一,字段二..)
values(value1,value2...)(value1,value2...)(value1,value2...);									--多行插入


insert into 表一 (字段一,字段二..) 
select 字段一,字段二,...
from 表二;										--copy其他表

查表

--基本用法
select [distinct][*][字段] from 表名  	--distinct去除重复字段

--where 条件
select * from 表名 
where 字段名 like '%待匹配文本' --查询相应字段 为 "xx待匹配文本" 的记录
		like '待匹配文本%' 	--查询相应字段 为 "待匹配文本xx" 的记录
		like '%待匹配文本%' 	--查询相应字段 为 "xx待匹配文本xx" 的记录
		
		
select * from 表名 
where 字段名 [not] between 开始值 and 结束值 --查询字段名 在开始值和结束值之间的记录	not 取反

select * from 表名 
where createDate  between '2020-07-30' and  GETDATE() --查询记录创建时间 到服务器当前时间为止

select * from 表名 
where 字段名 [not] in (字段值1,字段值2,字段值3) --查询在in(字段值)中的相应字段值的记录   not 取反 相当于分别执行了 where 字段名=字段值1, 字段名=字段值2, 字段名=字段值3
select * from 表名 where 字段名 [not] in (select 字段名 from 表名 where 条件) 	--子查询筛选完后主查询再在子查询的结果中查询

--子查询EXISTS

select A.a from 表名 A 
where [not] exists (select * from  表名 B where A.id = B.id) --查询子查询中有的记录 ()中有的值返回true,主查询显示;false 主查询不显示

--返回记录排序
select * from 表名 order by A.id,A.a [desc]  --先按id排序,再按a排序 默认升序,可多字段     desc降序   字符串数字在数据库中按照ASCII码排序,从字符的第一个数字对比,首先就会将为首个数字相同的排在一起,在从这些字符串里面对比第二个数字

--inner join (交叉关联)只返回两个表中联结字段相等的行 inner可省略
select * from1
inner join2
on1.字段号=2.字段号

--left join(左关联)返回包括左表中的所有记录和右表中联结字段相等的记录
select * from1  --主表
left join2
on1.字段号=2.字段号

--right join(由关联) 表二是主表


更新

update 表名 set 字段名 = 修改值 where 条件

删除

delect [字段][*] from 表名 where 条件

聚合函数

select avg(数字类型字段) from 表名     --平均值,忽略NULL
select sum(数字类型字段) from 表名     --求和,忽略NULL
select 字段一+字段二 from 表名 		--记录返回为字符串
select min/max(数字类型或字符型) from 表名     --最大/小值,忽略NULL
select count(字段) from 表名     --返回组中的项数(整型),忽略NULL,count_big(更大的范围2^23-1)
select len(数字类型字段) from 表名  --返回指定字符串表达式的字符数,不含尾随空格,返回字节数用DATALENTH()

随机数

select rand() --随机得到一个小数,类似:0.836393773069793
select floor(rand()*N)		--向下取整  
select ceiling(rand()*N) 	--向上取整  [1-N]

内置函数

--时间相关
select GETDATE() 			--系统当前时间
select GETUTCDATE()			--国际标准时间

CONVERT(数据类型,要转换的时间值,格式) --转换日期类型 格式(如下表)  

select CONVERT(varchar(10),GETDATE(),110) 	--11-14-2020

DATEDIFF(时间单位,startdate,enddate)  --函数返回两个日期之间的天数。startdate和 enddate参数是合法的日期表达式。 
select DATEDIFF(DAY,'2020-11-10','2020-11-14') --4

DATEADD(时间单位,num,date)     --函数在日期中添加或减去指定的时间间隔,-num,向前数

select DATEADD(DAY,5,'2020-11-14') -- 2020-11-19 00:00:00.000

DATEPART(时间单位,时间)  --返回日期/时间的单独部分,比如年、月、日、小时、分钟等等,返回类型是一个INT整型
select DATEPART(YEAR,GETDATE())  --2020

DATENAME()  --返回日期/时间的单独部份,返回数型是一个VARCHAR型
day()month()year() --获取数据库服务器系统当前时间对应的值



style IDstyle 格式
100 或0mon dd yyyy hh:miAM(或者PM)
101mm/dd/yy
102yy.mm.dd
103dd/mm/yy
104dd.mm.yy

更多styleID

--字符串相关

CHARINDEX ( str1 , str2 [ , start_location ] )   --返回字符或者字符串在另一个字符串中的起始位置,str1是要到str2中寻找的字符中,start_location是CHARINDEX函数开始在str2中找str1的位置,返回位置(可理解为数组下标),否则返回0。
select charindex('aa','ccssddaadd',3) --7

PATINDEX('%字符%','str(字段名)')  --返回字符或者字符串在另一个字符串中的起始位置,支持通配符。
select patindex('%aa','ccssddaa') --7 以aa结尾

STUFF(str(字段名) ,开始位置,长度,替代字符串)  --删除指定长度的字符,并可以在制定的起点处插入另一组字符。,返回类型是一个字符串型
select STUFF('aabbccdd',5,2,'ee') --aabbeedd

SUBSTRING( str(字段名) , start, length ) --函数用于截取指定长度的字符串
select substring('aabbccdd',5,2) --cc


LEFT ( str(字段名) , num ) --返回字符串中从左边开始指定个数的字符
select LEFT('aabbccdd',2) --aa
RIGHT( str , num ) --返回字符串中从右边开始指定个数的字符。
select right('aabbccdd',2) --dd



LTRIM(str(字段名)) --删除起始空格后返回字符表达式。

RTRIM(str(字段名)) --截断所有尾随空格后返回一个字符串。

UPPER(str(字段名)),LOWER(str(字段名)) --大小写转换

REPLACE(str1,str2,str3)  --将str1中的str2替换为str3

REPLICATE(str1,num)  --返回num次str1       str1str1str1

SPACE(n) --返会n个空格

select 字段一 + SPACE(3) + 字段二 from--字段一   字段二

REVERSE(str) --倒置字符串
--数据类型转换
CAST(123 as varchar(10))   --123转换为varcahr型
select 'abc' + CAST(123 as varchar(10)) --'abc123'

select CAST(12.5 as decimal(18,2))  --12.50
--CASE (相当于if……elseif)
select  * ,
case when A.sex = 1 then '男' 
when A.sex = 2 then '女' 
end '性别'
from student A		--男女生按性别分类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值