`
awed
  • 浏览: 33958 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

join 使用详解方式 (转)

阅读更多
join 方式
(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
    有表
     id   ic  name  amount
      I    *        *
      c
      i
      c
      i
      i  
   要求结果为 
    ic  name  amount  ic   name  amount
    i                         c
    i                         c
    i
    i
  select aaa.*,bbb.*  from (select (select count(id) from aa as b where (b.id<a.id) and (ic=''i'')) as newid, *
        from aa a where ic=''i'') aaa full join
         (select (select count(id) from aa as b where b.id<a.id and ic=''c'') as newid,* from
             aa a where ic=''c'') bbb on aaa.newid=bbb.newid order by aaa.name 
 6.使用 HASH 和 MERGE 联接提示
   此示例在 authors、titleauthors 和 titles 表之间建立三表联接,以生成一个作者及其著作的列表。查询优化器使用 MERGE 联接将 authors 和 titleauthors (A x TA) 联接在一起。然后,将 authors 和 titleauthors MERGE 联接 (A x TA) 的结果与 titles 表进行 HASH 联结以生成 (A x TA) x T。
 重要  指定联接提示后,要执行 INNER JOIN 时 INNER 关键字不再为可选,而必须显式说明。
  USE pubs
  SELECT SUBSTRING((RTRIM(a.au_fname) + '' '' + LTRIM(a.au_lname)), 1, 25)
     AS Name, SUBSTRING(t.title, 1, 20) AS Title
     FROM authors a INNER MERGE JOIN titleauthor ta
      ON a.au_id = ta.au_id INNER HASH JOIN titles t
      ON t.title_id = ta.title_id
     ORDER BY au_lname ASC, au_fname ASC

  下面是结果集:

  Warning: The join order has been enforced because a local join hint is used.
  Name                      Title               
  ------------------------- --------------------
  Abraham Bennet            The Busy Executive''s
  Reginald Blotchet-Halls   Fifty Years in Bucki
  Cheryl Carson             But Is It User Frien
  Michel DeFrance           The Gourmet Microwav
  Innes del Castillo        Silicon Valley Gastr
  ...                    ...
  Johnson White             Prolonged Data Depri
  Akiko Yokomoto            Sushi, Anyone?      

  (25 row(s) affected)


分享到:
评论

相关推荐

    SQL中的left outer join,inner join,right outer join用法详解

    SQL中的left outer join,inner join,right outer join用法详解

    (Left join , Right Join, Inner Join)用法详解

    (Left join , Right Join, Inner Join)用法详解,对Left join , Right Join, Inner Join完全掌握,由浅入深,真正领悟。

    SQL中JOIN的使用详解

    详细说明JOIN的用法,包括LEFT JOIN、RIGHT JOIN、INNER JOIN、SELF JOIN、FULLJOIN

    深入理解mysql之left join 使用详解

    关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒 ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行。 如果 B 表中没有任何一行数据匹配 ON 的条件,将会额外生成一行所有列为 ...

    Mysql之innerjoin,leftjoin,rightjoin详解.pdf

    Mysql之innerjoin,leftjoin,rightjoin详解.pdf

    SHELL脚本join用法详解

    本文档描述了在linux操作系统下,shell脚本当中的join工具的使用

    SQL联合查询inner join、outer join和cross join的区别详解

    这三者的区别很多人都应该不是很清楚,包括我自己,下面我们一起来看看,如果你使用join连表,缺陷的情况下是inner join,另外,开发中使用的left join和right join属于outer join,而outer join还包括full join....

    SQL语句left join/right join/inner join 的用法比较

    SQL语句left join/right join/inner join 的用法比较 SQL语句left join/right join/inner join 的用法比较

    MySQL中的JOIN详解及sql实战

    用途:帮助读者了解MySQL中的JOIN操作,掌握LEFT JOIN、ON条件过滤和笛卡尔积的使用方法,从而在实际开发中灵活运用JOIN操作实现表关联查询。本文还提供了扩展内容,如排名等应用场景,帮助读者进一步理解JOIN操作的...

    关于SQL 中的inner join的使用

    关于SQL 中的inner join的使用,是DOC文档,希望对大家有用,关于SQL 中的inner join的使用,是DOC文档,希望对大家有用

    MongoDB中如何使用JOIN操作详解

    相信大家都知道mongodb是不支持join操作的,因此我们只能自己来实现...所以下面这篇文章主要给大家介绍了关于在MongoDB中如何使用JOIN操作的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来一起看看吧。

    laravel高级的Join语法详解以及使用Join多个条件

    今天小编就为大家分享一篇laravel高级的Join语法详解以及使用Join多个条件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    关于C#中Thread.Join()的一点理解

    是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解。  Thread.Join()在MSDN中的解释很模糊:Blocks the calling thread until a thread terminates  有两个主要问题: ...

    python join方法使用详解

    主要介绍了python join方法使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Fork Join框架机制详解.docx

    Java提供Fork/Join框架用于并行执行任务,核心的思想就是将一个大任务切分成多个小任务,然后汇总每个小任务的执行结果得到这个大任务的最终结果。 这种机制策略在分布式数据库中非常常见,数据分布在不同的数据库的...

Global site tag (gtag.js) - Google Analytics