在本文中,我們将學習 SQL 連接。此外,我們還将了解SQL IntelliSence功能及其用途。此外,我将解釋Devart SQL Complete 的工作原理以及它對編寫 SQL 查詢的開發人員有何用處。
SQL 連接通過使用公共列連接它們來填充來自不同表的數據。有四種類型的連接。
為了演示,我創建了一個名為 demodatabase 的數據庫,其中包含三個表。創建表的腳本如下:
USE [demodatabase]
GO
CREATE TABLE [dbo].[tblStudent](
[student_code] [varchar](10) NULL,
[student_name] [varchar](500) NULL,
[ADDRESS] [varchar](5000) NULL,
[School_ID] INT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tblSchool](
[School_Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NULL,
[Category_ID] int
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tblSchoolCategory](
[Category_Id] [int] IDENTITY(1,1) NOT NULL,
[Category_Name] [varchar](50) NULL
) ON [PRIMARY]
GO
插入數據的腳本如下:
INSERT INTO [tblStudent] (student_code, student_name, ADDRESS, School_ID) VALUES
('STUD0001', ' Kayla Woodcock', ' K201 PRAMUKH GLORY SARGASAN', 1),
('STUD0002', ' Hudson Onslow', ' K205 PRAMUKH GLORY SARGASAN', 1),
('STUD0003', ' Isabella Rupp', ' G201 PRAMUKH LOTUS SARGASAN', 2),
('STUD0004', ' Eva Muirden', ' A205 PRAMUKH NAGAR SARGASAN', 4),
('STUD0005', ' Sophia Hinton', ' A205 PRAMUKH NAGAR SARGASAN', 2),
('STUD0006', ' Amy Trefl', ' A205 PRAMUKH NAGAR SARGASAN', 1)
GO
INSERT INTO tblSchool(Name,Category_ID) VALUES
('NALANDA SCHOOL',1),
('BN HIGH SCHOOL',1),
('Sarvajanik School',2),
('LP Sawani School',NULL),
('Karvy School',NULL),
('S V Shah Vidhya vihar',NULL)
INSERT INTO tblSchoolCategory(Category_Name) VALUES
('A'),
('B'),
('C')
現在,讓我們了解 SQL Join 的工作原理。
内部聯接當您合并兩個表的記錄并僅填充來自兩個表的匹配數據時,将使用内部聯接。INNER JOIN 的語法如下:
SELECT <column_1>,<column_2>… FROM <table_name_1> INNER JOIN <table_name_2> ON <table_name_1>.<column_1>=<table_name_2>.<column_2>
例如,我們要顯示學生名單和他們就讀的學校名稱。查詢如下:
SELECT s.student_code,s.student_name,s.ADDRESS,T.Name FROM tblSchool t
Inner JOIN tblStudent s ON s.School_ID=T.School_Id
查詢輸出:
當您想要合并兩個表的記錄、填充兩個表中的匹配記錄以及左表中的所有記錄時,使用左連接。如果右表沒有匹配的記錄,查詢将返回NULL。LEFT JOIN 的語法如下:
SELECT <column_1>,<column_2>… FROM <table_name_1> LEFT JOIN <table_name_2> ON <table_name_1>.<column_1>=<table_name_2>.<column_2>
例如,我們想要生成一個包含學校名稱和在校學生總數的學校列表。顯示學生總數和學校名稱的查詢如下:
SELECT T.Name SchoolName ,COUNT(s.student_code)TotalStudent FROM tblSchool t LEFT JOIN tblStudent s ON s.School_ID=T.School_Id GROUP BY t.Name
查詢輸出:
如您所見,查詢返回了所有學校的學生人數。我們使用帶有聚合函數的左連接來顯示學生數為零的學校。
右連接或右外連接當您想要合并兩個表的記錄、填充右表中的所有數據并匹配兩個表的數據時,使用内連接。如果左表沒有匹配的記錄,則查詢将返回 NULL。RIGHT JOIN 的語法如下:
SELECT <column_1>,<column_2>… FROM <table_name_1> RIGHT JOIN <table_name_2> ON <table_name_1>.<column_1>=<table_name_2>.<column_2>
例如,我們想要生成一個類别列表和屬于該類别的學校數量。
SELECT sc.Category_Name,COUNT(s.Name) FROM tblSchoolCategory sc RIGHT JOIN tblSchool s ON s.Category_ID=sc.Category_Id GROUP BY sc.Category_Name
查詢輸出:
如您所見,查詢返回了所有類别以及屬于該類别的學校數量。
全連接FULL JOIN 是 LEFT JOIN 和 RIGHT JOIN 的組合。FULL JOIN 生成的結果包含兩個表中的所有記錄。FULL JOIN 的語法如下:
SELECT <column_1>,<column_2>… FROM <table_name_1> , <table_name_2>
例如,我們想用匹配和不匹配的記錄填充 tblSchool 和 tblSchoolCategory 表中的記錄。
SELECT * FROM tblSchoolCategory sc , tblSchool s
查詢輸出:
現在,讓我們看看 SQL Server IntelliSense 如何通過減少輸入工作量來幫助提高編碼速度。
SQL 智能感知SQL Intellisense 是 SQL Server 2008 中引入的一項功能。它會自動收集 SQL Server 實例的對象列表和元數據。SQL IntelliSense 提供以下好處:
要啟用或禁用 SQL IntelliSense,請選擇工具 -->選項 --> 展開文本編輯器--> 展開Transact-SQL --> IntelliSense --> 選擇啟用 IntelliSense。
您可以參考 SQL Server IntelliSense 和自動完成文章以了解有關 SQL Server IntelliSense 的更多信息。現在,讓我們看看 Devart SQL Complete 如何成為 SQL IntelliSense 的良好替代品。
Devart SQL Complete 概述Devart SQL Complete 是一個類似于 SQL Server IntelliSense 的 SQL 插件,但它還有許多其他功能可以提高 SQL 開發人員或 DBA 的工作效率。在本文中,我将展示 Devart 自動完成功能如何幫助使用 OUTER Join 編寫 SQL 查詢。例如,我們要填充所有學校和在這些學校學習的所有學生的列表。我已将整個查詢編寫過程拆分為多個圖像以了解SQL Complete 的功能。
圖片 1: 由 Devart SQL Complete IntelliSense 填充的 SQL 命令列表。
圖片 2: Devart SQL Complete 通過鍵入 USE 語句自動填充 SQL 數據庫列表。如下圖所示,顯示了在名為Nisag-PC的 SQL 實例中創建的數據庫列表。
圖片 3: Devart SQL Complete 通過鍵入 SELECT 語句自動填充表列表。下面的屏幕截圖顯示Devart SQL Complete 提供了DemoDatabase 數據庫中的表列表。您可以從列表中選擇多個表,然後通過按 TAB 鍵将它們添加到查詢編輯器中。
圖 4: Devart SQL Complete 通過鍵入SELECT * FROM填充表列表、列列表及其選定列的數據類型和選定表中的總行。如下圖所示,我選擇了tblStudent 表,Devart SQL complete 顯示了列列表、它們的數據類型以及tblStudent 表的估計行數。
圖 5:當我們在 T-SQL 查詢中使用 SQL 連接時,Devart SQL complete 會在INNER JOIN / LEFT JOIN / RIGHT JOIN關鍵字後顯示匹配列的列表。正如您在下圖中看到的,當我添加LEFT JOIN關鍵字并指定第二個表的名稱時,Devart SQL Complete 填充了來自tblStudent 和tblSchool表的匹配列列表。
所述特征提高了編碼速度,因為開發者不需要參考第二表的列。
圖 6: 當我們在 T-SQL 查詢中使用 SQL 連接并添加WHERE 子句時,Devart SQL Complete 會填充兩個表的列列表,這有助于選擇适當的列。
正如您在下面的屏幕截圖中看到的,當我添加WHERE 子句時,Devart SQL Complete 填充了tblStudent 和tblSchool 表的列列表。所述特征提高了編碼速度,因為開發者不需要參考第二表的列。
在我們的例子中,我們用 NULL 值填充記錄,所以我沒有在查詢中使用 WHERE 子句。下面是最終查詢:
USE demodatabase
go
SELECT * FROM tblSchool s LEFT JOIN tblStudent s1 ON s.School_Id=s1.School_ID
查詢輸出:
上面的示例表明使用 Devart SQL Complete 查詢編寫變得更加容易。
概括本文通過一個簡單示例解釋了 T-SQL 連接及其類型。本文還介紹了 SQL IntelliSense 和 Devart SQL Complete。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!