在很多情况下,可以用CREATE TABLE语句创建数据表、使用ALTER TABLE语句修改表结构、使用DROP TABLE语句删除表;
可以使用CREATE DATABASE创建数据库、ALTER DATABASE修改文件或文件组、DROP DATABASE语句删除数据库;
1、数据定义语句(DDL)
代码语言:javascript复制 表创建——CREATE
表删除——DROP
表修改——ALTER
2、数据操作语句(DML)
代码语言:javascript复制 数据的插入——INSERT
数据的更改——UPDATE
数据的删除——DELETE
数据的查询——SELECT
查询是SQL语言的中心内容,而用于表示SQL查询的SELECT语句,是SQL语句中功能最强大也是最复杂的语句。其主要子句可归纳如下:
代码语言:javascript复制 [ WITH <common_table_expression>]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression]
[ HAVING search_condition]
[ ORDER BY order_expression [ ASC | DESC ] ]
1)UNION合并多个查询结果:
表的合并操作将两个表的行合并到了一个表中,且不需要对这些行作任何更改。
合并操作与联接相似,因为它们都是将两个表合并起来形成另一个表的方法。然而,它们的合并方法有本质上的不同,结果表的形状如下所示。
注:A和B分别代表两个数据源表。
使用UNION合并不同类型的数据。合并有不同列数的两个表,还可以进行多表合并。
2)子查询与嵌套查询:
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。
嵌套查询是指将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询。嵌套查询中上层的查询块称为外侧查询或父查询,下层查询块称为内层查询或子查询。
代码语言:javascript复制 使用比较运算符
使用IN关键字
使用ANY、SOME和ALL关键字
使用EXISTS关键字
3)联接查询:
联接查询是由一个笛卡尔乘积运算再加一个选取运算构成的查询。首先用笛卡尔乘积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。联接的全部意义在于水平方向上合并两个数据集合,并产生一个新的结果集合。
联接条件可在 FROM 或 WHERE 子句中指定,建议在 FROM 子句中指定联接条件。WHERE 和 HAVING 子句还可以包含搜索条件,以进一步筛选根据联接条件选择的行。
多表连接查询:
代码语言:javascript复制 相等连接
不等连接
带选择条件的连接
自连接
左外连接:
代码语言:javascript复制USE Test
SELECT student.s_id, stu_detail.addr
FROM student LEFT OUTER JOIN stu_detail
ON student.s_id = stu_detail.s_id;
右外连接:
代码语言:javascript复制USE Test
SELECT student.name, stu_detail.s_id
FROM student RIGHT OUTER JOIN stu_detail
ON student.s_id = stu_detail.s_id;
全外连接:
代码语言:javascript复制USE Test
SELECT student.name, stu_detail.addr
FROM student FULL OUTER JOIN stu_detail
ON student.s_id = stu_detail.s_id;
4)使用CASE函数进行查询:
联接可分为以下几类:内部联接、外部联接、交叉联接。
CASE函数用于计算条件列表并返回多个可能结果表达式之一。
CASE函数具有两种格式:
代码语言:javascript复制 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。
CASE 搜索函数计算一组布尔表达式以确定结果。
两种格式都支持可选的 ELSE 参数。
5)使用DISTINCT取消重复
6)使用TOP返回前n行
7)使用WHERE子句进行条件查询
代码语言:javascript复制 使用关系表达式查询
使用BETWEEN AND表示范围
使用IN关键字
使用LIKE关键字
使用IS NULL查询空值
使用EXISTS关键字
使用ORDER BY排序
使用GROUP BY分组
使用HAVING对分组结果过滤
使用COMPUTE子句对查询结果小计
使用COMPUTE BY子句分组小计
使用UNION合并查询结果集
8)使用聚合函数统计汇总
代码语言:javascript复制 使用SUM()求列的和
使用AVG()求列平均值
使用MAX()求列最大值
使用MIN()求列最小值
使用COUNT()统计
9)使用排序函数
代码语言:javascript复制 ROW_NUMBER函数
RANK函数
DENSE_RANK()函数
NTILE()函数
3、数据控制语句(DCL)
代码语言:javascript复制 给用户授予权限——GRANT
拒绝权限操作——DENY
收回权限操作——REVOKE
4、其他基本语句
代码语言:javascript复制 数据声明——DECLARE
数据赋值——SET
数据输出——PRINT
5、流程控制语句
代码语言:javascript复制 BEGIN…END语句
IF…ELSE语句
CASE语句
WHILE语句
GOTO语句
WAITFOR语句
RETURN语句
6、批处理语句
批处理是从应用程序发送到SQL Server并得以执行的一条或多条T-SQL语句。使用批处理时,有下面一些注意事项。
一个批处理中只要存在一处语法错误,整个批处理都无法通过编译。
批处理中可以包含多个存储过程,但除第一个过程外,其他存储过程前面都必须使用EXECTUE关键字。
某些特殊的SQL指令不能和别的SQL语句共存在一个批处理中,如CREATE TABLE和CREATE VIEW语句。这些语句只能独自存在于一个单独的存储过程中。
所有的批处理使用GO作为结束的标志,当编译器读到GO的时候就把GO前面的所有语句当成一个批处理,然后打包成一个数据包发给服务器。
GO本身不是T-SQL的组成部分,只是一个用于表示批处理结束的前端指令。
CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE SCHEMA、CREATE TRIGGER和CREATE VIEW语句不能在批处理中与其他语句组合使用。批处理必须以 CREATE 语句开头,所有跟在该批处理后的其他语句将被解释为第一个 CREATE 语句定义的一部分。
不能在删除一个对象之后,在同一批处理中再次引用这个对象。
如果 EXECUTE 语句是批处理中的第一句,则不需要 EXECUTE 关键字。如果 EXECUTE 语句不是批处理中的第一条语句,则需要 EXECUTE 关键字。
不能在定义一个CHECK约束之后,在同一个批处理中使用。
不能在修改表的一个字段之后,立即在同一个批处理中引用这个字段。
使用SET语句设置的某些选项值不能应用于同一个批处理中的查询。
7、规则、默认和完整性约束
规则是对存储的数据表的列或用户定义数据类型中的值的约束,规则与其作用的表或用户定义数据类型是相互独立的,也就是说,对表或用户定义数据类型的任何操作与对其设置的规则不存在影响。
1)规则的基本操作:
代码语言:javascript复制 创建规则
把自定义规则绑定到列
验证规则作用
取消规则绑定
删除规则
2)默认的基本操作
代码语言:javascript复制 创建默认
把自定义默认绑定到列
验证默认作用
取消默认绑定
删除默认
3)完整性约束
代码语言:javascript复制 主键约束
外键约束
唯一性约束
CHECK约束
DEFAULT约束
NOT NULL约束