T-SQL:SQL語句處理順序的坑(二)

来源:https://www.cnblogs.com/yuanzijian-ruiec/archive/2018/07/15/9312941.html
-Advertisement-
Play Games

首先看下麵一條比較完成語句,都是比較常見的關鍵字。 我們來詳細分析一下sql語句的邏輯處理順序,雖然select在每條語句的第一位,但實際上它是被最後才處理的 1.from 2.where 3.group by 4.having 5.select 6.order by 在仔細分析每個執行順序代表的意 ...


首先看下麵一條比較完成語句,都是比較常見的關鍵字。

USE Temp;

SELECT empid, YEAR(orderdate) AS orderyear, COUNT(*) AS numorders
FROM Sales.Orders
WHERE custid = 71
GROUP BY empid, YEAR(orderdate)
HAVING COUNT(*) > 1
ORDER BY empid, orderyear;

我們來詳細分析一下sql語句的邏輯處理順序,雖然select在每條語句的第一位,但實際上它是被最後才處理的

1.from  

2.where

3.group by

4.having

5.select

6.order by

在仔細分析每個執行順序代表的意思 (它的實際順序)

FROM Sales.Orders
WHERE custid = 71
GROUP BY empid, YEAR(orderdate)
HAVING COUNT(*) > 1
SELECT empid, YEAR(orderdate) AS orderyear, COUNT(*) AS numorders ORDER BY empid, orderyear;

1.從 Orders 表查詢數據

2.根據條件篩選客戶ID等於71的

3.對客戶id和訂單年度 進行分組

4. 再選出大於一個訂單的組

5.返回查詢出的數據 以及你要展示的欄位

6.最終對客戶id 和訂單 進行排序

7.輸出

輸入的鍵入順序和處理順序不一致是有原因的,SQL設計師是為了讓用戶按照英文的方式提供自己的請求

建議、坑

1. from 表時  最好給定 庫名和表名  Sales.Orders  讓表顯示表示 不用程式檢索。

2. where 子句相當重要  SQL Server 會對where 條件 進行評估訪問請求數據要使用的索引,通過索引可以大大減少表掃描時間

同時 where 子句檢索 完成後  它返回的是檢索結果為True的行  ,但始終記住, SQL 資料庫使用三值謂詞邏輯,也就是說有三個結果。

True,False 或 UNKNOWN ,  返回true 行 並不等同於 不返回False  實際上是不返回 False 行 和 UNKNOWN 行 以後會再博客中專門講NULL。

3.記住除count(*)之外,  聚合函數都是忽略NULL標記  如果有一組數據“1,1,3,4,5,null”列名為qty   表達式Count(*) 返回的是6 但是 Count(qty)

是5  count中給定顯示值 就會預設尋找已知值  也可以  count(distinct qty ) 返回的是4 去重覆  這個 可以用來 處理  返回每個不重覆統計問題很方便 它和 select distinct 有很大性能區別 以後會細講 也可以 sum(distinct qty ) 是13 也是用作統計不重覆數據。

4.因為 group by 屬於行處理 在having 先計算所以having 中可以出現  聚合函數 。

5.像上面的 “YEAR(orderdate)” SQL Server 只對它運行一次  能識別查詢中重覆使用的相同表達式

6.最好別使用 select * 儘管你要查詢 所有欄位。

7.使用 order by 對有大量重覆的欄位進行排序是無效的  例如對日期進行排序 這樣一個排序選10條 會有多個被認為是對的結果 所以我們要確保排序欄位的數據唯一性, 以及在 select distinct  時 排序 會導致 單個結果對應多個源數據行。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MySQL mysqlbinlog解析出的SQL語句被註釋是怎麼回事 一網友反饋使用mysqlbinlog解析出的二進位日誌中的內容中,有些SQL語句有#註釋的情況,這個是怎麼回事呢?我們通過實驗來瞭解一下具體細節情況,如下所示,實驗環境為5.6.20-enterprise-commercial-a... ...
  • 1、給數據表添加一組數據: 2、給數據表添加多組數據: 3、對數據進行刪除和修改: 4、用select查詢單個或多個數據信息: 5、去除重覆值: 6、查詢的各種用法: between的用法: 查詢排序: limit的用法: 分組: 查詢總數: 起別名: select *from 表 where id ...
  • 返回 "ProxySQL系列文章:http://www.cnblogs.com/f ck need u/p/7586194.html"   ProxySQL支持查詢緩存的功能,可以將後端返回的結果集緩存在自己的記憶體中,在某查詢的緩存條目被清理(例如過期)之前,前端再發起同樣的查詢語句,將直 ...
  • 主要包括以下三部分,本文為第二部分: 一. Scala環境準備 "查看" 二. Hadoop集群(偽分佈模式)安裝 三. Spark集群(standalone模式)安裝 "查看" Hadoop集群(偽分佈模式)安裝 1. 依賴項:jdk(hadoop與java版本相容性參考 "鏈接" )、ssh; ...
  • 主要包括以下三部分,本文為第一部分: 一. Scala環境準備 二. Hadoop集群(偽分佈模式)安裝 "查看" 三. Spark集群(standalone模式)安裝 "查看" 因Spark任務大多由Scala編寫,因此,首先需要準備Scala環境。 註:樓主實驗環境為mac os Scala環境 ...
  • 轉載自:https://coolshell.cn/articles/1846.html 今天,資料庫的操作越來越成為整個應用的性能瓶頸了,這點對於Web應用尤其明顯。關於資料庫的性能,這並不只是DBA才需要擔心的事,而這更是我們程式員需要去關註的事情。當我們去設計資料庫表結構,對操作資料庫時(尤其是 ...
  • 語言:C 開發工具:Visual Studio 2017 問題場景介紹: nuget引用的MySql.Data版本是6.10.5,MySQL的資料庫連接串如下: 可以正常訪問MySQL資料庫 更新nuget,MySql.Data版本是8.0.11,報錯 解決方案:連接字元串添加 修改後的資料庫連接串 ...
  • 置SQLServer,允許遠程連接 按照上面的文章一步步配置後,遠程連接出現下麵所示的報錯(Navicat 和 SQL Server Management Studio) SQL Server Management Studio的報錯信息為: 在與 SQL Server 建立連接時出現與網路相關的或 ...
