sqlserver的讲解及应用(SQLServer联接概述)


每日分享最新,最流行的软件开发知识与最新行业趋势,希望大家能够一键三连,多多支持,跪求关注,点赞,留言。
在本文中,我们将学习 SQL 连接。我将解释 Devart SQL Complete 的工作原理以及它对编写 SQL 查询的开发人员有何帮助。

在本文中,我们将学习 SQL 连接。此外,我们还将了解SQL IntelliSence功能及其用途。此外,我将解释Devart SQL Complete 的工作原理以及它对编写 SQL 查询的开发人员有何用处。

SQL 连接通过使用公共列连接它们来填充来自不同表的数据。有四种类型的连接。

  1. 内部联接
  2. 左连接或左外连接
  3. 右连接或右外连接
  4. 全连接

为了演示,我创建了一个名为 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


查询输出:

sqlserver的讲解及应用(SQLServer联接概述)(1)


左连接或左外连接

当您想要合并两个表的记录、填充两个表中的匹配记录以及左表中的所有记录时,使用左连接。如果右表没有匹配的记录,查询将返回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

查询输出:

sqlserver的讲解及应用(SQLServer联接概述)(2)


如您所见,查询返回了所有学校的学生人数。我们使用带有聚合函数的左连接来显示学生数为零的学校。

右连接或右外连接

当您想要合并两个表的记录、填充右表中的所有数据并匹配两个表的数据时,使用内连接。如果左表没有匹配的记录,则查询将返回 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


查询输出:

sqlserver的讲解及应用(SQLServer联接概述)(3)

如您所见,查询返回了所有类别以及属于该类别的学校数量。

全连接

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

查询输出:

sqlserver的讲解及应用(SQLServer联接概述)(4)

现在,让我们看看 SQL Server IntelliSense 如何通过减少输入工作量来帮助提高编码速度。

SQL 智能感知

SQL Intellisense 是 SQL Server 2008 中引入的一项功能。它会自动收集 SQL Server 实例的对象列表和元数据。SQL IntelliSense 提供以下好处:

  • 它显示名称以键入的关键字开头的数据库对象列表。
  • 它提供有关用T-SQL 代码编写的对象的快速信息。当您将光标悬停在对象名称上时,SQL Server IntelliSense 会显示其信息。
  • 它显示指定系统和用户存储过程和函数的输入参数列表。
  • 它有另一个名为INSERT SNIPPET的选项,这是一个脚本模板。假设您正在编写一个脚本来在表上创建索引。您可以使用 INSERT SNIPPET 选项轻松生成创建索引模板。您可以输入所需的详细信息。

要启用或禁用 SQL IntelliSense,请选择工具 -->选项 --> 展开文本编辑器--> 展开Transact-SQL --> IntelliSense --> 选择启用 IntelliSense。

sqlserver的讲解及应用(SQLServer联接概述)(5)

您可以参考 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 命令列表。

sqlserver的讲解及应用(SQLServer联接概述)(6)


图片 2: Devart SQL Complete 通过键入 USE 语句自动填充 SQL 数据库列表。如下图所示,显示了在名为Nisag-PC的 SQL 实例中创建的数据库列表。

sqlserver的讲解及应用(SQLServer联接概述)(7)


图片 3: Devart SQL Complete 通过键入 SELECT 语句自动填充表列表。下面的屏幕截图显示Devart SQL Complete 提供了DemoDatabase 数据库中的表列表。您可以从列表中选择多个表,然后通过按 TAB 键将它们添加到查询编辑器中。

sqlserver的讲解及应用(SQLServer联接概述)(8)


图 4: Devart SQL Complete 通过键入SELECT * FROM填充表列表、列列表及其选定列的数据类型和选定表中的总行。如下图所示,我选择了tblStudent 表,Devart SQL complete 显示了列列表、它们的数据类型以及tblStudent 表的估计行数。

sqlserver的讲解及应用(SQLServer联接概述)(9)

图 5:当我们在 T-SQL 查询中使用 SQL 连接时,Devart SQL complete 会在INNER JOIN / LEFT JOIN / RIGHT JOIN关键字后显示匹配列的列表。正如您在下图中看到的,当我添加LEFT JOIN关键字并指定第二个表的名称时,Devart SQL Complete 填充了来自tblStudent tblSchool表的匹配列列表。

所述特征提高了编码速度,因为开发者不需要参考第二表的列。

sqlserver的讲解及应用(SQLServer联接概述)(10)


图 6: 当我们在 T-SQL 查询中使用 SQL 连接并添加WHERE 子句时,Devart SQL Complete 会填充两个表的列列表,这有助于选择适当的列。

正如您在下面的屏幕截图中看到的,当我添加WHERE 子句时,Devart SQL Complete 填充了tblStudent tblSchool 表的列列表。所述特征提高了编码速度,因为开发者不需要参考第二表的列。

sqlserver的讲解及应用(SQLServer联接概述)(11)


在我们的例子中,我们用 NULL 值填充记录,所以我没有在查询中使用 WHERE 子句。下面是最终查询:

USE demodatabase
go
SELECT * FROM tblSchool s LEFT JOIN tblStudent s1 ON s.School_Id=s1.School_ID


查询输出:

sqlserver的讲解及应用(SQLServer联接概述)(12)

上面的示例表明使用 Devart SQL Complete 查询编写变得更加容易。

概括

本文通过一个简单示例解释了 T-SQL 连接及其类型。本文还介绍了 SQL IntelliSense 和 Devart SQL Complete。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页