﻿<?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-和家人在一起--快乐-文章分类-SQL</title><link>http://www.blogjava.net/daipan/category/21002.html</link><description>有空常常回家看看</description><language>zh-cn</language><lastBuildDate>Wed, 11 Apr 2007 03:32:54 GMT</lastBuildDate><pubDate>Wed, 11 Apr 2007 03:32:54 GMT</pubDate><ttl>60</ttl><item><title>SQL(Datediff)</title><link>http://www.blogjava.net/daipan/articles/109668.html</link><dc:creator>飞翔的心</dc:creator><author>飞翔的心</author><pubDate>Tue, 10 Apr 2007 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/daipan/articles/109668.html</guid><wfw:comment>http://www.blogjava.net/daipan/comments/109668.html</wfw:comment><comments>http://www.blogjava.net/daipan/articles/109668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daipan/comments/commentRss/109668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daipan/services/trackbacks/109668.html</trackback:ping><description><![CDATA[<p>有一个库,里面的:</p>
<p>A 表 是 企业用户的基本信息:</p>
<p>SID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NAME<br>--------------<br>&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AAAA<br>&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BB<br>--------------</p>
<p>B 表 是上面 A 表里的企业交的数据,如下:<br>SID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATETIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOTES<br>------------------------------<br>&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1998-3-4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XXXX<br>&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2003-1-3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BBBB<br>&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2005-8-9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CCCC<br>&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2005-7-3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CCCC<br>------------------------------</p>
<p><br>请问:</p>
<p>1 : 我要找出 A 表里, 2005年7月未交数据的企业应如何找?</p>
<p>2 : 我要找 BB 这个企业最后递交的数据又如何?<br></p>
1. select * from tbA as a where not exists(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select * from tbB where SID=a.SID and Datediff(month,DATETIME,'2005-07-01')=0)<br>SELECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.*<br>FROM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE1 a INNER JOIN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE2 b ON a.SID = b.SID<br>WHERE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a.NAME = 'BB') AND (NOT EXISTS<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; (SELECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<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; FROM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE2<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; WHERE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SID = b.SID AND DATETIME &gt; b.DATETIME))
<img src ="http://www.blogjava.net/daipan/aggbug/109668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daipan/" target="_blank">飞翔的心</a> 2007-04-10 16:40 <a href="http://www.blogjava.net/daipan/articles/109668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL (case when)</title><link>http://www.blogjava.net/daipan/articles/109658.html</link><dc:creator>飞翔的心</dc:creator><author>飞翔的心</author><pubDate>Tue, 10 Apr 2007 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/daipan/articles/109658.html</guid><wfw:comment>http://www.blogjava.net/daipan/comments/109658.html</wfw:comment><comments>http://www.blogjava.net/daipan/articles/109658.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daipan/comments/commentRss/109658.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daipan/services/trackbacks/109658.html</trackback:ping><description><![CDATA[<p>我现在创建了一个表<br>字段有<br>1:序号<br>2:入库日期<br>3:状态<br>4:出货日期</p>
<p><br>我现在想在第4个字段进行判断,当"状态"字段的值为'out'的时候,出货日期为getdate<br>否则出货日期为空</p>
SELECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id, inDate, flg, CASE WHEN flg = 'out' THEN getdate() ELSE '' END
<img src ="http://www.blogjava.net/daipan/aggbug/109658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daipan/" target="_blank">飞翔的心</a> 2007-04-10 15:47 <a href="http://www.blogjava.net/daipan/articles/109658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL (Left Join学习)</title><link>http://www.blogjava.net/daipan/articles/109639.html</link><dc:creator>飞翔的心</dc:creator><author>飞翔的心</author><pubDate>Tue, 10 Apr 2007 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/daipan/articles/109639.html</guid><wfw:comment>http://www.blogjava.net/daipan/comments/109639.html</wfw:comment><comments>http://www.blogjava.net/daipan/articles/109639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daipan/comments/commentRss/109639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daipan/services/trackbacks/109639.html</trackback:ping><description><![CDATA[<p><em>user表:</em><br></p>
<div class=code>&nbsp;id&nbsp;&nbsp; | name<br>&nbsp;---------<br>&nbsp;1&nbsp;&nbsp; | libk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;2&nbsp;&nbsp; | zyfon<br>&nbsp;3&nbsp;&nbsp; | daodao</div>
<p><em>user_action表</em>:<br></p>
<div class=code>user_id&nbsp;|&nbsp; action<br>---------------<br>&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; jump<br>&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; &nbsp;|&nbsp;&nbsp;&nbsp; kick<br>&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jump<br>&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; &nbsp;|&nbsp;&nbsp;&nbsp; run<br>&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp; &nbsp;|&nbsp;&nbsp;&nbsp; swim</div>
<p><em>sql:</em><br>select id, name, action from user as u<br>left join user_action a on u.id = a.user_id</p>
<p><em>result:</em><br>&nbsp;&nbsp;&nbsp; id&nbsp; |&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; action<br>--------------------------------<br>&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; |&nbsp;&nbsp; libk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; jump&nbsp;&nbsp;&nbsp; ①<br>&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; |&nbsp;&nbsp; libk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; kick&nbsp;&nbsp;&nbsp;&nbsp; ②<br>&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; |&nbsp;&nbsp; libk&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;|&nbsp;&nbsp; jump&nbsp;&nbsp;&nbsp; ③<br>&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp; |&nbsp;&nbsp; zyfon &nbsp;&nbsp; |&nbsp;&nbsp; run&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ④<br>&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp; |&nbsp;&nbsp; daodao&nbsp;|&nbsp;&nbsp; null&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ⑤</p>
<h5>分析：</h5>
注意到user_action中还有一个user_id=4, action=swim的纪录，但是没有在结果中出现，<br>而user表中的id=3, name=daodao的用户在user_action中没有相应的纪录，但是却出现在了结果集中<br>因为现在是left join，所有的工作以left为准.<br>结果1，2，3，4都是既在左表又在右表的纪录，5是只在左表，不在右表的纪录<br><font color=#000099>
<h5>结论：</h5>
<font color=#000099>我们可以想象left join 是这样工作的<br>从左表读出一条，选出所有与on匹配的右表纪录(n条)进行连接， 形成n条纪录(包括重复的行，如：结果1和结果3)，<br>如果右边没有与on条件匹配的表，那连接的字段都是null.<br>然后继续读下一条。<br>
<h5>引申：</h5>
<font color=#000099>我们可以用右表没有on匹配则显示null的规律, 来找出所有在左表，不在右表的纪录， 注意用来判断的那列必须声明为not null的。<br></font>如：<br>sql:<br>&nbsp;&nbsp;&nbsp; select id, name, action from user as u<br>&nbsp;&nbsp;&nbsp; left join user_action a on u.id = a.user_id<br>&nbsp;&nbsp;&nbsp; where a.user_id is NULL&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; (注意:<strong>1.列值为null应该用is null 而不能用=NULL&nbsp; <br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>2.这里a.user_id 列必须声明为 NOT NULL 的</strong>)<br>result:<br>&nbsp;&nbsp;&nbsp; id&nbsp; |&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp; |&nbsp;&nbsp; action<br>&nbsp;&nbsp;&nbsp; --------------------------<br>&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp; |&nbsp;&nbsp; daodao&nbsp; |&nbsp;&nbsp; NULL</font></font>
<img src ="http://www.blogjava.net/daipan/aggbug/109639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daipan/" target="_blank">飞翔的心</a> 2007-04-10 14:56 <a href="http://www.blogjava.net/daipan/articles/109639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>nvl( ) ---- decode()用法</title><link>http://www.blogjava.net/daipan/articles/106376.html</link><dc:creator>飞翔的心</dc:creator><author>飞翔的心</author><pubDate>Mon, 26 Mar 2007 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/daipan/articles/106376.html</guid><wfw:comment>http://www.blogjava.net/daipan/comments/106376.html</wfw:comment><comments>http://www.blogjava.net/daipan/articles/106376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/daipan/comments/commentRss/106376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daipan/services/trackbacks/106376.html</trackback:ping><description><![CDATA[
		<font style="BACKGROUND-COLOR: #ffa500">1.nvl( ) 函数</font>
		<br />
		<strong>语法<br /><br /></strong>NVL(eExpression1, eExpression2)<br /><br /><strong>参数</strong><br />eExpression1, eExpression2<br /><br />如果 eExpression1 的计算结果为 null 值，则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值，则返回 eExpression1。eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2 的结果皆为 null 值，则 NVL( ) 返回 .NULL.。<br /><br /><font style="BACKGROUND-COLOR: #ffa500">2.<strong><u><font color="#0000ff">decode</font></u></strong>(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)</font><br /><br />    该函数的含义如下：<br /><br />IF 条件=值1 THEN<br />　　　　RETURN(翻译值1)<br />ELSIF 条件=值2 THEN<br />　　　　RETURN(翻译值2)<br />　　　　......<br />ELSIF 条件=值n THEN<br />　　　　RETURN(翻译值n)<br /><br />ELSE<br />　　　　RETURN(缺省值)<br />END IF<br /><br />    使用方法： <br /><br />    1、比较大小<br /><br />select <u><b><font color="#ff0000">decode</font></b></u>(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值<br />sign()函数根据某个值是0、正数还是负数，分别返回0、1、-1<br /><br />    例如：<br /><br />变量1=10，变量2=20<br />则sign(变量1-变量2)返回-1，<u><b><font color="#ff0000">decode</font></b></u>解码结果为“变量1”，达到了取较小值的目的。<img src ="http://www.blogjava.net/daipan/aggbug/106376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daipan/" target="_blank">飞翔的心</a> 2007-03-26 13:26 <a href="http://www.blogjava.net/daipan/articles/106376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>