天天看點

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,如需轉載請自行聯系原作者