基本的查询流程(Select)
一、基本语法
Select *,Colums,or Expressions [ From Table join Table on
Conditions ] [Where Conditons] [Group by Columns] [Having
Conditons] [Order By Columns]
基本执行流程(逻辑上的):
1、From 子句将所有数据源组装成结果集
2、Where子句根据指定的条件对From子句组装的结果集进行筛选,从中选出满足
条件的行。
3、聚合函数对数据集进行汇总计算
4、Group By 子句根据指定的列将较大的数据集分成较小的数据集。
5、然后,可以对这些较小的数据组分别使用聚合函数
6、对聚合函数计算的结果,可以使用Having子句进行筛选
7、最后 Order By 子句决定了结果集的排列顺序
8、谓词:选择计算行,执行计算并根据指定的方式进行排序后,SQL可以只显示
前几行或只返回指定的行。
物理流程:查看执行计划
二、From后可能的数据源
1、SQL Server表
2、生成派生表的子查询(subselect或内联视图)
3、公用表达式(CTE)用于在传统的子查询中添加新的特性和格式
4、视图
5、返回行和列的用户定义的表值函数
6、使用OpenQuery()和其他函数从其他数据库或应用程序
(如:Access、Excel、Oracle那里获取数据的分布式数据源)
7、XML数据源
三、范围变量(也称别名)
在From子句中,可以为表指定范围变量或表别名。
语法: 表/视图 [ as ] 别名
如:Select A.name From Student as A
四、对象名与关键字
1、如果数据库中对象的名称(表或列、存储过程等对象的名称)与SQL关键字(SQL 中的
标识符),相同,可以使用方括号括起来让SQL知道这是一个对象的名称
如:Select name from [table]
这是一个名为table的表名。
2、如果数据库对象的名称中包含空格,同样可以使用 [ ] 来标识这是一个整体。
如:
Select orderID,produceID from [order Details]
order Details是一个表名
注:表名由四部分组成: 服务器 . 数据库 . 架构 . 表
五、Where 条件
1、比较运算符
=、>、<、<=、<>、!=、其中不等于<> 可移植,而!=则不可移植
4个特殊的 Between and、in、like、is
2、通配符
%、_、[]、^
3、布尔运算符
and 、or 、not
注:找东西最佳方法是直接去查找它,而不是排除其他所有东西,将否定的Where条件
改写为肯定条件将提高性能。