SQL Server 数据库总结.docx
《SQL Server 数据库总结.docx》由会员分享,可在线阅读,更多相关《SQL Server 数据库总结.docx(25页珍藏版)》请在冰豆网上搜索。
SQLServer数据库总结
SQL 基础
数据库简介:
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。
数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
数据库常见产品
SQLServer数据库
美国Microsoft公司推出的一种关系型数据库系统。
SQLServer是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。
其主要特点如下:
(1)高性能设计,可充分利用WindowsNT的优势。
(2)系统管理先进,支持Windows图形化管理工具,支持本地和远程的系统管理和配置。
(3)强壮的事务处理功能,采用各种方法保证数据的完整性。
(4)支持对称多处理器结构、存储过程、ODBC,并具有自主的SQL语言。
SQLServer以其内置的数据复制功能、强大的管理工具、与Internet的紧密集成和开放的系统结构为广大的用户、开发人员和系统集成商提供了一个出众的数据库平台。
安装SQLServer
启用SA用户远程登录
设置密码
开启SA用户。
点击属性,启用远程连接。
重启服务,使其生效。
命令:
services.msc
TCP 0.0.0.0:
1433 0.0.0.0:
0 LISTENING
1433端口是开启的。
当我们关闭服务后,端口也将关闭。
数据库语言
数据查询语言DQL
DQL:
(DataQueryLanguage)SELECT数据查询语言
数据操纵语言DML
如insert,delete,update,select(插入、删除、修改、检索)
数据定义语言DDL
如drop,alter,truncate等都是DDL
数据控制语言DCL
DCL(DataControlLanguage)是数据库控制语言。
是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。
在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
创建第一个数据库
新建数据库
限制增长:
数据库的文件后缀
2cto.mdf
日志文件后缀
2cto_log.ldf
分离数据库:
数据类型
第一大类:
整数数据
bit:
bit数据类型代表0,1或NULL,就是表示true,false.占用1byte.
int:
以4个字节来存储正负数.可存储范围为:
-2^31至2^31-1.
smallint:
以2个字节来存储正负数.存储范围为:
-2^15至2^15-1
tinyint:
是最小的整数类型,仅用1字节,范围:
0至此^8-1
第二大类:
精确数值数据
numeric:
表示的数字可以达到38位,存储数据时所用的字节数目会随着使用权用位数的多少变化.
decimal:
和numeric差不多
第三大类:
近似浮点数值数据
float:
用8个字节来存储数据.最多可为53位.范围为:
-1.79E+308至1.79E+308.
real:
位数为24,用4个字节,数字范围:
-3.04E+38至3.04E+38
第四大类:
日期时间数据
datatime:
表示时间范围可以表示从1753/1/1至9999/12/31,时间可以表示到3.33/1000秒.使用8个字节.
smalldatetime:
表示时间范围可以表示从1900/1/1至2079/12/31.使用4个字节.
第五大类:
字符串数据
char:
长度是设定的,最短为1字节,最长为8000个字节.不足的长度会用空白补上.
varchar:
长度也是设定的,最短为1字节,最长为8000个字节,尾部的空白会去掉.
text:
长宽也是设定的,最长可以存放2G的数据.
第六大类:
Unincode字符串数据
nchar:
长度是设定的,最短为1字节,最长为4000个字节.不足的长度会用空白补上.储存一个字符需要2个字节.
nvarchar:
长度是设定的,最短为1字节,最长为4000个字节.尾部的空白会去掉.储存一个字符需要2个字节.
ntext:
长度是设定的,最短为1字节,最长为2G.尾部的空白会去掉,储存一个字符需要2个字节.
第七大类:
货币数据类型
money:
记录金额范围为:
-92233720368577.5808至92233720368577.5807.需要8 个字节.
smallmoney:
记录金额范围为:
-214748.3648至214748.36487.需要4个字节.
第八大类:
标记数据
timestamp:
该数据类型在每一个表中是唯一的!
当表中的一个记录更改时,该记录的timestamp字段会自动更新.
uniqueidentifier:
用于识别数据库里面许多个表的唯一一个记录.
第九大类:
二进制码字符串数据
binary:
固定长度的二进制码字符串字段,最短为1,最长为8000.
varbinary:
与binary差异为数据尾部是00时,varbinary会将其去掉
image:
为可变长度的二进制码字符串,最长2G.
设置自动增长列
数据库完整性
主键
SQL注释
第一种:
单行
--select*fromStudent
第二种:
多行
/**/
基础查询
查询所有:
Select*from 表名
select*fromStudent
新建查询→选择数据库→编写SQL语句。
查询指定列
selectname,sex,agefromStudent
条件查询:
where子句
SELECT 列名 FROM 表名 where 条件
查询性别为男的所有记录
selectname,sex,agefromStudentwheresex='男'
查询年龄大于25岁的所有记录。
select*fromStudentwhereage>25
查询所有人数的数量(count 聚合函数)
selectcount(*)fromStudent
范围查询:
select*fromStudentwhereidbetween 10 and 15
查询所有不等于22岁的记录
select*fromStudentwhereage<>22
模糊查询
1、百分号代表所有,但是不包括空
select*fromStudentwhereaddresslike'%';
2、匹配中间
select*fromStudentwherephonelike'%22%';
3、匹配开头
select * from Student where phone like '133%';
4、匹配结尾
select*fromStudentwherephonelike'%5';
5、匹配开头与结尾
select*fromStudentwherephonelike'1%3';
6、匹配单个字符
select*fromStudentwherephonelike'_33%';
7、匹配多个字符
select*fromStudentwherephonelike'_[A-Za-z-0-9]6%';
8、不匹配
select*fromStudentwherephonelike'_[!
3][6]%';
查询NULL值
1.查询NULL值
select*fromStudentwherephoneisnull
2.查询非NULL值
select*fromStudentwherephoneisnotnull
逻辑查询
AND
select*fromStudentwherename='张三'andsex='男'
/*
AND 两边都要为真,才会为真
如果有一遍为假,那么两边为假。
*/
OR
select*fromStudentwherename='张三'orsex='女'
/*
OR 两边如果一边为真,一遍为假,那么就为真,
如果两边都是假的话,那么就为假。
如果两边都真,还是为真
*/
IN查询
OR进行查询
select*fromStudentwhereid=3 orid=4 orid=5
In 查询
select*fromStudentwhereidin(1,2,3)
NOT IN
select*fromStudentwhereidnotin(1,2,3)
TOP 子句
查询前两行
SELECTTOP 2 *FROMSTUDENT
ORDERBY 语句
排序语句
1.ASC(正序)
select*fromStudentorderbyidasc
select*fromStudentorderbyage,id
2.DESC(倒序)
select*fromStudentorderbyiddesc
select*fromStudentorderbyage,iddesc
3.按列排序(能知道表有多少列)
select*fromStudentorderby 1,2,3,4,5,6,7
DISTINCT 去重复数据
selectDISTINCT agefromStudentorder by 1
数据库关系图
在数据库之中,选择数据库关系图,右键,新建数据库关系图。
然后进行选择表。
插入语句(INSERT)
第一种:
完整写法
insertintoStudent(name,sex,age,greadName,phone,address)values('张三','女',20,'一年级','132323232','青岛');
第二中:
简单写法
删除语句(DELETE)
deletefromStudentwhereid=5
修改语句(UPDATE)
-- 把银剑的年龄,修改为岁
updateStudentsetage=20 wherename='银剑'
select*fromStudentwherename='银剑'
updateStudentsetid=200 wherename='银剑'--错误的
selectCOUNT(*)fromStudentwhereStudent.phonelike'%2'
updateStudentsetage=200 wheresex='男'andStudent.phonelike'%2'
主外键
两表联查
数据库备份
1、完全备份
这是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。
但它需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。
2、事务日志备份
事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。
为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。
3、差异备份
也叫增量备份。
它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。
它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。
它的优点是存储和恢复速度快。
推荐每天做一次差异备份。
4、文件备份
数据库可以由硬盘上的许多文件构成。
如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。
由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用。
按照数据库的状态可分为三种:
1.冷备份,此时数据库处于关闭状态,能够较好的保证数据库的完整性。
2.热备份,数据库正处于运行状态,这种方法依赖于数据库的日志文件进行备份。
3.逻辑备份,使用软件从数据库中提取数据并将结果写到一个文件上。
约束完整性
1、实体完整性
2、域完整性
3、引用完整性
4、自定义完整性
子查询
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。
任何允许使用表达式的地方都可以使用子查询。
select
Student.idas'学号',nameas'姓名',ageas'年龄' ,
addressas'地址',phoneas'联系方式',
(selectgradeNamefromGradewhereGrade.id=Student.gradeId)
fromStudent
在用“=”时,在子查询中返回值必须是唯一的。
否则,要用IN。
连接查询
--左连接查询
select
Student.idas'学号',nameas'姓名',ageas'年龄' ,gradeIdas'班级',
addressas'地址',phoneas'联系方式',Grade.gradeNameas'年级'
from Grade leftjoin Student on Student.gradeId=Grade.id
--右连接查询
select
Student.idas'学号',nameas'姓名',ageas'年龄' ,gradeIdas'班级',
addressas'地址',phoneas'联系方式',Grade.gradeNameas'年级'
from Student RIGHTjoin Grade on Student.gradeId=Grade.id
--FULL连接查询
select
Student.idas'学号',nameas'姓名',ageas'年龄' ,gradeIdas'班级',
addressas'地址',phoneas'联系方式',Grade.gradeNameas'年级'
from Student FULLJOIN Grade on Student.gradeId=Grade.id
--内连接查询
select
Student.idas'学号',nameas'姓名',ageas'年龄' ,gradeIdas'班级',
addressas'地址',phoneas'联系方式',Grade.gradeNameas'年级'
from Student innerjoin Grade on Student.gradeId=Grade.id
UNION 查询
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。
列也必须拥有相似的数据类型。
同时,每条 SELECT 语句中的列的顺序必须相同。
--UNION 查询,联合查询
select1,2,3,4,5fromStudent
unionselect1,2,3,4,5fromGrade
selectname,age,sex fromStudent
union
select null ,null,nullfromGradeorderby1
SQL 聚合函数
聚合函数对一组值执行计算,并返回单个值。
除了 COUNT 以外,聚合函数都会忽略空值。
聚合函数经常与 SELECT 语句的 GROUPBY 子句一起使用。
聚合函数只能在以下位置作为表达式使用:
1、SELECT 语句的选择列表(子查询或外部查询)。
2、COMPUTE 或 COMPUTEBY 子句。
3、HAVING 子句。
年龄
datediff(yy,出生日期,getdate())
AVG平均数
MIN最小值
SUM总数
COUNT统计个数
MAX 最大值
分组:
select类别,sum(数量)as数量之和
fromA
groupby类别