LuckyTemplates 用戶的 SQL 臨時表和視圖

LuckyTemplates 用戶的 SQL 臨時表和視圖

在本教程中,我們將討論SQL 臨時表視圖。如果你想從物理表中提取一組特定的數據進行測試和調試,這兩個會很方便。我們還將討論兩種類型的臨時表及其區別。

使用 SQL 臨時表和視圖,您可以使用多個命令自由地操作數據集,而無需重複查詢,因為它已經存儲在單獨的表中。

儘管這兩者的工作原理相似,但您必須注意它們的區別。這將幫助您決定在特定情況下可以使用的最佳方法。

根據名稱本身,臨時表用於在會話中臨時存儲數據。

我們也可以像對物理表一樣對它們進行多項操作。假設您有一個很長的 SQL 命令。您可以簡單地將它放在一個臨時表中並開始調試或排除錯誤,而不會影響原始查詢。而且,臨時表功能強大,在SQL中經常使用。

目錄

SQL中的兩種臨時表

SQL 中有兩種類型的臨時表。這些是本地和全局臨時表。

本地臨時表僅存在於創建它的會話中。我們將無法在其他會話中訪問此表。因此,一旦創建它的會話關閉,本地臨時表將不再存在。

相反,全局臨時表在創建時可在所有會話中訪問。但是一旦所有會話都關閉,它將不再存在並且將無法再訪問。

請注意,您可以通過檢查本地臨時表的“ # ”符號和全局臨時表的“ ## ”符號來簡單地識別查詢中使用的臨時表的類型。

LuckyTemplates 用戶的 SQL 臨時表和視圖

本地臨時表的表名通常以“ # ”開頭。

LuckyTemplates 用戶的 SQL 臨時表和視圖

另一方面,全局臨時表在表名前以“ ## ”開頭。

LuckyTemplates 用戶的 SQL 臨時表和視圖

此外,如果你想快速創建任何表,你可以按照命令:SELECT * INTO #customers FROM dbo.courses為例。

LuckyTemplates 用戶的 SQL 臨時表和視圖

此命令將創建一個名為#customers的新臨時表,其中包含dbo.courses表中的所有數據。

Microsoft SQL Server Management Studio 中的視圖

現在讓我們用這個示例命令討論SQL 視圖

LuckyTemplates 用戶的 SQL 臨時表和視圖

比方說,我們不想重複執行這樣的命令。您可以按照以下命令將其簡單地放在視圖中。

LuckyTemplates 用戶的 SQL 臨時表和視圖

創建視圖類似於創建表。使用它將允許我們通過選擇我們創建的視圖名稱來執行我們輸入的查詢。在這種情況下,它是CustomersbyYear_v

LuckyTemplates 用戶的 SQL 臨時表和視圖

請務必注意,視圖不同於臨時表。這是因為視圖在數據庫中就像物理表一樣可見,除非您將其刪除。此外,視圖不存儲任何數據或值。

相反,它只會呈現您在CREATE VIEW命令之後輸入的命令。您還可以在視圖中運行任何表操作。

最重要的是,我們可以輕鬆識別視圖,因為它們通常通過在視圖名稱的開頭或結尾放置“v”來表示。

在 SQL 中創建臨時表和視圖

對於這個例子,我有這個查詢,它將在執行後組合併顯示來自Sales.SalesOrderHeaderSales.Customer C的記錄。

LuckyTemplates 用戶的 SQL 臨時表和視圖

LuckyTemplates 用戶的 SQL 臨時表和視圖

在 SQL 中創建本地臨時表

想像一下,您編寫了一個 200 行長的查詢,您需要對其進行調試和執行某些操作。您不能直接編輯查詢,因為它可能會在此過程中導致更多錯誤。

在這種情況下,使用前面的示例,我們將通過在 FROM 命令之前添加命令“ INTO #test_local ”來創建本地臨時表。

LuckyTemplates 用戶的 SQL 臨時表和視圖

一旦我們運行此命令,#test_local現在將包含Sales.SalesOrderHeaderSales.Customer C的組合記錄。因此,這就是您在選擇#test_local表時將看到的內容。

