双鱼座boyy 发表于 2020-8-9 08:45:00

你还不会SQL 吗?一篇让你学会SQL数据库基础(从零开始超详解)

SQL Server数据库简介:

SQL是一种关系型数据库,是一个可扩展的,高性能的,为分布式客户机/服务器计算所和设计的数据库管理系统。
1,主要特性


[*]高性能设计
[*]系统管理先进,支持图形化管理工具,支持当地和长途的系统管理和配置
[*]强壮的事务处理能力
[*]支持对称多处理布局,存储过程,ODBC,并具有自主的SQL语言
2,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-13DNUhttps://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
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)https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
4,关于数据库的操纵

4.1,SQL数据库的修改和删除

4.1.1 修改

alter database oldnamemodify 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;         --检察数据库布局https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
4.1.2 删除

drop database 数据库1,数据库2,数据库3;(需要删除几个中央用空格隔开即可)
create database Test;       --创建一个新数据库drop database Test;      --将新创建的数据库删除https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
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,属性 数据类型(自行添加是否可以为空),..................);
如果需要添加多个主键,则在前面不用写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://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
5.2 修改,删除表布局

5.2.1 修改表布局

如果利用界面话修改,此处可能出现修改不成功的情况,修改后系统不让保存;
我找到的一个方法链接:https://jingyan.baidu.com/article/a17d5285761845c098c8f282.html

[*]更改字段类型长度
alter table 表alter column 字段名 类型的长度;


[*]更改字段类型
alter table 表alter column 字段名 更改后的类型;


[*]添加not null束缚
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 nullhttps://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
5.2.2删除表布局

drop table 表1,表2,表3;(需要删除几个,就添加几个表,中央用逗号隔开)
--删除表布局drop table student;https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
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);https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
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);https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
5.5 查询表布局

select 字段名称(*代表全部) from 表
select * from Student1;select name,id from student1;https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
5.5.1 Distinct\Top用法


[*]Distinct(去除重复的值)
select distinct 字段名称 from 表


[*]Top(前n行数据)
select top 行数 字段名称 from 表
select distinct * from Student1;select top 3 name,id from student1;https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
5.6 修改表数据

update 表 set 字段名 = 新数据
update student1 set id = 5where name='小明';   --限定条件,修改哪一条数据https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
5.7 删除表记载

delete from 表
delete from student1where name='小明'   --限定条件,删除哪一行https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
6,语句

6.1 条件限定while


[*]精确限定条件
where 字段=值


[*]模糊限定条件
where 字段like'%值%' --表示带有值的数据,%放在那一边表示那一边的字无关紧急
where name like'%红%'; --带有红字的数据
6.2 between语法

用法限定条件表达式,指定表达式范围值

[*](not) between 值1 and 值2;
select distinct * from Student1where age not between 13 and 15;https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
6.3 子查询in

用于限定条件表达式,指定表达式范围值

[*](not) in(值1,值2,值3.......) --或者扩号内里可以写语句
select distinct * from Student1where age in(13,14,15);https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
6.4 子查询EXISTS


[*]exists用于查抄子查询是否至少会返回一行数据,该子查询现实上并不返回任何数据,而是返回true或false
[*]existe指定一个子查询,检测行的存在
select *from student          --显示两表中共同的数据where exists(select *from class where Student.classid=Class.classID)https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
6.5返回记载排序

order by 字段名 (asc/desc) --asc升序,desc降序,不加的话默以为升序;多个限定字段按从前往后
select *from studentorder by classID asc,age deschttps://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
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.classIDhttps://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7,函数

7.1 聚合函数avg(),sum()

7.1.1 avg()


[*]返回组中各值的平均值。其中忽略null值
[*]计算字段类型必须为数字型(整数,小数)
[*]select avg(字段) from 表
7.1.2 sum()


[*]返回表达式中全部值的和。其中忽略null值
[*]只能用于数字列
[*]select avg(字段) from 表
select avg(Student.age) as'年岁平均' from studentselect sum(Student.age) as'年岁总和' from student
7.2 聚合函数min(),max()

7.2.1 min()


[*]返回表达式中最小值
[*]忽略任何null值
[*]计算字段类型可以为数字型或字符型
[*]select min(字段) from 表
7.2.2 max()


[*]返回表达式中最大值
[*]忽略任何null值
[*]计算字段类型可以为数字型或字符型
[*]select max(字段) from 表
select min(Student.age) as'年岁最小' from studentselect max(Student.age) as'年岁最大' from student
7.3 count()和sum()函数

7.3.1 sum()

同上
7.3.2 count()


[*]返回组中的项数
[*]其中忽略null值
[*]计算字段类型必须为整型
[*]select count(字段) from 表
select count(Student.age) as'字段数' from student
7.4 len()函数


[*]返回指定字符串表达式的字符数
[*]其中不包罗尾随空格
[*]若要返回用于表达式的字节数,利用datalength()函数
[*]select len(字段) from 表
select len(Student.age) as'字符数' from studentselect datalength(Student.age) as'字节数' from studenthttps://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.5 随机数产生


