SQL Server内连接和外连接的区别

数据库 SQL Server
连接查询是SQL Server中的重要查询方式,下文将对内连接和外连接这两种连接查询进行比较,希望可以让您对这两种连接查询方式有更深的了解。

SQL Server内连接和外连接的区别在哪里呢?这是很多人都提到过的问题,下面就为您分析SQL Server内连接和外连接的具体区别,供您参考。

假设一个数据库中有两张表,一张是学生表StudentInfo,一张是班级表ClassInfo,两张表之间用ClassId字段进行关联。

如果用SQL Server内连接,正常的写法是这样的:

Select StudentInfo.*,ClassInfo.* from StudentInfo join ClassInfo on StudentInfo.ClassId=ClassInfo.ClassId

用这种写法不会出现笛卡尔积,但是内连接是允许省略连接条件的,也就是可以省略掉on后面的内容,所以如果写成这样:

Select StudentInfo.*,ClassInfo.* from StudentInfo,ClassInfo

也是可以通过编译的,但是这样一来就产生了一个笛卡尔积(关于笛卡尔积的内容见文章最后注解)。

但是因为怕产生笛卡尔积而拒绝使用内链接是不正确的,只要不省略掉连接条件,是不会产生笛卡尔积的。

具体采用内连接还是外连接要看具体问题的需要。内连接的特性是只显示符合连接条件的记录,以刚才的语句为例,查询结果只显示学生表和班级表中ClassId相等的记录。举例来说,如果有条学生记录的ClassId字段为空,那么用内链接将不会显示这条学生记录,因为在班级表里面是找不到对应的ClassId的。

而外连接就不一样,以左外连接为例(右外连接类似),它除了显示符合连接条件的记录以外,还会显示所有左表中的记录(右外连接就是所有右表中的记录)。还是以刚才的例子说明,如果学生表中有条学生记录的ClassId字段为空,用学生表左外连接班级表,那么是会显示这条学生记录的。

所以如果要求只显示已有分班的学生记录,那么就应该用内连接查询;如果要求查询所有学生记录,那么就应该采用外连接查询。

笛卡尔积:
假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。
 

 

 

【编辑推荐】

SQL Server添加列及删除列

SQL Server存储过程的单步调试

sql server系统表说明

SQL Server系统表的应用

Sql Server全文索引的迁移

责任编辑:段燃 来源: 互联网
相关推荐

2010-11-08 15:47:01

SQL Server外

2015-08-21 13:50:49

Oracle连接

2010-11-04 15:56:13

DB2内连接查询

2010-09-17 17:23:45

SQL外连接

2010-09-17 16:17:13

SQL内连接

2009-07-22 10:53:42

MySQL左连接

2010-11-08 16:56:52

SQL Server绑

2010-08-26 11:48:30

DB2外连接交叉连接

2010-09-26 14:12:35

SQL内连接

2010-11-08 17:01:53

SQL Server绑

2010-11-10 10:09:40

2010-11-08 14:40:46

SQL Server连

2010-11-08 15:21:17

SQL Server连

2010-10-20 17:37:23

SQL Server连

2023-08-02 10:58:18

SP_WHOSQL Server

2010-10-19 17:28:08

SQL SERVER外

2023-10-08 07:37:44

SQL连接

2009-08-24 15:41:50

C#连接SQL Ser

2024-06-06 09:12:40

数据库SQLServer

2010-06-17 15:24:51

SQL SERVER
点赞
收藏

51CTO技术栈公众号