目录

  • 一、数据库的创建
  • 二、数据库的修改查询与删除
  • 三、数据库的备份和还原
  • 四、数据库的数据类型
  • (1)数字类型
  • (2)时间类型
  • (3)字符串类型
  • 五、创建数据表
  • 六 、数据表的修改与删除
  • 七、定义表主键、外键
  • 八、新增表记录
  • 九、查询表记录
  • 十、修改数据表记录(数据)
  • 十一、删除数据表记录
  • 十二、条件限制语法
  • 十三、子查询 IN
  • 十四、子查询 EXISTS
  • 十五、返回记录排序
  • 十六、关联查询(多表查询)
  • 十七、聚合函数 AVG() 、SUM()
  • 十八、聚合函数 min() 、max()
  • 十九、count()
  • 二十、len() 函数
  • 二十一、生成随机数 rand()
  • 二十二、获得时间 getdate()、 getutcdate()
  • 二十三、时间的计算 datediff() 、dateadd()函数
  • 二十四、对日期某一部分的获取 datepart()、datename() 函数
  • 二十五、字符串的匹配查找 charindex()、patindex()


一、数据库的创建

写在前面:这些操作执行后都需要右键单击数据库,然后点击刷新才可出现效果
这其实是我的学习笔记,如有不足或偏差之处还请同志们可评论或私信告知

方式一:图形界面

最后点击确定结课在左侧出现数据库名称

sql server实操学习 sql server 教学_sql server实操学习


方式二:利用sql脚本进行创建

点击运行之后需要刷新一下即可在左侧项目栏出现新建的数据库文件

sql server实操学习 sql server 教学_sql server实操学习_02

create database testdb01
on primary (
name='testdb01',
filename='D:\SQL server study\testFiles\testdb\testdb01.mdf',
size=10MB, /*初始大小*/
maxsize=100MB,  /*最大为多少*/
filegrowth=5MB  /*每次的增长量*/
)
/*新建日志文件*/
log on(
name="testdb01_log" ,
filename='D:\SQL server study\testFiles\testdb\testdb01.ldf' ,
size=10MB,
maxsize=100MB,
filegrowth=5MB 
)

**

二、数据库的修改查询与删除

**

方式一:图形界面

(1)数据库的修改:

sql server实操学习 sql server 教学_数据_03


如果想执行其中一部分代码,则先将想要执行的代码***选中后再执行***即可

sql server实操学习 sql server 教学_数据_04

exec sp_helpdb test  /*修改完毕后可用此命令查询,test为数据库名称*/
**(2)数据库的删除**
		右键选择要删除的数据库,单击删除即可,
		如果数据库正在使用则  **右键选中要删除的数据库 -> 任务 -> 分离 ->在弹出框勾选删除 -> 点击确定删除**

方式二:利用脚本修改

数据库的修改
修改数据库的名称

alter database test
modify name = re_test;  /*想要重新命名的名字*/
/*如果在数据库重命名的时候发生"无法用排他锁锁定该数据库"错误
将在数据库“属性”->"选项"->“限制访问”->“Single”  即可*/

修改其他信息

alter database re_test
modify file (
name = test,  /*此名字为逻辑文件的名字,并不是数据库的名字*/
size = 12MB,  /*将初始大小改为12MB*/
maxsize = 100MB,  /*最大改为100MB*/
filegrowth = 6MB  /*增长改为6MB*/
);

修改完毕后可执行查看指令查看信息

sql server实操学习 sql server 教学_字段_05

(2)数据库的删除

drop database testdb01  /*删除数据库指令*/

三、数据库的备份和还原

SQL Server备份和还原组件为保护存储在SQL Server 数据库中的关键数据提供了基本安全保障。为了最大限度地降低灾难性数据丢失的风险,您需要定期备份数据库以保留对数据所做的修改。规划良好的备份和还原策略有助于防止数据库因各种故障而造成数据丢失。通过还原一组备份,然后恢复数据库来测试您的策略,以便为有效地应对灾难做好准备。

  • ·差异备份(differential backup)
  • ·完整备份(full backup)

右键单击想要备份的数据库 -> 任务 -> 备份

sql server实操学习 sql server 教学_字段_06


右键单击 "数据库"文件夹 -> 还原数据库

sql server实操学习 sql server 教学_sqlserver_07


如果想将数据在数据库引擎上删除则可利用分离操作:右键单击想要操作的数据库 -> 任务 -> 分离 -> 确定

若需要恢复时:单击"数据库"文件夹 -> 附加

sql server实操学习 sql server 教学_字段_08

四、数据库的数据类型

在SQL Server中,每个列、局部变量、表达式和参数都具有一个相关的数据类型。数据类型是一种属性,用于指定对象可保存的数据的类型: **整数数据、字符数据、货币数据、日期和时间数据、二进制字符串**等。