[*]select rand() 可以得到一个随机小数
[*]select floor(rand()*N) 返回小于或等于所给数字表达式的最大整数
[*]select ceiling(rand()*N) 返回大于或等于所给数字表达式的最大整数
[*]eg: floor(8.122)=8;ceiling(8.122)=9
select rand()select floor(rand())select ceiling(rand())https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.6 getdate()和getutcdate()函数


[*]getdate() 返回当前数据库的系统时间值,返回值的类型为datetime
[*]getutcdate() 返回当前国际标定时间值,返回值的类型为datetime
select getdate() as '当前时间'select GETUTCDATE() as '国际标定时间'https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
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)https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.8 datediff()函数


[*]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')https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.9 datepart()函数


[*]用于返回日期/时间的单独部分,比如年,月,日,小时,分钟等;返回类型是一个int类型
[*]datename()同样是返回一个日期/时间的单独部分,返回类型是一个varchar()型
[*]day(),Month(),year()
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())https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.10 charindex()和patindex()函数

7.10.1 charindex()函数


[*]返回字符或者字符串在另一个字符串中的起始位置
[*]charindex(寻找的字符(串),字符串,[开始的位置(根据需要添加)])
[*]如果找到,则返回一个整数,整数即为位置;如果没有找到,则返回0
7.10.2 patindex()函数


[*]该函数支持通配符,不加%则需要完全相同
[*]eg:%a,则需要末了是a;a%,则需要开头是a;%a%,可以精确找到a的位置
[*]patindex('%寻找字符(串)%',字符串)
select charindex('c','abcdefg')select charindex('c','abcdefg',5)select PATINDEX('%g','abcdefg')select PATINDEX('g%','abcdefg')select PATINDEX('%g%','abcdefg')https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.11 stuff()函数


[*]用于删除指定长度的字符,并可以在指定的起点处插入另一组字符,返回类型是一个字符串型
[*]stuff(列名,开始位置,长度,替代字符串)
select stuff('aabbccddee',5,4,'')select stuff('aabbccddee',5,4,'111111')https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.12 substring()函数


[*]用于截取指定长度的字符串
[*]substring(列名,开始位置,截取长度)
select substring('aabbccddee',5,4)https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.13 left()和right()函数


[*]left()返回字符串从左边开始指定个数的字符
[*]left(列名,长度)
[*]right()返回字符串从右边开始指定个数的字符
[*]right(列名,长度)
select left('aabbccddee',5)select RIGHT('aabbccddee',5)https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.14 ltrim()和rtrim()函数


[*]ltrim()删除起始空格后返回字符表达式
[*]ltrim(列名)
[*]rtrim()删除尾随空格后返回字符表达式
[*]rtrim(列名)
select ltrim('   aabbccddee   ')select rtrim('   aabbccddee   ')https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.15 upper()和lower()函数


[*]upper()返回将小写字符数据转换为大写的字符表达式
[*]upper(列名)
[*]lower()返回将小写字符数据转换为大写的字符表达式
[*]lower(列名)
select upper('aabbccddee')select lower('aabbccddee')https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.16 replace()函数


[*]用一个字符串值替代出现的全部指定字符串
[*]replace(列名,被替代值,替代值)
select replace('aabbccddeeaa','aa','11')https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.17 replicate()和space()函数


[*]replicate()以指定的次数重复字符表达式
[*]replicate(字符表达式,次数)
[*]space()返回指定个数的空格表达式
[*]space(次数)
select replicate('aa',5)select space(5)select replicate('aa',5)+space(5)+replicate('aa',5)https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.18 reverse()函数


[*]用于倒置字符串中各个字符的位置
[*]reverse(字符串)
select reverse('aabbccddee')https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.19 cast()函数


[*]用于将某种数据类型的表达式显示转换为另一种数据类型
[*]cast(字符串 as 数据类型)
select cast(111 as varchar(10))select cast(111 as varchar(10))+'aaaa'https://p1.pstatp.com/large/pgc-image/20063fbf63b6428497c463e9de42e33c
7.20 case()函数




[*]是一种简朴的条件判断转换的一个函数
[*]简朴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 '别的'endfrom studentselect *,case when age

爱廸光伏 发表于 2020-8-12 06:31:16

关于SQL数据库

ZJKUSO 发表于 2020-8-12 08:40:57

都忘了

依海临风J 发表于 2020-8-12 09:14:21

转发了

君子达 发表于 2020-8-12 08:23:58

转发了

作死小分队小小泽 发表于 2020-8-11 23:00:08

转发了

等待出現 发表于 2020-8-10 20:19:11

转发了

吟予南歌4 发表于 2020-8-10 17:48:10

转发了

君子达 发表于 2020-8-12 08:19:40

转发了

用户2968671505852 发表于 2020-10-22 06:17:19

转发了
页: [1]
查看完整版本: 你还不会SQL 吗?一篇让你学会SQL数据库基础(从零开始超详解)