目录
SQL Server数据库简介:
1,主要特性
2,SQL安装
3,SQL数据库创建
4,关于数据库的操作
4.1,SQL数据库的修改和删除
4.1.1 修改
4.1.2 删除
4.2,SQL数据类型
4.2.1 数字类型
4.2.2时间类型
4.2.3字符串类型
5,关于表的操作
5.1 创建表
5.2 修改,删除表结构
5.2.1 修改表结构
5.2.2删除表结构
5.3 定义主键外键
5.3.1 增加主键(上面都有)
5.3.2 删除主键
5.3.3 添加外键
5.3.4 删除外键
5.4 新增表数据
5.5 查询表结构
5.5.1 Distinct\Top用法
5.6 修改表数据
5.7 删除表记录
6,语句
6.1 条件限制while
6.2 between语法
6.3 子查询in
6.4 子查询EXISTS
6.5返回记录排序
6.6 关联查询
6.6.1 inner join
6.6.2 left join
6.6.3 right join
7,函数
7.1 聚合函数avg(),sum()
7.1.1 avg()
7.1.2 sum()
7.2 聚合函数min(),max()
7.2.1 min()
7.2.2 max()
7.3 count()和sum()函数
7.3.1 sum()
7.3.2 count()
7.4 len()函数
7.5 随机数产生
7.6 getdate()和getutcdate()函数
7.7 convert()函数
7.8 datediff()函数
7.9 datepart()函数
7.10 charindex()和patindex()函数
7.10.1 charindex()函数
7.10.2 patindex()函数
7.11 stuff()函数
7.12 substring()函数
7.13 left()和right()函数
7.14 ltrim()和rtrim()函数
7.15 upper()和lower()函数
7.16 replace()函数
7.17 replicate()和space()函数
7.18 reverse()函数
7.19 cast()函数
7.20 case()函数
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-234JG
4C4EK-89KDL-5ZFP9-1LA5P-2A0J0
HY086-4T01N-CZ3U0-CV0QM-13DNU
下面都用的是语句创建,没有展示如何界面话创建
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
)
alter database oldname
modify name=newname;alter database 数据库名称
modify file(
name ='将要修改的文件名称', --这个文件名称不能修改
size=20mb,
maxsize=50mb,
filegrowth=1mb
);exec SP_HELPDB 数据库名称; --查看数据库的内部结构
alter database Tset01 --修改名字
modify name=Test02;
alter database Test02 --修改属性
modify file(
name ='Test01_1',
size=20mb,
maxsize=50mb,
filegrowth=1mb
);
exec SP_HELPDB Test02; --查看数据库结构
drop database 数据库1,数据库2,数据库3;(需要删除几个中间用空格隔开即可)
create database Test; --创建一个新数据库
drop database Test; --将新创建的数据库删除
数据类型是一种属性,用于指定对象可保存的数据的类型:整型数据,字符数据,日期和时间,二进制字符串等等。
数据类型 | 描述 | 存储 |
---|---|---|
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 字节 |
数据类型 | 描述 | 存储 |
---|---|---|
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 变量。 |
数据类型 | 描述 | 存储 |
---|---|---|
char(n) | 固定长度的字符串。最多 8,000 个字符。 | n |
varchar(n) | 可变长度的字符串。最多 8,000 个字符。 | |
varchar(max) | 可变长度的字符串。最多 1,073,741,824 个字符。 | |
text | 可变长度的字符串。最多 2GB 字符数据。 |
主键:大多数表有一个主键,主键由表的一列或者多列组成。主键始终是唯一的,表中的任何主键都不能重复。
create table 表名称(
属性 数据类型 primary key not null,
属性 数据类型(自行添加是否可以为空),
..................
);如果需要添加多个主键,则在前面不用写primary key,在最后加上primary key(属性1,属性2,.....)
primary key(ID,name)
create table Student(
ID int primary key not null,
name varchar(10) not null,
age int not null,
claseID int
);
如果使用界面话修改,此处可能出现修改不成功的情况,修改后系统不让保存;
我找到的一个方法链接:https://jingyan.baidu.com/article/a17d5285761845c098c8f282.html
alter table 表
alter column 字段名 类型的长度;
alter table 表
alter column 字段名 更改后的类型;
alter table 表
alter column 字段名 数据类型 not null;
alter table userint
add constraint 主键名称 primary key(字段名)
EXEC sp_rename '字段.字段名',
'更改后的字段名','column'
alter table 表 add 字段名 字段类型 default null
--更改字段长度
alter table Student
alter column name varchar(100);
--更改字段类型
alter table Student
alter column age float;
--添加not null约束
alter table student
alter column classID int not null;
--设置主键(前提是表结构中没有设置主键)
alter table student
add constraint Kname primary key(name);
--更改字段名
EXEC sp_rename 'student.age',
'ages','column';
--添加字段名
alter table student
add num int default null
drop table 表1,表2,表3;(需要删除几个,就添加几个表,中间用逗号隔开)
--删除表结构
drop table student;
alter table 表名
add constraint 主键名 primary key(属性);
alter table 表名 drop 主键名
alter table 将要加入外键表
add constraint 外键名字 foreign key(增加外键字段) references 主键表(主键字段);
alter table student
add constraint F_classid foreign key(classid) references class(classid);
alter table 表名 drop constraint 外键名
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);
select 字段名称(*代表全部) from 表
select * from Student1;
select name,id from student1;
select distinct 字段名称 from 表
select top 行数 字段名称 from 表
select distinct * from Student1;
select top 3 name,id from student1;
update 表
set 字段名 = 新数据
update student1
set id = 5
where name='小明'; --限制条件,修改哪一条数据
delete from 表
delete from student1
where name='小明' --限制条件,删除哪一行
where 字段=值
where 字段like'%值%' --表示带有值的数据,%放在那一边表示那一边的字可有可无
where name like'%红%'; --带有红字的数据
用法限制条件表达式,指定表达式范围值
select distinct * from Student1
where age not between 13 and 15;
用于限制条件表达式,指定表达式范围值
select distinct * from Student1
where age in(13,14,15);
select *from student --显示两表中共同的数据
where exists(select *from class where Student.classid=Class.classID)
order by 字段名 (asc/desc) --asc升序,desc降序,不加的话默认为升序;多个限制字段按从前往后
select *from student
order by classID asc,age desc
交叉关联,只返回两个表中联结字段相等的值
select *from 表1
inner join 表2
on 表1.字段=表2.字段
左关联,返回包含左表中的所有记录和右表中联结字段相等的值
select *from 表1
left join 表2
on 表1.字段=表2.字段
右关联,返回包含右表中的所有记录和左表中联结字段相等的值
select *from 表1
right join 表2
on 表1.字段=表2.字段
select *from student --交叉关联
inner join class
on student.classid=class.classID
select *from student --左关联
left join class
on student.classid=class.classID
select *from student --右关联
right join class
on student.classid=class.classID
select avg(Student.age) as'年龄平均' from student
select sum(Student.age) as'年龄总和' from student
select min(Student.age) as'年龄最小' from student
select max(Student.age) as'年龄最大' from student
同上
select count(Student.age) as'字段数' from student
select len(Student.age) as'字符数' from student
select datalength(Student.age) as'字节数' from student
select rand()
select floor(rand())
select ceiling(rand())
select getdate() as '当前时间'
select GETUTCDATE() as '国际标准时间'
格式数字 | 对应格式 |
---|---|
0 或 100 (*) | mon dd yyyy hh:miAM(或 PM) |
101 | mm/dd/yyyy |
102 | yy.mm.dd |
103 | dd/mm/yy |
104 | dd.mm.yy |
105 | dd-mm-yy |
106 | dd mon yy |
107 | mon dd, yy |
108 | hh:mm:ss |
9 或 109 (*) | mon dd yyyy hh:mi:ss:mmmAM(或 PM) |
110 | mm-dd-yy |
111 | yy/mm/dd |
112 | yymmdd |
13 或 113 (*) | dd mon yyyy hh:mm:ss:mmm(24h) |
114 | hh: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:mmmAM |
131* | 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)
datediff()函数返回两个日期之间的天数
datediff(日期类型,日期1,日期2)
dateadd()函数返回两个日期之间的天数
dateadd(日期类型,天数,日期)
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')
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())
select charindex('c','abcdefg')
select charindex('c','abcdefg',5)
select PATINDEX('%g','abcdefg')
select PATINDEX('g%','abcdefg')
select PATINDEX('%g%','abcdefg')
select stuff('aabbccddee',5,4,'')
select stuff('aabbccddee',5,4,'111111')
select substring('aabbccddee',5,4)
select left('aabbccddee',5)
select RIGHT('aabbccddee',5)
select ltrim(' aabbcc ddee ')
select rtrim(' aabbcc ddee ')
select upper('aabbccddee')
select lower('aabbccddee')
select replace('aabbccddeeaa','aa','11')
select replicate('aa',5)
select space(5)
select replicate('aa',5)+space(5)+replicate('aa',5)
select reverse('aabbccddee')
select cast(111 as varchar(10))
select cast(111 as varchar(10))+'aaaa'
是一种简单的条件判断转换的一个函数
简单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
select *,case id when '1' then '一号' when '2' then '二号' else '其它'end
from student
select *,case when age<12 then '儿童' when age<15 and age>=12 then '青少年' else '少年'end
from student