天天看点

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,内置函数;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

2.查询语句

SELECT emp_id, fname+''+lname as name, hire_date

FROM employee

WHERE year(hire_date) > 1992

3.声明变量

DECLARE

{

  @myint int,

 @sdf char(8);

}

注:声明了两个比变量@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

  SET @myint=4

10.IF EXISTS(结构)

IF [NOT] EXISTS (SELECT 语句)

11.BEGIN...END结构

它可以将多个命令作为一个整体看待

12.WHILE循环

WHILE 判断表达式

{循环体}

[BREAK]

[CONTINUE]

注:BREAK,跳出循环;CONTINUE,开始下一次循环

13.GOTO语句

跳转到对应的标签处

label1:

 PRINT 'HHA'

 GOTO lable1

注:lable1:是创建标签

14.CASE语句

CASE 字段名称

 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

FROM 物资库存记录

SET ROWCOUNT 0

SET ROWCOUNT 3表示设置返回结果的行数为3

SET ROWCOUNT 0表示恢复ROWCOUNT

DISTINCT

SELECT DISTINCT 物资名称

FROM 物资基本信息

注: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 查询,否则返回的结果集为空。

WHERE EXISTS (SELECT * FROM TAB WHERE NAME='1')

设置查询字段的显示名称

1.使用AS关键字

2.使用“=”号

3.直接给出名称

SELECT emp_id '雇员编号', fname+''+'lname' ‘姓名’

SELECT emp_id AS '雇员编号', fname+''+'lname' AS ‘姓名’

SELECT '雇员编号'=emp_id ,  ‘姓名’=fname+''+'lname'

注:作为字段名称时,汉字可以不使用'',但是作为值的时候,必须使用''

统计函数

SUM()、AVG()、MAX()、MIN()、COUNT()

求和、平均数、最大值、最小值、记录数

GROUP BY和HAVING

[GROUP BY 表达式]

[HAVING 表达式]

注:GROUP BY用来对数据进行分组, HAVING用来对分组的数据设置条件

FROM A

WHERE price is NOT NULL

GROUP BY type

HAVING COUNT(*) > 3

ALL

在GROUP BY子句中使用,但在SELECT语句中包括WHERE子句时ALL才有意义

FROM B

WHERE 数量>10

GROUP BY ALL 单位

注:使用ALL关键字,那么查询结果将包括由GROUP BY子句产生的所有组,即使某些组没有符合搜索条件的行。

ORDER BY

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 {<table_source>}[,...]]

DELETE

DELETE 表或视图

FROM 其他表

WHERE 表达式

视图

CREATE VIEW [database_name.][owner.]view_name[(column [,...n])]

[WITH <view_attribute>[,...n]]

AS

select_statement

[WITH CHECK OPTION]

<view_attribute>::= {ENCRYPTION | SCHEMABINDING | VIEW_METADATA}

修改视图

ALTER

VIEW [database_name.][owner.]view_name[(column [,...n])]