`
liudingfeng
  • 浏览: 23085 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

内连接和外连接

阅读更多
内连接与外连接的区别
内连接与外连接的区别
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics