龙空技术网

SQL Server 联接概述

老墨说科技 727

前言:

当前姐妹们对“sql server 连接”大致比较看重,朋友们都想要学习一些“sql server 连接”的相关内容。那么小编在网上搜集了一些有关“sql server 连接””的相关知识,希望咱们能喜欢,朋友们一起来学习一下吧!


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

在本文中,我们将学习 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 提供以下好处:

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

要启用或禁用 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。

标签: #sql server 连接 #sql2008查询编辑器功能