﻿<?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-yjhmily-随笔分类-SQL</title><link>http://www.blogjava.net/yjhmily/category/18395.html</link><description>坚持走自己的路……
</description><language>zh-cn</language><lastBuildDate>Mon, 15 Mar 2010 08:58:48 GMT</lastBuildDate><pubDate>Mon, 15 Mar 2010 08:58:48 GMT</pubDate><ttl>60</ttl><item><title>老有人问我关于左连接、右连接的问题，小解析一下吧</title><link>http://www.blogjava.net/yjhmily/archive/2010/03/14/315335.html</link><dc:creator>kangxm</dc:creator><author>kangxm</author><pubDate>Sun, 14 Mar 2010 10:25:00 GMT</pubDate><guid>http://www.blogjava.net/yjhmily/archive/2010/03/14/315335.html</guid><wfw:comment>http://www.blogjava.net/yjhmily/comments/315335.html</wfw:comment><comments>http://www.blogjava.net/yjhmily/archive/2010/03/14/315335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yjhmily/comments/commentRss/315335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yjhmily/services/trackbacks/315335.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;假设我们现在有user和org两张表：<br />
1、user用户表 字段包含：id、name、orgId 其中orgId标示该用户所属的组织<br />
2、org组织表&nbsp;&nbsp; 字段包含：id、name<br />
两表之间的关系很简单，一个组织下会拥有多个用户，一个用户属于某个组织。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在解析之前先普及一下数据库空值(null)的概念：<br />
有很多时候我们都能碰到某表中某字段值为空的情况，空值不等同于字符串中的空格、空串<br />
也不等同于数字类型的0，所以，一般我们用IS NULL 关键字来检索有空值字段的记录。而不是用!=、&lt;&gt;这些判断符。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接下来，我们给示例库表中做上一些测试数据，如下图：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img height="160" alt="" src="http://www.blogjava.net/images/blogjava_net/yjhmily/user.JPG" width="260" border="0" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img height="130" alt="" src="http://www.blogjava.net/images/blogjava_net/yjhmily/org.JPG" width="189" border="0" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有了这些数据，咱们就可以进入正题啦：<br />
一、左连接、右连接<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #3366ff">A Left join（左连接）优先解出左表中所有的记录，包含右表中没有匹配到得记录。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;Right join（右连接）优先解出右表中所有的记录，包含左表中没有匹配到得记录。</span><br />
左右连接是相互对应的，所以在这里一并解释。<br />
罗嗦一句如何区分左表和右表：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">在JOIN的左边出现的表叫左表，在JOIN的右边出现的表叫右表</span><br />
具体体现在SQL语句上即：（以左连接为例）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;左连接语句：SELECT user.name,org.name FROM user <span style="color: #ff0000">LEFT JOIN</span> org ON &nbsp;user.orgId = org.id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;右链接语句：SELECT user.name,org.name FROM user <span style="color: #ff0000">RIGHT JOIN </span>org ON&nbsp; user.orgId = org.id<br />
显而易见，该SQL中，user为左表、org为右表<br />
下面我们来看看这两个语句分别执行后的效果：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img height="172" alt="" src="http://www.blogjava.net/images/blogjava_net/yjhmily/left.JPG" width="211" border="0" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<img height="167" alt="" src="http://www.blogjava.net/images/blogjava_net/yjhmily/right.JPG" width="216" border="0" />&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了更好的看出左右连接的效果，我们再来看看内连接查询出来的效果<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内连接：SELECT user.name,org.name FROM user JOIN org ON&nbsp; user.orgId = org.id<br />
内连接语句执行后的效果：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/images/blogjava_net/yjhmily/inner.JPG" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;很明显：<br />
<span style="color: #3366ff">内连接与左连接相比，检索结果集中漏掉了user表的user3数据<br />
内连接与右连接相比，检索结果集中漏掉了org表的org4数据<br />
</span><br />
<img src ="http://www.blogjava.net/yjhmily/aggbug/315335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yjhmily/" target="_blank">kangxm</a> 2010-03-14 18:25 <a href="http://www.blogjava.net/yjhmily/archive/2010/03/14/315335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>检索数据库表中的不重复记录</title><link>http://www.blogjava.net/yjhmily/archive/2006/12/15/87893.html</link><dc:creator>kangxm</dc:creator><author>kangxm</author><pubDate>Fri, 15 Dec 2006 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/yjhmily/archive/2006/12/15/87893.html</guid><wfw:comment>http://www.blogjava.net/yjhmily/comments/87893.html</wfw:comment><comments>http://www.blogjava.net/yjhmily/archive/2006/12/15/87893.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yjhmily/comments/commentRss/87893.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yjhmily/services/trackbacks/87893.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 相信很多人在查询数据库时都会碰到检索某表中不重复记录的时候,提到检索不重复记录,马上想到的肯定是Distinct或者Group By分组,<br>小弟在初次使用的时候碰到了一些麻烦,这里拿出来与大家分享,希望对更多的朋友有所帮助!&nbsp;&nbsp;<a href='http://www.blogjava.net/yjhmily/archive/2006/12/15/87893.html'>阅读全文</a><img src ="http://www.blogjava.net/yjhmily/aggbug/87893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yjhmily/" target="_blank">kangxm</a> 2006-12-15 11:24 <a href="http://www.blogjava.net/yjhmily/archive/2006/12/15/87893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>