SQL Server之连接

在sql server中,我们经常能用到连接,今天总结一下连接的基础知识。
连接的分类:

  • 交叉连接CROSS JOIN
  • 内连接INNER JOIN
  • 外连接{左外连接LEFT [OUTER] JOIN ;右外连接RIGHT [OUTER] JOIN;全外连接full [outer] join}
  • 自连接

以下通过例子来了解各个连接的异同点:

有两张表Teacher表和Course表:

交叉连接:

1.如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;

select * from Course cross join Teacher

结果为:

由此结果可知,它的结果与 SELECT * FROM Course,Teacher 的结果相同。

2.如果有WHERE子句的话,往往会先生成两个表行数乘积的数据表然后才根据WHERE条件从中选择。

1. select * from Course,Teacher where Course.T#=Teacher.T#2. select * from Course cross join Teacher where Course.T#=Teacher.T#  (注:cross join后加条件只能用where,不能用on)3. select * from Course inner join Teacher on Course.T#=Teacher.T#

结果为:

一般情况下,在效率上,Where可能具有和Inner join一样的效率,但是,在多表连接时,我们并不推荐使用where语句。
所以如果可以选择,我们最好使用语句3,有时使用Join语句可以帮助检查语句中的无效或者误写的关联条件。

内连接

内连接表示两边表同时符合条件的组合,就相当于普通的CROSS JOIN,只是格式不一样,
INNER JOIN在后面有一个ON子句(相当于WHERE)的搜索条件,用于过滤返回的行。
内连接没有笛卡尔积那么复杂要先生成行数乘积的数据表,所以内连接的效率要高于笛卡尔积的交叉连接。

外连接

指定条件的内连接,仅仅返回符合连接条件的条目。
外连接则不同,返回的结果不仅包含符合连接条件的行,而且包括左表(左外连接时), 右表(右连接时)或者两边连接(全外连接时)的所有数据行。
1)左外连接LEFT [OUTER] JOIN 
显示符合条件的数据行,同时显示左边数据表不符合条件的数据行,右边没有对应的条目显示NULL。

select * from Course left outer join Teacher on Course.T#=Teacher.T#

结果为:

2)右外连接RIGHT [OUTER] JOIN
显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示NULL。

select * from Course right outer join Teacher on Course.T#=Teacher.T#

结果为:

3)全外连接full [outer] join

显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL,即显示左连接、右连接和内连接的并集。

select * from Course full outer join Teacher on Course.T#=Teacher.T#

结果为:

自连接

其实,在Sql Server中,我们还经常用到一种连接——自连接。
通过以下的例子,来了解自连接:
表树形结构表tb_TestTreeView

解决问题: 树形层次结构显示
/* 
 这是一个地区表,里面存放了地区名及其所属上级地区,假设现在需要查询出各地区及其所属上级地区。
*/

自连接的方法1:

select [Name] as ‘地区名‘,  (select [Name] from tb_TestTreeView as a    where a.ID = b.Parent ) as ‘上级地区名‘from tb_TestTreeView as b

自连接的方法2:

select a.[Name] as ‘地区名‘,       b.[Name] as ‘上级地区名‘from tb_TestTreeView as aleft join tb_TestTreeView as b     on a.Parent = b.ID

结果为:

自连接三级(左联接):

select a.[Name] as ‘地区名‘,       b.[Name] as ‘上级地区名‘,       c.[Name] as ‘上上级地区名‘from tb_TestTreeView as aleft join tb_TestTreeView as b     on a.Parent = b.ID left join tb_TestTreeView as c     on b.parent=c.id

结果为:

自连接三级(内联接):

select a.[Name] as ‘地区名‘,       b.[Name] as ‘上级地区名‘,       c.[Name] as ‘上上级地区名‘from tb_TestTreeView as ainner join tb_TestTreeView as b     on a.Parent = b.ID inner join tb_TestTreeView as c     on b.parent=c.id

结果为:

自连接四级(左链接):

select a.[Name] as ‘地区名‘,       b.[Name] as ‘上级地区名‘,       c.[Name] as ‘上上级地区名‘,       d.[Name] as ‘上上上级地区名‘from tb_TestTreeView as aleft join tb_TestTreeView as b     on a.Parent = b.ID left join tb_TestTreeView as c     on b.parent=c.idleft join tb_TestTreeView as d     on c.parent=d.id

结果为:

自连接四级(内链接):

