内连接与外连接的区别
内连接与外连接的区别
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://hahalzb.blogbus.com/logs/18812385.html
(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的
列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结
果中列出被连接表中的所有列,包括其中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
Java代码
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的
列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选
择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
例,在选择列表中删除authors 和publishers 表中重复列(city和state):
Java代码
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二) 外连接
外连接,返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左
外连接或左连接))、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录;
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录;
例如1:
Java代码
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
a.username=b.username
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
例如2:
Java代码
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
(三) 交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到
结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查
询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下
列交叉连接检索到的记录数将等于6*8=48行。
例如:
Java代码
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
例如:
表a
id name
1 a
2 b
3 c
表b
id store
1 15
2 10
4 67
inner join :
select * from a inner join b on a.id=b.id
结果:(只显示id匹配的选项)
id name id store
1 a 1 15
2 b 2 10
内连接还有以下写法:
select * from a inner join b where a.id=b.id
select * from a,b where a.id=b.id(连接查询的另一种写法)
select * from a as e,b as r where e.id=r.id(使用as定义别名,当表名很长时有用)
select * from a e,b r where e.id=r.id(定义别名时可以省掉as)
外连接分左外连接和右外连接
左外连接:
select * from a left outer join b on a.id=b.id
或:
select * from a left join b on a.id=b.id
结果:(除了显示匹配记录,还显示a表中所有的记录)
id name id stroe
1 a 1 15
2 b 2 10
3 c \N \N
右外连接:
select * from a right outer join b on a.id=b.id
或:
select * from a right join b on a.id=b.id
结果:(除了显示匹配的记录,还显示右表中所有的记录)
id name id store
1 a 1 15
2 b 2 10
\N \N 4 67
分享到:
相关推荐
主要讲述了使用select进行内、外连接查询的内容
学习内连接和外连接的实例,可以很直观的看到他们的区别。
SQL优化--使用内连接(inner join)代替外连接(left join,right join)
对MSSQL中的内连接和外连接所得出的数据集不是很清楚的童鞋可以参考参考
通常在项目中对表的查询都是关联多张表,多表查询就涉及到sql的内连接、外连接和自连接查询。本篇文章将简单的介绍这些sql连接的使用,希望对大家有所帮助。
SQL 左外连接,右外连接,全连接,内连接 四种连接的差异
左外连接右外连接,内连接区别,oracle的开发中很需要的,大家看看吧
sql左外连接、右外连接、内连接、全外连接的区别
● 查询没有选修指定课程号的学生的学号、姓名、性别、出生日期和级别。课程号由局部变量提供。 declare @Cno char(6); set @Cno='a00002'; select sno as 学号,sname as 姓名,sex as 性别,birthday as 生日,enter_...
关于内连接,外连接(左右连接)等的总结关于内连接,外连接(左右连接)等的总结关于内连接,外连接(左右连接)等的总结
SQL 连接 JOIN 例解左连接,右连接,全连接,内连接,交叉连接,自连接
SQL 内连接,外连接:假设一堆男女在教堂,有夫妇有单身的,假设男为左表,女为右表......
内连接与外连接的精简写法,可用于sql和hql中,即使hql中两实体不存在实际上的主外键关系,也适用。
SQL 左外连接,右外连接,全连接,内连接 。联接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定联接条件。WHERE和HAVING子句也可以包含搜索条件,以进一步筛选联接条件所选的行。
Oracle+表连接方式(内连接-外连接-自连接)+详解
外连接,内连接, left join, right join, full join, cross join 有图有真相
内连接、外连接、左链接、右链接................