| SQL Server数据库简介: 
 SQL是一种关系型数据库,是一个可扩展的,高性能的,为分布式客户机/服务器计算所和设计的数据库管理系统。
 1,主要特性
 
 
 2,SQL安装
 高性能设计
系统管理先进,支持图形化管理工具,支持当地和长途的系统管理和配置
强壮的事务处理能力
支持对称多处理布局,存储过程,ODBC,并具有自主的SQL语言
 
 这个地方欠好意思,搞错了,这个地方是linux的centos版本的下载。如果需要下载假造机可以看看
 镜像文件:http://mirrors.aliyun.com/centos/7.8.2003/isos/x86_64/
 VM假造机下载地址:https://download3.vmware.com/software/wkst/file/VMware-workstation-full-10.0.4-2249910.exe
 推荐安装教程:https://blog.csdn.net/sunshine1_0/article/details/80839430?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
 VM假造机密钥可以百度直接搜刮:VM假造机各版本密钥;
 上面VM假造机链接密钥(下面三个应该都可以):
 1Z0G9-67285-FZG78-ZL3Q2-234JG4C4EK-89KDL-5ZFP9-1LA5P-2A0J0HY086-4T01N-CZ3U0-CV0QM-13DNU
 3,SQL数据库创建
 
 下面都用的是语句创建,没有展示如何界面话创建
 create database Tset01          --数据库名称on Primary(name ='Test01_1',       --数据文件名称filename='E:\SQL数据库\Test01_1.mdf',        --保存地址size=10mb,           --起初大小maxsize=100mb,          --最大大小filegrowth=5mb               --增长速率)log on(name ='Test01_2',       --日志文件名称filename='E:\SQL数据库\Test01_2.ldf',size=5mb,maxsize=50mb,filegrowth=5mb)
 4,关于数据库的操纵
 
 4.1,SQL数据库的修改和删除
 
 4.1.1 修改
 
 
 alter database oldnamemodify name=newname;alter database Tset01             --修改名字modify name=Test02;alter database Test02       --修改属性modify file(name ='Test01_1',size=20mb,maxsize=50mb,filegrowth=1mb);exec SP_HELPDB Test02;         --检察数据库布局alter database 数据库名称modify file(name ='将要修改的文件名称', --这个文件名称不能修改 size=20mb,maxsize=50mb,filegrowth=1mb);
 exec SP_HELPDB 数据库名称; --检察数据库的内部布局
 
 4.1.2 删除
 
 
 drop database 数据库1,数据库2,数据库3;(需要删除几个中央用空格隔开即可)create database Test;       --创建一个新数据库drop database Test;      --将新创建的数据库删除
 4.2,SQL数据类型
 
 数据类型是一种属性,用于指定对象可保存的数据的类型:整型数据,字符数据,日期和时间,二进制字符串等等。
 4.2.1 数字类型
 
 数据类型形貌存储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 字节
 4.2.2时间类型
 
 数据类型形貌存储datetime从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。8 bytesdatetime2从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。6-8 bytessmalldatetime从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。4 bytesdate仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。3 bytestime仅存储时间。精度为 100 纳秒。3-5 bytesdatetimeoffset与 datetime2 相同,外加时区偏移。8-10 bytestimestamp存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真及时间。每个表只能有一个 timestamp 变量。
 4.2.3字符串类型
 
 数据类型形貌存储char(n)固定长度的字符串。最多 8,000 个字符。nvarchar(n)可变长度的字符串。最多 8,000 个字符。
 
 
 varchar(max)可变长度的字符串。最多 1,073,741,824 个字符。
 
 
 text可变长度的字符串。最多 2GB 字符数据。
 5,关于表的操纵
 
 5.1 创建表
 
 主键:大多数表有一个主键,主键由表的一列或者多列构成。主键始终是唯一的,表中的任何主键都不能重复。
 
 create table 表名称(属性 数据类型 primary key not null,属性 数据类型(自行添加是否可以为空),..................);create table Student(ID int primary key not null,name varchar(10) not null,age int not null,claseID int);如果需要添加多个主键,则在前面不用写primary key,在最后加上primary key(属性1,属性2,.....)primary key(ID,name)
 
 5.2 修改,删除表布局
 
 5.2.1 修改表布局
 
 如果利用界面话修改,此处可能出现修改不成功的情况,修改后系统不让保存;
 我找到的一个方法链接:https://jingyan.baidu.com/article/a17d5285761845c098c8f282.html
 
 alter table 表alter column 字段名 类型的长度;
 
 alter table 表alter column 字段名 更改后的类型;
 
 alter table 表alter column 字段名 数据类型 not null;
 
 alter table userintadd constraint 主键名称 primary key(字段名)
 
 EXEC sp_rename '字段.字段名','更改后的字段名','column'
 
 alter table 表 add 字段名 字段类型 default null--更改字段长度alter table Studentalter column name varchar(100);--更改字段类型alter table Studentalter column age float;--添加not null束缚alter table studentalter column classID int not null;--设置主键(前提是表布局中没有设置主键)alter table studentadd constraint Kname primary key(name);--更改字段名EXEC sp_rename 'student.age','ages','column';--添加字段名alter table studentadd num int default null
 5.2.2删除表布局
 
 
 drop table 表1,表2,表3;(需要删除几个,就添加几个表,中央用逗号隔开)--删除表布局drop table student;
 5.3 定义主键外键
 
 
 5.3.1 增加主键(上面都有)
 主关键字是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记载。一个表中只有一个关键字。主关键字又可以称为主键。主键可以由一个字段,也可以由多个字段构成,分别称为单字段主键或多字段主键。又称主码,并且它可以唯一确定表中的一行数据,或者可以唯一确定一个实体。
