SQL Server 2012学习笔记 (三) ----- SQL Server SQL语句

2021-04-13 12:04:49 浏览数 (1)

  在很多情况下,可以用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约束

0 人点赞