婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SQL Server簡單查詢示例匯總

SQL Server簡單查詢示例匯總

熱門標簽:安卡拉地圖標注app 電話機器人怎么代理商 400電話辦理泰安 零成本地圖標注賺錢 家庭農場地圖標注名稱怎樣起名 我要地圖標注數量有限制嗎 千呼電話機器人可以試用嗎 互聯網電話外呼系統 電銷需要外呼系統嗎

前言

本節我們講講一些簡單查詢語句示例以及需要注意的地方,簡短的內容,深入的理解。

EOMONTH

在SQL Server 2012的教程示例中,對于Sales.Orders表的查詢,需要返回每月最后一天的訂單。我們普遍的查詢如下

USE TSQL2012
GO
SELECT orderid, orderdate, custid, empid
FROM Sales.Orders
WHERE orderdate = DATEADD(MONTH, DATEDIFF(MONTH, '19991231', orderdate), '19991231')

但是在SQL Server 2012出現了新的函數直接返回每個月最后一天的訂單,通過EOMONTH函數即可,將

WHERE orderdate = DATEADD(MONTH, DATEDIFF(MONTH, '19991231', orderdate), '19991231')

替換為

SELECT orderid, orderdate, custid, empid
FROM Sales.Orders
WHERE orderdate = EOMONTH(orderdate)

如上簡單而粗暴。

HAVING AND WHERE

我們利用Sales.OrderDetails表來查詢總價(qty*unitprice)大于10000的訂單,且按照總價排序。

USE TSQL2012
GO
SELECT orderid,SUM(unitprice *qty) AS TotalValue
FROM Sales.OrderDetails
GROUP BY orderid
HAVING SUM(unitprice *qty) > 10000
ORDER BY TotalValue DESC

 

通過此例我們來說說WHERE和HAVING的區別,下面的示例是等同的

SELECT orderid
FROM Sales.OrderDetails
WHERE orderid >10357
GROUP BY orderid
SELECT orderid
FROM Sales.OrderDetails
GROUP BY orderid
HAVING orderid >10357

但是利用聚合函數時能等同嗎?

SELECT orderid
FROM Sales.OrderDetails
WHERE COUNT(qty * unitprice) >10000
GROUP BY orderid
SELECT orderid
FROM Sales.OrderDetails
GROUP BY orderid
HAVING COUNT(qty * unitprice) >10000

 

二者的區別我們總結一下:

(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)進行過濾

INSERT  TOP分析

當將查詢出的數據插入到表中,我們其實有兩種解決方案。

方案一

NSERT INTO TABLE …
SELECT TOP (N) Cols…
FROM Table

方案二

INSERT TOP(N) INTO TABLE …
SELECT Cols…
FROM Table

方案一是需要查詢幾條就插入幾條,方案二則是查詢所有我們需要插入幾條數據,接下來我們來看看二者不同以及二者性能問題,創建查詢表并插入數據。

CREATE TABLE TestValue(ID INT)
INSERT INTO TestValue (ID)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
UNION ALL
SELECT 4
UNION ALL
SELECT 5

需要插入的兩個表

USE TSQL2012
GO
CREATE TABLE InsertTestValue (ID INT)
CREATE TABLE InsertTestValue1 (ID INT)

方案一的插入

INSERT INTO InsertTestValue (ID)
SELECT TOP (2) ID
FROM TestValue
ORDER BY ID DESC
GO

方案二的插入

INSERT TOP (2) INTO InsertTestValue1 (ID)
SELECT ID
FROM TestValue
ORDER BY ID DESC
GO

接下來查詢方案一和方案二的數據

SELECT *
FROM InsertTestValue
GO
SELECT *
FROM InsertTestValue1
GO

我們對方案一和方案二插入數據之前我們對查詢的數據是進行了降序,此時我們能夠很明顯的看到方案一中的查詢數據確確實實是降序,而方案二則忽略了降序,這是個很有意思的地方,至此我們看到了二者的不同。

二者性能比較

在插入數據時我們對其進行開銷分析如下:

到這里我們能夠知道利用INSET TOP (N)比INSERT … SELECT TOP (N)性能更好,同時SELECT TOP(N)會對查詢出的數據排序進行忽略。至此我們可以得出如下結論

結論:INSERT TOP (N)比INSERT … SELECT TOP (N)插入數據性能更好。

COUNT(DISTINCT) AND COUNT(ALL)

關于DISTINCT就不用多講,此關鍵字過濾重復針對的是所有列數據一致才過濾而不是針對于單列數據一致才過濾,我們看看COUNT(DISTINCT)和COUNT(ALL)查詢出的數據是一致還是不一致呢?我們首先創建測試表

CREATE TABLE TestData
(
  Id INT NOT NULL IDENTITY PRIMARY KEY,
  NAME VARCHAR(max) NULL
);

插入如下測試數據

接下來我們進行如下查詢

USE TSQL2012
GO
SELECT COUNT(NAME) AS COUNT_NAME
FROM dbo.TestData
SELECT COUNT(ALL NAME) AS COUNT_ALLNAME
FROM dbo.TestData
SELECT COUNT(DISTINCT NAME) AS COUNT_DISTINCTNAME
FROM dbo.TestData

此時我們能夠很清楚的看到COUNT(colName)和COUNT(ALL colName)的結果是一樣的,其實COUNT(ALL colName)是默認的選項且包括所有非空值,換句話說ALL根本不需要我們去指定。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,同時也希望多多支持腳本之家!

您可能感興趣的文章:
  • 詳解SQL Server的簡單查詢語句
  • SqlServer查詢和Kill進程死鎖的語句
  • SQLSERVER分頁查詢關于使用Top方式和row_number()解析函數的不同
  • SQL Server 2016 查詢存儲性能優化小結
  • SqlServer使用 case when 解決多條件模糊查詢問題
  • 使用SqlServer CTE遞歸查詢處理樹、圖和層次結構
  • 在sqlserver中如何使用CTE解決復雜查詢問題
  • 在SQL SERVER中查詢數據庫中第幾條至第幾條之間的數據SQL語句寫法
  • SQL Server查詢前N條記錄的常用方法小結
  • 詳解sqlserver查詢表索引
  • SQL Server數據庫按百分比查詢出表中的記錄數

標簽:來賓 東營 文山 黃山 大同 濱州 池州 新鄉

巨人網絡通訊聲明:本文標題《SQL Server簡單查詢示例匯總》,本文關鍵詞  SQL,Server,簡單,查詢,示例,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL Server簡單查詢示例匯總》相關的同類信息!
  • 本頁收集關于SQL Server簡單查詢示例匯總的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 淮阳县| 东阳市| 新安县| 阜平县| 龙川县| 宝应县| 灯塔市| 定州市| 措美县| 石首市| 曲靖市| 曲阳县| 府谷县| 吉木萨尔县| 黄冈市| 福鼎市| 安康市| 宣化县| 北流市| 丹东市| 潢川县| 张家口市| 多伦县| 府谷县| 衡阳县| 石泉县| 都兰县| 宣汉县| 乐至县| 且末县| 五家渠市| 永康市| 湖口县| 五寨县| 永仁县| 布尔津县| 阿拉善左旗| 丹东市| 江城| 阿坝| 武威市|