使用 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 |