(1)数字类型

sql server实操学习 sql server 教学_数据库_09

(2)时间类型

sql server实操学习 sql server 教学_sqlserver_10

(3)字符串类型

前两个一般会选用varchar,即可变的。后两个则常选用nvarchar

sql server实操学习 sql server 教学_字段_11

五、创建数据表

方法一:图形界面

首先展开想要添加表的数据库,找到 **表 -> 右键单击表 -> 新建 -> 表 ** 在弹出界面添加想要的数据即可

sql server实操学习 sql server 教学_字段_12


添加完毕想要的数据后点击保存,在弹出对话框输入想要保存的名称,这里我用的 “userinfo”

方法二:脚本形式

sql server实操学习 sql server 教学_sql server实操学习_13

create table userinfo1 /*userinfo1为数据表名字*/
( ID            int       primary key    not null,  
/*起名为ID  数据类型为int  表示主键    字段不可为空*/
names varchar(10) not null,

age int null
)
创建完成之后需要刷新一下才能显示出来

六 、数据表的修改与删除

修改表结构

方法一:图形界面

首先找到想要修改的数据表,然后右键单击 ,然后选择设计,弹出如下所示,修改完成后点击保存即可。

sql server实操学习 sql server 教学_sqlserver_14


方法二:用脚本修改

- 更改字段类型长度

alter table 表名
	alter column 字段名 类型的长度    --varchar(60)

- 更改字段类型

alter table 表名
	alter column 字段名 更改后的类型

- 添加 not null 约束

alter table 表名
	alter column 字段名 int not null

- 设置主键

alter table表
	add constraint 主键名 primary key(字段名)

- 更改字段名

exec sp_ rename  '表名.原字段名','更改后的字段名', 'COLUMN'

- 添加字段名

alter table 表名
ADD字段名字段类型 DEFAULT null

- 删除表

drop table table_name[,...,n]   
可执行同时删除多个,用逗号隔开

sql server实操学习 sql server 教学_字段_15

/*修改字段的长度*/
alter table userinfo
alter column name varchar(100);

/*修改数据类型*/
alter table userinfo
alter column age float;

/*添加not null 约束*/
alter table userinfo
alter column age float not null;

/*设置主键*/
alter table userinfo
add constraint KID primary key (ID);

/*更改字段名*/
alter table userinfo
exec sp_rename 'userinfo.r_age', 'age', 'column' ;

/*增加字段*/
alter table userinfo
add grade varchar(10) not null;

/*删除字段*/
drop table userinfo1

