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语言包括:

  1. 数据定义语言:包括创建数据表(关系)、删除数据表、修改数据表、建立索引和约束以及创建其他数据库对象等。

  2. 数据操纵语言:包括查询、添加、删除、修改数据等。

  3. 数据控制语言:控制安全性的命令。


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...

  1. SELECT

    SELECT *

    FROM TABLE_NAME

  2. TOP

    SELECT [TOP n [PERCENT] column_name [,...n]]

    FROM tablename

    注:TOP n   是返回前n行数据

      TOP n PERCENT   是返回百分之n的数据

    n不能用表达式或变量来替代

  3. ROWCOUNT

    SET ROWCOUNT 3

    SELECT *

    FROM 物资库存记录

    GO

    SET ROWCOUNT 0

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

    SET ROWCOUNT 0表示恢复ROWCOUNT

  4. DISTINCT

    SELECT DISTINCT 物资名称

    FROM 物资基本信息

    GO

    注:DISTINCT用来从SELECT语句的结果集中除去重复的行

  5. WHERE

    条件

  6. BETWEEN...AND结构

    字段名或者表达式 [NOT] BETWEEN 表达式1 AND 表达式2

  7. IN

    表达式或者字段名 [NOT] IN (列表或者子查询)

  8. LIKE

    字符串表达式 [NOT] LIKE 可以带通配符串表达式

    [ESCAPE 字符串表达式]

    注:ESCAPE表示,允许在字符串中搜索通配符而不是将其作为通配符使用E

    注:用于模糊查询, 和LIKE结合使用的通配符%、_、[]和[^],他们必须与LIKE结合才有意义,否则就是普通字符

    %:表示任意个任意字符

    _:表示1个任意字符

    []:表示可以是方括号里列出的任意一个字符

    [^]:表示不在方括号里列出的任意一个字符

  9. EXISTS

    EXISTS关键字用于指定一个子查询,检测行的存在。 也就是说,如果EXISTS关键字指定的子查询查得的结果集不为空,则执行主体的SELECT 查询,否则返回的结果集为空。

    SELECT *

    FROM TABLE_NAME

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

    GO

  10. 设置查询字段的显示名称

    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

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

  11. 统计函数

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

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

  12. GROUP BY和HAVING

    [GROUP BY 表达式]

    [HAVING 表达式]

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

    SELECT *

    FROM A

    WHERE price is NOT NULL

    GROUP BY type

    HAVING COUNT(*) > 3

    GO

  13. ALL

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

    SELECT *

    FROM B

    WHERE 数量>10

    GROUP BY ALL 单位

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

  14. ORDER BY

    SELECT *

    FROM C

    ORDER BY price DESC

    注:子句中的字段数目没有限制,ASC表示升序,DESC表示降序,空值被视为最低的值

  15. 多表查询

    SELECT pub.pub_id, title.id

    FROM pub, title

  16. UNION

    UNION可以将多个SELECT语句的查询结果组合到一起

    使用UNION的结果集,必须具有相同的字段结构,字段数必须相等,响应的字段的数据类型必须兼容

  17. CASE、INNER JOIN...ON...表达式

  18. INSERT

    INSERT [INTO] 表名或试图 [字段列表] values 值列表

    INSERT INTO 物资库存记录 (物资编号,物资名称) VALUES ('LP12', '螺钉')

  19. UPDATE

    UPDATE 表名或视图

    SET {字段名={expression | default | null}}

    [FROM {<table_source>}[,...]]

  20. DELETE

    DELETE 表或视图

    FROM 其他表

    WHERE 表达式

  21. 视图

    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}

  22. 修改视图

    ALTER

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

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

    AS

    select_statement

    [WITH CHECK OPTION]


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