天天看点

SQL Server-简单查询示例(十一)前言

本节我们讲讲一些简单查询语句示例以及需要注意的地方,简短的内容,深入的理解,Always to review the basics。

在SQL Server 2012的教程示例中,对于Sales.Orders表的查询,需要返回每月最后一天的订单。我们普遍的查询如下

SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言

但是在SQL Server 2012出现了新的函数直接返回每个月最后一天的订单,通过EOMONTH函数即可,将

替换为

如上简单而粗暴。

我们利用Sales.OrderDetails表来查询总价(qty*unitprice)大于10000的订单,且按照总价排序。

SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言

通过此例我们来说说WHERE和HAVING的区别,下面的示例是等同的

SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言

但是利用聚合函数时能等同吗?

SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言

 二者的区别我们总结一下:

(1)WHERE能够用在UPDATE、DELETE、SELECT语句中,而HAVING只能用在SELECT语句中。

(2)WHERE过滤行在GROUP BY之前,而HAVING过滤行在GROUP BY之后。

(3)WHERE不能用在聚合函数中,除非该聚合函数位于HAVING子句或选择列表所包含的子查询中。

说了这么多,关于WHERE和HAVING的区别,其实WHERE的应用场景更多,我们归根结底一句话来概括的HAVING的用法即可。

HAVING仅仅在SELECT语句中对组(GROUP BY)或者聚合函数(AGGREGATE)进行过滤

当将查询出的数据插入到表中,我们其实有两种解决方案。

方案一

方案二

方案一是需要查询几条就插入几条,方案二则是查询所有我们需要插入几条数据,接下来我们来看看二者不同以及二者性能问题,创建查询表并插入数据。

SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言

需要插入的两个表

SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言

方案一的插入

方案二的插入

接下来查询方案一和方案二的数据

SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言

我们对方案一和方案二插入数据之前我们对查询的数据是进行了降序,此时我们能够很明显的看到方案一中的查询数据确确实实是降序,而方案二则忽略了降序,这是个很有意思的地方,至此我们看到了二者的不同。

在插入数据时我们对其进行开销分析如下:

SQL Server-简单查询示例(十一)前言

到这里我们能够知道利用INSET TOP (N)比INSERT … SELECT TOP (N)性能更好,同时INSERT TOP(N)会对查询出的数据排序进行忽略。至此我们可以得出如下结论

结论:INSERT TOP (N)比INSERT … SELECT TOP (N)插入数据性能更好。

关于DISTINCT就不用多讲,此关键字过滤重复针对的是所有列数据一致才过滤而不是针对于单列数据一致才过滤,我们看看COUNT(DISTINCT)和COUNT(ALL)查询出的数据是一致还是不一致呢?我们首先创建测试表

插入如下测试数据

SQL Server-简单查询示例(十一)前言

接下来我们进行如下查询

SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言
SQL Server-简单查询示例(十一)前言

此时我们能够很清楚的看到COUNT(colName)和COUNT(ALL colName)的结果是一样的,其实COUNT(ALL colName)是默认的选项且包括所有非空值,换句话说ALL根本不需要我们去显示指定。

本节我们简单讲了简单查询语句以及需要注意的地方,关于简单查询和基础概念我们到此结束,下一节我们开始进入表连接,接下来的内容将越来越有意思,简短的内容,深入的理解,我们下节再会。

本文转自Jeffcky博客园博客,原文链接:http://www.cnblogs.com/CreateMyself/p/6138996.html,如需转载请自行联系原作者