外键表示了两个关系之间的相互接洽。以另一个关系的外键作主关键字的表被称为主表,具有别的键的表被称为主表的从表。外键又称作外关键字。
保持数据一致性,完备性,主要目的是控制存储在外键表中的数据。
 
 
 alter table 表名add constraint 主键名 primary key(属性);5.3.2 删除主键
 
 
 alter table 表名 drop 主键名5.3.3 添加外键
 
 
 alter table 将要加入外键表add constraint 外键名字 foreign key(增加外键字段) references 主键表(主键字段);alter table studentadd constraint F_classid foreign key(classid) references class(classid);
 5.3.4 删除外键
 
 
 alter table 表名 drop constraint 外键名5.4 新增表数据
 
 
 insert into 表名 (栏位1,栏位2,栏位3......)values(值1,值2,值3);
 
 insert into 表名 (栏位1,栏位2,栏位3......)values(值1,值2,值3),(值1,值2,值3),(值1,值2,值3)......;--插入一行数据insert into Student1 (ID,name,age,claseID)values(1,'小明',12,11);--插入多行数据insert into Student1 (ID,name,age,claseID)values(2,'小红',13,3),(3,'小刚',14,3),(4,'小陈',15,4),(5,'小李',16,4);
 5.5 查询表布局
 
 
 select 字段名称(*代表全部) from 表select * from Student1;select name,id from student1;
 5.5.1 Distinct\Top用法
 
 
 select distinct 字段名称 from 表 
 
 select top 行数 字段名称 from 表select distinct * from Student1;select top 3 name,id from student1;
 5.6 修改表数据
 
 
 update 表 set 字段名 = 新数据update student1 set id = 5where name='小明';   --限定条件,修改哪一条数据
 5.7 删除表记载
 
 
 delete from 表delete from student1where name='小明'     --限定条件,删除哪一行
 6,语句
 
 6.1 条件限定while
 
 
 where 字段=值
 
 where 字段like'%值%' --表示带有值的数据,%放在那一边表示那一边的字无关紧急6.2 between语法where name like'%红%'; --带有红字的数据
 
 
 用法限定条件表达式,指定表达式范围值
 select distinct * from Student1where age not between 13 and 15;
 6.3 子查询in
 
 用于限定条件表达式,指定表达式范围值
 
 select distinct * from Student1where age in(13,14,15);
 (not) in(值1,值2,值3.......) --或者扩号内里可以写语句
 6.4 子查询EXISTS
 
 
 select *from student          --显示两表中共同的数据where exists(select *from class where Student.classid=Class.classID)
 exists用于查抄子查询是否至少会返回一行数据,该子查询现实上并不返回任何数据,而是返回true或false
