第三章SQL Server 相关技术以及SQL 语言
一、SQL Server工具
SQL Server提供了一些功能强大、使用方便的数据库工具,主要的工具如下:
1、服务管理器:功能是启动、停止和暂停SQL Server 服务器。
2、企业管理器:是图形化集成管理具,通过它可以方便的调用其他的管理工具,有效的配
置和管理SQL Server服务器。
3、查询分析器:使用方便,界面友好的T-SQL语句的编译工具,是SQL Server客户端的
主要组成部分。菜单、对象浏览、模板等个部分的使用。
4、导入导出数据(DTS):实现其他类型的数据和SQL Servers数据之间实现格式转换。
二、SQL Server数据类型
SQL Server一共有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。
三、SQL Server数据库的创建和管理
1、SQL Server数据库介绍:
SQL Server数据库以文件形式存储信息。数据库中有三类文件、两种文件组:
主文件后缀.mdf 一个数据库中有且仅有一个主文件;用于存放数据库的
动态信息以及数据。
辅助(次)文件后缀 .ndf 一个数据库中可以有0——n个辅助文件;只存放数据。日志文件后缀 .ldf 一个数据库中可以有1——n个日志文件。存放数据库的
操作轨迹。
数据库中如果文件很多,为了便于管理可以根据需要分组。包含有主文件的那个组称为“主文件组”,其他的文件组只包含有辅助文件,称为“辅助文件组”或“次文件组”,日志文件不分组。
数据库的存储结构:SQL Server数据库中页和范围是最重要的两种存储单位。页是最基本的存储单元,每页有8KB。范围(Extent)是SQL Server分配给表和索引的最基本的单位,每个范围包括连续的8个页(64KB),如果一个范围中只存放一个数据库对象,此范围称为“统一范围”,如果存放多个数据库对象,此范围称为“混合范围”。
2、SQL Server数据库建立:
可以使用企业管理器建立数据库;也可以用SQL 命令建立数据库:
例:CREATE DATABASE student
ON
( NAME =student_data,
FILENAME = 'e:\program files\microsoft sql server\mssql\data\student_data1.mdf',
SIZE = 1MB,
MAXSIZE = 20MB,
FILEGROWTH = 10%)
LOG ON
( NAME =student_log,
FILENAME = 'e:\program files\microsoft sql server\mssql\data\student_log.ldf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 10%)
GO
上例建立STUDENT数据库,其中建立主文件和一个日志文件。
其中NAME——逻辑文件名;
FILENAME——物理文件名;
SIZE——文件初始大小;
MAXSIZE——文件最大空间。如果没有此项,文件可无限增长到磁盘可用空间竭尽。
FILEGROWTH——文件增长的大小。可以用初始大小的%表示,也可以用MB表示。
3、删除数据库:用企业管理器或DROP命令删除数据库。
四、SQL Server数据表的创建和管理
1、使用企业管理器创建与管理表
a)定义字段:字段名、类型、长度、精度、NULL 设定、默认值、标识等;
b)设置约束;主键、外键、检查、唯一、非空、默认;
c)修改数据表:表更名、插入新字段、删除字段、修改表格属性、修改约束;
d)删除表;如果需要删除的表是有关联的表,则必须先删除与之关联的表,才可以完成该表的删除。
2、使用SQL 语句创建和管理表
a)建立表:CREATE TABLE
例如:
create table s_exam
(g_id uniqueidentifier not null default newid(),
stu_id smallint primary key,------主键---
stu_name varchar(10) not null unique,------非空、唯一------
stu_sex char(2) default '男',--------默认-------
stu_birth smalldatetime check(stu_birth dep_id smallint foreign key references depart(id)) ------外键------ b)修改表的命令;ALTER TABLE可以修改上面提及的与表有关的所有项目。(具体项目请参考书) c)删除表命令;DROP TABLE 五、查询 1、SELECT语句基本结构 2、SELECT子句;DISTINCT、TOP关键字的使用,输出列名的设定,计算列。 3、FROM子句:表的别名设定;如果表名中包含了关键字,则表名必须加[ ]。 例:FROM employee e,[order details] od 其中e、od是表的别名 4、WHERE子句:比较查询(各种条件运算符和逻辑运算符),范围查询(BETWEEN…… AND),列表查询(IN),模糊查询(LIKE,其中有%、_、[]、[^]四个通配符),空值 判断查询(IS NULL)。 5、GROUP BY子句:用GROUP BY子句可以把查询出的数据进行分类后再使用统计函数 汇总,一起使用的关键字为HA VING、ALL、ROLLUP、CUBE。 6、ORDER BY子句:给查询结果排序。可以是升序(ASC),也可以是降序(DESC)排列, 也可以依据多个字段排序。 7、集合运算子句:可以将两个具有相同结构、相同字段数、对应字段类型相同的两个结果 集合进行集合运算。(UIION、INTERSECT、EXCEPT) 8、使用汇总函数:查询输出列中可以用sum( )、avg( )、min( )、max( )、count( )等统计函 数,一般和GROUP BY一起使用。 9、多表查询;内连接(INNER JOIN……ON),左外连接(LEFT OUTER JOIN……ON), 右外连接(RIGHT OUTER JOIN……ON),完整连接(FULL JOIN……ON),交叉连接(CROSS JOIN……ON)。也可以用传统的SQL多表查询,在FROM中列出多个表,在WHERE中指定连接的条件,这种形式其实是对迪卡尔乘积进行条件查询。 10、嵌套查询:子查询通常包含一定的组件。 单值返回子查询:使用比较运算符、BETWEEN……AND…… 多值返回子查询:使用比较运算符和ANY、ALL 相关子查询:EXISTS(NOT EXISTS),此类查询子查询执行次数一般与外层查询有关11、更改表内数据:INSERT、UPDA TE、DELETE。 六、视图 1、视图的概念:使用视图的优点有两个——简化数据查询和处理操作、从一定程度上保护 数据。 2、创建视图(CREATE VIEW AS),在创建视图中的查询语句有一定的限制;修改视图 (ALTER VIEW AS),删除视图(DROP VIEW)。 3、使用视图操作表数据:检索数据,和基本表的查询一样用法;通过视图添加数据,添加 的数据实际上是加在视图所基于的基本表中。更新视图中的数据;删除视图中的数据,这些操作语句和基本表操作一样,但有一定的限定条件(具体的限定条件请参考教材),因为视图是一虚表,对它的操作实质是加在基本表上的操作,但视图可能是多张表的子集,所以修改不当会引起错误。 *注:上面是对本章的内容的小结,只写出了提纲,请对照教材或参考书中详细内容。附:课堂教学中所用表格 (部门号char(3) primary key, 名称varchar(20) not null, 地址varchar(16), 经理char(3), 电话char(4), 直接上级char(3) ) create table 职工表 (工号char(3) primary key, 姓名char(8) not null, 性别char(2) default '男', 年龄smallint check(年龄>=18 and 年龄<=60), 工作日期datetime, 职务char(10), 工资decimal(7,2), 奖金decimal(6,2), 所属部门char(3) foreign key references 部门表(部门号) ) insert into 部门表 values('p00','经纬贸易公司','公司大楼303室','001','1303','000') insert into 部门表 values('p10','财务处','公司大楼203室','101','1203','p00') insert into 部门表 values('p11','财务处计划科','公司大楼202室','102','1202','p10') insert into 部门表 values('p12','财务处记帐科','公司大楼204室','104','1204','p10') insert into 部门表 values('p13','财务处审计科','公司大楼206室','107','1206','p10') insert into 部门表 values('p20','供应处','公司大楼103室','201','1103','p00') insert into 部门表 values('p30','销售处','公司大楼104室','301','1104','p00') insert into 部门表 values('p31','销售处研究中心','公司大楼106室','306','1106','p30') values('p40','仓库管理处','仓库办公室','401','2105','p00') insert into 部门表 values('p50','运输管理处','车库办公室','501','3105','p00') ---------------------------------------------------------------------------------------------------------------------- insert into 职工表 values('1','刘浩然','男',52,'1978/01/01','经理',5600.5,1000,'p00') insert into 职工表 values('2','周凌','女',30,'1998-09-7','秘书',2800,400,'p00') insert into 职工表 values('101','余荣','男',55,'1975-11-11','处长',3700,800,'p10') insert into 职工表 values('102','汪占魁','男',55,'1975-11-11','处长',3700,800,'p10') insert into 职工表 values('103','李红','女',43,'1987-1-1','科员',2400,0,'p11') insert into 职工表 values('104','姚存','男',45,'1987-7-11','科长',3900,600,'p12') insert into 职工表 values('105','叶蓉蓉','女',33,'2000-8-1','会计',2200,400,'p12') insert into 职工表 values('106','刘晓霞','女',35,'1994-1-1','出纳',3100,400,'p12') insert into 职工表 values('107','吴方','男',48,'1985-9-8','科长',2500,600,'p13') insert into 职工表 values('108','陈奇','男',37,'1993-1-1','科员',2200,400,'p13') insert into 职工表 values('109','周小环','女',52,'1977-10-1','办事员',2800,0,'p13') insert into 职工表 values('201','汪小健','男',57,'1972-1-1','处长',4800,800,'p20') insert into 职工表 values('202','毛婷婷','女',35,'1999-1-1','办事员',2000,400,'p20') insert into 职工表 values('203','刘志平','男',32,'2000-7-1','采购员',2200,400,'p20') insert into 职工表 values('204','袁小洁','女',41,'1989-6-1','采购员',2400,500,'p20') insert into 职工表 values('205','张志华','男',53,'1978-1-1','采购员',3200,0,'p20') insert into 职工表 values('301','梁道奇','男',51,'1973-1-1','处长',5200.5,800,'p30') insert into 职工表 values('302','陈冬儿','女',45,'1984-12-1','办事员',2300,600,'p30') insert into 职工表 values('303','张海丰','男',42,'1988-1-1','推销员',2600.5,400,'p30') insert into 职工表 values('304','王和平','女',55,'1976-6-1','推销员',2900,600,'p30') insert into 职工表 values('305','张小林','男',54,'1977-5-1','推销员',2500,400,'p30') insert into 职工表 values('306','梁浩','男',43,'1989-7-1','科长',3600,600,'p30') insert into 职工表 values('307','李向阳','男',31,'1999-3-1','办事员',2600,400,'p30') insert into 职工表 values('401','姚志坚','男',52,'1979-1-1','处长',4600,800,'p40') insert into 职工表 values('402','姜贤德','男',52,'1978-9-1','仓库管理员',3500,400,'p40') insert into 职工表 values('403','陈瑛','女',40,'1991-1-1','仓库管理员',2900,400,'p40') insert into 职工表 values('501','王建国','男',49,'1983-7-1','处长',5400,800,'p50') insert into 职工表 values('502','沈建平','男',53,'1974-1-1','小车驾驶员',3800,500,'p50') insert into 职工表 values('503','章金强','男',42,'1985-4-1','卡车驾驶员',3400,500,'p50') insert into 职工表 values('504','徐海东','男',47,'1982-3-1','卡车驾驶员',2800,500,'p50')