﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava- -文章分类-数据库</title><link>http://www.blogjava.net/00001000/category/54330.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 12 May 2014 23:37:34 GMT</lastBuildDate><pubDate>Mon, 12 May 2014 23:37:34 GMT</pubDate><ttl>60</ttl><item><title>Oracle 联合查询</title><link>http://www.blogjava.net/00001000/articles/413488.html</link><dc:creator>00001000</dc:creator><author>00001000</author><pubDate>Sat, 10 May 2014 10:37:00 GMT</pubDate><guid>http://www.blogjava.net/00001000/articles/413488.html</guid><wfw:comment>http://www.blogjava.net/00001000/comments/413488.html</wfw:comment><comments>http://www.blogjava.net/00001000/articles/413488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/00001000/comments/commentRss/413488.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/00001000/services/trackbacks/413488.html</trackback:ping><description><![CDATA[联合查询种类：<br /><div>1、Cross Join(全连接)<br />2、Inner Join(内连接)<br />3、Left Join(左连接)<br />4、Right Join(右连接)<br /><div>5、Full Out Join(全外连接)</div><br />准备演示环境：<br /><br />班级表：CLASS<br /><img alt="" src="http://www.blogjava.net/images/blogjava_net/00001000/class0001.jpg" height="48" width="253" /><br /><br />5条记录，5个唯一的班级，其中班级5中没有学生。<br /><img alt="" src="http://www.blogjava.net/images/blogjava_net/00001000/class0002.jpg" height="94" width="201" /><br /><br />学生表：STUDENT<br /><img alt="" src="http://www.blogjava.net/images/blogjava_net/00001000/student0001.jpg" height="76" width="269" /><br /><br />6条记录，其中学生1与学生2是同班同学，学生6没有对应的班级。<br /><img alt="" src="http://www.blogjava.net/images/blogjava_net/00001000/student0003.jpg" height="142" width="429" /><br /><br />那么Oracle中怎么实现五类联合查询呢？它们是什么意思呢？<br /><br /><div>1、Cross Join(全连接)</div>代码语句：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;STUDENT&nbsp;STU&nbsp;,&nbsp;CLASS&nbsp;CLS <br /></span></div><br />执行结果：<br />返回 30 条记录 ，将 学生表的总条数(6 ROWS) 乘以 班级表的总条数(5 ROWS)（笛卡儿集）：<br /><img alt="" src="http://www.blogjava.net/images/blogjava_net/00001000/student_class_1001.jpg" height="198" width="598" /><br /><br /><div>2、Inner Join(内连接)</div>执行代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;STUDENT&nbsp;STU<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; ,&nbsp;CLASS&nbsp;CLS<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; </span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;STU.CLASS_ID&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;CLS.CLASS_ID</span></div><br />执行结果：<br /><div>返回 5 条记录 ，学生表的CLASS_ID匹配班级表的CLASS_ID，符合条件的查询出结果：</div><img alt="" src="http://www.blogjava.net/images/blogjava_net/00001000/student_class_0002.jpg" height="124" width="593" /><br /><br /><div>3、Left Join(左连接)注意：左连接&#8220;(+)&#8221;号在 右边</div><div>执行代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;STUDENT&nbsp;STU&nbsp;&nbsp;<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; ,&nbsp;CLASS&nbsp;CLS<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; "> STU.CLASS_ID&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;CLS.CLASS_ID(</span><span style="color: #808080; ">+</span><span style="color: #000000; ">)</span></div></div><div>执行结果：</div><div>返回 6 条记录 ，执行可分解为两步：<br />1、先将学生表的CLASS_ID匹配班级表的CLASS_ID查询出来（此例为5条记录）<br />2、再将左（Student）表中CLASS_ID 没有匹配 右（CLASS）表CLASS_ID的记录查询出来（此例为1条记录）<br /><div><img alt="" src="http://www.blogjava.net/images/blogjava_net/00001000/student_class_2002.jpg" height="140" width="597" /></div></div><div>4、Right Join(右连接)&nbsp; 注意：右连接&#8220;(+)&#8221;号在 左边</div><div>执行代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;STUDENT&nbsp;STU&nbsp;&nbsp;<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; ,&nbsp;CLASS&nbsp;CLS<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;STU.CLASS_ID(</span><span style="color: #808080; ">+</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;CLS.CLASS_ID</span></div></div><div>执行结果：<br /><div>返回 6 条记录 ，执行可分解为两步：<br />1、先将班级表的CLASS_ID匹配学生表的CLASS_ID查询出来（此例为5条记录）<br /><div>2、再将左（CLASS）表中CLASS_ID 没有匹配 右（STUDENT）表CLASS_ID的记录查询出来（此例为1条记录）</div></div></div><img alt="" src="http://www.blogjava.net/images/blogjava_net/00001000/student_class_3003.jpg" height="139" width="604" /><br /><br /><div>5、Full Out Join(全外连接)</div><div>执行代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;STUDENT&nbsp;STU&nbsp;<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">FULL</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">OUTER</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">JOIN</span><span style="color: #000000; ">&nbsp;CLASS&nbsp;CLS<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">ON</span><span style="color: #000000; ">&nbsp;STU.CLASS_ID&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;CLS.CLASS_ID</span></div></div><div>执行结果：<br /><div>返回 7 条记录 ，执行可分解为三步：</div></div><div>1、先将班级表的CLASS_ID匹配学生表的CLASS_ID查询出来（此例为5条记录）</div><div>2、再将左（Student）表中CLASS_ID 没有匹配 右（CLASS）表CLASS_ID的记录查询出来（此例为1条记录）</div><div>3、再将左（CLASS）表中CLASS_ID 没有匹配 右（STUDENT）表CLASS_ID的记录查询出来（此例为1条记录）</div><img alt="" src="http://www.blogjava.net/images/blogjava_net/00001000/student_class_4004.jpg" height="154" width="595" /><br /></div><img src ="http://www.blogjava.net/00001000/aggbug/413488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/00001000/" target="_blank">00001000</a> 2014-05-10 18:37 <a href="http://www.blogjava.net/00001000/articles/413488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>