使用 SQL Server 数据库基础
1. 数据库的帮助
l 数据类型
分类 |
备注和说明 |
数据类型 |
说明 |
二进制数据类型 |
用来存储非字符和文本的数据 |
binary |
固定长度的二进制数据 |
Varbinary |
可变长度的二进制数据 | ||
image |
用来存储图像 | ||
文本数据类型 |
字符数据包括任意字母 , 符号或数字字符的组合 |
char |
固定长度的非 Unicode 字符数据 , 最大长度为 800 个字符 |
varchar |
可变长度的非 Unicode 数据 | ||
nchar |
固定长度的 Unicode 数据 | ||
nvarchar |
可变长度的 Unicode 数据 | ||
text |
存储长文本信息 | ||
ntext |
存储可变长度的长文本 | ||
数字数据 |
该数据仅包括数字,包括正数,负数以及分数 |
Int Smallint Tinyint bigint |
整数 |
Float real |
浮点数 | ||
货币数据 |
货币数据类型用于十进制货币值,并且精确到小数点后面 4 位数字 |
Money |
|
Bit 数据类型 |
表示是、否的数据,只有两种选择;在 SQL Server 中用 1 和 0 表示,一般 1 表示是, 0 表示否 |
Bit |
存储布尔数据类型 |
日期和时间 |
日期和时间在单引号内分别输入 |
datetime |
日期和时间 |
2. 数据库的管理
l 通配符
通配符 |
解释 |
实例 |
‘_’ |
一个字符 |
A LIKE ‘C_’ |
% |
任意长度的字符串 |
B LIKE ‘CO_%’ |
[] |
括号内制定范围内的一个字符 |
C LIKE ‘9W0[1-2]’ |
[^] |
不再括号中所制定范围内的一个字符 |
D LIKE ‘9W0[^1-2]’ |
l 使用 T-SQL 语句对数据库管理
类型 |
语法 |
新建库 |
Use master( 注 : 此功能用来控制进入 master 数据库 ) Go( 注 : 分割语句 ) create database 表名 on ( name = ' 数据库名 ' ,( 数据库名称 ) filename = 'D:/ 表名 .mdf' ,( 数据库路径 ) size = 10mb,( 数据库初始化大小 ) maxsize = 100mb,( 数据库最大大小 ) filegrowth = 10%( 数据库增长速度 ) ) |
新建表 |
create table UserInfo ( Id int identity ( 1, 1) not null, ( 标识种子为 1, 增长一次 +1) NickName char ( 10) not null, ) |
添加约束 |
约束包含主键约束 , 外键约束 , 默认约束 , 检查约束 , 唯一约束 添加约束以 : ( alter table 表名 add constraint 约束名 ) 开头 , 后面追加 主键约束 : primary key ( id); 外键约束 : foreign key ( 从表列 ) references bool( 主表列 ); 默认约束 : unique ( 列名 ); 检查约束 : check ( 列名 like ‘1_’ ); 结合通配符使用 唯一约束 : unique ( 列名 );
注意 : 约束名一定要符合规范 例如添加默认约束 : UK_ 约束名 . 以此类推 |
事务 |
begin tran declare @errorSum int set @errorSum= 0 set @errorSum= @errorSum+ @@error if ( @errorSum > 0) rollback tran else commit tran |
l 使用 T-SQL 语句对数据库数据管理
类型 |
语法 |
说明 | ||
插入数据 |
INSERT [INTO] 表名 ( 列名 ) VALUES ( 列名 ) |
插入单行数据 | ||
INSERT 表名 ( 列名 ) SELECT 列值 UNION SELECT 列值 |
插入多行数据 | |||
修改数据 |
UPDATE 表名 SET 列名 = 更新值 WHERE 更新条件 |
一般情况下必须写更新条件 | ||
删除数据 |
DELETE FROM 表名 WHERE 删除条件 |
删除单行数据 | ||
TRUNCATE TABLE 表名 |
删除整个表中的数据 | |||
查询数据 |
SELECT 列名 FROM 表名 WHERE 查询条件表达式 ORDER BY 排序的列名 [ 注 : ASC 或 DESC( 降序 )] |
排序查询 | ||
SELECT 列名 AS 命名 FROM 表名 |
在查询中使用列名 | |||
SELECT 列名 FROM 表名 WHERE 查询条件表达式 |
查询空行 | |||
SELECT 新命名 = 列名 , ‘ 值命名 ’ AS 新列命名 FROM 表名 |
在查询中使用常量列 | |||
SELECT TOP 限制的行数 ( 填写数字 ) 列名 FROM 表名 WHERE 查询条件表达式 |
返回限制的行数 | |||
SELECT * FROM 表名 WHERE 查询条件表达式 LIKE 'ACCP%' |
使用 LIKE 模糊查询 | |||
SELECT * FROM 表名 WHERE 表名 BETWEEN 条件一 AND 条件二 ( 注 : NOT) |
在某个范围内进行查询 | |||
SELECT * FROM 表名 WHERE 列名 IN ( 列值 1 , 列值 2 )( 注 :Not) |
使用 IN 在列举值内进行查询 | |||
SQL SERVER 中使用的聚合函数 | ||||
SUM – 总和 Avg – 平均值 MAS ( 最大值 ) 和 Min ( 最小值 ) COUNT ( 非空值的计数 ) |
WHERE * GROUP BY * HAVING ( 使用 WHERE,GROUP BY,HAVING 的优先级 ) |
在查询中使用的聚合函数 | ||
SELECT COUNT ( 列名 ), 列名 FROM 表名 GROUP BY 列名 |
分组查询 ( 在分组查询的同时必须使用聚合函数 ) | |||
HAVING 查询条件表达式 ( 举例 : COUNT ( Uclass) > 1) |
使用 Having 子句进行分组筛选 | |||
内连接查询 | ||||
SELECT 表名 1. 列名 , 表名 2. 列名 FROM 表名 1 INNER JOIN 表名 2 ON ( 条件表达式 ) |
注 : INNER JOIN *** ON 是内连接查询用的关键字 , 其中表名可以简化 , 但是前提在 FROM 中必须指示简化的表名是来源于哪个表 ( 举例 :S. 列名 FROM 表名 AS 列名或 INNER JOIN 表名 ) | |||
外连接查询 | ||||
SELECT 表名 1. 列名 , 表名 2. 列名 FROM 表名 1 LEFT OUTER JOIN 表名 2 ON 条件表达式 |
左外连接 , 与内连接不同的是 , 如果附表中数据不能满足主表则以 NULL 填充 …… | |||
SELECT 表名 1. 列名 , 表名 2. 列名 FROM 表名 1 RIGHT OUTER JOIN 表名 2 ON 条件表达式 |
左外连接 ( 同上 ) | |||
l 在查询中使用的函数
函数类型 |
函数名 |
描述 |
举例 |
字 符 串 函 数 |
CHARINDEX |
用来寻找一个指定的字符串在另一个字符串中的起始位置 |
SELECT CHARINDEX ( 'ACCP' , 'MYACCPCOURSE' , 1) 返回 : 3 |
LEN |
返回传递给他的字符串长度 |
SELECT LEN ( 'MYACCPCOURSE' ) 返回 :12 | |
UPPER |
把传递给他的字符串转换为大写 |
SELECT UPPER ( 'system' ) 返回 : SYSTEM | |
LTRIM |
清除字符左边的空格 |
| |
RTRIM |
清除字符右边的空格 |
| |
RIGHT |
从字符串右边返回指定数目的字符串 |
SELECT RIGHT ( ' 北大青鸟 ' , 2) 返回 : 青鸟 | |
|
替换一个字符串中的字符 |
| |
STUFF |
在一个字符串中 , 删除指定长度的字符 , 并在该位置插入一个新的字符串 |
SELECT STUFF ( ' 谢霆锋的老婆是谁 ' , 8, 8, ' 张柏芝 ' ) 返回 : 谢霆锋的老婆是张柏芝 | |
日 期 函 数 |
GETDATE |
取得当前的系统日期 |
SELECT GETDATE () 返回 : 今天的日期 |
DATEADD |
将指定的数值添加到指定的日期部分后的日期 |
SELECT DATEADD ( dd, 4, '01/01/2007' ) 返回 : 2007-01-05 00:00:00.000 | |
DATEDIFF |
两个日期之间的指定日期部分的区别 |
SELECT DATEDIFF ( dd, '01/01/2007' , '01/04/2007' ) 返回 : 3 | |
DATENAME |
日期中指定日期部分的字符串形式 (dd,mm,dw,yy) |
SELECT DATENAME ( dw, '01/05/2009' ) 返回 : 星期一 | |
DATEPART |
日期中指定日期部分的整数形式 |
SELECT DATEPART ( YY, '01/05/2009' ) 返回 : 2009 |