一周排行
    -Advertisement-
    Play Games
  • JWT(JSON Web Token)是一種用於在網路應用之間傳遞信息的開放標準(RFC 7519)。它使用 JSON 對象在安全可靠的方式下傳遞信息,通常用於身份驗證和信息交換。 在Web API中,JWT通常用於對用戶進行身份驗證和授權。當用戶登錄成功後,伺服器會生成一個Token並返回給客戶端 ...
  • 老周在幾個世紀前曾寫過樹莓派相關的 iOT 水文,之所以沒寫 Nano Framework 相關的內容,是因為那時候這貨還不成熟,可玩性不高。不過,這貨現在已經相對完善,老周都把它用在項目上了——第一個是自製的智能插座,這個某寶上50多塊可以買到,搜“esp32 插座”就能找到。一種是 86 型盒子 ...
  • 引言 上一篇我們創建了一個Sample.Api項目和Sample.Repository,並且帶大家熟悉了一下Moq的概念,這一章我們來實戰一下在xUnit項目使用依賴註入。 Xunit.DependencyInjection Xunit.DependencyInjection 是一個用於 xUnit ...
  • 在 Avalonia 中,樣式是定義控制項外觀的一種方式,而控制項主題則是一組樣式和資源,用於定義應用程式的整體外觀和感覺。本文將深入探討這些概念,並提供示例代碼以幫助您更好地理解它們。 樣式是什麼? 樣式是一組屬性,用於定義控制項的外觀。它們可以包括背景色、邊框、字體樣式等。在 Avalonia 中,樣 ...
  • 在處理大型Excel工作簿時,有時候我們需要在工作表中凍結窗格,這樣可以在滾動查看數據的同時保持某些行或列固定不動。凍結窗格可以幫助我們更容易地導航和理解複雜的數據集。相反,當你不需要凍結窗格時,你可能需要解凍它們以獲得完整的視野。 下麵將介紹如何使用免費.NET庫通過C#實現凍結Excel視窗以鎖 ...
  • .NET 部署 IIS 的簡單步驟一: 下載 dotnet-hosting-x.y.z-win.exe ,下載地址:.NET Downloads (Linux, macOS, and Windows) (microsoft.com) .NET 部署 IIS 的簡單步驟二: 選擇對應的版本,點擊進入詳 ...
  • 拓展閱讀 資料庫設計工具-08-概覽 資料庫設計工具-08-powerdesigner 資料庫設計工具-09-mysql workbench 資料庫設計工具-10-dbdesign 資料庫設計工具-11-dbeaver 資料庫設計工具-12-pgmodeler 資料庫設計工具-13-erdplus ...
  • 初識STL STL,(Standard Template Library),即"標準模板庫",由惠普實驗室開發,STL中提供了非常多對信息學奧賽很有用的東西。 vector vetor是STL中的一個容器,可以看作一個不定長的數組,其基本形式為: vector<數據類型> 名字; 如: vector ...
  • 前言 最近自己做了個 Falsk 小項目,在部署上伺服器的時候,發現雖然不乏相關教程,但大多都是將自己項目代碼複製出來,不講核心邏輯,不太簡潔,於是將自己部署的經驗寫成內容分享出來。 uWSGI 簡介 uWSGI: 一種實現了多種協議(包括 uwsgi、http)並能提供伺服器搭建功能的 Pytho ...
  • 1 文本Embedding 將整個文本轉化為實數向量的技術。 Embedding優點是可將離散的詞語或句子轉化為連續的向量,就可用數學方法來處理詞語或句子,捕捉到文本的語義信息,文本和文本的關係信息。 ◉ 優質的Embedding通常會讓語義相似的文本在空間中彼此接近 ◉ 優質的Embedding相 ...