第三章SQLServer相关技术以及SQL语言一、SQLServer工具SQLServer提供了一些功能强大、使用方便的数据库工具,主要的工具如下:1、服务管理器:功能是启动、停止和暂停SQLServer服务器。2、企业管理器:是图形化集成管理具,通过它可以方便的调用其他的管理工具,有效的配置和管理SQLServer服务器。3、查询分析器:使用方便,界面友好的T-SQL语句的编译工具,是SQLServer客户端的主要组成部分。菜单、对象浏览、模板等个部分的使用。4、导入导出数据(DTS):实现其他类型的数据和SQLServers数据之间实现格式转换。二、SQLServer数据类型SQLServer一共有14种,其中13种可用于字段类型说明。下面是几种主要的数据类型:1、字符数据类型:char、varchar、text。2、整数类型:bigint、tinyint、smallint、int。3、数据类型和浮点类型:decimal、numeric、real、float。4、货币类型和时间、日期类型:smallmoney、money、smalldatatime、datatime。5、二进制类型:binary、varbinary。6、图象、文本数据类型:image、text。三、SQLServer数据库的创建和管理1、SQLServer数据库介绍:SQLServer数据库以文件形式存储信息。数据库中有三类文件、两种文件组:主文件后缀.mdf一个数据库中有且仅有一个主文件;用于存放数据库的动态信息以及数据。辅助(次)文件后缀.ndf一个数据库中可以有0——n个辅助文件;只存放数据。日志文件后缀.ldf一个数据库中可以有1——n个日志文件。存放数据库的操作轨迹。数据库中如果文件很多,为了便于管理可以根据需要分组。包含有主文件的那个组称为“主文件组”,其他的文件组只包含有辅助文件,称为“辅助文件组”或“次文件组”,日志文件不分组。数据库的存储结构:SQLServer数据库中页和范围是最重要的两种存储单位。页是最基本的存储单元,每页有8KB。范围(Extent)是SQLServer分配给表和索引的最基本的单位,每个范围包括连续的8个页(64KB),如果一个范围中只存放一个数据库对象,此范围称为“统一范围”,如果存放多个数据库对象,此范围称为“混合范围”。2、SQLServer数据库建立:可以使用企业管理器建立数据库;也可以用SQL命令建立数据库:例:CREATEDATABASEstudentON(NAME=student_data,FILENAME='e:\programfiles\microsoftsqlserver\mssql\data\student_data1.mdf',SIZE=1MB,MAXSIZE=20MB,FILEGROWTH=10%)LOGON(NAME=student_log,FILENAME='e:\programfiles\microsoftsqlserver\mssql\data\student_log.ldf',SIZE=1MB,MAXSIZE=10MB,FILEGROWTH=10%)GO上例建立STUDENT数据库,其中建立主文件和一个日志文件。其中NAME——逻辑文件名;FILENAME——物理文件名;SIZE——文件初始大小;MAXSIZE——文件最大空间。如果没有此项,文件可无限增长到磁盘可用空间竭尽。FILEGROWTH——文件增长的大小。可以用初始大小的%表示,也可以用MB表示。3、删除数据库:用企业管理器或DROP命令删除数据库。四、SQLServer数据表的创建和管理1、使用企业管理器创建与管理表a)定义字段:字段名、类型、长度、精度、NULL设定、默认值、标识等;b)设置约束;主键、外键、检查、唯一、非空、默认;c)修改数据表:表更名、插入新字段、删除字段、修改表格属性、修改约束;d)删除表;如果需要删除的表是有关联的表,则必须先删除与之关联的表,才可以完成该表的删除。2、使用SQL语句创建和管理表a)建立表:CREATETABLE例如:createtables_exam(g_iduniqueidentifiernotnulldefaultnewid(),stu_idsmallintprimarykey,------主键---stu_namevarchar(10)notnullunique,------非空、唯一------stu_sexchar(2)default'男',--------默认-------stu_birthsmalldatetimecheck(stu_birthgetdate()),-----------核查-------dep_idsmallintforeignkeyreferencesdepart(id))------外键------b)修改表的命令;ALTERTABLE可以修改上面提及的与表有关的所有项目。(具体项目请参考书)c)删除表命令;DROPTABLE五、查询1、SELECT语句基本结构2、SELECT子句;DISTINCT、TOP关键字的使用,输出列名的设定,计算列。3、FROM子句:表的别名设定;如果表名中包含了关键字,则表名必须加[]。例:FROMemployeee,[orderdetails]od其中e、od是表的别名4、WHERE子句:比较查询(各种条件运算符和逻辑运算符),范围查询(BETWEEN……AND),列表查询(IN),模糊查询(LIKE,其中有%、_、[]、[^]四个通配符),空值判断查询(ISNULL)。5、GROUPBY子句:用GROUPBY子句可以把查询出的数据进行分类后再使用统计函数汇总,一起使用的关键字为HAVING、ALL、ROLLUP、CUBE。6、ORDERBY子句:给查询结果排序。可以是升序(ASC),也可以是降序(DESC)排列,也可以依据多个字段排序。7、集合运算子句:可以将两个具有相同结构、相同字段数、对应字段类型相同的两个结果集合进行集合运算。(UIION、INTERSECT、EXCEPT)8、使用汇总函数:查询输出列中可以用sum()、avg()、min()、max()、count()等统计函数,一般和GROUPBY一起使用。9、多表查询;内连接(INNERJOIN……ON),左外连接(LEFTOUTERJOIN……ON),右外连接(RIGHTOUTERJOIN……ON),完整连接(FULLJOIN……ON),交叉连接(CROSSJOIN……ON)。也可以用传统的SQL多表查询,在FROM中列出多个表,在WHERE中指定连接的条件,这种形式其实是对迪卡尔乘积进行条件查询。10、嵌套查询:子查询通常包含一定的组件。单值返回子查询:使用比较运算符、BETWEEN……AND……多值返回子查询:使用比较运算符和ANY、ALL相关子查询:EXISTS(NOTEXISTS),此类查询子查询执行次数一般与外层查询有关11、更改表内数据:INSERT、UPDATE、DELETE。六、视图1、视图的概念:使用视图的优点有两个——简化数据查询和处理操作、从一定程度上保护数据。2、创建视图(CREATEVIEWAS),在创建视图中的查询语句有一定的限制;修改视图(ALTERVIEWAS),删除视图(DROPVIEW)。3、使用视图操作表数据:检索数据,和基本表的查询一样用法;通过视图添加数据,添加的数据实际上是加在视图所基于的基本表中。更新视图中的数据;删除视图中的数据,这些操作语句和基本表操作一样,但有一定的限定条件(具体的限定条件请参考教材),因为视图是一虚表,对它的操作实质是加在基本表上的操作,但视图可能是多张表的子集,所以修改不当会引起错误。*注:上面是对本章的内容的小结,只写出了提纲,请对照教材或参考书中详细内容。附:课堂教学中所用表格部门表部门编号部门名称部门地址部门负责人电话直接上级P00经纬贸易公司公司大楼303室0011303P10财务处公司大楼203室1011203p00P11财务处计划科公司大楼202室1021202p10P12财务处记帐科公司大楼204室1041204p10P13财务处审计科公司大楼206室1071206p10P20供应处公司大楼103室2011103p00P30销售处公司大楼104室3011104p00P31销售处研究中心公司大楼106室3061106p30P40仓库管理处仓库办公室4012105p00P50运输管理处车库办公室5013105p00职工表工号姓名年龄工作日期职务工资奖金所属部门001刘浩然5201/01/78经理56001000p00002周凌3009/07/98秘书2570400p00101余荣5511/11/75处长3700800p10102汪占魁5503/01/80科长2800600p11103李红4301/01/87科员2400p11104姚存4507/01/87科长2900600p12105叶蓉蓉3308/01/00会计2200400p12106刘小霞3501/01/94出纳3100400p12107吴方4809/01/85科长2500600p13108陈奇3701/01/93科员2200400p13109周小环5210/01/77办事员2800p13201汪小健5701/01/72处长4800800p20202毛婷婷3501/01/99办事员2000400p20203刘志平3207/01/00采购员2200400p20204袁小浩4106/01/89采购员2400400p20205张志华5310/01/78采购员3200p20301梁道奇5101/01/73处长5200800p30302陈冬儿4512/01/84办事员2300400p30303张海丰4201/01/88推销员2600400p30304王和平5506/01/76推销员2900400p30305张小林5405/01/77推销员2400400p30306梁浩4307/01/89科长3600600p31307李向阳3103/01/99办事员2600400p31401李红5201/01/80处长4600800p40402姜贤德5209/01/78仓库管理员3500400p40403陈瑛4001/01/91仓库管理员2900400p40501王建国4907/01/73处长5400800p50502沈建平5301/01/74小车驾驶员3800500p50503章金强5201/01/75卡车驾驶员3600500p50504徐海东4708/01/70卡车驾驶员2800500p50createtable部门表(部门号char(3)primarykey,名称varchar(20)notnull,地址varchar(16),经理char(3),电话char(4),直接上级char(3))createtable职工表(工号char(3)primarykey,姓名char(8)notnull,性别char(2)default'男',年龄smallintcheck(年龄=18and年龄=60),工作日期datetime,职务char(10),工资decimal(7,2),奖金decimal(6,2),所属部门char(3)foreignkeyreferences部门表(部门号))insertinto部门表values('p00','经纬贸易公司','公司大楼303室','001','1303','000')insertinto部门表values('p10','财务处','公司大楼203室','101','1203','p00')insertinto部门表values('p11','财务处计划科','公司大楼202室','102','1202','p10')insertinto部门表values('p12','财务处记帐科','公司大楼204室','104','1204','p10')insertinto部门表v