select a.[Name] as ‘地区名‘,       b.[Name] as ‘上级地区名‘,       c.[Name] as ‘上上级地区名‘,       d.[Name] as ‘上上上级地区名‘from tb_TestTreeView as ainner join tb_TestTreeView as b     on a.Parent = b.IDinner join tb_TestTreeView as c     on b.Parent = c.IDinner join tb_TestTreeView as d     on c.Parent = d.ID

结果为:

时间: 2024-09-30 23:52:45

SQL Server之连接的相关文章

与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。

今天同学请教我数据库为什么打不开了,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆数据库?提示以下错误: "在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)": 他最近刚刚装过了

sql server 无法连接到 (local) 或者. 等解决方案

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (Microsoft SQL Server,错误: 2) 解决方案: win + R 打开运行窗口,输入  services.msc  ,打开服务窗口 或者打开控制面板 -> 管理工具 -> 服务 在这个选项上右击,

出现“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。”这样的错误!

1.基本现象:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. 2. 可能出现的情况,拷贝了别人的项目,或者在网上找的别人的项目运行时附加到自己的数据库上,特别是在有版本差异的时候进行附加的时候,(比如:用SQL2005建的数据库,你附加在SQL2008的下面的时候)你需要修改项目中Web.Config文件中的数据库连接字符串,这时候你就需要注意了,根据不同版本的数据库,它的

无法打开SQL Server的连接

   机房收费系统重构版的登陆敲了好几天了,总算把登陆窗体敲完了,代码调试的差不多了,问题就处在数据库了.    SQL Server配置管理里的SQL  Server服务都启动了,但是还是报这个错误:在与 SQL Server建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接.(provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接

在与SQL Server建立连接时出现于网络相关的或特定于实例的错误

客户遇到一个问题,用“服务器名\实例名”远程连接另外一台命名实例的时候连接失败,报“在与SQL Server建立连接时出现于网络相关的或特定于实例的错误,未找到或无法访问服务器.请验证实例名称是否正确并且SQL Server已配置允许远程访问连接.(provider:SQL Network Interfaces,error:26-定位指定的服务器/实例时出错)”. 首先,尝试用ip和端口号进行连接,发现可以连接上,说明实例运行正常,并不是因为实例未开启导致无法连接,如果此连接失败,则需要检查实例

C#与SQL Server建立连接出错

VS版本2010 SQL版本2008 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接) 在SQL Server Management Studio可以正常登录,但在C#中就不能正常的通过连接字符串连接SQL Server. 需要检查连接字符串中

解决方案—SQL Server 远程连接失败

机房收费系统异地发布的时候,需要保证数据库能够远程连接,但连接的时候通常会报错: 要解决这个问题,首先需要检查SqlServer 的几项设置.(这些设置一般都是系统默认项,不过最好看一下) (一)检查SQL Server是否允许远程链接.以SqlServer 身份验证方式登陆.登录账户sa (二)打开配置管理器,检查微软SQL服务器(MSSQLServer)的TCP/IP协议是否开启. 确保上面设置正确后,进行最后的SQL服务器防火墙设置,(问题大多出在这里) 一.可以直接关闭防火墙,但是这样不

SQL Server远程连接设置

(一)启用SQL Server身份验证模式 安装完SQL Server 2008 R2后,以Windows身份验证方式登录 右键点击服务器节点,选择[属性],选择[安全性]页,单选[SQL Server和Windows身份验证模式] (二)启用用户sa 右键点击[安全性]->[登录名]->[sa],选择[属性],选择[状态]页,在[登录]单选[启用],在[是否允许连接到数据库引擎]单选[授予] 选择[常规]页,设置密码 (三)设置TCP/IP协议的IP地址和端口 打开SQL Server配置管

SQL Server 2008连接字符串写法大全

SQL Server 2008连接字符串写法大全 一..NET Framework Data Provider for SQL Server 类型:.NET Framework类库使用:System.Data.SqlClient.SqlConnection厂商:Microsoft 标准安全连接 Data Source = myServerAddress;Initial Catalog = myDataBase;User Id = myUsername;Password = myPassword;

SQL2008安装时,“provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (.Net SqlClient Data Provider)” 错误的解决方案

错误提示: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (.Net SqlClient Data Provider) 解决方案: 解决方法:开始->所有程序->Ms Sql Server->配置工具->sql server外围应用配置器->服