第6章 创建和使用数据库
一、数据库文件
1.一个数据库至少有一个主要数据文件和一个事务日志文件。如果数据库很大,可以使用一个主要数据文件、多个次要数据文件和多个事务日志文件。
主数据文件(.mdf ) 次数据文件(.ndf ) 2.系统数据库
Master数据库、Model数据库 二、创建数据库 1.打开数据库: Use 数据库名 2.删除数据库: Drop database数据库名 三、修改数据库 1.分离和附加数据库 2.备份和还原数据库 3.数据的导入和导出
第7章 创建和使用表 项目7.1 数据类型
1.字符型
char(n): 定长字符型,n表示字符数,取值为1~8000。若缺省n,则默认为1。 varchar(n):变长字符型 Text:可以存储任意长的字符串
说明:标准字符型:每个英文字母、数字算1个字符,每个汉字算2个字符,每个字符占1个字节。
2.统一码字符型
每个英文字母、数字、汉字算1个字符,每个字符占2个字节。 nchar(n): n表示字符数,取值为1~4000。 nvarchar(n)
ntext:可以存储任意长的统一码字符串。 例:设某表的结构如下: no char(6), name nchar(6)
则no可以赋予3个汉字,name可以赋予6个汉字 3. 整型
用于存放数据库的各类对象
事务日志文件(.ldf ):用来记录对数据库对象的所有更新操作。
Bigint Int Smallint Tinyint bit 4.实型
取值范围 -32768~ +32767 0~255 0,1 所占字节数 8 4 2 1 即逻辑型 ① 精确数值型 Decimal(p,s) Numeric(p,s)
精度P:表示全部数字的位数(不计小数点和正负号) S:表示小数位数,若缺省S,则默认为0 P-S:表示整数位数 ② 近似数值型
Real 精确到7位有效数字 Float 精确到15位有效数字 5.贷币型
Money:占8个字节,保留4位小数 Smallmoney:占4个字节,保留4位小数 字符串常量:由单引号括住的字符序列 贷币型常量:可以是一个实型常量 6.日期时间型 Datetime、Smalldatetime
① 若省略日期部分,则默认为:’1900-1-1’ 若省略时间部分,则默认为:’00:00:00’ ② 日期格式:’yyyy-mm-dd’ 时间格式:’hh:mm:ss’
项目7.2 使用对象资源管理器创建和管理表
一、创建表
1.在一个表中只能定义一个标识字段。
2.只有整型和精确数值型(decimal、numeric)字段才能指定为标识字段。 3.把某个字段指定为公式字段。 二、设置约束 1.主键约束:
每个表中只能有一列或一个组合被指定为主键,主键中的各个列不能为空值。 2.外键约束:
创建外键约束,就是定义两个表的永久关联,这两个表分别称为主键表、外键表。外键
表中外键的值只能是主键表中主键的有效值或空值。
3.唯一性约束:
? 主键约束与唯一性约束的区别是:
① 在一个表中只能定义一个主键约束,但可定义多个唯一性约束; ② 指定为主键约束的列不能取空值,但指定为唯一性约束的列允许取空值。 ? 创建主键约束、唯一性约束时可以指定聚集或非聚集。主键约束默认为聚集的,唯一性约束默认为非聚集的。
4.检查约束:
用于限制输入到一列或多列的值的范围,保证数据库的数据完整性。 5.默认值约束: 三、建立数据库关系图
要实现两表的永久关联,可以创建外键约束,也可以创建数据库关系图。
第8章 SQL语言 项目8。1 定义表
一、SQL语言的特点
SQL语言集数据定义、数据查询、数据操纵、数据控制的功能于一体。 数据定义 数据查询 数据操纵 数据控制 二、 定义表 1.创建表
create table 表名(属性名 类型,…,属性名 类型) ① 指定标识字段:identity(标识种子,标识增量) ② 指定公式字段:属性名 as 表达式 例:create table student (no int identity(1,1),
name char(6), chi smallint, mat smallint, score as chi+mat) 2.删除表
drop table表名,…, 表名
项目8.2查询表
一、select语句
动词 Create、drop select Insert、delete、update Grant、revoke
select */表达式表 [into 新表名] from 表名,…,表名 [where 条件] [group by 属性名] [having 条件]
[order by属性名][Asc/Desc]
1.Select 子句 ① *代表所有属性名
② 若一个属性名来自多个表,则属性名前须冠以表名,格式为:表名. 属性名 ③ 设置表达式的别名: 表达式 As 别名
④ 限制查询结果的记录行数: all 返回全部记录 top n 返回前面n号记录 distinct 表示取消重复行
说明:top n只能放在关键字select的后面;
all、distinct只能放在关键字select或聚合函数的后面。
2.Where 子句
① in的格式:属性名 in (常量,…,常量) ② like的格式:属性名 like 通配字符串 通配符有: % 表示0个或多个字符 - 表示1个字符
③ 在Where 子句中指定连接: Where 表名1. 属性名=表名2. 属性名
3.Order by子句
order by属性名1 [Asc/Desc], 属性名2 [Asc/Desc]
4.聚合函数
① sum(属性名):纵向求数值型属性之和。 ② avg(属性名)
③ count(*) 返回表的记录行数(含重复行)。
count(属性名) 返回指定列中取非NULL值的单元格数目。
count(distinct 属性名) 返回指定列中取非NULL值、非重复的单元格数目。 ④ max(属性名) ⑤ min(属性名) 5.Group by子句
使用Group by子句时,Select 子句只能使用分组项字段和聚合函数
6.Having子句
① Having子句只能跟在Group by子句之后,且只能使用聚合函数和分组项字段。 ② where子句放在Group by子句之前,甚至可以没有Group by子句;且不能包含聚合函数。
例:以系别为分组项,查询学生平均年龄大于19岁的系的系名和平均年龄。
Select sdept,avg(sage) as平均年龄 From student Group by sdept Having avg(sdept)>19 7.into子句
功能:将查询结果保存到新的基表中。
二、查询的分类 单表查询
连接查询 嵌套查询
若一个查询问题涉及到多个表,必定可以写成连接查询;若一个查询问题涉及到一个表,必定可以写成单表查询或嵌套查询。
1.连接查询:在where子句中指定连接 where 表名1.属性名=表名2.属性名 2.嵌套查询 ① 嵌套查询的特点
? 每级查询的from子句一般只包含一个表名。
? 若一个查询问题的中心词来自一个表,才可以写成嵌套查询。 ? 子查询不能使用order by子句,order by只能用于最顶层的查询。 ② 在where子句中指定子查询
where 属性名 [not] in(子查询):子查询返回一列多行。 where 属性名=(子查询):子查询返回一列一行。 where [not] exists(子查询):子查询返回多列多行。
项目8.3 操纵表
一、insert语句 (1)每次插入一条记录
insert into 表名[(属性名表)] values(表达式表) (2)插入子查询的结果 insert into 表名[(属性名表)] 子查询