欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL Server簡單查詢示例匯總

 更新時(shí)間:2016年12月08日 09:44:11   作者:JeffckyWang  
本文簡單講了簡單查詢語句以及需要注意的地方,列舉了具體實(shí)例,并配圖解析。有需要的朋友可以看下

前言

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

EOMONTH

在SQL Server 2012的教程示例中,對于Sales.Orders表的查詢,需要返回每月最后一天的訂單。我們普遍的查詢?nèi)缦?/p>

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

但是在SQL Server 2012出現(xiàn)了新的函數(shù)直接返回每個(gè)月最后一天的訂單,通過EOMONTH函數(shù)即可,將

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表來查詢總價(jià)(qty*unitprice)大于10000的訂單,且按照總價(jià)排序。

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的區(qū)別,下面的示例是等同的

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

但是利用聚合函數(shù)時(shí)能等同嗎?

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

 

二者的區(qū)別我們總結(jié)一下:

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

(2)WHERE過濾行在GROUP BY之前,而HAVING過濾行在GROUP BY之后。

(3)WHERE不能用在聚合函數(shù)中,除非該聚合函數(shù)位于HAVING子句或選擇列表所包含的子查詢中。

說了這么多,關(guān)于WHERE和HAVING的區(qū)別,其實(shí)WHERE的應(yīng)用場景更多,我們歸根結(jié)底一句話來概括的HAVING的用法即可。

HAVING僅僅在SELECT語句中對組(GROUP BY)或者聚合函數(shù)(AGGREGATE)進(jìn)行過濾

INSERT  TOP分析

當(dāng)將查詢出的數(shù)據(jù)插入到表中,我們其實(shí)有兩種解決方案。

方案一

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

方案二

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

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

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

需要插入的兩個(gè)表

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

接下來查詢方案一和方案二的數(shù)據(jù)

SELECT *
FROM InsertTestValue
GO
SELECT *
FROM InsertTestValue1
GO

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

二者性能比較

在插入數(shù)據(jù)時(shí)我們對其進(jìn)行開銷分析如下:

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

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

COUNT(DISTINCT) AND COUNT(ALL)

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

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

插入如下測試數(shù)據(jù)

接下來我們進(jìn)行如下查詢

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

此時(shí)我們能夠很清楚的看到COUNT(colName)和COUNT(ALL colName)的結(jié)果是一樣的,其實(shí)COUNT(ALL colName)是默認(rèn)的選項(xiàng)且包括所有非空值,換句話說ALL根本不需要我們?nèi)ブ付ā?/p>

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

相關(guān)文章

  • SQL?Server使用T-SQL語句批處理

    SQL?Server使用T-SQL語句批處理

    這篇文章介紹了SQL?Server使用T-SQL語句進(jìn)行批處理的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • SQLSERVER 時(shí)間格式大全

    SQLSERVER 時(shí)間格式大全

    最近在寫程序的過程中有遇到SQL SERVER時(shí)間格式的問題,一時(shí)想不起來,上網(wǎng)搜索了一下,這方面的資料還真不少,找了一個(gè)比較全面的。
    2010-05-05
  • SQL如何實(shí)現(xiàn)橫表與縱表相互轉(zhuǎn)換

    SQL如何實(shí)現(xiàn)橫表與縱表相互轉(zhuǎn)換

    針對SQL橫向表轉(zhuǎn)縱向的問題,本文從實(shí)際應(yīng)用出發(fā),詳細(xì)講解了語法和操作步驟,并結(jié)合實(shí)例進(jìn)行了演示和說明。文章還探討了該方法的優(yōu)缺點(diǎn),提出了一些值得注意的事項(xiàng),旨在幫助讀者更深入地理解這一重要的數(shù)據(jù)處理技巧
    2023-04-04
  • SQL?Server啟用sa賬戶的簡單圖文教程

    SQL?Server啟用sa賬戶的簡單圖文教程

    這篇文章主要給大家介紹了關(guān)于SQL?Server啟用sa賬戶的簡單圖文教程,因?yàn)榘惭b數(shù)據(jù)的時(shí)候沒有啟用sa賬戶,這里記錄一下如何啟用,需要的朋友可以參考下
    2023-09-09
  • SQL Server實(shí)現(xiàn)將特定字符串拆分并進(jìn)行插入操作的方法

    SQL Server實(shí)現(xiàn)將特定字符串拆分并進(jìn)行插入操作的方法

    這篇文章主要介紹了SQL Server實(shí)現(xiàn)將特定字符串拆分并進(jìn)行插入操作的方法,涉及SQL Server的循環(huán)、遍歷、判定及插入等相關(guān)操作技巧,需要的朋友可以參考下
    2016-08-08
  • 丟失的數(shù)據(jù)忘記備份的處理方法[圖文]

    丟失的數(shù)據(jù)忘記備份的處理方法[圖文]

    突然間數(shù)據(jù)庫無緣無故損壞了,差異備份或事務(wù)日志備份在3點(diǎn)才會(huì)自動(dòng)去做,那么如何將2點(diǎn)到2點(diǎn)40之間的數(shù)據(jù)恢復(fù)呢?這就需要通過備份尾部日志進(jìn)行恢復(fù)了。
    2009-06-06
  • sql server服務(wù)無法啟動(dòng)的解決方案

    sql server服務(wù)無法啟動(dòng)的解決方案

    sql server軟件是一款關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有使用方便可伸縮性好與相關(guān)軟件集成程度高等優(yōu)點(diǎn),我們在數(shù)據(jù)編程操作時(shí)經(jīng)常會(huì)使用這款編程軟件,在編程時(shí)系統(tǒng)有時(shí)會(huì)提示sql server服務(wù)無法啟動(dòng),那么大家該如何正常啟動(dòng)呢,下面就由小編來給大家介紹一下如何解決
    2023-11-11
  • SQL server 2016 安裝步驟圖文教程

    SQL server 2016 安裝步驟圖文教程

    本文通過圖文并茂的形式給大家介紹了SQL server 2016 安裝步驟,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-03-03
  • 基于Sql Server通用分頁存儲(chǔ)過程的解決方法

    基于Sql Server通用分頁存儲(chǔ)過程的解決方法

    本篇文章,小編將為大家介紹基于Sql Server通用分頁存儲(chǔ)過程的解決方法,有需要的朋友可以參考一下
    2013-04-04
  • 一個(gè)完整的SQL SERVER數(shù)據(jù)庫全文索引的示例介紹

    一個(gè)完整的SQL SERVER數(shù)據(jù)庫全文索引的示例介紹

    以下是介紹SQL SERVER數(shù)據(jù)庫全文索引的示例,以pubs數(shù)據(jù)庫為例。需要的朋友參考下
    2013-07-07

最新評論