﻿<?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-&lt;h1&gt;编程之道&lt;/h1&gt;-随笔分类-数据库</title><link>http://www.blogjava.net/yuanhuaming/category/3783.html</link><description>无论是批评的，赞扬的，指着的都请EMAIL给我，你的建议将是我前进的动力!   &lt;A href=mailto:yuanhuaming@56.com &gt;联系我&lt;/A&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 07:42:08 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 07:42:08 GMT</pubDate><ttl>60</ttl><item><title>关于物理锁和逻辑锁</title><link>http://www.blogjava.net/yuanhuaming/archive/2006/07/19/58950.html</link><dc:creator>疯流成性</dc:creator><author>疯流成性</author><pubDate>Wed, 19 Jul 2006 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/yuanhuaming/archive/2006/07/19/58950.html</guid><wfw:comment>http://www.blogjava.net/yuanhuaming/comments/58950.html</wfw:comment><comments>http://www.blogjava.net/yuanhuaming/archive/2006/07/19/58950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuanhuaming/comments/commentRss/58950.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuanhuaming/services/trackbacks/58950.html</trackback:ping><description><![CDATA[
		<p>1.通过一个字段区别的就叫逻辑锁了,在我作的工程中没有用到过.所以没有什么经验.<br />2.物理锁.<br /><br />现象:多人对数据库进行物理操作的时候,如果不锁表,那么A和B检索出来的数据是一样的,但是A先更新了数据,这时候B就是脏数据,点更新会把A的内容更新掉.<br /><br />解决方案:<br />在检索数据的时候同时把你要操作的纪录或者表锁了.(锁纪录比较好点)<br />oracle提供了在检索的时候就锁表的功能.就是在SQL文后面加上:FOR UPDATE NOWAIT SKIP LOCKED.<br /><br />SKIP LOCKED 加上去的话就是当检索到的这条纪录被锁的话,就不等待直接跳过.<br />''如果锁了<br />if LockedRecord() = true then<br />      msgbox "locked"<br />endif<br /><br /></p>