existe指定一个子查询,检测行的存在
 6.5返回记载排序
 
 
 order by 字段名 (asc/desc) --asc升序,desc降序,不加的话默以为升序;多个限定字段按从前往后select *from studentorder by classID asc,age desc
 6.6 关联查询
 
 6.6.1 inner join
 
 交织关联,只返回两个表中联结字段相等的值
 
 select *from 表1inner join 表2on 表1.字段=表2.字段6.6.2 left join
 
 左关联,返回包罗左表中的全部记载和右表中联结字段相等的值
 
 select *from 表1left join 表2on 表1.字段=表2.字段
 
 
 6.6.3 right join
 
 
 
 
 右关联,返回包罗右表中的全部记载和左表中联结字段相等的值
 
 select *from 表1right join 表2on 表1.字段=表2.字段select *from student        --交织关联inner join classon student.classid=class.classIDselect *from student         --左关联left join classon student.classid=class.classIDselect *from student        --右关联right join classon student.classid=class.classID
 7,函数
 
 7.1 聚合函数avg(),sum()
 
 7.1.1 avg()
 
 
 7.1.2 sum()
 返回组中各值的平均值。其中忽略null值
计算字段类型必须为数字型(整数,小数)
select avg(字段) from 表
 
 
 
 返回表达式中全部值的和。其中忽略null值
只能用于数字列
select avg(字段) from 表
 select avg(Student.age) as'年岁平均' from studentselect sum(Student.age) as'年岁总和' from student7.2 聚合函数min(),max()
 
 7.2.1 min()
 
 
 7.2.2 max()
 返回表达式中最小值
忽略任何null值
计算字段类型可以为数字型或字符型
select min(字段) from 表
 
 
 
 返回表达式中最大值
忽略任何null值
计算字段类型可以为数字型或字符型
select max(字段) from 表
 select min(Student.age) as'年岁最小' from studentselect max(Student.age) as'年岁最大' from student7.3 count()和sum()函数
 
 7.3.1 sum()
 
 同上
 7.3.2 count()
 
 
 
 返回组中的项数
其中忽略null值
计算字段类型必须为整型
select count(字段) from 表
  select count(Student.age) as'字段数' from student7.4 len()函数
 
 
 select len(Student.age) as'字符数' from studentselect datalength(Student.age) as'字节数' from student
 返回指定字符串表达式的字符数
其中不包罗尾随空格
若要返回用于表达式的字节数,利用datalength()函数
select len(字段) from 表
 7.5 随机数产生
 
 
 select rand()select floor(rand())select ceiling(rand())
 select rand() 可以得到一个随机小数
select floor(rand()*N) 返回小于或等于所给数字表达式的最大整数
select ceiling(rand()*N) 返回大于或等于所给数字表达式的最大整数
eg: floor(8.122)=8;ceiling(8.122)=9
 7.6 getdate()和getutcdate()函数
 
 
 select getdate() as '当前时间'select GETUTCDATE() as '国际标定时间'
 getdate() 返回当前数据库的系统时间值,返回值的类型为datetime
getutcdate() 返回当前国际标定时间值,返回值的类型为datetime
 7.7 convert()函数
 
 
 格式数字
 该函数是把日期转换为新数据类型的通用函数
可以用不同的格式显示日期/时间数据
convert(长度,日期,格式)
 
 
 对应格式0 或 100 (*)mon dd yyyy hh:miAM(或 PM)101mm/dd/yyyy102yy.mm.dd103dd/mm/yy104dd.mm.yy105dd-mm-yy106dd mon yy107mon dd, yy108hh:mm:ss9 或 109 (*)mon dd yyyy hh:mi:ss:mmmAM(或 PM)110mm-dd-yy111yy/mm/dd112yymmdd13 或 113 (*)dd mon yyyy hh:mm:ss:mmm(24h)114hh:mi:ss:mmm(24h)20 或 120 (*)yyyy-mm-dd hh:mm:ss[.fff]21 或 121 (*)yyyy-mm-dd hh:mm:ss[.fff]126(***)yyyy-mm-dd Thh:mm:ss:mmm(不含空格)130*dd mon yyyy hh:mi:ss:mmmAM131*
 dd/mm/yy hh:mi:ss:mmmAM
 select CONVERT(varchar(50),getdate(),101)select CONVERT(varchar(50),getdate(),102)select CONVERT(varchar(50),getdate(),103)select CONVERT(varchar(50),getdate(),104)select CONVERT(varchar(50),getdate(),105)select CONVERT(varchar(50),getdate(),106)select CONVERT(varchar(50),getdate(),107)select CONVERT(varchar(50),getdate(),108)select CONVERT(varchar(50),getdate(),109)select CONVERT(varchar(50),getdate(),110)
 7.8 datediff()函数
 
 
 select dateadd(YY,5,'08-12-29 16:25:46.635')select dateadd(MM,5,'08-12-29 16:25:46.635')select dateadd(DD,5,'08-12-29 16:25:46.635')select dateadd(HH,5,'08-12-29 16:25:46.635')
 datediff()函数返回两个日期之间的天数
