A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈云帆 中级黑马   /  2012-7-27 19:37  /  1780 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

数据库中join的具体同法?

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
宋天琪 + 1
郑文 + 3

查看全部评分

3 个回复

倒序浏览
有以下几种用法(例子源于网络):
(1) cross join
参与select语句所有表的的所有行的笛卡尔乘积
例如:select au_lname ,title      from authors cross join   titiles

outer join 对参与join的两个表有主从之分,处理方式以主表的每条数据去match 从属表的列,合乎条件的数据是我们所要的答案,不合乎条件的也是我们要的答案,只不过哪些从属表选取的列将被添上null。

(2) left join
左边的为主表,右边为从属表
例如:select a.cust_id ,b.order_date,b.tot_ant
      from customer a left join sales b
      on (a.cust_id =b.cust_id and b.order_date>''1996/10/15'')

也可以写为
select a.cust_id,b.order_date,b.tot_ant
      from custom a
      left join (select * from sales where order_date>''1996/10/15'') b
     on a.cust_id =b.cust_id

(3) right join
左边的表为从属表,右边的表为主表

(4) self join
self join 常用在同一表内不同数据间对同一列的比较

select a.emp_no,a.emp_name,b.emp_no,b.emp_name,a.date_hired
     from employee a
     join employee b
     on (a.emp_no!=b.emp_no and a.date_hired=b.date_hired)
     order by a.date_hired

这样会重复数据,只要加上一句 and a.emp_name>b.emp_name

(5) full join
不仅列出符合条件的数据,两边未符合join条件的数据也会一并列出。哪些未符合join条件的数据如果在select列中无法得到对应的值则填上null
select a.cust_id,b.tot_amt
     from customer a full join sales b
     on a.cust_id=b.cust_id

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
join的用法inner join,left join,right join,full join,具体是什么我也记不太清,我举几个我用到过的
一般我们常用的查询语句都这样写:
select a.name,b.name
from a,b
where a.age = b.age
这样等同于
select a.name,b.name
from a inner join b on a.age= b.age
其他的具体用法你可以到w3c官网看看,非常详细 http://www.w3school.com.cn/sql/sql_join_inner.asp

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 黑马杨凯 于 2012-7-29 14:18 编辑

初学,现学现卖,呵呵~找了以前练习中的两个表:
表 T_Member

表 T_Interest


个人理解:
表连接
  inner join  
  就是我们平时写的 join 连接,执行join连接,会舍弃一些不能满足同时存在条件的null数据,如我们想输出多列,例如我想输出 “姓名” 和 “爱好”, 如果这个人的爱好代码为null,这个人的数据会被舍弃。
  
select  mb.Name,i.Interest
from T_Member mb
join T_Interest i on mb.InterestID=i.Id
查询结果:

  
  外部链接 left join   right join
  能够保留同时存在条件中的某项存在null的数据行,就像上例中的爱好代码为null的人也会输出
  
select  mb.Name,i.Interest
from T_Member mb
left join T_Interest i on mb.InterestID=i.Id
查询结果:


  完全连接 full  join
  除了返回满足你条件的结果外,还会把剩下的不满足的也显示,不满足的地方填null

select  mb.Name,i.Interest
from T_Member mb
full join T_Interest i on mb.InterestID=i.Id

查询结果:

  
4 交叉连接  cross join
    实现数学中的笛卡尔积,通过几个连接的小数据表,获得大量的数据,可用于建立数据库后的测试,一般不大用(据说)
select  mb.Name,i.Interest
from T_Member mb
cross join T_Interest i

这个结果是任意一个人和任意一个兴趣的组合

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马