LuckyTemplates 用戶的 SQL 臨時表和視圖

之後,我們現在可以對#test_local表執行任何操作。我們將從#test_local中選擇所有記錄,然後我們將使用以下命令按 CustomerID更改記錄的順序。

LuckyTemplates 用戶的 SQL 臨時表和視圖

因此,記錄現在按其 CustomerID 排序。但是由於我們使用了本地臨時表,我們無法在不同的會話中訪問或使用#test_local表。下一個示例顯示如果我們嘗試訪問SQLQuery2.sql中的#test_local將會發生什麼。

LuckyTemplates 用戶的 SQL 臨時表和視圖

基於前面的示例,在選擇 #test_local 時它只是顯示一條錯誤消息。這是因為#test_local表僅存在於創建它的會話中,即SQLQuery1.sql

在 SQL 中創建全局臨時表

接下來,我們將使用我們在#test_local中使用的相同查詢。但這一次,我們將使用全局。

LuckyTemplates 用戶的 SQL 臨時表和視圖

現在,如果我們選擇##test_global並按 CustomerID 對記錄進行排序,它將顯示與我們在#test_local中相同的輸出,因為我們使用了相同的查詢。 

LuckyTemplates 用戶的 SQL 臨時表和視圖

之後,我們將嘗試通過選擇它來訪問不同會話中的##test_global表。由於我們使用的是全局臨時表,因此可以無縫地工作。

LuckyTemplates 用戶的 SQL 臨時表和視圖

在這一點上,我們強調了本地和全局臨時表之間的區別。

請記住,本地臨時表只能在創建它的會話中訪問。一旦您關閉該會話,它將不再存在。

另一方面,全局臨時表對所有會話都是可見的,除非您關閉所有活動會話或應用程序本身。

在 SQL 中創建視圖

我們現在要創建一個視圖。在這個例子中,我們有一個這樣的現有查詢。

LuckyTemplates 用戶的 SQL 臨時表和視圖

我們可以通過向該查詢添加CREATE VIEW命令來開始創建視圖。

LuckyTemplates 用戶的 SQL 臨時表和視圖

運行該命令後,將在我們正在處理的數據庫中創建一個視圖。在本例中,它是AdventureWorks2012

刷新後,我們還應該在 Views 文件夾中看到dbo.CustomerView_v 。要刷新 Views 文件夾,請右鍵單擊它,然後選擇Refresh

LuckyTemplates 用戶的 SQL 臨時表和視圖

單擊 Views 文件夾右側的 + 圖標,dbo.CustomerView_v可見。

LuckyTemplates 用戶的 SQL 臨時表和視圖

您可以通過右鍵單擊dbo.CustomerView_v打開此視圖,然後從選項中選擇Select Top 1000 Rows 。這將在該視圖中顯示 1000 條記錄。

LuckyTemplates 用戶的 SQL 臨時表和視圖

在此之後,我們現在可以使用dbo.CustomerView_v並像對錶一樣對其執行任何操作。例如,我們要在dbo.CustomerView_v中選擇 SalesOrderID 大於 50000 的記錄。在這種情況下,我們將使用以下命令。

LuckyTemplates 用戶的 SQL 臨時表和視圖

現在我們可以在我們創建的視圖上運行一個操作。

結論

總而言之,我們已經了解了兩種類型的臨時表及其區別以及我們需要使用它們的原因。此外,我們還討論了臨時表可以作為一種在不破壞實際查詢的情況下修復查詢錯誤的方法。

請記住,臨時表僅對創建它的會話可見。因此,一旦我們關閉活動會話或應用程序本身,它將不再存在。

我們還了解到視圖不存儲數據或記錄。它僅顯示基於您要呈現的查詢的結果。一旦我們創建這些視圖,它們就會存儲在我們的數據庫中。 

通過學習這兩者,您現在能夠快速執行長命令並輕鬆修改大塊數據集。

一切順利,

哈菲茲


什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。

DAX Studio 中數據緩存的物化想法

DAX Studio 中數據緩存的物化想法

本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。

使用 LuckyTemplates 進行業務報告

使用 LuckyTemplates 進行業務報告

如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的