datediff(日期类型,日期1,日期2)
dateadd()函数返回两个日期之间的天数
dateadd(日期类型,天数,日期)
 7.9 datepart()函数
 
 
 select DATEPART(yy,GETDATE())select DATEPART(mm,GETDATE())select DATEPART(dd,GETDATE())select DATEPART(hh,GETDATE())select DATEPART(mi,GETDATE())select DATEPART(ss,GETDATE())select DATENAME(yy,GETDATE())      --varchar类型select YEAR(GETDATE())select month(GETDATE())select day(GETDATE())
 用于返回日期/时间的单独部分,比如年,月,日,小时,分钟等;返回类型是一个int类型
datename()同样是返回一个日期/时间的单独部分,返回类型是一个varchar()型
day(),Month(),year()
 7.10 charindex()和patindex()函数
 
 7.10.1 charindex()函数
 
 
 7.10.2 patindex()函数
 返回字符或者字符串在另一个字符串中的起始位置
charindex(寻找的字符(串),字符串,[开始的位置(根据需要添加)])
如果找到,则返回一个整数,整数即为位置;如果没有找到,则返回0
 
 
 select charindex('c','abcdefg')select charindex('c','abcdefg',5)select PATINDEX('%g','abcdefg')select PATINDEX('g%','abcdefg')select PATINDEX('%g%','abcdefg')
 该函数支持通配符,不加%则需要完全相同
eg:%a,则需要末了是a;a%,则需要开头是a;%a%,可以精确找到a的位置
patindex('%寻找字符(串)%',字符串)
 7.11 stuff()函数
 
 
 select stuff('aabbccddee',5,4,'')select stuff('aabbccddee',5,4,'111111')
 用于删除指定长度的字符,并可以在指定的起点处插入另一组字符,返回类型是一个字符串型
stuff(列名,开始位置,长度,替代字符串)
 7.12 substring()函数
 
 
 select substring('aabbccddee',5,4)
 用于截取指定长度的字符串
substring(列名,开始位置,截取长度)
 7.13 left()和right()函数
 
 
 select left('aabbccddee',5)select RIGHT('aabbccddee',5)
 left()返回字符串从左边开始指定个数的字符
left(列名,长度)
right()返回字符串从右边开始指定个数的字符
right(列名,长度)
 7.14 ltrim()和rtrim()函数
 
 
 select ltrim('   aabbcc  ddee   ')select rtrim('   aabbcc  ddee   ')
 ltrim()删除起始空格后返回字符表达式
ltrim(列名)
rtrim()删除尾随空格后返回字符表达式
rtrim(列名)
 7.15 upper()和lower()函数
 
 
 select upper('aabbccddee')select lower('aabbccddee')
 upper()返回将小写字符数据转换为大写的字符表达式
upper(列名)
lower()返回将小写字符数据转换为大写的字符表达式
lower(列名)
 7.16 replace()函数
 
 
 select replace('aabbccddeeaa','aa','11')
 用一个字符串值替代出现的全部指定字符串
replace(列名,被替代值,替代值)
 7.17 replicate()和space()函数
 
 
 select replicate('aa',5)select space(5)select replicate('aa',5)+space(5)+replicate('aa',5)
 replicate()以指定的次数重复字符表达式
replicate(字符表达式,次数)
space()返回指定个数的空格表达式
space(次数)
 7.18 reverse()函数
 
 
 select reverse('aabbccddee')
 用于倒置字符串中各个字符的位置
reverse(字符串)
 7.19 cast()函数
 
 
 select cast(111 as varchar(10))select cast(111 as varchar(10))+'aaaa'
 用于将某种数据类型的表达式显示转换为另一种数据类型
cast(字符串 as 数据类型)
 7.20 case()函数
 
 
 
 
 select *,case id when '1' then '一号' when '2' then '二号' else '别的'endfrom studentselect *,case when age
 是一种简朴的条件判断转换的一个函数
简朴case函数:case 字段 when '1' then 'a' when '2' then 'b' else 'c'end
case搜刮函数:case when 字段='1' then 'a' when 字段='2' then 'b' else 'c' end
 |