SQL SERVER
1. 数据类型
create table nnnn
(
column_char char(10), //字符
column_varchar varchar(10), //可变长度字符
column_text text, //存储大于8000的字符
column_int int, //整数,4B
column_smallint smallint, //短整数,2B
column_bigint bigint, //整数,8B
column_tinyint tinyint, //整数,1B
column_bit bit, //比特,1b
column_decimal decimal(10,3), //精度10,小数点后3位
column_float float, //浮点,对精度要求不高时可用
column_datetime datetime, //日期,精确到千分之一秒
column_smalltime smalldatetime, //日期,精确到分
column_money money, //货币,2个4B,前面是整数,后面是小数
column_smallmoney smallmoney, 货币,2个2B,前面是整数,后面是小数
column_binary binary, //二进制,最大长度为8KB,固定长度
column_varbinary varbinary, //二进制,最大长度为8KB,可变长度
column_p_w_picpath p_w_picpath, //超过8KB,可存储图片等
column_nchar nchar, //Unicode数据类型,存储双字节字符,最多存储4000字符, 固定长度
column_nvarchar nvarchar, //Unicode数据类型,存储双字节字符,最多存储4000字符, 可变长度
column_ntext ntext, //存储大于4000字符
column_sql_variant sql_variant //自定义数据类型
)
go
注意:上面的//表示的是注释,但在SQL SERVER中不能识别
2. 标识符-分隔符
对不符合全部规则的标识符,使用分隔符[]或""
3.标识符
(1)首个字符必须是
Unicode标准2.0定义的字母:a~z、A~Z、来自其他语言的字母字符
下划线_、at符号@、数字符号#
注:@开始的标识符,表示局部变量或参数;数字符号开始的标识符,表示临时表或过程;双数字符号##开始的标识符,表示全局临时对象。
(2)后续字符,字母、十进制数字、下划线
(3)不能是Transact-SQL的保留字
(4)不允许嵌入空格或其他特殊字符
(5)不符合规则的标识符,用户SQL语句时,需要用分隔符[]或""
4.一个对象的完整名称
服务器名称.数据库名称.所有者名称.对象名称
server.database.owner_name.object_name
5.完整性
实体完整性:实体完整性将记录定义为特定表的唯一实体。
注:每一行都是这个表的唯一,不能和其他行重复
域完整性:域完整性是指给定字段的输入有效性。
注:通过CHECK约束、FOREIGN KEY约束、DEFAULT定义、NOT NULL定义 来确定值的范围。
引用完整性:在输入或删除记录时,引用完整性保持表之间已定义的关系,在删除主表记录时,相关的明细表记录也要自动删除。
用户定义完整性:用户可以通过存储过程、触发器等对象来实施具体数据库的完整性。
6.约束
NOT NULL:非空约束
UNIQUE:唯一性约束
PRIMARY KEY:主键约束
FOREIGN KEY:外键约束
CHECK:检查约束
7.CHECK约束
{constant | column_name | function | (subquery)}
[
{operator | AND | OR | NOT}
{constant | column_name | function | (subquery)}
]
注:constant,字面值,数字或字符数据; column_name,指定列;function,内置函数;operator,运算符。
如: 物资编码 LIKE '[0-9][0-9][0-9][0-9][0-9]'
单价 > 0
[物资编码] >= 0 and [物资编码] <= 99999
例如:
ALTER TABLE [dbo].[物资信息表] WITH NOCHECK ADD CONSTRAINT [CK_物资信息表] CHECK ([物资编码] >= 0 and [物资编码] <= 99999)
GO
8.NULL 、空白、0是不同的
SQL语言包括:
数据定义语言:包括创建数据表(关系)、删除数据表、修改数据表、建立索引和约束以及创建其他数据库对象等。
数据操纵语言:包括查询、添加、删除、修改数据等。
数据控制语言:控制安全性的命令。
SQL语句组成: 标识符、关键字、数据类型、运算符、表达式、函数、注释
1.指定pubs数据库为SQL语句的执行数据库
USE pubs
GO
2.查询语句
SELECT emp_id, fname+''+lname as name, hire_date
FROM employee
WHERE year(hire_date) > 1992
GO
3.声明变量
DECLARE
{
@myint int,
@sdf char(8);
}
GO
注:声明了两个比变量@myint和@sdf
4.为变量赋值
SET @myint =12
SET @myint =1, @sdf = 'dDD'
5.逻辑运算
all,所有布尔表达式为true,返回true;
any, 有一个为true,返回true;
like,如果操作数与一种模式匹配,返回true;
in,如果操作数等于表达式列表中的一个,返回true。
and, or, not
6.非空判断
where hire_name is not null
7.打开或关闭text in row, text、ntext和p_w_picpath字符串存储在数据行内/外(将数据保存到独立的文本或图像页面里,此时文本行是一个指向该数据的指针)
sp_tableoption TableName, 'text in row', 'ON'
8.WRITETEXT、UPDATETEXT和READTEXT,处理大文本和图像数据
9.IF...ELSE 结构
IF 条件判断
过程1
ELSE
过程2
例如:
IF @myint==2
SET @myint=3
ELSE
SET @myint=4
GO
10.IF EXISTS(结构)
IF [NOT] EXISTS (SELECT 语句)
过程1
ELSE
过程2
11.BEGIN...END结构
它可以将多个命令作为一个整体看待
12.WHILE循环
WHILE 判断表达式
{循环体}
[BREAK]
{循环体}
[CONTINUE]
注:BREAK,跳出循环;CONTINUE,开始下一次循环
13.GOTO语句
跳转到对应的标签处
label1:
PRINT 'HHA'
GOTO lable1
GO
注:lable1:是创建标签
14.CASE语句
CASE 字段名称
WHEN 记录 THEN 结果值
WHEN 记录 THEN 结果值
...
ELSE 结果子
END
SELECT、GROUP BY和HAVING、ALL、TOP、ORDER BY、ROWCOUNT、DISTINCT、UNION、WHERE、CASE、INSETR JOIN...ON...
SELECT
SELECT *
FROM TABLE_NAME
TOP
SELECT [TOP n [PERCENT] column_name [,...n]]
FROM tablename
注:TOP n 是返回前n行数据
TOP n PERCENT 是返回百分之n的数据
n不能用表达式或变量来替代
ROWCOUNT
SET ROWCOUNT 3
SELECT *
FROM 物资库存记录
GO
SET ROWCOUNT 0
SET ROWCOUNT 3表示设置返回结果的行数为3
SET ROWCOUNT 0表示恢复ROWCOUNT
DISTINCT
SELECT DISTINCT 物资名称
FROM 物资基本信息
GO
注:DISTINCT用来从SELECT语句的结果集中除去重复的行
WHERE
条件
BETWEEN...AND结构
字段名或者表达式 [NOT] BETWEEN 表达式1 AND 表达式2
IN
表达式或者字段名 [NOT] IN (列表或者子查询)
LIKE
字符串表达式 [NOT] LIKE 可以带通配符串表达式
[ESCAPE 字符串表达式]
注:ESCAPE表示,允许在字符串中搜索通配符而不是将其作为通配符使用E
注:用于模糊查询, 和LIKE结合使用的通配符%、_、[]和[^],他们必须与LIKE结合才有意义,否则就是普通字符
%:表示任意个任意字符
_:表示1个任意字符
[]:表示可以是方括号里列出的任意一个字符
[^]:表示不在方括号里列出的任意一个字符
EXISTS
EXISTS关键字用于指定一个子查询,检测行的存在。 也就是说,如果EXISTS关键字指定的子查询查得的结果集不为空,则执行主体的SELECT 查询,否则返回的结果集为空。
SELECT *
FROM TABLE_NAME
WHERE EXISTS (SELECT * FROM TAB WHERE NAME='1')
GO
设置查询字段的显示名称
1.使用AS关键字
2.使用"="号
3.直接给出名称
例如:
SELECT emp_id '雇员编号', fname+''+'lname' '姓名'
FROM employee
GO
例如:
SELECT emp_id AS '雇员编号', fname+''+'lname' AS '姓名'
FROM employee
GO
例如:
SELECT '雇员编号'=emp_id , '姓名'=fname+''+'lname'
FROM employee
GO
注:作为字段名称时,汉字可以不使用'',但是作为值的时候,必须使用''
统计函数
SUM()、AVG()、MAX()、MIN()、COUNT()
求和、平均数、最大值、最小值、记录数
GROUP BY和HAVING
[GROUP BY 表达式]
[HAVING 表达式]
注:GROUP BY用来对数据进行分组, HAVING用来对分组的数据设置条件
SELECT *
FROM A
WHERE price is NOT NULL
GROUP BY type
HAVING COUNT(*) > 3
GO
ALL
在GROUP BY子句中使用,但在SELECT语句中包括WHERE子句时ALL才有意义
SELECT *
FROM B
WHERE 数量>10
GROUP BY ALL 单位
注:使用ALL关键字,那么查询结果将包括由GROUP BY子句产生的所有组,即使某些组没有符合搜索条件的行。
ORDER BY
SELECT *
FROM C
ORDER BY price DESC
注:子句中的字段数目没有限制,ASC表示升序,DESC表示降序,空值被视为最低的值
多表查询
SELECT pub.pub_id, title.id
FROM pub, title
UNION
UNION可以将多个SELECT语句的查询结果组合到一起
使用UNION的结果集,必须具有相同的字段结构,字段数必须相等,响应的字段的数据类型必须兼容
CASE、INNER JOIN...ON...表达式
INSERT
INSERT [INTO] 表名或试图 [字段列表] values 值列表
INSERT INTO 物资库存记录 (物资编号,物资名称) VALUES ('LP12', '螺钉')
UPDATE
UPDATE 表名或视图
SET {字段名={expression | default | null}}
[FROM {
}[,...]] DELETE
DELETE 表或视图
FROM 其他表
WHERE 表达式
视图
CREATE VIEW [database_name.][owner.]view_name[(column [,...n])]
[WITH
[,...n]] AS
select_statement
[WITH CHECK OPTION]
::= {ENCRYPTION | SCHEMABINDING | VIEW_METADATA} 修改视图
ALTER
VIEW [database_name.][owner.]view_name[(column [,...n])]
[WITH
[,...n]] AS
select_statement
[WITH CHECK OPTION]
::= {ENCRYPTION | SCHEMABINDING | VIEW_METADATA}