sqlserver的讲解及应用(SQLServer联接概述)
每日分享最新,最流行的软件开发知识与最新行业趋势,希望大家能够一键三连,多多支持,跪求关注,点赞,留言。
在本文中,我们将学习 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。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com