SQL server中内连接与外连接的区别、表达

  • 前提
  • 1. 内连接
  • 1. 等值连接:
  • 2. 自然连接
  • 3. 自身连接
  • 2. 外连接
  • 2.1.左外连接:
  • 2.2 右外连接:
  • 2.3 全外连接:
  • 3. 内、外连接的区别
  • 待续


前提

下文举例所使用的表如下:

  1. SC表:
  2. sql server发送TCP_sql

  3. student表:
  4. sql server发送TCP_sql_02

1. 内连接

1. 等值连接:

结果表将包含两个表的所有属性,包括重复列

写法1:

select * 
from  SC  inner JOIN  STUDENT  
on STUDENT.sno=SC.sno;

结果如下所示:

sql server发送TCP_sql_03


图一

写法2:

select * 
from  SC ,STUDENT
where  STUDENT.sno=SC.sno;

运行结果如上图一所示一样,虽然没加 join on

2. 自然连接

结果表将包含两个表的所有属性,但去掉重复的部分

过程:
select 中专门指定 重复的列名 sno为 “ SC.sno ”,不写另一个表中sno主键,再写出两个表中其他不重复的列名,完成自然连接

例1:

select  SC.sno ,cno,grade,sname,ssex,sage,sdept
from SC,STUDENT
where  SC.sno=STUDENT.sno

结果如下:

sql server发送TCP_sql_04


图二

3. 自身连接

相当于将自己的表再复制一份出来,进行连接

例2:

select  SC.sno ,cno,grade,sname,ssex,sage,sdept
from  SC 
inner  JOIN  STUDENT   --本来用 natural join  on ,但这里用natural join语法错误
on STUDENT.sno=SC.sno;

结果如上图二所示一样

-- 查询每门课的间接选修课
select first.cno,second.cpon

from course first,course second

where first.cpon=second.cno;

2. 外连接

2.1.左外连接:

左外连接结果表中出来包括满足连接条件的行,还好包括左表的所有行

例:

select *
from student LEFT OUTER JOIN course
on student.sno=course.sno;

2.2 右外连接:

右外连接结果表中出来包括满足连接条件的行,还包括右表的所有行

例:

select *
from student  right outer join  course
on student.sno=course.sno;

2.3 全外连接:

全外连接结果表中出来包括满足连接条件的行,还好包括两个表的所有行
例:

select *
from student  FULL OUTER JOIN course
on student.sno=course.sno;

3. 内、外连接的区别

首先,内连接和外连接都是对表的连接操作

  1. 内连接:连接结果仅包含符合连接条件的行,其中至少一个属性是共同的;注意区分在嵌套查询时使用的any以及all的区别;
  2. 外连接:连接结果不仅包含符合连接条件的行,也包含自身不符合条件的行;外连接不需要区分,左表和右表都不受限制,所有记录都显示,两个表不足的地方可用null进行填充。

待续

 
 
—————————————————————
以上就是今日博客的全部内容了
创作不易,若对您有帮助,可否点赞、关注一二呢,感谢支持.