<img src ="http://www.blogjava.net/yuanhuaming/aggbug/58950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuanhuaming/" target="_blank">疯流成性</a> 2006-07-19 11:33 <a href="http://www.blogjava.net/yuanhuaming/archive/2006/07/19/58950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于SQL的子查询</title><link>http://www.blogjava.net/yuanhuaming/archive/2005/10/10/15180.html</link><dc:creator>疯流成性</dc:creator><author>疯流成性</author><pubDate>Mon, 10 Oct 2005 14:48:00 GMT</pubDate><guid>http://www.blogjava.net/yuanhuaming/archive/2005/10/10/15180.html</guid><wfw:comment>http://www.blogjava.net/yuanhuaming/comments/15180.html</wfw:comment><comments>http://www.blogjava.net/yuanhuaming/archive/2005/10/10/15180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuanhuaming/comments/commentRss/15180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuanhuaming/services/trackbacks/15180.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天组长要我们写SQL语句，我一看.MD大概要牵套5张表，条件还N复杂。而且每个表有几十W数据要考虑性能。说实话我拿着式样书还是不知道从何下手。我发觉自己总是碰到了问题才去解决，而不是尽量去避免问题（组长昨天就通知我们回去看一下SQL语法，我当时就没放在心里Y_Y）。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PS:本来觉得疯流成性这个名字不雅，不过最近越来越发觉这个名字有性格，所以还是改回来了。 
<HR>
1。什么是子查询？<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将一个查询包含到另一个查询中。<BR>2。工作原理？<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;子查询是牵套在另一个select语句中的select语句。内部select语句返回用作于外部select语句的条件的列。首先从最内部的select开始执行。<BR><BR>3。在大多数查询中，子查询并不引用父查询。因此子查询中的值保持不变。例如：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">MSSQL<BR></SPAN><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">通过IN&nbsp;</SPAN><SPAN style="COLOR: #808080">OR</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">NOT</SPAN><SPAN style="COLOR: #000000">&nbsp;IN引入的子查询结果<BR></SPAN><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">是一列零值或更多值<BR></SPAN><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">把（titles）子查询里结果作为<BR></SPAN><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">(publicshers)父查询的条件进行查询<BR></SPAN><SPAN style="COLOR: #0000ff">USE</SPAN><SPAN style="COLOR: #000000">&nbsp;PUBS<BR></SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;PUB_NAME&nbsp;TITLE<BR></SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;PUBLICSHERS<BR></SPAN><SPAN style="COLOR: #0000ff">WHERE</SPAN><SPAN style="COLOR: #000000">&nbsp;PUB_ID&nbsp;</SPAN><SPAN style="COLOR: #808080">IN</SPAN><SPAN style="COLOR: #000000">(<BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;PUB_ID&nbsp;</SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;TITLES<BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">WHERE</SPAN><SPAN style="COLOR: #000000">&nbsp;TYPE&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">BUSSINESS</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">)<BR></SPAN></DIV><BR>如果子查询引用了父查询，就需要为父查询中的每次迭代重新计算子查询的值。<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">子查询中用到了父查询的值<BR></SPAN><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">在有大量数据的时候尽量避免使用此类查询<BR></SPAN><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">它查询数据可是成指数增长的<BR></SPAN><SPAN style="COLOR: #0000ff">USE</SPAN><SPAN style="COLOR: #000000">&nbsp;PUBS<BR></SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;A.CITY&nbsp;</SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;SUPPLIERS&nbsp;A<BR></SPAN><SPAN style="COLOR: #0000ff">WHERE</SPAN><SPAN style="COLOR: #000000">&nbsp;A.SUPPLIERID&nbsp;</SPAN><SPAN style="COLOR: #808080">IN</SPAN><SPAN style="COLOR: #000000">&nbsp;(<BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;B.SUPPLIERID&nbsp;</SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;PRODUCTS&nbsp;B&nbsp;<BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">WHERE</SPAN><SPAN style="COLOR: #000000">&nbsp;A.SUPPLIERID&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;B.SUPPLIERID)<BR></SPAN></DIV><BR>4。我要说一下联接和子查询的区别<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;联接与子查询处理类似问题不同之处在于，联接可以在结果集中显示多个表的列。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 右联接就是查询包含了右边表的全部记录，即使左边表中没有匹配的值。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 左联和右联正好相反<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">内联接<BR></SPAN><SPAN style="COLOR: #0000ff">USE</SPAN><SPAN style="COLOR: #000000">&nbsp;PUBS<BR></SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;A.PUB_NAME,&nbsp;A.TITLE<BR></SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;PUBLISHERS&nbsp;A&nbsp;</SPAN><SPAN style="COLOR: #0000ff">INNER</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">JOIN</SPAN><SPAN style="COLOR: #000000">&nbsp;TITLES&nbsp;B<BR></SPAN><SPAN style="COLOR: #0000ff">ON</SPAN><SPAN style="COLOR: #000000">&nbsp;A.PUB_ID&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;B.PUB_ID&nbsp;<BR></SPAN><SPAN style="COLOR: #808080">AND</SPAN><SPAN style="COLOR: #000000">&nbsp;TYPE&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">BUSSINESS</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">)</SPAN></DIV><BR>5。关于使用EXISTS AND NOT EXISTS的子查询<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用EXISTS引入一个子查询，就相当于进行一次存在的测试，外部查询的WHERE子句测试子查询<BR>返回的行是否存在。子查询不产生任何结果；它只返回TRUE或FALSE值。<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">查找存在商业书籍的出版商的名字<BR></SPAN><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">和内联对比下有什么不同<BR></SPAN><SPAN style="COLOR: #0000ff">USE</SPAN><SPAN style="COLOR: #000000">&nbsp;PUBS<BR></SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;A.PUB_NAME<BR></SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;PUBLISHERS&nbsp;A<BR></SPAN><SPAN style="COLOR: #0000ff">WHERE</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">EXISTS</SPAN><SPAN style="COLOR: #000000">&nbsp;(<BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">*</SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;TITLES<BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">WHERE</SPAN><SPAN style="COLOR: #000000">&nbsp;PUB_ID&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;A.PUB_ID<BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #808080">AND</SPAN><SPAN style="COLOR: #000000">&nbsp;TYPE&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">BUSSINESS</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">)<BR><BR></SPAN><SPAN style="COLOR: #808080">//</SPAN><SPAN style="COLOR: #000000">子查询,再次对比下<BR></SPAN><SPAN style="COLOR: #0000ff">USE</SPAN><SPAN style="COLOR: #000000">&nbsp;PUBS<BR></SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;PUB_NAME<BR></SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;PUBLISHERS<BR></SPAN><SPAN style="COLOR: #0000ff">WHERE</SPAN><SPAN style="COLOR: #000000">&nbsp;PUB_ID&nbsp;</SPAN><SPAN style="COLOR: #808080">IN</SPAN><SPAN style="COLOR: #000000">&nbsp;(<BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;PUB_ID&nbsp;</SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;TITLES<BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">WHERE</SPAN><SPAN style="COLOR: #000000">&nbsp;TYPE&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">BUSSINESS</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">)</SPAN></DIV><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过测试我猜想EXISTS关键字它的工作原理是：遍历所有的记录，每遍历一条记录，子查询就判断是否存在，存在的话满足条件显示这条记录，然后一直找到最后条记录。（如果有不对的地方或者需要改进的地方，请大家要告诉我啊）<BR><BR><BR><BR>今天就到这里把，象我这么牛的身体也经不起经常熬夜+_+!。<BR><BR><BR><BR><BR><BR><BR><img src ="http://www.blogjava.net/yuanhuaming/aggbug/15180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuanhuaming/" target="_blank">疯流成性</a> 2005-10-10 22:48 <a href="http://www.blogjava.net/yuanhuaming/archive/2005/10/10/15180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>