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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...