inner join 是JOIN的一种,成为内联结 left join ,right join 是外联结select * from a inner join b on a.id = b.id 等同于 select * from a ,b where a.id = b.id
还有 left out join = left join right out join = right join 对吗?
内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。外联接。外联接可以是左向外联接、右向外联接或完整外部联接。 在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:LEFT JOIN 或 LEFT OUTER JOIN。 左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。RIGHT JOIN 或 RIGHT OUTER JOIN。 右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。FULL JOIN 或 FULL OUTER JOIN。 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。交叉联接。 交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
left out join = left join right out join = right join对
SQL中可以直接写a join b on 它的结果和a inner join b on相同
对的! 还有FULL JOIN 或 FULL OUTER JOIN。
join 实际上就是 inner join
declare @a table(a int,b int) declare @b table(a int,b int) insert @a values(1,1) insert @a values(2,2) insert @b values(1,1) insert @b values(3,3)--左: select * from @a Aa left join @b Bb on Aa.a=Bb.a --右: select * from @a Aa right join @b Bb on Aa.a=Bb.a --内 select * from @a Aa join @b Bb on Aa.a=Bb.a --外: select * from @a Aa full join @b Bb on Aa.a=Bb.a --完全 select * from @a,@b cross join 是笛卡儿乘积 就是一张表的行数乘以另一张表的行数 left join 第一张表的连接列在第二张表中没有匹配是,第二张表中的值返回null right join 第二张表的连接列在第一张表中没有匹配是,第一张表中的值返回null full join 返回两张表中的行 left join+right join inner join 只返回两张表连接列的匹配项
join與inner join都是內連接 沒有區別
join与inner join一样都是内联
问个问题: select * from a inner join b on a.id = b.id 执行结果和 select * from a ,b where a.id = b.id 相同, 但哪个效率更高呢?
left join ,right join 是外联结select * from a inner join b on a.id = b.id
等同于
select * from a ,b where a.id = b.id
left out join = left join
right out join = right join
对吗?
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。外联接。外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:LEFT JOIN 或 LEFT OUTER JOIN。
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。FULL JOIN 或 FULL OUTER JOIN。
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。交叉联接。
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
right out join = right join对
还有FULL JOIN 或 FULL OUTER JOIN。
declare @a table(a int,b int)
declare @b table(a int,b int)
insert @a values(1,1)
insert @a values(2,2)
insert @b values(1,1)
insert @b values(3,3)--左:
select * from @a Aa left join @b Bb on Aa.a=Bb.a
--右:
select * from @a Aa right join @b Bb on Aa.a=Bb.a
--内
select * from @a Aa join @b Bb on Aa.a=Bb.a
--外:
select * from @a Aa full join @b Bb on Aa.a=Bb.a
--完全
select * from @a,@b
cross join 是笛卡儿乘积 就是一张表的行数乘以另一张表的行数
left join 第一张表的连接列在第二张表中没有匹配是,第二张表中的值返回null
right join 第二张表的连接列在第一张表中没有匹配是,第一张表中的值返回null
full join 返回两张表中的行 left join+right join
inner join 只返回两张表连接列的匹配项
沒有區別
select * from a inner join b on a.id = b.id
执行结果和
select * from a ,b where a.id = b.id
相同,
但哪个效率更高呢?
你用:先是预计的执行计划(CTRL+L)查看
效果是一样的
所用的资源都是一样的