MSSQL 的 SELECT 查询流,想查询快必须了解
SQL是一种自由的数据语言,但只有掌握了查询的数据流,我们才能从海量的关系数据中找到唯一想要有的数据,其实,这是件很容易的事情。
SQL是一种声明性的语言。意思就是说,SQL查询从逻辑上将问题描述给SQL 查询优化器,然后由后者来实际执行,它会使用最佳的方法。这种最佳方法,其实就是优化器给出的查询计划。在某些情况下,产生相同的结果集查询,可能会使用不同的执行计划。也就意味着可以使用最具意义,最容易维护的方式来表达SQL查询。在不同的场景中,一种方法比另一种方法更高效或更快捷。
4个操作命令,即使 SELECT,INSERT,UPDATE和DELETE。在实际的项目中,由于业务的复杂程度,常常4个语句,需要相互排列组合使用。但是,我建议,最好将复杂的业务拆分,写最简单的SQL,也有利于良好的可维护性。
先说说SELECT:
SELECT 语法有一个特有的固定的顺序:SELECT-FROM-WHERE-GROUP BY-HAVING-ORDER BY。
SELECT语句的基本格式告诉SQL SERVER 需要查询什么样的数据,包括从哪些列,行和表提取数据,以及如何对数据进行分组或者排序。查询语句中字句的顺序非常重要;但是,他们的执行顺序与语法上指定他们的顺序并不相同。下面是SELECT命令的缩列语法:
SELECT [DISTINCT] [TOP (n)] *,columns, or expressions
[FROM data source(s)]
[JOIN data source ON condition](这里可以包含多个连接到不同的表(joins))
[WHERE conditions]
[GROUP BY colums]
[HAVING conditions]
[ORDER BY Columns];
SELECT 查询语句以一个列或者表达式的列表开始。至少要一个表达式,其它都是可选。比如 整数、标量函数或封装在单引号里面的字符串值都可以代表某种表达式。比如:
SELECT 1,SELECT 'Me' 这都是有效的。
如果没有提供FROM字句,SQL SERVER 返回带有值的单个行。
FROM 部分将数据源组装进一个结果集,然后由SELECT 语句的剩余部分对结果集执行操作。当然,数据源也可以是多种方式的。比如表,视图,函数,字符串等等。
WHERE 子句作用与 FROM 子句组装的记录集,根据条件筛选出某些行。可以在这个子句中指定一些条件。
GROUP BY 子句可以根据在该子句中指定的列将大数据集分组成较小的数据集。然后,对新的小的数据集执行聚合函数。使用 HAVING 子句可以限制聚合的结果。
ORDER BY 子句确定结果集的排序顺序。可以根据查询出来的列,按照一列或者多列来指定排序。这里可以是升序或者降序。如果没有指定列,则默认按照升序来排序。
查询语句有逻辑流和物理流
SQL的逻辑流可能是 SQL SERVER 的查询处理器用于执行查询的实际物理流。逻辑流不等于查询语法。参考如下顺序:
数据源(FROM)-->WHERE-->Col(s),expr(s)-->Order by-->谓词
这篇就到这里。下次在继续。
声明,我只是搬运工。这些技术内容,网上有很多。大家有兴趣,可以去百度。
发表评论 取消回复