七、定义表主键、外键

  • 主关键字(primary key)
    主关键字(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。一个表只有一个主关键字。主关键字又可以称为主键。主键可以由一个字段,也可以由多个字段组成,分别称为单字段主键或多字段主键。又称主码。并且它可以唯一确定表中的一行数据,或者可以唯一确定一个实体。
/*增加主键*/
alter table 表名 
add constraint PK_S primary key (哪一个字段)
/*删除主键*/
alter table 表名 
drop constraint 主键名称
  • - 外键( Foreign Key)
    外键又称作外关键字。
    是用来使表与表之间联系。用来保证数据库的参照完整性,外键的取值必须来自参照表参照列的值,可以为空也可不为空。
    以另一个表的外键作为主键的表被称为主表,具有此外键的表被称为主表的从表。
    保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。
/*添加外键*/
alter table 表名
/*Fk_s为增加的外键名称*/
add constraint Fk_s foreign key (从表的字段名) references 表名(字段名)
/*删除外键*/
alter table 表名
drop constraint FK_s

八、新增表记录

方式一:图形界面

1.可新建一个表,定义一些字段,将 是标识改为是

sql server实操学习 sql server 教学_sqlserver_16

2.可在该图形界面的表中直接添加数据

sql server实操学习 sql server 教学_sqlserver_17

3.添加完成后可直接关掉,默认自动保存。
   然后执行该指令查询表内容
select * from [dbo].[table01]
/*其中  *  标识查询所有的内容,如果想只查询指定字段,比如 userid ,则直接写 userid 即可

sql server实操学习 sql server 教学_数据_18


方式二:运用脚本

- 插入单行数据

insert into "表格名" ("栏位1", "栏位2",.….) 
values("值予, "值2",...);

- 插入多行数据

insert into "表格名"("栏位1","栏位2",...) 
values("值1", "值2",.…), ("值1", "值2",...), ("值1", "值2",.….);

- 从其它表dpy数据

insert into "表格1" ("栏位1","栏位2",.….) 
select  "栏位3", "栏位4"...  from "表格2";

sql server实操学习 sql server 教学_字段_19

九、查询表记录

方式一:图形界面形式

在想要查询的表上右键单击 ,然后选择 “选择前100行” 即可查询。

方式二:写脚本

- 查询指令

/* select_list  为 * 则标识查询全部内容, 还可以指定字段(例,userid)查询*/
/* table_source 为表名*/
select select_list from table_source

- distinct去重

select distinct select_list from table_source

- Top 查询前多少数据

select top 行数 select_list from table_source

sql server实操学习 sql server 教学_sqlserver_20


sql server实操学习 sql server 教学_sqlserver_21

十、修改数据表记录(数据)

方式一:图形界面

打开数据表直接修改即可

方式二:使用脚本

update table_name
 set 字段1=值1,字段2=值2, ……
  /*如果不加此限制修改第几行,则表中所有字段1,字段2,……  都将被修改*/
 where ID = 行数

sql server实操学习 sql server 教学_sql server实操学习_22

十一、删除数据表记录

方法一:图形界面

打开表后,就像之前设置为主键的方式,只不过这次选择的是删除

方法二:用脚本

delete from table_name  /*删除表中所有记录,而不是删除表*/
/*下面为删除某一行*/
delete from table_name 
where ID = 第几行
/*下面为删除某一列*/
alter table 表名 drop column 列名

sql server实操学习 sql server 教学_字段_23

十二、条件限制语法

Where

- 精准限制条件

where 字段 = 值

- 模糊限制条件

where 字段 like ‘%值’
where 字段 like ‘值%’
where 字段 like ‘%值%’

下面的例子为用where限制查询的方法,也可用于删除等操作。

sql server实操学习 sql server 教学_数据_24


sql server实操学习 sql server 教学_数据库_25


sql server实操学习 sql server 教学_sqlserver_26

/*查找ID为1的数据*/
select * from table01
where ID = 1 

/*模糊查询,将所有结尾带猫的查到*/
select * from table01
where username like '%猫'
/*模糊查询,将所有开头带猫的查到*/
select * from table01
where username like '猫%'
/*模糊查询,只要带有猫咪则都将被查到*/
select * from table01
where username like '%猫%'

between 语法

用于限制条件表达式,指定表达式范围值;就是限制你指令作用的范围。
/*包含某范围*/
test_expression between begin_expression and end_expression
/*不包含*/
test_expression not between_expression begin and end_expression

sql server实操学习 sql server 教学_数据_27

/*其查到的内容为第 3 4 5 6行数据 */
select * from table01
where ID between 3 and 6
/*除了第3 4 5 6之外的所以数据*/
select * from table01
where ID    not between 3 and 6
/*例如这种范围,那个字符不一样则比较哪个*/
/*其中 A 与 D 不一样,则获取ZA123456,ZB123456,ZC123456,ZD123456,的数据*/
/*利用这个可以很方便获取某个范围内的时间等信息*/
/*如果说开始和结束字符数长度不一致,较短的空的位置则按最小处理*/
select * from table01
where userid between 'ZA123456' and 'ZD123456'

/*GETDATE() 获得数据库系统当前时间*/
select * from table01
where userid between 2021-01-01 and GETDATE()

select GETDATE(); /*获得当前时间*/

十三、子查询 IN

/*用于限制条件表达式,指定表达式范围值*/
test_expression in ( subquery | expression[, ... , n]
test_expression not in ( subquery | expression[, ... , n]

示例:

sql server实操学习 sql server 教学_sql server实操学习_28

十四、子查询 EXISTS

select a.StudentNo, a.StudentName, a.Age from [dbo].[Students] as a 
where exists (select lD from [dbo].[Student_Lesson] as b where a.StudentNo = b.StudentNo);

注:其中 第一个表名后面有个 as a,意思是给前面的表起个别名a,有个 as b则是起个别名b,其中 as 可省略不写。

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False

EXISTS指定一个子查询,检测行的存在。

sql server实操学习 sql server 教学_数据_29

十五、返回记录排序

order by order_by_expression ASC [, ... , n]   /*升序排序*/
order by order_by_expression DESC [, ... , n]   /*降序排列*/

注 :其中order_by_expression 为想要被排序的那个字段

sql server实操学习 sql server 教学_数据_30

十六、关联查询(多表查询)

**inner join (交叉关联)** 只返回两个表中联结字段相等的行
select * from 表1 inner join 表2 on 表1.字段号=表2.字段
**left join(左关联)**返回包括左表中的所有记录和右表中联结字段相等的记录
select * from 表1 left join 表2 on 表1.字段号 = 表2.字段号
**right join(右关联)**返回包括右表中的所有记录和左表中联结字段相等的记录
select * from 表1 right join 表2 on 表1.字段号 = 表2.字段号

交叉关联:

sql server实操学习 sql server 教学_sqlserver_31


左关联:

sql server实操学习 sql server 教学_数据_32


右关联:

sql server实操学习 sql server 教学_sql server实操学习_33

多表关联:

sql server实操学习 sql server 教学_sqlserver_34

十七、聚合函数 AVG() 、SUM()

AVG()
返回组中各值的平均值。其中忽略Null值。
计算字段类型必须为数字型(整数、小数)

select AVG(Score) from 表名

SUM()
返回表达式中所有值的和。其中忽略Null值。
SUM 只能用于数字

select SUM(Scorce) from 表名

sql server实操学习 sql server 教学_字段_35

十八、聚合函数 min() 、max()

min()
比较多个对象,返回其中最小值。
MIN忽略任何Null值。
计算字段类型可为数字型或字符型

select MIN (Score) from 表名

max()
比较多个对象,返回其中最大值。
MAX忽略任何Null值。
计算字段类型可为数字型或字符型

select MAX(Score) from 表名

sql server实操学习 sql server 教学_字段_36

十九、count()

count()
返回组中的项数。
其中忽略Null值。
计算字段返回类型为整型

select count(Score) from 表名

sql server实操学习 sql server 教学_sql server实操学习_37

二十、len() 函数

len()
返回指定字符串表达式的字符数。
其中不包含尾随空格。
若要返回用于表示表达式的字节数请使用**datalength ()**函数。

select len(Username) from 表名

sql server实操学习 sql server 教学_sqlserver_38

二十一、生成随机数 rand()

在查询分析器中执行:select rand() 可以随机的得到一个小数,类似:0.836393773069793
这种随机数在实用的过程中使用的并不多,一般我们会使用到的是随机整数。

select floor(rand()*N)
select ceiling(rand()*N)

floor 函数返回小于或等于所给数字表达式( N )的最大整数。
ceiling 函数返回大于或等于所给数字表达式( N )的最小整数。

例如:
floor(9.1782)= 9     
ceiling(9.1782)= 10

sql server实操学习 sql server 教学_sql server实操学习_39

二十二、获得时间 getdate()、 getutcdate()

getdate()
返回当前数据库系统时间值,返回值的类型为datetime,包含时间和日期

select getdate();

getutcdate()

返回当前国际标准时间值,返回值的类型为datatime

select getutcdate();

sql server实操学习 sql server 教学_数据库_40


二十三、convert() 函数

CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据。

CONVERT(data_type(length), data_to_be_converted, style)

style ID

style 格式

100或者 0

mon dd yyyy hh:mi AM或PM

101

mm/dd/yy

102

yy.mm.dd

103

dd/mm/yy

104

dd.mm.yy

sql server实操学习 sql server 教学_数据库_41


sql server实操学习 sql server 教学_数据库_42

二十三、时间的计算 datediff() 、dateadd()函数

DATEDIFF() 函数返回两个日期之间的天数。

DATEDIFF(datepart, startdate, enddate)
datepart为 YEAR、MONTH、DAY、HOUR、MINUTE
startdate 和 enddate 参数是合法的日期表达式。

DATEADD() 函数在日期中添加或减去指定的时间间隔。

DATEADD(datepart, number, date)
datepart 为 YEAR、MONTH、DAY、HOUR、MINUTE
number 可为正数也可为负数

sql server实操学习 sql server 教学_字段_43

二十四、对日期某一部分的获取 datepart()、datename() 函数

DATEPART()函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
返回类型是一个INT整型
DATENAME()这个函数同样是用于返回日期/时间的单独部份。
返回数型是一个VARCHAR型

day() 、 month()、 year()
这三个函数是获取当前数据库部分时间

sql server实操学习 sql server 教学_数据库_44

二十五、字符串的匹配查找 charindex()、patindex()

  • charindex()

返回字符或者字符串在另一个字符串中的起始位
CHARINDEX函数调用方法如下:

CHARINDEX ( expression1 , expression2 [ , start_location ] )
expression1 是要到expression2中寻找的字符
start_location 是一个非必要参数 ,也是在expression2中开始找expression1的起始位置。

CHARINDEX函数返回一个整数,返回的整数是expression1在expression2中的起始位置。
假如 CHARINDEX没有找到要找的字符串,那么函数整数“0”。

  • patindex()

PATINDEX函数返回字符或者字符串另一个字符串或者表达式中的起始位置,
PATINDEX函数支持搜索字符串中使用通配符,这使PATINDEX函数对于变化的搜索字符串很有价值。
和 CHARINDEX函数一样,PATINDEX函数返回搜索字符串在被搜索字符串中的起始位置。
假如有这样一个PATINDEX函数: PATINDEX(%BC%’,‘ABCD’)
这个PATINDEX函数返回的结果是2,这和 CHARINDEX函数一样。
这里的%标记告诉PATINDEX函数去找字符串“BC",不管被搜索的字符串中在“BC”的前后有多少字符!

本示例是直接采用举例的字符,当然你也可以灵活运用,先查找到某张表的内容,然后再在内容中查找

sql server实操学习 sql server 教学_字段_45