使用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 | 将指定的数值添加到指定的日期部分后的日期 | SELECTDATEADD(dd,4,'01/01/2007') 返回: 2007-01-05 00:00:00.000 | |
DATEDIFF | 两个日期之间的指定日期部分的区别 | SELECTDATEDIFF(dd,'01/01/2007', '01/04/2007') 返回: 3 | |
DATENAME | 日期中指定日期部分的字符串形式(dd,mm,dw,yy) | SELECTDATENAME(dw,'01/05/2009') 返回: 星期一 | |
DATEPART | 日期中指定日期部分的整数形式 | SELECTDATEPART(YY,'01/05/2009') 返回: 2009 |