黑马程序员技术交流社区

标题: SQL语句左联接与内连接的区别在哪里? [打印本页]

作者: 陈凯    时间: 2013-3-7 10:03
标题: SQL语句左联接与内连接的区别在哪里?
SQL语句左联接与内连接的区别在哪里?
作者: 董华阳    时间: 2013-3-7 10:13
连接可分为以下几类:

内连接。(典型的连接运算,使用像 = 或 <> 之类的比较运算符)。包括相等连接和自然连接。
内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。

外连接。外连接可以是左向外连接、右向外连接或完整外部连接。
在FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:
LEFT JOIN 或 LEFT OUTER JOIN。
左向外连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外连接是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

FULL JOIN 或 FULL OUTER JOIN。
完整外部连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

交叉连接。交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接也称作笛卡尔积。

作者: 吕振    时间: 2013-3-7 13:37
内连接(INNER JOIN):在SELECT语句中用来从多个表中返回单个结果集。JOIN在一个共有列上链接表,并返回在那个列上匹配的记录。只有两个表之间有匹配的记录才会出现在结果集中。
左连接:了解JOIN左边的表中的所有记录,而不管他们在右边表中是否有匹配的记录。右连接相反。
建立任意数据库,并建立表:
create table t1(id int,name varchar(50),teacher int)
create table t2(id int,name varchar(50))
insert into t1 values(1,'aa',1)
insert into t1 values(2,'bb',2)
insert into t1 values(3,'cc',2)
insert into t1 values(4,'aa',3)
insert into t2 values(1,'张老师')
insert into t2 values(2,'王老师')
insert into t2 values(4,'冯老师')
1、分别使用左连接内连接得如下结果:
左连接:select * from t1 left join t2 on t1.teacher=t2.id

内连接:
select * from t1 inner join t2 on t1.teacher=t2.id
select * from t1 join t2 on t1.teacher=t2.id (默认为inner)






bf5ae83e3ec6467abfeec810a2efc697.png (3.1 KB, 下载次数: 48)

bf5ae83e3ec6467abfeec810a2efc697.png

12.png (2.52 KB, 下载次数: 45)

12.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2