SQLSERVER培训材料.docx
《SQLSERVER培训材料.docx》由会员分享,可在线阅读,更多相关《SQLSERVER培训材料.docx(22页珍藏版)》请在冰豆网上搜索。
![SQLSERVER培训材料.docx](https://file1.bdocx.com/fileroot1/2023-7/22/014e54f4-43fd-43fb-bca8-07b1ccc6c2b8/014e54f4-43fd-43fb-bca8-07b1ccc6c2b81.gif)
SQLSERVER培训材料
数据库培训资料
一、数据库简介
数据库(Database)顾名思义就是用来存储数据的仓库,它是按照数据结构来组织、存储和管理数据的仓库。
例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。
这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。
此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种"数据库",使其可以利用计算机实现财务、仓库、生产的自动化管理。
数据库
1、数据库分类
根据存储模型划分,数据库类型主要可分为:
网状数据库(NetworkDatabase)、关系数据库(RelationalDatabase)、树状数据库(HierarchicalDatabase)、面向对象数据库(Object-orientedDatabase)等(有兴趣的同学可以自己了解一下不同类型数据库的区别),商业应用中主要是关系数据库,比如Oracle、DB2、Sybase、MSSQLServer、Informax、MySQL等我们公司目前使用的是市面上主流的关系数据库MSSQLServer数据库。
2、数据库界面
二、T-SQL数据库基础操作语句
1、SQL语言的构成
●DDL语言:
数据定义,定义基本表、视图、索引;
●DML语言:
数据操纵,查询、增加、修改、删除
●DCL语言:
权限
这里我们只讨论学习DDL、DML两种,其他类型的有兴趣的同学可以自己研究一下。
2、数据库语句操作
2.1创建数据库
语法:
createdatabase+表名
例如:
createdatabaselearntest在数据库执行后就可以产生一个名为learntest的数据库
注:
数据库名不要出现中文、特殊符号,遵循原则:
数据库中文名称首字母大写例如:
建材管理系统(JCGLXT)或者英文单词缩写建材管理系统(MMO)
2.2删除数据库
语法:
dropdatabase+表名
例如:
dropdatabaselearntest
2.3创建数据表
之前我们创建好了数据库,数据库是由很多数据表组成的,接下来就要为数据库添加数据表。
语法:
CREATETABLE表名称
(
列名称1数据类型,
列名称2数据类型,
列名称3数据类型,
....
)
说明:
1、一张数据表由数据表名、数据列名(也叫字段名)组成,就像我们平时的EXCEL表格做出来的表格一样,如下图,其中员工表就是我们所说的表名,里面的姓名、年龄、爱好、岗位就是其中列名,列名下面的内容对应的就是表所存储的数据。
2、数据类型是用了描述我们字段可以存储的数据类型,数据库支持的数据类型有整数型、小数型、字符型、日期型,详情见下表
数据类型
描述
∙integer(size)
∙int(size)
∙smallint(size)
∙tinyint(size)
仅容纳整数。
在括号内规定数字的最大位数。
∙decimal(size,d)
∙numeric(size,d)
容纳带有小数的数字。
"size"规定数字的最大位数。
"d"规定小数点右侧的最大位数。
char(size)
容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。
在括号中规定字符串的长度。
varchar(size)
容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。
在括号中规定字符串的最大长度。
date(yyyymmdd)
容纳日期。
3、实例
CREATETABLEstaff
(
namevarchar(20),
ageint,
hubbyvarchar(300),
postvarchar(50)
)
注:
1、表名命名不要出现汉字、特殊符号,命名规则可以遵循中文表名首字母大写例如商品档案(SPDA)或者英文名商品档案(GOODS)
2、字段名命名与表名遵循同一规则
参照上面的表格我们可以使用语句建立一张数据表
2.4删除表
有时候我们会删除一部分不需要的表,这个时候就需要用到表的删除。
语法:
droptable+表名
例如:
droptablestaff
2.5创建视图
视图是指数据库中的视图,是一个虚拟表,其内容由查询定义。
同真实的表一样,视图包含一系列带有名称的列和行数据。
但是,视图并不在数据库中以存储的数据值集形式存在。
行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
语法:
createview+视图名+(列名)+as+子查询
例:
createviewVIEW_STAFF(name,age,hubby,post)asselectname,age,hubby,postfromstaff
注:
我们公司的视图统一命名规则为VIEW_+相关表名
2.6删除视图
语法:
dropview+视图名
例:
dropviewVIEW_STAFF
2.7建立索引
索引是对数据库表中一个或多个列(例如,staff表的姓名(name)列)的值进行排序的结构。
如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
索引类似于我们图书的目录,对表的某一列做一个目录可以实现快速检索的目的。
语法:
CREATEINDEX+索引名+ONSTAFF+(字段名)
例:
CREATEINDEXINDEX_NAMEONSTAFF(NAME)
注:
索引名不允许出现中文、特殊符号,命名规则遵循:
INDEX_+字段名。
2.8删除索引
语法:
DROPINDEX+索引名+ON+表名
例:
DROPINDEXINDEX_NAMEONSTAFF
三、数据库数据操控语句
1、查询语句
数据库的作用是用来进行数据的存储,所以使用存储的数据的过程就叫做数据库的查询操作,通过不同的查询语句和限制条件的限制我们可以使用数据库语句获得我们预期想获取的数据排列展示结果。
1.1一般查询
语法:
SELECT字段名+表名
例如:
1、SELECT*FROMstaff
2、SELECTNAMEFROMstaff
注:
*表示查询表中的全部字段所有数据
1.2带条件查询
在查询数据的时候我们有时候只需要查看一部分数据,这部分数据通常会带有一定的条件,例如只看员工王一的个人信息、或者只看年龄大于22的员工信息等等。
语法:
SELECT+字段名+FROM+表名+WHERE条件
例:
SELECT*FROMstaffwherename='王一'
1.3模糊查询
注:
其中如果字段名为数字型的,字段后面的条件不用加单引号,如果条件是其他类型的,字段值必须加双引号。
当我们对查询的内容只知道一部分不知道全部或者我们查询的内容需要包含某些共性条件的时候,这个时候可以进行模糊查询。
例如查询公司姓王的人的信息、查询公司销售类岗位的人的信息等等。
使用like关键字加上固定格式'%查询内容%'
语法:
SELECT*FROMSTAFFWHERE字段名LIKE'%查询内容%'
例:
SELECT*FROMSTAFFWHERENAMELIKE'%王%'
注:
1、%的用法,如果我们需要查的内容是以左边开头的,就可以去掉左边的%,LIKE'王%'。
同样当我们需要查询的内容是右边结尾的就可以去掉右边的%,LIKE'%一',当我们查询的内容在中间的位置就需要两边都加%才可以查到数据。
2、切记:
如果可以明确要查询的内容时,能不用%就不要用%,因为使用了%后会使我们建立好的索引失效导致查询大量数据的情况是查询速度变慢很多。
1.4ORDERBY用法
查询数据的时候有的情况会需要对查询的数据做一个排序,这个时候就会用到ORDERBY关键字。
通过order关键字可以对数据根据某些字段进行排序达到我们预期的效果。
例如按照年龄大小排序。
语法:
SELECT*FROMSTAFF+ORDERBY+字段
例:
1、SELECT*FROMSTAFFORDERBYAGE
2、SELECT*FROMSTAFFORDERBYAGEDESC
注:
其中在字段后面加了DESC关键字可以让结果以倒序的方式展现
1.5TOP用法
在查询数据的时候我们需要查询前面固定数量的数据的时候就可以使用TOP关键字进行处理,例如查询数据第一条记录等。
语法:
SELECTTOP+数字+字段+表名
例:
SELECTTOP1*FROMSTAFF
1.6IN用法
如果需要查找表里的数据包含在某一个范围的时候就会用到IN关键字。
例如查询表里面是否存在叫王一、刘二、孙三这几个人,如果有就返回结果。
语法:
SELECT字段FROM表名WHERE+字段名IN('内容一','内容二','内容三',........)
例:
SELECT*FROMSTAFFWHERENAMEIN('王一','刘二','孙三')
注:
IN后面的括号里面可以写子查询
1.7别名的用法
通过使用SQL,可以为表名称或列名称指定别名。
基本上,创建别名是为了让列名称的可读性更强。
关键字AS。
语法:
SELECT字段名AS别名FROM表名
例:
1、SELECTNAMEASXMFROMSTAFF
2、SELECTNAMEFROMSTAFF
1.8多表查询
在实际业务中我们经常会遇到需要查询多张表,这个时候就会进行多个表联合起来查询数据,一般这种场景下,需要查询的几张表之间会有一些相同的内容作为关联的条件。
现在需要对上图的两张表进行关联查询,仔细观察可以发现两张表有一个公共的字段就是名字(name),所以我们可以根据名字来进行表的关联。
语法:
SELECT表字段+FROM+表一,表二,....+where+关联条件
例:
SELECTSTAFF.NAME,STAFF.AGE,KQB.KQSJ,KQB.SFCDFROMSTAFF,KQBWHERESTAFF.NAME=KQB.NAME
TIPS:
以上的语句可以做简化,简化后的语句如下
SELECTA.NAME,A.AGE,B.KQSJ,B.SFCDFROMSTAFFA,KQBBWHEREA.NAME=B.NAME
可以看到其中,STAFF与KQB被分别替换成了A和B,这种技巧和字段别名类似,是表的别名,这样可以让SQL语句看起来结构更清晰,可读性更强。
1.9JOIN用法
SQLJOIN子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
最常见的JOIN类型:
INNERJOIN(简单的JOIN)、LEFTJOIN(左关联)、RIGHTJOIN(右关联)。
使用JOIN从多个表中返回满足JOIN条件的所有行。
INNERJOIN用法:
SELECT字段+FROM表一INNERJOIN表二ON关联条件
例:
SELECTA.NAME,A.AGE,B.KQSJ,B.SFCDFROMSTAFFAINNERJOINKQBBONA.NAME=B.NAME
LEFTJOIN用法:
LEFTJOIN用法:
SELECT字段+FROM表一LEFTJOIN表二ON关联条件
例:
SELECTA.NAME,A.AGE,B.KQSJ,B.SFCDFROMSTAFFALEFTJOINKQBBONA.NAME=B.NAME
左关联的特点以左边表条数为数量,关联的时候,如果右边的表和左边表的数据关联不到(KQB表里面没有李四),那么查询的右边表的字段值为NULL值。
RIGHTJOIN用法:
RIGTHJOIN用法:
SELECT字段+FROM表一RIGTHJOIN表二ON关联条件
例:
SELECTA.NAME,A.AGE,B.KQSJ,B.SFCDFROMSTAFFARIGTHJOINKQBBONA.NAME=B.NAME
右关联的特点以右边表条数为数量,关联的时候,如果左边的表和右边表的数据关联不到(KQB表里面有STAFF表里面没有的信息),那么查询的左边表(STAFF)的字段值为NULL值。
1.10UNION用法
UNION操作符用于合并两个或多个SELECT语句的结果集。
请注意,UNION内部的每个SELECT语句必须拥有相同数量的列。
列也必须拥有相似的数据类型。
同时,每个SELECT语句中的列的顺序必须相同。
语法:
语句一UNION语句二
SELECT*FROMSTAFFWHERENAME='王一'
UNION
SELECT*FROMSTAFFWHERENAME='赵二'
1.11UNIONALL用法
UNIONALL与UNION功能相似,唯一的区别是UNION会过滤重复的数据,UNIONALL会把结果全部显示
语法:
语句一UNION语句二
1、SELECT*FROMSTAFFWHERENAME='王一'
UNION
SELECT*FROMSTAFFWHERENAME='王一'
2、SELECT*FROMSTAFFWHERENAME='王一'
UNIONALL
SELECT*FROMSTAFFWHERENAME='王一'
1.12临时表
在访问频率较高的数据表的时候,例如系统的销售、出库单的时候,要尽量学会使用临时表存储要取出的数据,从临时表来使用想要的数据这样做可以避免高频使用的数据表死锁问题发生。
语法SELECT字段INTO临时表名FROM数据集
实例:
SELECT*INTO#TEMPXSDD20161227FROM(SELECTDH,RQ,KHBMFROMXSDD)a
注:
通过以上语句会在数据库中产生一个数据表,并且会将数据集查出来的数据插入到新建的表中,数据表命名规则#TEMP+表名+时间。
2、插入语句
插入语句主要用来给数据表添加数据。
INSERTINTO语句可以有两种编写形式。
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
语法:
INSERTINTO表名VALUES(value1,value2,value3,...);
例:
insertintoKQBvalues('李四','2016/12/298:
30:
01','是','否');
插入前
插入后
第二种形式需要指定列名及被插入的值:
INSERTINTO表名(column1,column2,column3,...)VALUES(value1,value2,value3,...);
insertintoKQB(name,KQSJ,SFKQ,SFCD)values('王五','2016/12/309:
06:
01','是','是');
插入后
3、更新语句
UPDATE语句用于更新表中已存在的记录
例:
将STAFF表中王一的职位改为经理
语法:
UPDATE+表名+SET字段一=内容一,字段二=内容二,....FROM+表名WHERE+条件
例:
UPDATESTAFFSETPOST='经理'WHERENAME='王一'
更新前
更新后
4、删除语句
DELETE语句用于删除表中的记录。
例如删除staff表里面四的
语法:
DELETEFROM+表名+where条件
例:
DELETEFROMSTAFFWHERENAME='李四'
执行前
执行后