被关è”端ä¸å¿…也ä¸èƒ½æ˜q°ç‰©ç†æ˜ ž®„:(x¨¬)åªéœ€è¦ä¸€ä¸ªç®€å•çš„mappedBy傿•°åQŒè¯¥å‚数包å«äº?ji¨£n)主体端的属性ååQŒè¿™æ ·å°±¾l‘定äº?ji¨£n)åŒæ–¹çš„关系ã€?/div>
å’Œå…¶å®ƒè®¸å¤šæ‰¹æ³¨ä¸€æ øP¼Œåœ¨å¤šå¯¹å¤šå…Œ™”ä¸å¾ˆå¤šå€¼æ˜¯è‡ªåŠ¨ç”ŸæˆåQŒå…šåŒå‘多对多关è”䏿²¡æœ‰å®šä¹‰ä»ÖM½•ç‰©ç†æ˜ å°„æ—Óž¼ŒHibernateæ ÒŽ(gu¨©)®ä»¥ä¸‹è§„则生æˆç›¸åº”çš„å€û|¼Œå…Œ™”表ååQšä¸»è¡¨è¡¨å?下划¾U?从表表ååQŒå…³è”到主表的外键ååQšä¸»è¡¨å+下划¾U?主表ä¸çš„主键列ååQŒå…³è”到从表的外键ååQšä¸»è¡¨ä¸ç”¨äºŽå…Œ™”的属性å+下划¾U?从表的主键列å,以上规则对于åŒå‘一对多兌™”åŒæ ·ä¸€æ —÷€?/div>
以上是整ç†çš„一点简å•çš„å‡ ç§æ˜ å°„åQŒå¯å‚考EJB3.pdfä¸P111——P131åQŒhibernate_annotation.pdf ½W¬äºŒç«?/div>
在这里没有具体的例ååQŒæœ‰å¾ˆå¤šå†…容˜q˜éœ€è¦ä»”¾l†æŸ¥çœ‹æ–‡æ¡£ã€?/div>
]]>
[转] 关于oracle with table as 创å¾ä¸´æ—¶è¡¨çš„用法½CÞZ¾‹ http://www.aygfsteel.com/algz/articles/365688.htmlç´«è¶âˆé£›æšâ†— ç´«è¶âˆé£›æšâ†— Tue, 06 Dec 2011 08:47:00 GMT http://www.aygfsteel.com/algz/articles/365688.html http://www.aygfsteel.com/algz/comments/365688.html http://www.aygfsteel.com/algz/articles/365688.html#Feedback 0 http://www.aygfsteel.com/algz/comments/commentRss/365688.html http://www.aygfsteel.com/algz/services/trackbacks/365688.html 1ã€with table as 相当于å¾ä¸ªäÍ(f¨´)时表åQˆç”¨äºŽä¸€ä¸ªè¯å¥ä¸æŸäº›ä¸é—´¾l“果攑֜¨ä¸´æ—¶è¡¨ç©ºé—´çš„SQLè¯å¥åQ‰ï¼ŒOracle 9i 新增WITHè¯æ³•åQŒå¯ä»¥å°†æŸ¥è¯¢ä¸çš„åæŸ¥è¯¢å‘½å,攑ֈ°SELECTè¯å¥çš„æœ€å‰é¢ã€?/span>è¯æ³•ž®±æ˜¯ with tempname as (select ....) select ... 例ååQ?/span>with t as (select * from emp where depno=10) select * from t where empno=xxx with wd as (select did,arg(salary) òq›_‡å·¥èµ„ from work group by did), em as (select emp.*,w.salary from emp left join work w on emp.eid = w.eid) select * from wd,em where wd.did =em.did and wd.òq›_‡å·¥èµ„>em.salary; 2ã€ä½•时被清除 临时表ä¸éƒ½æ˜¯ä¼?x¨¬)课l“柞®Þp‡ªåŠ¨è¢«PGA清除å˜? 但with as临时表是查询完æˆåŽå°±è¢«æ¸…除了(ji¨£n)åQ?/span>23:48:58 SCOTT@orcl> with aa as(select * from dept) 23:57:58 2 select * from aa; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 已用旉™—´: 00: 00: 00.12 23:58:06 SCOTT@orcl> select * from aa; select * from aa * ½W?1 行出现错è¯? ORA-00942: 表或视图ä¸å˜åœ?/span>已用旉™—´: 00: 00: 00.02 23:58:14 SCOTT@orcl> 3ã€å°±˜q™ä¸€åŠŸèƒ½æ¥è¯´åQŒå查询ž®±å¯ä»¥è¾¾åˆ°å•ŠåQŒäØ“(f¨´)什么è¦ç”¨with呢? 用with有什么好处? 都能写,但执行计划ä¸åŒçš„ã€‚å½“æœ‰å¤šä¸ªç›¸ä¼¼åæŸ¥è¯¢çš„æ—¶å€™ï¼Œç”¨withå†™å…¬å…±éƒ¨åˆ†ï¼Œå› äØ“(f¨´)åæŸ¥è¯¢ç»“果在内å˜ä¸´æ—¶è¡¨ä¸åQŒæ‰§è¡Œæ•ˆçŽ‡å½“ç„¶å°±é«˜å•¦~ 4ã€é—®é¢˜ï¼š(x¨¬) æœ‰å¼ è¡¨æ•°æ®å¦‚下:(x¨¬) aaa é«?/span>bbb ä½?/span>aaa ä½?/span>aaa é«?/span>bbb ä½?/span>bbb é«?/span>需è¦å¾—åˆîC¸‹åˆ—结æž? é«?ä½?/span>aaa 2 1 bbb 1 2 é—?SQL è¯å¥æ€Žä¹ˆå†™ï¼ŸåQ?/span>½{”案åQ?/span>with tt as ( select 'aaa' id, 'é«? value from dual union all select 'bbb' id, 'ä½? value from dual union all select 'aaa' id, 'ä½? value from dual union all select 'aaa' id, 'é«? value from dual union all select 'bbb' id, 'ä½? value from dual union all select 'bbb' id, 'é«? value from dual) SELECT id, COUNT(decode(VALUE, 'é«?, 1)) é«? COUNT(decode(VALUE, 'ä½?, 1)) ä½?/span> FROM tt GROUP BY id; =================================================================== 扩展åQ?/span>Oracle9i新增WITHè¯æ³•åQŒå¯ä»¥å°†æŸ¥è¯¢ä¸çš„åæŸ¥è¯¢å‘½å,攑ֈ°SELECTè¯å¥çš„æœ€å‰é¢ã€?/span>  一个简å•的例å: SQL> WITH 2 SEG AS (SELECT SEGMENT_NAME, SUM(BYTES)/1024 K FROM USER_SEGMENTS GROUP BY SEGMENT_NAME), 3 OBJ AS (SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS) 4 SELECT O.OBJECT_NAME, OBJECT_TYPE, NVL(S.K, 0) SIZE_K 5 FROM OBJ O, SEG S 6 WHERE O.OBJECT_NAME = S.SEGMENT_NAME (+) 7 ; OBJECT_NAME OBJECT_TYPE SIZE_K ------------------------------ ------------------- ---------- DAIJC_TEST TABLE 128 P_TEST PROCEDURE 0 IND_DAIJC_TEST_C1 INDEX 128   通过WITHè¯å¥å®šä¹‰äº?ji¨£n)ä¸¤ä¸ªåæŸ¥è¯¢SEGå’ŒOBJåQŒåœ¨éšåŽçš„SELECTè¯å¥ä¸å¯ä»¥ç›´æŽ¥å¯¹é¢„å®šä¹‰çš„åæŸ¥è¯¢è¿›è¡ŒæŸ¥è¯¢ã€‚从上é¢çš„例å也å¯ä»¥çœ‹å‡ºåQŒä‹É用WITHè¯å¥åQŒå°†ä¸€ä¸ªåŒ…å«èšé›†ã€å¤–˜qžæŽ¥½{‰æ“作SQL清晰的展现出æ¥ã€?/span>  WITHå®šä¹‰çš„åæŸ¥è¯¢ä¸ä»…å¯ä»¥ä½¿æŸ¥è¯¢è¯å¥æ›´åŠ ç®€å•ã€æ¸…晎ͼŒè€Œä¸”WITHå®šä¹‰çš„åæŸ¥è¯¢˜q˜å…·æœ‰åœ¨SELECTè¯å¥çš„ä“Qæ„层å‡å¯è§çš„特点ã€?/span>  å³ä‹É是在WITH的定义层ä¸ï¼ŒåŽå®šä¹‰çš„åæŸ¥è¯¢éƒ½å¯ä»¥ä½¿ç”¨å‰é¢å·²ç»å®šä¹‰å¥½çš„åæŸ¥è¯? SQL> WITH 2 Q1 AS (SELECT 3 + 5 S FROM DUAL), 3 Q2 AS (SELECT 3 * 5 M FROM DUAL), 4 Q3 AS (SELECT S, M, S + M, S * M FROM Q1, Q2) 5 SELECT * FROM Q3; S M S+M S*M ---------- ---------- ---------- ---------- 8 15 23 120   利用WITH定义查询ä¸å‡ºçŽ°å¤š‹Æ¡çš„åæŸ¥è¯¢è¿˜èƒ½å¸¦æ¥æ€§èƒ½æç¤ºã€‚Oracleä¼?x¨¬)对WITH˜q›è¡Œæ€§èƒ½ä¼˜åŒ–åQŒå½“需è¦å¤š‹Æ¡è®¿é—®WITHå®šä¹‰çš„åæŸ¥è¯¢æ—Óž¼ŒOracleä¼?x¨¬)å°†åæŸ¥è¯¢çš„¾l“果攑ֈ°ä¸€ä¸ªäÍ(f¨´)时表ä¸ï¼Œé¿å…åŒæ ·çš„åæŸ¥è¯¢å¤šæ¬¡æ‰§è¡ŒåQŒä»Žè€Œæœ‰æ•ˆçš„å‡å°‘äº?ji¨£n)查询的IOæ•°é‡ã€?/span>WITH能用在SELECTè¯å¥ä¸ï¼ŒUPDATEå’ŒDELETEè¯å¥ä¹Ÿæ˜¯æ”¯æŒWITHè¯æ³•çš„ï¼Œåªæ˜¯éœ€è¦ç‰ˆæœ¬æ”¯æŒ? http://www.oracle.com.cn/viewthread.php?tid=83530 ============================================================================= with sql1 as (select to_char(a) s_name from test_tempa), sql2 as (select to_char(b) s_name from test_tempb where not exists (select s_name from sql1 where rownum=1)) select * from sql1 union all select * from sql2 union all select 'no records' from dual where not exists (select s_name from sql1 where rownum=1) and not exists (select s_name from sql2 where rownum=1); å†ä‹D个简å•的例å with a as (select * from test) select * from a; 其实ž®±æ˜¯æŠŠä¸€å¤§å †é‡å¤ç”¨åˆ°çš„SQLè¯å¥æ”‘Öœ¨with as 里é¢åQŒå–一个别å,åŽé¢çš„æŸ¥è¯¢å°±å¯ä»¥ç”¨å®ƒ ˜q™æ ·å¯¹äºŽå¤§æ‰¹é‡çš„SQLè¯å¥èµ·åˆ°ä¸€ä¸ªä¼˜åŒ–的作用åQŒè€Œä¸”清楚明了(ji¨£n) ˜q™æ˜¯æœçƒ¦(ch¨³)到的英文文档资料(说得比较å…?但是本äh英文特èœ,˜q˜æ²¡å…·ä½“äº?ji¨£n)è§£å?希望å„高手具体谈谈这个with as 的好å¤? About Oracle WITH clause Starting in Oracle9i release 2 we see an incorporation of the SQL-99 “WITH clause”, a tool for materializing subqueries to save Oracle from having to re-compute them multiple times. The SQL “WITH clause” is very similar to the use of Global temporary tables (GTT), a technique that is often used to improve query speed for complex subqueries. Here are some important notes about the Oracle “WITH clause”: ? The SQL “WITH clause” only works on Oracle 9i release 2 and beyond. ? Formally, the “WITH clause” is called subquery factoring ? The SQL “WITH clause” is used when a subquery is executed multiple times ? Also useful for recursive queries (SQL-99, but not Oracle SQL) To keep it simple, the following example only references the aggregations once, where the SQL “WITH clause” is normally used when an aggregation is referenced multiple times in a query. We can also use the SQL-99 “WITH clause” instead of temporary tables. The Oracle SQL “WITH clause” will compute the aggregation once, give it a name, and allow us to reference it (maybe multiple times), later in the query. The SQL-99 “WITH clause” is very confusing at first because the SQL statement does not begin with the word SELECT. Instead, we use the “WITH clause” to start our SQL query, defining the aggregations, which can then be named in the main query as if they were “real” tables: WITH subquery_name AS (the aggregation SQL statement) SELECT (query naming subquery_name); Retuning to our oversimplified example, let’s replace the temporary tables with the SQL “WITH clause”: WITH sum_sales AS select /*+ materialize */ sum(quantity) all_sales from stores number_stores AS select /*+ materialize */ count(*) nbr_stores from stores sales_by_store AS select /*+ materialize */ store_name, sum(quantity) store_sales from store natural join sales SELECT store_name FROM store, sum_sales, number_stores, sales_by_store where store_sales > (all_sales / nbr_stores) ; Note the use of the Oracle undocumented “materialize” hint in the “WITH clause”. The Oracle materialize hint is used to ensure that the Oracle cost-based optimizer materializes the temporary tables that are created inside the “WITH” clause. This is not necessary in Oracle10g, but it helps ensure that the tables are only created one time. It should be noted that the “WITH clause” does not yet fully-functional within Oracle SQL and it does not yet support the use of “WITH clause” replacement for “CONNECT BY” when performing recursive queries. To see how the “WITH clause” is used in ANSI SQL-99 syntax, here is an excerpt from Jonathan Gennick’s great work “Understanding the WITH Clause” showing the use of the SQL-99 “WITH clause” to traverse a recursive bill-of-materials hierarchy The SQL-99 “WITH clause” is very confusing at first because the SQL statement does not begin with the word SELECT. Instead, we use the “WITH clause” to start our SQL query, defining the aggregations, which can then be named in the main query as if they were “real” tables: WITH subquery_name AS (the aggregation SQL statement) SELECT (query naming subquery_name); Retuning to our oversimplified example, let’s replace the temporary tables with the SQL “WITH” clause”: ]]> Hibernate æ³¨è§£æ˜ å°„ 讄¡½®é»˜è®¤å€¼çš„异常å?qi¨¢ng)è§£å†Ïx–¹æ³?/title><link>http://www.aygfsteel.com/algz/articles/365534.html</link><dc:creator>ç´«è¶âˆé£›æšâ†—</dc:creator><author>ç´«è¶âˆé£›æšâ†—</author><pubDate>Mon, 05 Dec 2011 01:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/365534.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/365534.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/365534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/365534.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/365534.html</trackback:ping><description><![CDATA[<div><div>Oracle æ•°æ®åº?<br />Hibernate annotation :<br /><div><div><span style="white-space:pre"> </span>@Column(name="NUMBERS",columnDefinition="NUMBER(20,3) default 0 ")</div><div><span style="white-space:pre"> </span>public BigDecimal getNumbers() {</div><div><span style="white-space:pre"> </span>return numbers;</div><div><span style="white-space:pre"> </span>}<br /><br />异常:</div></div>Caused by: org.hibernate.HibernateException: Wrong column type: NUMBERS, expected: NUMBER(20,3) default 0 </div><div><span style="white-space:pre"> </span>at org.hibernate.mapping.Table.validateColumns(Table.java:261)</div><div><span style="white-space:pre"> </span>at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1083)</div><div><span style="white-space:pre"> </span>at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:116)</div><div><span style="white-space:pre"> </span>at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:317)</div><div><span style="white-space:pre"> </span>at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)</div><div><span style="white-space:pre"> </span>at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)</div><div><span style="white-space:pre"> </span>at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:730)</div><div><span style="white-space:pre"> </span>... 122 more<br />解决æ–ÒŽ(gu¨©)³•:<br /><div><div><span style="white-space:pre"> </span>@Column(name="NUMBERS",columnDefinition="number(20,3) default 0 ")</div><div><span style="white-space:pre"> </span>public BigDecimal getNumbers() {</div><div><span style="white-space:pre"> </span>return numbers;</div><div><span style="white-space:pre"> </span>}<br />åŽŸå› :hibernate 在列定义选项ä¸?æ•°æ®åº“ä¸çš„æ‰€æœ‰ç±»åž‹åº”为å°å†™number. hibernate在æ¤ç›´æŽ¥é¢å¯¹æ•°æ®åº?所以区分大ž®å†™.</div></div></div></div><img src ="http://www.aygfsteel.com/algz/aggbug/365534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">ç´«è¶âˆé£›æšâ†—</a> 2011-12-05 09:21 <a href="http://www.aygfsteel.com/algz/articles/365534.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>[转] Oracle è¯æ³•ä¹?OVER (PARTITION BY ..) å?qi¨¢ng)å¼€½H—函æ•?/title><link>http://www.aygfsteel.com/algz/articles/365263.html</link><dc:creator>ç´«è¶âˆé£›æšâ†—</dc:creator><author>ç´«è¶âˆé£›æšâ†—</author><pubDate>Thu, 01 Dec 2011 02:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/365263.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/365263.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/365263.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/365263.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/365263.html</trackback:ping><description><![CDATA[<span id="wmqeeuq" class="Apple-style-span" style="color: #454545; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 14px; background-color: #ffffff; "><div>oracle的分æžå‡½æ•°over å?qi¨¢ng)å¼€½H—函æ•?/div><div><font size="2">一åQšåˆ†æžå‡½æ•?strong style="color: black; background-color: #a0ffff; ">over</strong><br /><strong style="color: black; background-color: #ffff66; ">Oracle</strong>ä»?.1.6开始æä¾›åˆ†æžå‡½æ•ŽÍ¼Œåˆ†æžå‡½æ•°ç”¨äºŽè®¡ç®—åŸÞZºŽ¾l„çš„æŸç§èšåˆå€û|¼Œå®ƒå’Œèšåˆå‡½æ•°çš„ä¸åŒä¹‹å¤„是<br />对于æ¯ä¸ª¾l„返回多行,而èšåˆå‡½æ•°å¯¹äºŽæ¯ä¸ªç»„åªè¿”回一行ã€?nbsp;<br />下é¢é€šè¿‡å‡ ä¸ªä¾‹åæ¥è¯´æ˜Žå…¶åº”ç”¨ã€?nbsp; </font><div><font size="2">1åQšç»Ÿè®¡æŸå•†åº—çš„è¥ä¸šé¢ã€?nbsp; </font></div><div><font size="2"> date sale<br /> 1 20<br /> 2 15<br /> 3 14<br /> 4 18<br /> 5 30<br /> 规则åQšæŒ‰å¤©ç»Ÿè®¡ï¼š(x¨¬)æ¯å¤©éƒ½ç»Ÿè®¡å‰é¢å‡ 天的总é¢<br /> 得到的结果:(x¨¬)<br /> DATE SALE SUM<br /> ----- -------- ------<br /> 1 20 20 --1å¤?nbsp; <br /> 2 15 35 --1天+2å¤?nbsp; <br /> 3 14 49 --1天+2天+3å¤?nbsp; <br /> 4 18 67 . <br /> 5 30 97 .<br /> <br />2:¾lŸè®¡å„çæˆç‡W½W¬ä¸€åçš„åŒå¦ä¿¡æ¯</font></div><div><font size="2"> NAME CLASS S <br /> ----- ----- ---------------------- <br /> fda 1 80 <br /> ffd 1 78 <br /> dss 1 95 <br /> cfe 2 74 <br /> gds 2 92 <br /> gf 3 99 <br /> ddd 3 99 <br /> adf 3 45 <br /> asdf 3 55 <br /> 3dd 3 78 <br /> <br /> 通过åQ?nbsp; <br /> --<br /> select * from <br /> ( <br /> select name,class,s,rank()<strong style="color: black; background-color: #a0ffff; ">over</strong>(partition by class order by s desc) mm from t2<br /> ) <br /> where mm=1 <br /> --<br /> 得到¾l“æžœåQ?br /> NAME CLASS S MM <br /> ----- ----- ---------------------- ---------------------- <br /> dss 1 95 1 <br /> gds 2 92 1 <br /> gf 3 99 1 <br /> ddd 3 99 1 <br /> <br /> 注æ„åQ?br /> 1.在求½W¬ä¸€å戾l©çš„æ—¶å€™ï¼Œä¸èƒ½ç”¨row_number()åQŒå› 为如果åŒç有两个òq¶åˆ—½W¬ä¸€åQŒrow_number()åªè¿”回一个结æž?nbsp; <br /> 2.rank()å’Œdense_rank()的区别是åQ?br /> --rank()是蟩跃排åºï¼Œæœ‰ä¸¤ä¸ªç¬¬äºŒå时接下楞®±æ˜¯½W¬å››å?br /> --dense_rank()l是连¾l排åºï¼Œæœ‰ä¸¤ä¸ªç¬¬äºŒåæ—¶ä»ç„¶è·Ÿç€½W¬ä¸‰å?br /> <br /> <br />3.分类¾lŸè®¡ (òq¶æ˜¾½CÞZ¿¡æ?</font></div><div><font size="2"> A B C <br /> -- -- ---------------------- <br /> m a 2 <br /> n a 3 <br /> m a 2 <br /> n b 2 <br /> n b 1 <br /> x b 3 <br /> x b 2 <br /> x b 4 <br /> h b 3</font></div><div><font size="2"> select a,c,sum(c)<strong style="color: black; background-color: #a0ffff; ">over</strong>(partition by a) from t2 <br /> 得到¾l“æžœåQ?br /> A B C SUM(C)<strong style="color: black; background-color: #a0ffff; ">OVER</strong>(PARTITIONBYA) <br /> -- -- ------- ------------------------ <br /> h b 3 3 <br /> m a 2 4 <br /> m a 2 4 <br /> n a 3 6 <br /> n b 2 6 <br /> n b 1 6 <br /> x b 3 9 <br /> x b 2 9 <br /> x b 4 9 <br /> <br /> 如果用sumåQŒgroup by 则åªèƒ½å¾—åˆ?br /> A SUM(C) <br /> -- ---------------------- <br /> h 3 <br /> m 4 <br /> n 6 <br /> x 9 <br /> æ— æ³•å¾—åˆ°B列å€?nbsp; <br /> <br />åQï¼åQï¼åQ?/font></div><div><div><p><font face="verdana, arial, helvetica" size="2"><span id="wmqeeuq" class="javascript" id="text2200299" style="font-size: 12px; ">select * from test<br /><br />æ•°æ®:<br />A B C <br />1 1 1 <br />1 2 2 <br />1 3 3 <br />2 2 5 <br />3 4 6 <br /><br /><br />---ž®†Bæ ä½å€¼ç›¸åŒçš„对应的C æ ä½å€¼åŠ æ€?br />select a,b,c, SUM(C) OVER (PARTITION BY B) C_Sum<br />from test<br /><br />A B C C_SUM <br />1 1 1 1 <br />1 2 2 7 <br />2 2 5 7 <br />1 3 3 3 <br />3 4 6 6 <br /><br /><br /><br />---如果ä¸éœ€è¦å·²æŸä¸ªæ ä½çš„值分å‰?那就è¦ç”¨ null<br /><br />eg: ž®±æ˜¯ž®†Cçš„æ ä½å€¼summary 攑֜¨æ¯è¡ŒåŽé¢<br /><br />select a,b,c, SUM(C) OVER (PARTITION BY null) C_Sum<br />from test<br /><br />A B C C_SUM <br />1 1 1 17 <br />1 2 2 17 <br />1 3 3 17 <br />2 2 5 17 <br />3 4 6 17</span></font></p><p><font face="verdana, arial, helvetica" size="2"></font> </p><p><font face="verdana, arial, helvetica" size="2"><span id="wmqeeuq" class="javascript" style="font-size: 12px; ">求个人工资å 部门工资的百分比</span></font></p><font face="verdana, arial, helvetica" size="2"><p><font face="verdana, arial, helvetica" size="2"><span id="wmqeeuq" class="javascript" id="text3005546" style="font-size: 12px; ">SQL> select * from salary;<br /><br />NAME DEPT SAL<br />---------- ---- -----<br />a 10 2000<br />b 10 3000<br />c 10 5000<br />d 20 4000<br /><br />SQL> select name,dept,sal,sal*100/sum(sal) over(partition by dept) percent from salary;<br /><br />NAME DEPT SAL PERCENT<br />---------- ---- ----- ----------<br />a 10 2000 20<br />b 10 3000 30<br />c 10 5000 50<br />d 20 4000 100</span></font></p></font></div></div><div><font size="2">二:(x¨¬)å¼€½H—函æ•?nbsp; <br /> å¼€½H—函数指定了(ji¨£n)分æžå‡½æ•°å·¥ä½œçš„æ•°æ®çª—å£å¤§ž®ï¼Œ˜q™ä¸ªæ•°æ®½H—å£å¤§å°å¯èƒ½ä¼?x¨¬)éšç€è¡Œçš„å˜åŒ–而å˜åŒ–,举例如下åQ?nbsp;<br />1åQ?nbsp; <br /> <strong style="color: black; background-color: #a0ffff; ">over</strong>åQˆorder by salaryåQ?按照salary排庘q›è¡Œç´¯è®¡åQŒorder by是个默认的开½H—函æ•?br /> <strong style="color: black; background-color: #a0ffff; ">over</strong>åQˆpartition by deptnoåQ‰æŒ‰ç…§éƒ¨é—¨åˆ†åŒ?br />2åQ?br /> <strong style="color: black; background-color: #a0ffff; ">over</strong>åQˆorder by salary range between 5 preceding and 5 followingåQ?br /> æ¯è¡Œå¯¹åº”的数æ®çª—壿˜¯ä¹‹å‰è¡Œå¹…度å€ég¸‘…过5åQŒä¹‹åŽè¡Œòq…度å€ég¸‘…过5<br /> 例如:对于以下åˆ?br /> aa<br /> 1<br /> 2<br /> 2<br /> 2<br /> 3<br /> 4<br /> 5<br /> 6<br /> 7<br /> 9<br /> <br /> sum(aa)<strong style="color: black; background-color: #a0ffff; ">over</strong>åQˆorder by aa range between 2 preceding and 2 followingåQ?br /> 得出的结果是<br /> AA SUM<br /> ---------------------- ------------------------------------------------------- <br /> 1 10 <br /> 2 14 <br /> 2 14 <br /> 2 14 <br /> 3 18 <br /> 4 18 <br /> 5 22 <br /> 6 18 <br /> 7 22 <br /> 9 9 <br /> <br /> ž®±æ˜¯è¯ß_(d¨¢)¼Œå¯¹äºŽaa=5的一è¡?åQŒsumä¸?nbsp; 5-1<=aa<=5+2 的和<br /> 对于aa=2æ¥è¯´ åQŒsum=1+2+2+2+3+4=14 åQ?br /> åˆå¦‚ 对于aa=9 åQ?-1<=aa<=9+2 åªæœ‰9一个数åQŒæ‰€ä»¥sum=9 åQ?br /> <br />3åQšå…¶å®ƒï¼š(x¨¬)<br /> <strong style="color: black; background-color: #a0ffff; ">over</strong>åQˆorder by salary rows between 2 preceding and 4 followingåQ?br /> æ¯è¡Œå¯¹åº”的数æ®çª—壿˜¯ä¹‹å‰2行,之åŽ4è¡?nbsp;<br />4åQšä¸‹é¢ä¸‰æ¡è¯å¥ç‰æ•ˆï¼š(x¨¬) <br /> <strong style="color: black; background-color: #a0ffff; ">over</strong>åQˆorder by salary rows between unbounded preceding and unbounded followingåQ?br /> æ¯è¡Œå¯¹åº”的数æ®çª—壿˜¯ä»Žç¬¬ä¸€è¡Œåˆ°æœ€åŽä¸€è¡Œï¼Œ½{‰æ•ˆåQ?br /> <strong style="color: black; background-color: #a0ffff; ">over</strong>åQˆorder by salary range between unbounded preceding and unbounded followingåQ?br /> ½{‰æ•ˆ<br /> <strong style="color: black; background-color: #a0ffff; ">over</strong>(partition by null)</font></div></div></span><img src ="http://www.aygfsteel.com/algz/aggbug/365263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">ç´«è¶âˆé£›æšâ†—</a> 2011-12-01 10:00 <a href="http://www.aygfsteel.com/algz/articles/365263.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>sql plusæ“作oracel(windowsòq›_°)基础之简易新手篇 http://www.aygfsteel.com/algz/articles/356201.htmlç´«è¶âˆé£›æšâ†— ç´«è¶âˆé£›æšâ†— Wed, 10 Aug 2011 03:29:00 GMT http://www.aygfsteel.com/algz/articles/356201.html http://www.aygfsteel.com/algz/comments/356201.html http://www.aygfsteel.com/algz/articles/356201.html#Feedback 0 http://www.aygfsteel.com/algz/comments/commentRss/356201.html http://www.aygfsteel.com/algz/services/trackbacks/356201.html
æ³?ç™Õd…¥SQLPLUS时报é”?如下: 误‚¾“入用户å: system
输入å£ä×o(h¨´):
ERROR:
ORA-12560: TNS: å议适é…器错è¯?br /> åŽŸå› :
是ORCAL实例没å¯åŠ?net [start/stop] æœåŠ¡å?.与Linux相å,ä¸åœ¨SQLPLUSä¸å¯åŠ¨å®žä¾? òq›_°: windows server 2003 Enterprise Editon , oracle 10g(10.02.00.01)
˜q行"å¼€å§?>½E‹åº\Oracle - OraDb10g_home1\é…置和移æ¤å·¥å…?ä¸çš„"Database Configuration Assistant"åQŒåˆ›å»ÞZ¸€ä¸ªæ•°æ®åº“ã€? åˆ›å¾æˆåŠŸåŽï¼Œ˜q行"å¼€å§?>½E‹åº\Oracle - OraDb10g_home1\应用½E‹åºå¼€å?ä¸çš„"SQL Plus".用户å:(x¨¬)sys 密ç åQ?23456 as sysdba(密ç åŽé¢è¦åŠ ½Iºæ ¼as½Iºæ ¼sysdba) ä¸ÀLœºå—符ä¸ÔŒ¼š(x¨¬)如果是本机å¯ä¸å¡«ã€? 从命令æ½Cºç¬¦ä¸‹ä‹É用sql*plus sqlplus/nolog conn 用户å?密ç as sysdba 出现”已连æŽ?#8220;åŽå°±æ˜¯æˆåŠŸäº†(ji¨£n)ã€?br />
       接下æ¥ï¼Œæˆ‘们在SQL*Plusä¸å®žæˆ˜ä¸€ä¸‹ï¼Œä¸ºæˆ‘们下é¢å°†è¦åšçš„æ‰“好基¼‹€ã€?br />  用system登陆到SQL*PlusåŽï¼Œæˆ‘们åšå¦‚下æ“ä½?˜q™æ¬¡æ²¡æœ‰æˆªå›¾åQŒæœ‰è¯¦ç»†çš„说æ˜? -----------如登陆æˆåŠŸæ¤1-3æ¥ä¸å¿…åšåQŒç›´æŽ¥åš½W?æ?--------------- SQL>create user maxuan identified by max; #创å¾å£ä×o(h¨´)为max的用户maxuan SQL>grant connect,resource to maxuan; #为用户maxuanæŽˆæƒ SQL>conn maxuan/max; #以用户maxuan˜q›è¡Œ˜qžæŽ¥ SQL>create table test(a number); #建立一个å为test的表åQŒåªæœ‰å—ŒDµå为A的一列,数殾cÕdž‹ä¸ºæ•°å? SQL>insert into test values(1); #æ’入一æ¡è®°å½? SQL>select * from test; #查询记录åQŒæ¤æ—¶A列的½W¬ä¸€è¡ŒäØ“(f¨´)1 SQL>update test set a=2; #更改记录åQŒæ¤æ—¶A列的½W¬ä¸€è¡Œå·²æ”¹äØ“(f¨´)2 SQL>commit; #æäº¤.åœ¨å®Œæˆæ•°æ®åº“çš„æ’å…¥ï¼Œåˆ é™¤å’Œä¿®æ”ÒŽ(gu¨©)“作时åQŒåªæœ‰å½“事务æäº¤åˆ°æ•°æ®åº“æ‰ç®—完æˆã€? SQL>delete from test; #åˆ é™¤testè¡¨ä¸æ‰€æœ‰çš„记录åQŒæ¤æ—¶testè¡¨ä¸æ²¡æœ‰è®°å½• SQL>roll; #回滚到æäº¤å‰åQŒæ¤æ—¶å†æŸ¥è¯¢test表,A列第一行值åˆå›žå¤åˆ?      oracle的数æ®ç±»åž?/strong>   在数æ®åº“ä¸åˆ›å»ºæ•°æ®è¡¨çš„æ—¶å€™ï¼Œæˆ‘们需è¦å®šä¹‰è¡¨ä¸æ‰€æœ‰å—ŒD늚„¾cÕdž‹åQŒæ•°æ®ç±»åž‹å¤§è‡´åˆ†ä¸ºï¼š(x¨¬)character,numberic,date,lobå’Œraw½{‰ï¼Œ˜q™äº›æ˜¯æœ€åŸºæœ¬çš„æ•°æ®ç±»åž‹ã€‚当然在oracleä¸ä¹Ÿå…许自定义数æ®ç±»åž‹ï¼      在oracleä¸æä¾›çš„character数殾cÕdž‹:   char():固定长度å—符ä¸ÔŒ¼Œæœ€å¤§é•¿åº¦äØ“(f¨´)2000å—节åQŒå¦‚æžœä¸æŒ‡å®šé•¿å……åQŒç¼ºçœäØ“(f¨´)1个å—节长ã€?br />  varchar2():å¯å˜é•¿åº¦çš„å—½W¦ä¸²åQŒæœ€å¤§é•¿åº¦äØ“(f¨´)4000å—节åQŒå…·ä½“定义时指明最大长度,˜q™å’±¾cÕdž‹å¯ä»¥æ”¾æ•°å—ã€å—æ¯ä»¥å?qi¨¢ng)ASCIIç å—½W¦é›†(或者EBCDIC½{‰æ•°æ®åº“¾pÈ»ŸæŽ¥å—的嗽W¦é›†æ ‡å‡†)ä¸çš„æ‰€æœ‰ç¬¦å—÷€‚如果数æ®é•¿åº¦æ²¡æœ‰è¾¾åˆ°æœ€å¤§å€û|¼Œoracleä¼?x¨¬)æ ¹æ®æ•°æ®å¤§ž®è‡ªåŠ¨è°ƒèŠ‚å—ŒDµé•¿åº¦ã€‚是      最长用的数æ®ç±»åž‹ã€?br />  nchar():æ ÒŽ(gu¨©)®å—符集而定的固定长度嗽W¦ä¸²åQŒæœ€å¤§é•¿åº?000å—节ã€?br />  nvarchar2():æ ÒŽ(gu¨©)®å—符集而定的å¯å˜é•¿åº¦å—½W¦ä¸²åQŒæœ€å¤§é•¿åº?000å—节ã€?br />  long:å¯å˜é•¿å—½W¦åˆ—åQŒæœ€å¤§é•¿åº¦é™åˆ¶äØ“(f¨´)2GBåQŒç”¨äºŽä¸éœ€è¦ä½œå—符串æœç´¢çš„长串数æ®ã€‚椾cÕdž‹æ˜¯ä¸€ä¸ªé—留下æ¥çš„而且ž®†æ¥ä¸ä¼š(x¨¬)被支æŒçš„æ•°æ®¾cÕdž‹åQŒé€æ¸è¢«BLOBåQŒCLOBåQŒNCLOB½{‰å¤§çš„æ•°æ®ç±»åž‹æ‰€å–代ã€?br />     numberic数殾cÕdž‹ç”¨æ¥å˜å‚¨è´Ÿçš„å’Œæ£çš„æ•´æ•ŽÍ¼Œåˆ†æ•°å’ŒæÕQ点型数æ®åQŒåœ¨oracleä¸æä¾›çš„numberic数殾cÕdž‹åQ?br />  number(,):å¯å˜é•¿çš„æ•°å€¼åˆ—åQŒå…è®?ã€æ£å€¼åŠ(qi¨¢ng)è´Ÿå€û|¼Œm是所有的有效数å—çš„ä½æ•ŽÍ¼Œnæ˜¯å°æ•°ç‚¹ä»¥åŽçš„使•°ã€?br />     在oracleä¸æä¾›çš„date数殾cÕdž‹:   date:¾~ºçœæ ¼å¼æ˜¯dd-mon-yy(æ—?æœ?òq?      在oracleä¸æä¾›çš„lob数殾cÕdž‹:   blobã€clobã€nclobåQšä¸‰¿U大型对è±?lob)åQŒç”¨æ¥ä¿å˜è¾ƒå¤§çš„囑ÖÅžæ–‡äšgæˆ–å¸¦æ ¼å¼çš„æ–‡æœ¬æ–‡ä»Óž¼Œå¦‚word文档åQŒä»¥å?qi¨¢ng)音频ã€è§†é¢‘ç‰éžæ–‡æœ¬æ–‡ä»Óž¼Œæœ€å¤§é•¿å……是4GB。晕些数æ®å˜å‚¨åœ¨æ•°æ®åº“内部ä¿å˜ã€?br />  bfile:在数æ®åº“外部ä¿å˜çš„大型二˜q›åˆ¶å¯¹è±¡æ–‡äšgåQŒæœ€å¤§é•¿åº¦æ˜¯4GBåQŒè¿™¿U外部的LOB¾cÕdž‹åQŒé€šè¿‡æ•°æ®åº“记录å˜åŒ–情况,但是数æ®çš„具体ä¿å˜æ˜¯åœ¨æ•°æ®åº“外部˜q›è¡Œçš„ã€?br />     在oracleä¸æä¾›çš„raw数殾cÕdž‹:   raw():å¯å˜é•¿äºŒ˜q›åˆ¶æ•°æ®åQŒå…·ä½“定义嗌D‰|—¶å¿…须指明最大长度,˜q™ç§æ ¼å¼ç”¨æ¥ä¿å˜è¾ƒå°çš„å›¾å½¢æ–‡ä»¶æˆ–å¸¦æ ¼å¼çš„æ–‡æœ¬æ–‡äšgåQŒå®ƒä¹Ÿæ˜¯ä¸€¿U较è€çš„æ•°æ®¾cÕdž‹åQŒå°†è¢«lob数殾cÕdž‹æ‰€å–代ã€?br />  long raw:å¯å˜é•¿äºŒ˜q›åˆ¶æ•°æ®åQŒæœ€å¤§é•¿åº¦æ˜¯2GBåQŒå¯ä»¥ç”¨æ¥ä¿å˜è¾ƒå¤§çš„囑ÖÅžæˆ–å¸¦æ ¼å¼çš„æ–‡æœ¬æ–‡ä»Óž¼Œä»¥åŠ(qi¨¢ng)音频ã€è§†é¢‘ç‰éžæ–‡æœ¬æ–‡ä»Óž¼Œ˜q™ä¹Ÿæ˜¯ä¸€¿U较è€çš„æ•°æ®¾cÕdž‹åQŒå°†è¢«lob数殾cÕdž‹æ‰€å–代ã€?br />     其它的数æ®ç±»åž‹ï¼š(x¨¬)   rowid:˜q™æ˜¯oracleæ•°æ®è¡¨ä¸çš„一个伪例,它是数æ®è¡¨ä¸æ¯è¡Œæ•°æ®å†…åœ¨çš„å”¯ä¸€æ ‡è¯†   integer:æ•´æ•°¾cÕdž‹    补充知识åQ?br />SQL(Structure Query Language)è¯è¨€æ˜¯ç»“构化查询è¯è¨€åQŒæ˜¯æ•°æ®åº“çš„æ ¸å¿ƒ(j¨©)è¯è¨€åQŒæ˜¯é¢å‘集åˆçš„æ˜q°æ€§éž˜q‡ç¨‹åŒ–è¯a€ã€‚SQLè¯è¨€å…±åˆ†ä¸ºå››å¤§ç±»åQšæ•°æ®æŸ¥è¯¢è¯a€DQL,æ•°æ®æ“纵è¯è¨€DMLåQŒæ•°æ®å®šä¹‰è¯a€DDL,æ•°æ®åº“控制è¯a€DCLã€?br />     1.æ•°æ®æŸ¥è¯¢è¯è¨€DQL的基本结构是由selectåå¥åQŒfromåå¥åQŒwhereå奾l„æˆçš„æŸ¥è¯¢å—åQ?br />  select <å—æ®µå表> from <表或视图å?gt; where <查询æ¡äšg>      2.æ•°æ®æ“纵è¯è¨€DML完æˆåœ¨æ•°æ®åº“ä¸ç¡®å®šã€ä¿®æ”V€æ·»åŠ ã€åˆ 除æŸä¸€æ•°æ®å€¼çš„ä»ÕdŠ¡(以下是部分常用DMLè¯å¥):   insertã€€ã€€å¢žåŠ æ•°æ®è¡Œåˆ°è¡?br />  delete  从表ä¸åˆ 除数æ®è¡Œ   Updateã€€ã€€æ›´æ”¹è¡¨ä¸æ•°æ®      3.æ•°æ®å®šä¹‰è¯è¨€DDL完æˆå®šä¹‰æ•°æ®åº“çš„¾l“æž„åQŒåŒ…括数æ®åº“本èínã€æ•°æ®è¡¨ã€ç›®å½•ã€è§†å›„¡‰æ•°æ®åº“å…ƒç´?以下是部分常用DDLè¯å¥)   create table  创å¾è¡?br />  create index  创å¾ç´¢å¼•   create view  创å¾è§†å›¾   alter tableã€€ã€€å¢žåŠ è¡¨åˆ—åQŒé‡å®šä¹‰è¡¨åˆ—åQŒæ›´æ”¹å˜å‚¨åˆ†é…?br />  drop tableã€€ã€€åˆ é™¤è¡?br />  drop indexã€€ã€€åˆ é™¤ç´¢å¼•      4.æ•°æ®åº“控制è¯a€DCLç”¨æ¥æŽˆäºˆæˆ–å›žæ”¶è®¿é—®æ•°æ®åº“的柿U特æƒï¼Œòq¶æŽ§åˆ¶æ•°æ®åº“æ“纵事务å‘生的时间åŠ(qi¨¢ng)效果åQŒå¯¹æ•°æ®åº“实行监视ç‰ã€‚如åQ?br />  grant    ž®†æƒé™æˆ–角色授予用户或其它角è‰?br />  revoke    回收用户æƒé™   roll    回滚åQŒæ˜¯å½“æŸä¸ªå¯¹è¯æ›´æ”¹äº†(ji¨£n)æ•°æ®åº“ä¸çš„æ•°æ®åŽåQŒç”±äºŽæŸ¿UåŽŸå› ç”¨æˆ·ä¸æƒÏxäº¤æ¤æ›´æ”¹æ—Óž¼Œoracle所采å–çš„ä¿æŠ¤æ“ä½œã€‚è¿™æ˜¯ä¸€ä¸ªæŠŠä¿¡æ¯æ¢å¤åˆ°ç”¨æˆ·ä‹Éupdateã€insertã€delete剿œ€åŽæäº¤çš„çŠ¶æ€ã€?br />  commit    æäº¤ã€‚åœ¨å®Œæˆæ•°æ®åº“çš„æ’å…¥åQŒåˆ 除和修改æ“作æ—Óž¼Œåªæœ‰å½“事务æäº¤åˆ°æ•°æ®åº“æ‰½Ž—å®Œæˆï¼Œæœ‰æäº¤å‰åªæœ‰æ“作数æ®åº“的本ähæ‰èƒ½çœ‹åˆ°åQŒåˆ«äººåªæœ‰åœ¨æœ€åŽæäº¤å®Œæˆæ‰å¯ä»¥çœ‹åˆ°ã€?br />   一ä¸?strong>è´ç‰©¾|‘ç«™åŽå°æ•°æ®åº?/strong>实例åQ?br />  现在我们回到用J2EE体系开å‘è´ç‰©ç½‘站的主题åQŒå¼€å§‹å®žæˆ˜å¾è´ç‰©¾|‘站的åŽå°æ•°æ®åº“ã€?br />  ä¸ÞZº†(ji¨£n)实现è´ç‰©¾|‘站的基本的功能åQŒæˆ‘们需è¦å¾ç«‹å››ä¸ªè¡¨åQšå•†å“列è¡?products)ã€å•†å“类型表(item)ã€è®¢å•列è¡?orders)和管ç†å‘˜åˆ—表(admin)。表¾l“构如下所½Cºï¼š(x¨¬)      item表结构(商哾cÕdž‹è¡? ã€€ã€€å—æ®µå称  数殾cÕdž‹ã€€ã€€ã€€ã€€å…许½Iºã€€ã€€ä¸»é”®/外键  备注     type_id  INTEGER(自动¾~–å·) å¦ã€€ 主键   商哾cÕdˆ«I(xi¨¤n)Dæ ‡è®°   type   varchar2(30)   å¦ã€€ã€€ã€€ 商哾cÕdˆ«åç§°      product表结æž?商å“列表) ã€€ã€€å—æ®µå称   数殾cÕdž‹ã€€ã€€ã€€å…许½Iºã€€ã€€ä¸»é”®/外键  备注   product_id INTEGER(自动¾~–å·) å¦ã€€ã€€ 主键  商å“IDæ ‡è®°   title   varchar2(30)   å¦ã€€ã€€ã€€ã€€ 商å“åç§°   type_id   INTEGER    å¦ã€€  外键  商哾cÕdˆ«æ ‡è®°   info   varchar2(80)   是     商哽ހä»?br />  price   number(16,2)   å¦ã€€ã€€ã€€  商å“ä»äh ¼      orders表结æž?订å•列表) ã€€ã€€å—æ®µå称  数殾cÕdž‹ã€€ã€€ã€€ å…许½Iºã€€ã€€ä¸»é”®/外键  备注   order_id  INTEGER(自动¾~–å·) å¦ã€€ã€€ 主键  订å•IDæ ‡è®°   name   varchar2(20)   å¦ã€€ã€€ã€€ã€€ ™å‘Ö®¢å§“å   address   varchar2(100)   是     å‘è´§åœ°å€ ã€€ã€€tel   number(16)  是     è”ç³»ç”?sh¨´)è¯?br />  email   varchar2(30)  å¦ã€€ã€€ã€€  è”ç³»email   btime   date    是     è®¢è´æ—¥æœŸ   product_id  INTEGER   å¦ã€€ã€€ 外键  商哿 ‡è®°   uword   varchar2(100) 是     ™å‘Ö®¢ç•™è¨€      admin表结æž?½Ž¡ç†å‘˜åˆ—è¡? ã€€ã€€å—æ®µå称  数殾cÕdž‹ã€€ã€€ã€€ã€€å…许½Iºã€€ã€€ä¸»é”®/外键  备注   admin_id  INTEGER(自动¾~–å·) å¦ã€€ã€€ 主键   ½Ž¡ç†å‘˜I(y¨¨)Dæ ‡è®°   adminname  varchar2(20)   å¦ã€€ã€€ã€€ã€€ ½Ž¡ç†å‘˜å¿U?br />  password  varchar2(20)   å¦ã€€ã€€ã€€ã€€ ½Ž¡ç†å‘˜å¯†ç ?br />     设计完表¾l“æž„åŽï¼Œæˆ‘们ž®Þp¦å¼€å§‹åˆ›å»ÞZº†(ji¨£n)ã€?br />  创å¾è¡¨æˆ‘惛_·²¾l䏿˜¯ä»€ä¹ˆéš¾äº‹äº†(ji¨£n)åQŒé‚£ä¹ˆæˆ‘ä»¬è¦æ³¨æ„的是productã€itemã€orders˜q™ä¸‰ä¸ªè¡¨ä¹‹é—´çš„å…³è”,˜q˜æœ‰è‡ªåЍ¾~–å·ã€?br />   ã€€ã€€ä¸‹é¢æ˜¯å®Œæ•´çš„SQLè¯å¥åQŒåœ¨åŽé¢æˆ‘会(x¨¬)¾l™å‡ºè¯¦ç»†çš„è¯´æ˜Žï¼Œä½ å¯ä»¥åœ¨SQL*Plus里对照ç€è¾“å…¥åQŒä¹Ÿå¯ä»¥ž®†å®ƒå˜äØ“(f¨´)SQL脚本文äšgåQŒåœ¨SQL*Plus或SQLPlus Worksheet里执行。当然也å¯ä»¥æŠŠä»£ç 直接拷è´åˆ°SQL*Plusé‡Œæ‰§è¡Œï¼ ã€€ã€€   代ç åQ?br />  rem ///BY MAXUAN å¼€å§?//   create table item(   type_id integer not null,   type varchar2(30),   constraint item_pk primary key(type_id)   );      create table product(   product_id integer not null,   title varchar2(30) not null,   type_id integer not null,   info varchar2(80),   price number(16,2) not null,   constraint product_pk primary key (product_id),   constraint product_fk foreign key(type_id) references item(type_id)   );      create table orders(   order_id integer not null,   name varchar2(20) not null,   address varchar2(100),   tel number(16),   email varchar2(30) not null,   btime date,   product_id integer not null,   uword varchar2(100),   constraint orders_pk primary key(order_id),   constraint orders_fk foreign key(product_id) references product(product_id)   );      create table admin(   admin_id integer not null,   adminname varchar2(20) not null,   password varchar2(20) not null,   constraint admin_pk primary key(admin_id)   ); ]]>spring 什么情况下˜q›è¡Œäº‹åŠ¡å›žæ»š(é¢è¯•é¢? http://www.aygfsteel.com/algz/articles/352796.htmlç´«è¶âˆé£›æšâ†— ç´«è¶âˆé£›æšâ†— Wed, 22 Jun 2011 03:53:00 GMT http://www.aygfsteel.com/algz/articles/352796.html http://www.aygfsteel.com/algz/comments/352796.html http://www.aygfsteel.com/algz/articles/352796.html#Feedback 0 http://www.aygfsteel.com/algz/comments/commentRss/352796.html http://www.aygfsteel.com/algz/services/trackbacks/352796.html spring事务回滚.默认情况,unchecked异常,匙¿è¡Œæ—¶å¼‚常runntimeException回滚事务;checked异常,å³Exceptionå¯try{}æ•获的ä¸ä¼?x¨¬)回æ?当然也å¯é…ç½®spring傿•°è®©å…¶å›žæ»š. ]]> spring ä¸?jdbcTemplate 快速数æ®åº“å¼€å?/title><link>http://www.aygfsteel.com/algz/articles/352789.html</link><dc:creator>ç´«è¶âˆé£›æšâ†—</dc:creator><author>ç´«è¶âˆé£›æšâ†—</author><pubDate>Wed, 22 Jun 2011 02:16:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/352789.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/352789.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/352789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/352789.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/352789.html</trackback:ping><description><![CDATA[<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: #000000; "> </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> execSQL(String fileName) {<br /> <br /> File myFile </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> File(fileName);<br /> </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (</span><span style="color: #000000; ">!</span><span style="color: #000000; ">myFile.exists()) {<br /> System.err.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Can't Find </span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> fileName);<br /> </span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;<br /> }<br /> </span><span style="color: #0000FF; ">try</span><span style="color: #000000; "> {<br /> DriverManagerDataSource dataSource</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> DriverManagerDataSource();<br /> dataSource.setDriverClassName(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">org.hsqldb.jdbcDriver</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /> dataSource.setUrl(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jdbc:hsqldb:hsql://localhost/algz</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /> dataSource.setUsername(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">sa</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /> dataSource.setPassword(</span><span style="color: #000000; ">""</span><span style="color: #000000; ">);<br /> JdbcTemplate jt</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> JdbcTemplate();<br /> jt.setDataSource(dataSource);<br /> <br /> <br /> BufferedReader in </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> BufferedReader(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> FileReader(myFile));<br /> String sql;<br /> </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> ((sql </span><span style="color: #000000; ">=</span><span style="color: #000000; "> in.readLine()) </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">) {<br /> jt.execute(sql);<br /> System.out.print(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /> }<br /> <br /> in.close();<br /> System.out.println();<br /> } </span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (IOException e) {<br /> e.getStackTrace();<br /> }<br /> }</span></div><img src ="http://www.aygfsteel.com/algz/aggbug/352789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">ç´«è¶âˆé£›æšâ†—</a> 2011-06-22 10:16 <a href="http://www.aygfsteel.com/algz/articles/352789.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>oracle å˜å‚¨˜q‡ç¨‹åŸºæœ¬è¯æ³•å?qi¨¢ng)é—®é?/title><link>http://www.aygfsteel.com/algz/articles/352675.html</link><dc:creator>ç´«è¶âˆé£›æšâ†—</dc:creator><author>ç´«è¶âˆé£›æšâ†—</author><pubDate>Mon, 20 Jun 2011 09:12:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/352675.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/352675.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/352675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/352675.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/352675.html</trackback:ping><description><![CDATA[<div><div>å˜å‚¨˜q‡ç¨‹</div><div>æ³?: </div><div>(1)在procedure䏿ƒ³ç”¨ddlåQŒå°±å¿…须用execute immediat 'create table text1(id int not null primary key)';</div><div>且必™åÀL˜¾æŽˆæƒ(grant create any table to 用户å?,å¦åˆ™æŠ?insufficient privileges',æ— æƒé™?</div><div>(2)æ¯æ¡è¯å¥éƒ½éœ€ä»?;'¾l“å°¾.</div><div></div><div>1.åŸºæœ¬è¯æ³• : 创å¾ä¸€ä¸ªå˜å‚¨è¿‡½E?如果å˜åœ¨ž®Þp¦†ç›? (æ³?as/is没区åˆ?åªæ˜¯å…¼å®¹åˆ«çš„SQL而已)</div><div>create or replace procedure ˜q‡ç¨‹å?傿•°1 in number ,傿•°2 in number) is</div><div>å˜é‡1 integer:=0;</div><div>å˜é‡2 date;</div><div>exp exception; --定义异常</div><div>begin</div><div> --å˜å‚¨˜q‡ç¨‹ä¸è°ƒç”¨DDL,必须用动æ€SQLæ–ÒŽ(gu¨©)³•</div><div> execute immediate ' create table testtable (testid int not null primary key,testname varchar2(10) ) ';</div><div> execute immediate 'insert into testtable values(1,110) '; </div><div></div><div> raise exp; --抛出异常</div><div>exception --异常处ç†</div><div> when exp then </div><div> dbms_output.put_line( '执行æˆåŠŸ1 '); --æŽ§åˆ¶å°æ‰“å?/div><div> when others then </div><div> dbms_output.put_line( '执行å¤ÞpÓ|0 '); </div><div></div><div>end;</div><div></div><div>2.基本è¯å¥:</div><div>(1)å˜é‡èµ‹å€?/div><div><1>å˜é‡åˆå§‹åŒ–赋å€?=å€?</div><div><2>å˜é‡èµ‹å€? select ....into... from ....; --select ... from ... æ–ÒŽ(gu¨©)³•在å˜å‚¨è¿‡½E‹ä¸æ—¶çš„æ ¼å¼</div><div>select name1,name2 into var1,var2 from table1 </div><div></div><div>(2)For 循环</div><div>For ... in ... LOOP</div><div>--执行è¯å¥</div><div>end LOOP;</div><div></div><div><1>循环éåŽ†æ¸¸æ ‡</div><div>create or replace procedure test() as</div><div> Cursor cursor is select name from student; name varchar(20);</div><div>begin</div><div> for name in cursor LOOP</div><div> begin</div><div> dbms_output.putline(name); </div><div> end;</div><div> end LOOP;</div><div>end test;</div><div></div><div><2>循环é历数组</div><div> create or replace procedure test(varArray in myPackage.TestArray) as</div><div>--(è¾“å…¥å‚æ•°varArray 是自定义的数¾l„类型,定义方å¼è§æ ‡é¢?)</div><div>i number;</div><div>begin</div><div>i := 1; --å˜å‚¨˜q‡ç¨‹æ•°ç»„是è“vå§‹ä½¾|®æ˜¯ä»?开始的åQŒä¸Žjavaã€Cã€C++½{‰è¯a€ä¸åŒã€‚å› ä¸ºåœ¨Oracle䏿œ¬æ˜¯æ²¡æœ‰æ•°¾l?/div><div></div><div>的概å¿ëŠš„åQŒæ•°¾l„其实就是一å¼?/div><div>--è¡?Table),æ¯ä¸ªæ•°ç»„å…ƒç´ ž®±æ˜¯è¡¨ä¸çš„一个记录,所以é历数¾l„æ—¶ž®Þq›¸å½“于从表ä¸çš„½W¬ä¸€æ¡è®°å½•开始éåŽ?/div><div>for i in 1..varArray.count LOOP </div><div>dbms_output.putline('The No.'|| i || 'record in varArray is:'||varArray(i)); </div><div> end LOOP;</div><div>end test;</div><div></div><div>3.ä»£ç æŠ›å‡ºå¼‚å¸¸ç”¨raise (异常å?;</div><div></div><div>4.æ¸¸æ ‡ : </div><div>(1)¾pÈ»Ÿ¾U§æ¸¸æ ?cursor SYS_REFCURSOR;åªèƒ½é€šè¿‡openæ–ÒŽ(gu¨©)³•打开和赋å€?/div><div>OPEN cursor FOR select name1,name2 from table1 where a='1'; --sqlè¯æ³•</div><div>LOOP</div><div> FETCH cursor INTO name1,name2; --åªèƒ½é€šè¿‡fetch into 打开和éåŽ?/div><div> exit when cursor%NOTFOUND; --å¯ç”¨ä¸‰ä¸ªçжæ€?%NOTFOUND(未找到记å½?;%FOUND(扑ֈ°è®?/div><div></div><div>å½?;%ROWCOUNT(当剿¸¸æ ‡æŒ‡å‘的行ä½ç½®)</div><div></div><div> dbms_output.putline(name1||name2);</div><div>END LOOP;</div><div></div><div>5.˜qžæŽ¥˜qç®—½W?: || ,å?ABC'||'123' : ABC123</div><div></div><div>6.å•行注释: --;多行:/**/;</div></div><img src ="http://www.aygfsteel.com/algz/aggbug/352675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">ç´«è¶âˆé£›æšâ†—</a> 2011-06-20 17:12 <a href="http://www.aygfsteel.com/algz/articles/352675.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>mysql è§£å†³ä¸æ–‡ä¹Þq http://www.aygfsteel.com/algz/articles/351345.htmlç´«è¶âˆé£›æšâ†— ç´«è¶âˆé£›æšâ†— Mon, 30 May 2011 08:15:00 GMT http://www.aygfsteel.com/algz/articles/351345.html http://www.aygfsteel.com/algz/comments/351345.html http://www.aygfsteel.com/algz/articles/351345.html#Feedback 0 http://www.aygfsteel.com/algz/comments/commentRss/351345.html http://www.aygfsteel.com/algz/services/trackbacks/351345.html 一看就明了(ji¨£n).与数æ®åº“的连接采用UTF-8. ]]> [转]sqlçš„left join 命ä×o(h¨´)详解 http://www.aygfsteel.com/algz/articles/228220.htmlç´«è¶âˆé£›æšâ†— ç´«è¶âˆé£›æšâ†— Wed, 10 Sep 2008 13:58:00 GMT http://www.aygfsteel.com/algz/articles/228220.html http://www.aygfsteel.com/algz/comments/228220.html http://www.aygfsteel.com/algz/articles/228220.html#Feedback 0 http://www.aygfsteel.com/algz/comments/commentRss/228220.html http://www.aygfsteel.com/algz/services/trackbacks/228220.html
例表a
aid adate
1 a1
2 a2
3 a3
表b
bid bdate
1 b1
2 b2
4 b4
两个表a,b相连æŽ?è¦å–出id相åŒçš„å—ŒD?
select * from a inner join b on a.aid = b.bid˜q™æ˜¯ä»…å–出匹é…的数æ®.
æ¤æ—¶çš„å–出的æ˜?
1 a1 b1
2 a2 b2
那么left join �
select * from a left join b on a.aid = b.bid
首先å–出aè¡¨ä¸æ‰€æœ‰æ•°æ?ç„¶åŽå†åŠ ä¸Šä¸Ža,b匚w…的的数æ®
æ¤æ—¶çš„å–出的æ˜?
1 a1 b1
2 a2 b2
3 a3 ½Iºå—½W?
åŒæ ·çš„也有right join
指的是首先å–出bè¡¨ä¸æ‰€æœ‰æ•°æ?ç„¶åŽå†åŠ ä¸Šä¸Ža,b匚w…的的数æ®
æ¤æ—¶çš„å–出的æ˜?
1 a1 b1
2 a2 b2
4 ½Iºå—½W?b4
LEFT JOIN �LEFT OUTER JOIN�
å·¦å‘å¤–è”æŽ¥çš„¾l“果集包æ‹?LEFT OUTER åå¥ä¸æŒ‡å®šçš„左表的所有行åQŒè€Œä¸ä»…ä»…æ˜¯è”æŽ¥åˆ—æ‰€åŒšw…的行。如果左表的æŸè¡Œåœ¨å³è¡¨ä¸æ²¡æœ‰åŒšw…行,则在相关è”çš„¾l“果集行ä¸å³è¡¨çš„æ‰€æœ‰é€‰æ‹©åˆ—表列å‡ä¸ºç©ºå€¹{€?br />
------------http://www.phpweblog.net/zwws/archive/2007/02/23/944.html
]]> [转]SQLä¸çš„left outer join,inner join,right outer join用法 http://www.aygfsteel.com/algz/articles/228219.htmlç´«è¶âˆé£›æšâ†— ç´«è¶âˆé£›æšâ†— Wed, 10 Sep 2008 13:55:00 GMT http://www.aygfsteel.com/algz/articles/228219.html http://www.aygfsteel.com/algz/comments/228219.html http://www.aygfsteel.com/algz/articles/228219.html#Feedback 0 http://www.aygfsteel.com/algz/comments/commentRss/228219.html http://www.aygfsteel.com/algz/services/trackbacks/228219.html
1 关系代数
åˆåƈ数æ®é›†åˆçš„ç†è®ºåŸº¼‹€æ˜¯å…³¾pÖM»£æ•ŽÍ¼Œå®ƒæ˜¯ç”±E.F.Coddäº?970òq´æå‡ºçš„ã€?br />
在关¾pÖM»£æ•°çš„å½¢å¼åŒ–è¯a€ä¸ï¼š(x¨¬)
? ç”¨è¡¨ã€æˆ–者数æ®é›†åˆè¡¨½Cºå…³¾pÀLˆ–者实体ã€?br />
? 用行表示元组�br />
? 用列表示属性�br />
关系代数包å«ä»¥ä¸‹8个关¾p»è¿½Ž—符
? 选å–――返回满‘ÏxŒ‡å®šæ¡ä»¶çš„行ã€?br />
? 投媄(ji¨£ng)――从数æ®é›†åˆä¸è¿”回指定的列ã€?br />
? ½W›å¡ž®?d¨¡ng)积――是关系的乘法,它将分别æ¥è‡ªä¸¤ä¸ªæ•°æ®é›†åˆä¸çš„行以所有å¯èƒ½çš„æ–¹å¼˜q›è¡Œ¾l„åˆã€?br />
? òq¶â€•―关¾pÈš„åŠ æ³•å’Œå‡æ³•,它å¯ä»¥åœ¨è¡Œçš„æ–¹å‘上åˆòq¶ä¸¤ä¸ªè¡¨ä¸çš„æ•°æ®åQŒå°±åƒæŠŠä¸€ä¸ªè¡¨åž’在å¦ä¸€ä¸ªè¡¨ä¹‹ä¸Šä¸€æ —÷€?br />
? 交――返回两个数æ®é›†åˆæ‰€å…±æœ‰çš„行ã€?br />
? 差――返回åªå±žäºŽä¸€ä¸ªæ•°æ®é›†åˆçš„行ã€?br />
? ˜qžæŽ¥â€•―在水åã^æ–¹å‘上åˆòq¶ä¸¤ä¸ªè¡¨åQŒå…¶æ–ÒŽ(gu¨©)³•是:(x¨¬)ž®†ä¸¤ä¸ªè¡¨ä¸åœ¨å…±åŒæ•°æ®™å¹ä¸Šç›æ€º’匚w…的那些行åˆåƈèµäh¥ã€?br />
? 除――返回两个数æ®é›†ä¹‹é—´çš„ç²¾¼‹®åŒ¹é…ã€?br />
æ¤å¤–åQŒä½œä¸ÞZ¸€¿U实现现代关¾pÖM»£æ•°è¿½Ž—çš„æ–ÒŽ(gu¨©)³•åQŒSQL˜q˜æä¾›äº†(ji¨£n)åQ?br />
? åæŸ¥è¯¢â€•―类ä¼égºŽ˜qžæŽ¥åQŒä½†æ›´çµ‹z»ï¼›åœ¨å¤–部查询ä¸åQŒæ–¹å¼å¯ä»¥ä‹É用表辑ּã€åˆ—表或者数æ®é›†åˆçš„地方都å¯ä»¥ä‹Éç”¨åæŸ¥è¯¢çš„结果ã€?br />
æœ¬ç« ž®†ä¸»è¦è®²˜q°å¤š¿U类型的˜qžæŽ¥ã€ç®€å•çš„å’Œç›¸å…³çš„åæŸ¥è¯¢ã€å‡ ¿U类型的òq¶ã€å…³¾p»é™¤ä»¥åŠ(qi¨¢ng)其他的内å®V€?br />
2 使用˜qžæŽ¥
2.1 ˜qžæŽ¥¾cÕdž‹
在关¾pÖM»£æ•îC¸åQŒè¿žæŽ¥è¿½Ž—是ç”׃¸€ä¸ªç¬›å¡å°”¿U¯è¿½Ž—和一个选喘qç®—æž„æˆçš„。首先用½W›å¡ž®?d¨¡ng)积完æˆå¯¹ä¸¤ä¸ªæ•°æ®é›†åˆçš„ä¹˜è¿½Ž—ï¼Œç„¶åŽå¯¹ç”Ÿæˆçš„¾l“果集刘q›è¡Œé€‰å–˜qç®—åQŒç¡®ä¿?
åªæŠŠåˆ†åˆ«æ¥è‡ªä¸¤ä¸ªæ•°æ®é›†åˆòq¶ä¸”å…ähœ‰é‡å 部分的行åˆåƈ在一赗÷€‚连接的全部æ„义在于在水òqÏx–¹å‘上åˆåƈ两个数æ®é›†åˆåQˆé€šå¸¸æ˜¯è¡¨åQ‰ï¼Œòq¶äñ”生一个新的结果集åˆï¼Œå…¶æ–¹
法是ž®†ä¸€ä¸ªæ•°æ®æºä¸çš„行于å¦ä¸€ä¸ªæ•°æ®æºä¸å’Œå®ƒåŒ¹é…çš„è¡Œç»„åˆæˆä¸€ä¸ªæ–°å…ƒç»„ã€?br />
SQLæä¾›äº?ji¨£n)多¿U类型的˜qžæŽ¥æ–¹å¼åQŒå®ƒä»¬ä¹‹é—´çš„区别在于åQšä»Žç›æ€º’交å çš„ä¸åŒæ•°æ®é›†åˆä¸é€‰æ‹©ç”¨äºŽ˜qžæŽ¥çš„行时所采用的方法ä¸åŒã€?br />
˜qžæŽ¥¾cÕdž‹ 定义
内连æŽ?nbsp; åªè¿žæŽ¥åŒ¹é…çš„è¡?br />
左外˜qžæŽ¥ 包å«å·¦è¾¹è¡¨çš„全部行(ä¸ç®¡åŒ™¾¹çš„è¡¨ä¸æ˜¯å¦å˜åœ¨ä¸Žå®ƒä»¬åŒšw…的行åQ‰ï¼Œä»¥åŠ(qi¨¢ng)匙¾¹è¡¨ä¸å…¨éƒ¨åŒšw…的行
å›_¤–˜qžæŽ¥ 包å«åŒ™¾¹è¡¨çš„全部行(ä¸ç®¡å·¦è¾¹çš„è¡¨ä¸æ˜¯å¦å˜åœ¨ä¸Žå®ƒä»¬åŒšw…的行åQ‰ï¼Œä»¥åŠ(qi¨¢ng)左边表ä¸å…¨éƒ¨åŒšw…的行
全外˜qžæŽ¥ 包å«å·¦ã€å³ä¸¤ä¸ªè¡¨çš„全部行,ä¸ç®¡å¦å¤–ä¸€è¾¹çš„è¡¨ä¸æ˜¯å¦å˜åœ¨ä¸Žå®ƒä»¬åŒ¹é…的行ã€?br />
(H)(theta)˜qžæŽ¥ 使用½{‰å€ég»¥å¤–çš„æ¡äšgæ¥åŒ¹é…å·¦ã€å³ä¸¤ä¸ªè¡¨ä¸çš„行
交剘qžæŽ¥ 生戽W›å¡ž®?d¨¡ng)积åQ它ä¸ä‹É用ä“Qä½•åŒ¹é…æˆ–è€…é€‰å–æ¡äšgåQŒè€Œæ˜¯ç›´æŽ¥ž®†ä¸€ä¸ªæ•°æ®æºä¸çš„æ¯ä¸ªè¡Œä¸Žå¦ä¸€ä¸ªæ•°æ®æºçš„æ¯ä¸ªè¡Œéƒ½ä¸€ä¸€åŒšw…
在INFORMIXä¸è¿žæŽ¥è¡¨çš„æŸ¥è¯?br />
如果FROMå奿Œ‡å®šäº?ji¨£n)多于一个表引用åQŒåˆ™æŸ¥è¯¢ä¼?x¨¬)连接æ¥è‡ªå¤šä¸ªè¡¨çš„行。连接æ¡ä»¶æŒ‡å®šå„列之é—ß_(d¨¢)¼ˆæ¯ä¸ªè¡¨è‡³ž®‘一列)(j¨ª)˜q›è¡Œ˜qžæŽ¥çš„å…³¾p…R€‚å› ä¸ºæ£åœ¨æ¯”较连接æ¡ä»¶ä¸çš„列åQŒæ‰€ä»¥å®ƒä»¬å¿…™åÕd…·æœ‰ä¸€è‡´çš„æ•°æ®¾cÕdž‹ã€?br />
SELECTè¯å¥çš„FROMåå¥å¯ä»¥æŒ‡å®šä»¥ä¸‹å‡ ç§¾cÕdž‹çš„连æŽ?br />
FROMåå¥å…³é”®å?nbsp; 相应的结果集
CROSS JOIN ½W›å¡ž®?d¨¡ng)乘¿U¯ï¼ˆæ‰€æœ‰å¯èƒ½çš„行对åQ?br />
INNER JOIN 仅对满èƒö˜qžæŽ¥æ¡äšgçš„CROSSä¸çš„åˆ?br />
LEFT OUTER JOIN 一个表满èƒöæ¡äšg的行åQŒå’Œå¦ä¸€ä¸ªè¡¨çš„æ‰€æœ‰è¡Œ
RIGHT OUTER JOIN ä¸?strong style="color: black; background-color: #ffff66;">LEFT 相åŒåQŒä½†ä¸¤ä¸ªè¡¨çš„角色互æ¢
FULL
OUTER JOIN LEFT OUTER å’?RIGHT
OUTER 䏿‰€æœ‰è¡Œçš„è¶…é›?br />
2.2 内连接(Inner
Join åQ?br />
内连接是最常è§çš„一¿U连接,它页被称为普通连接,而E.FCoddæœ€æ—©ç§°ä¹‹äØ“(f¨´)自然˜qžæŽ¥ã€?br />
䏋颿˜¯ANSI SQLåQ?2æ ‡å‡†
select *
from t_institution i
inner
join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = "5801"
å…¶ä¸innerå¯ä»¥çœç•¥ã€?br />
½{‰äh(hu¨¢n)于早期的˜qžæŽ¥è¯æ³•
select *
from t_institution i, t_teller t
where i.inst_no = t.inst_no
and i.inst_no = "5801"
2.3 外连�br />
2.3.1 左外˜qžæŽ¥(
Left Outer Jion)
select *
from t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
å…¶ä¸
outer å¯ä»¥çœç•¥ã€?br />
2.3.2 å›_¤–˜qžæŽ¥(Rigt
Outer Jion)
select *
from t_institution i
right
outer join t_teller t
on i.inst_no = t.inst_no
2.3.3 全外˜qžæŽ¥(Full
Outer )
全外˜qžæŽ¥˜q”回å‚与˜qžæŽ¥çš„两个数æ®é›†åˆä¸çš„全部数æ®ï¼Œæ— 论它们是å¦å…ähœ‰ä¸Žä¹‹ç›¸åŒ¹é…的行。在功能上,它ç‰ä»·äºŽå¯¹è¿™ä¸¤ä¸ªæ•°æ®é›†åˆåˆ†åˆ«˜q›è¡Œå·¦å¤–˜qžæŽ¥å’Œå³å¤–连接,然åŽå†ä‹É用消去é‡å¤è¡Œçš„åÆˆæ“作ž®†ä¸Š˜qîC¸¤ä¸ªç»“果集åˆåƈä¸ÞZ¸€ä¸ªç»“果集ã€?br />
在现实生‹zÖM¸åQŒå‚照完整性约æŸå¯ä»¥å‡ž®‘对于全外连接的使用åQŒä¸€èˆ¬æƒ…况下左外˜qžæŽ¥ž®Þpƒö够了(ji¨£n)。在数æ®åº“䏿²¡æœ‰åˆ©ç”¨æ¸…æ™°ã€è§„范的¾U¦æŸæ¥é˜²èŒƒé”™è¯¯æ•°æ®æƒ…况下åQŒå…¨å¤–连接就å˜å¾—éžå¸¸æœ‰ç”¨äº?ji¨£n)ï¼Œä½ å¯ä»¥ä‹Éç”¨å®ƒæ¥æ¸…ç†æ•°æ®åº“ä¸çš„æ•°æ®ã€?br />
select *
from t_institution i
full
outer join t_teller t
on i.inst_no = t.inst_no
2.3.4 外连接与æ¡äšgé…åˆä½¿ç”¨
当在内连接查询ä¸åŠ å…¥æ¡äšgæ˜¯ï¼Œæ— è®ºæ˜¯å°†å®ƒåŠ å…¥åˆ°
join åå¥åQŒè¿˜æ˜¯åŠ å…¥åˆ°whereåå¥åQŒå…¶æ•ˆæžœæ˜¯å®Œå…¨ä¸€æ ïL(f¨¥ng)š„åQŒä½†å¯¹äºŽå¤–连接情况就ä¸åŒäº?ji¨£n)。当把æ¡ä»¶åŠ å…¥åˆ°
join å?
奿—¶åQŒSQL Serverã€Informixä¼?x¨¬)返回外˜qžæŽ¥è¡¨çš„全部行,然åŽä½¿ç”¨æŒ‡å®šçš„æ¡ä»¶è¿”å›žç¬¬äºŒä¸ªè¡¨çš„è¡Œã€‚å¦‚æžœå°†æ¡äšg攑ֈ°whereåå¥ä¸ï¼ŒSQL
Serverž®†ä¼š(x¨¬)首先˜q›è¡Œ˜qžæŽ¥æ“作åQŒç„¶åŽä‹É用whereåå¥å¯¹è¿žæŽ¥åŽçš„行˜q›è¡Œ½{›é€‰ã€‚下é¢çš„两个查询展示äº?ji¨£n)æ¡ä»¶æ”¾¾|®ä½å对执行¾l“果的媄(ji¨£ng)å“:(x¨¬)
æ¡äšgåœ?strong style="color: black; background-color: #99ff99;">joinåå¥
select *
from t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
and i.inst_no = “5801”
¾l“果是:(x¨¬)
inst_no inst_name inst_no teller_no teller_name
5801 天河�nbsp; 5801 0001 tom
5801 天河�nbsp; 5801 0002 david
5802 ‘Šç§€åŒ?br />
5803 白云�br />
æ¡äšg在whereåå¥
select *
from t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = “5801”
¾l“果是:(x¨¬)
inst_no inst_name inst_no teller_no teller_name
5801 天河�nbsp; 5801 0001 tom
5801 天河�nbsp; 5801 0002 david
2.4 自èín˜qžæŽ¥
自èín˜qžæŽ¥æ˜¯æŒ‡åŒä¸€ä¸ªè¡¨è‡ªå·±ä¸Žè‡ªå·Þp¿›è¡Œè¿žæŽ¥ã€‚è¿™¿U一元连接通常用于从自åå…³¾p»ï¼ˆä¹Ÿç§°ä½œé€’归关系åQ‰ä¸æŠ½å–æ•°æ®ã€‚例如ähåŠ›èµ„æºæ•°æ®åº“ä¸é›‡å‘˜ä¸Žè€æ¿çš„å…³¾p…R€?br />
下é¢ä¾‹åæ˜¯åœ¨æœºæž„è¡¨ä¸æŸ¥æ‰¾æœ¬æœºæž„和上çñ”机构的信æ¯ã€?br />
select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name
from t_institution i
join t_institution s
on i.superior_inst = s.inst_no
¾l“果是:(x¨¬)
superior_inst sup_inst_name inst_no inst_name
800 òq¿å·žå¸?nbsp; 5801 天河åŒ?br />
800 òq¿å·žå¸?nbsp; 5802 ‘Šç§€åŒ?br />
800 òq¿å·žå¸?nbsp; 5803 白云åŒ?br />
2.5 交å‰(æ— é™åˆ? ˜qžæŽ¥
交剘qžæŽ¥ç”¨äºŽå¯¹ä¸¤ä¸ªæºè¡¨è¿›è¡Œçº¯å…³ç³»ä»£æ•°çš„乘˜q算。它ä¸ä‹É用连接æ¡ä»¶æ¥é™åˆ¶¾l“果集åˆåQŒè€Œæ˜¯ž®†åˆ†åˆ«æ¥è‡ªä¸¤ä¸ªæ•°æ®æºä¸çš„行以所有å¯èƒ½çš„æ–¹å¼˜q›è¡Œ¾l„åˆã€‚æ•°æ®é›†åˆä¸
一的æ¯ä¸ªè¡Œéƒ½è¦ä¸Žæ•°æ®é›†åˆäºŒä¸çš„æ¯ä¸€ä¸ªè¡Œåˆ†åˆ«¾l„æˆä¸€ä¸ªæ–°çš„行。例如,如果½W¬ä¸€ä¸ªæ•°æ®æºä¸æœ‰5个行åQŒè€Œç¬¬äºŒä¸ªæ•°æ®æºä¸æœ?个行åQŒé‚£ä¹ˆåœ¨å®ƒä»¬ä¹‹é—´˜q›è¡Œäº¤å‰˜qžæŽ¥
ž®×ƒ¼š(x¨¬)产生20个行。äh们将˜q™ç§¾cÕdž‹çš„结果集¿UîCØ“(f¨´)½W›å¡ž®?d¨¡ng)乘¿U¯ã€?br />
大多æ•îCº¤å‰è¿žæŽ¥éƒ½æ˜¯ç”±äºŽé”™è¯¯æ“ä½œè€Œé€ æˆçš„;但是它们å´éžå¸”R€‚åˆå‘æ•°æ®åº“ä¸å¡«å……例忕°æ®ï¼Œæˆ–者预先创å»ÞZ¸€äº›ç©ºè¡Œä»¥ä¾¿äØ“(f¨´)½E‹åºæ‰§è¡ŒæœŸé—´æ‰€è¦å¡«å……的数æ®ä¿ç•™½Iºé—´ã€?br />
select *
from t_institution i
cross
join t_teller t
在交å‰è¿žæŽ¥ä¸æ²¡æœ‰onæ¡äšgåå¥
-----http://hi.baidu.com/llscompazz/blog/item/dc5e23d9ce2b62eb39012fb4.html
]]>
[转]SQLä¸çš„å„ç§JOINåQˆinner join,full outer join,left join,right join,cross join åQ?/title><link>http://www.aygfsteel.com/algz/articles/228218.html</link><dc:creator>ç´«è¶âˆé£›æšâ†—</dc:creator><author>ç´«è¶âˆé£›æšâ†—</author><pubDate>Wed, 10 Sep 2008 13:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/228218.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/228218.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/228218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/228218.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/228218.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt; color: #868374;">
<p style="margin: 0cm 0cm 0pt; line-height: 150%; text-align: left;" align="left"><font color="#000000"><strong><span style="font-size: 12pt; line-height: 150%;">SQL</span></strong><strong><span style="font-size: 12pt; line-height: 150%;">ä¸çš„å„ç§JOIN</span></strong><strong><span style="font-size: 12pt; line-height: 150%;">åQ?span>inner
join,full outer join,left join,right join,cross join
</span>åQ?/span></strong></font></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font color="#000000" size="3">SQL</font><font color="#000000" size="3">ä¸çš„˜qžæŽ¥å¯ä»¥åˆ†äØ“(f¨´)内连接,外连接,以åŠ(qi¨¢ng)交剘qžæŽ¥ <span>(åÏx˜¯½W›å¡ž®?d¨¡ng)ç§?/span></font><font size="3"><font color="#000000">) <br />
<br />
a. 交剘qžæŽ¥</font></font><font size="3"><font color="#000000"><span>CROSS
JOIN<br />
</span>如果ä¸å¸¦WHEREæ¡äšgåå¥åQŒå®ƒ?y¨u)®†ä¼?x¨¬)˜q”回被连接的两个表的½W›å¡ž®?d¨¡ng)积åQŒè¿”回结果的行数½{‰äºŽä¸¤ä¸ªè¡¨è¡Œæ•°çš„乘积åQ?/font></font><br />
<br />
<font color="#000000" size="3">举例,下列Aã€Bã€?span>C
</span>执行¾l“果相åŒåQŒä½†æ˜¯æ•ˆçއä¸ä¸€æ øP¼š(x¨¬)</font><span><br />
<font size="3"><font color="#000000">A:SELECT
* FROM table1 CROSS JOIN table2<br />
B:SELECT * FROM
table1,table2</font></font></span></p>
</span>
<p style="margin: 0cm 0cm 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left;" align="left"><font size="3"><font color="#000000">C:<span>select * from table1 a inner join table2
b</span></font></font></p>
<p style="margin: 0cm 0cm 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left;" align="left"><span><br />
<font color="#000000" size="3">A:select a.*,b.* from table1
a,table2 b where a.id=b.id<br />
B:select * from table1 a cross join table2 b where a.id=b.id
(</font></span><span><font size="3"><font color="#000000">注:(x¨¬)<span>cross
join</span>åŽåŠ æ¡äšgåªèƒ½ç”¨where,ä¸èƒ½ç”¨on)</font></font></span><br />
<font color="#000000" size="3">C:</font><font size="3"><font color="#000000"><span>select * from table1
a inner join table2 b on a.id=b.id</span></font></font></p>
<p style="margin: 0cm 0cm 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left;" align="left"><br />
<font color="#000000" size="3">一般ä¸å»ø™®®ä½¿ç”¨æ–ÒŽ(gu¨©)³•<span>Aå’ŒBåQŒå› 为如果有WHEREåå¥çš„è¯åQŒå¾€å¾€ä¼?x¨¬)先生æˆä¸¤ä¸ªè¡¨è¡Œæ•îC¹˜¿U¯çš„行的数æ®è¡¨ç„¶åŽæ‰æ ÒŽ(gu¨©)®WHEREæ¡äšg从ä¸é€‰æ‹©ã€?/span></font><font size="3"><font color="#000000"><span>
<br />
</span>å› æ¤åQŒå¦‚æžœä¸¤ä¸ªéœ€è¦æ±‚交际的表太大åQŒå°†ä¼?x¨¬)éžå¸”Ržå¸¸æ…¢åQŒä¸å»ø™®®ä½¿ç”¨ã€?/font></font><br />
<br />
<font color="#000000" size="3">b. </font><font color="#000000" size="3">内连�/font><font size="3"><font color="#000000"><span>INNER
JOIN<br />
</span>ä¸¤è¾¹è¡¨åŒæ—¶ç¬¦åˆæ¡ä»¶çš„¾l„åˆ</font></font></p>
<p style="margin: 0cm 0cm 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left;" align="left"><span><font color="#000000" size="3">如果仅仅使用</font><span><br />
<font size="3"><font color="#000000">SELECT * FROM table1 INNER JOIN
table2</font></font></span></span></p>
<p style="margin: 0cm 0cm 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left;" align="left"><font color="#000000" size="3">内连接如果没有指定连接æ¡ä»¶çš„è¯ï¼Œå’Œç¬›å¡å°”¿U¯çš„交剘qžæŽ¥¾l“æžœä¸€æ øP¼Œä½†æ˜¯ä¸åŒäºŽç¬›å¡å°”¿U¯çš„地方是,没有½W›å¡ž®?d¨¡ng)ç§¯é‚£ä¹ˆå¤æ‚è¦å…ˆç”Ÿæˆè¡Œæ•°ä¹˜ç§¯çš„æ•°æ®è¡¨åQŒå†…˜qžæŽ¥çš„æ•ˆçއè¦é«˜äºŽ½W›å¡ž®?d¨¡ng)积的交å‰è¿žæŽ¥ã€?/font><span><br />
<br />
<font size="3"><font color="#000000">但是通常情况下,使用<span>INNER
JOIN</span>éœ€è¦æŒ‡å®šè¿žæŽ¥æ¡ä»¶ã€?/font></font></span></p>
<p style="margin: 0cm 0cm 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left;" align="left"><font size="3"><font color="#000000">***************关于½{‰å€ÆD¿žæŽ¥å’Œè‡ªç„¶˜qžæŽ¥</font></font></p>
<p style="margin: 0cm 0cm 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left;" align="left"><font size="3"><font color="#000000">½{‰å€ÆD¿žæŽ?span>(=å·åº”用于˜qžæŽ¥æ¡äšg<span>,
</span>ä¸ä¼š(x¨¬)去除é‡å¤çš„列)</span></font></font></p>
<p style="margin: 0cm 0cm 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left;" align="left"><font size="3"><font color="#000000">自然˜qžæŽ¥(ä¼?x¨¬)去除é‡å¤çš„å?</font></font></p>
<p style="margin: 0cm 0cm 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left;" align="left"><font color="#000000" size="3">æ•°æ®åº“çš„˜qžæŽ¥˜q算都是自然˜qžæŽ¥åQŒå› ä¸ÞZ¸å…许有é‡å¤çš„行(元组åQ‰å˜åœ¨ã€?/font><br />
<font size="3"><font color="#000000">例如åQ?/font></font></p>
<p style="margin: 0cm 0cm 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: left;" align="left"><span><font color="#000000" size="3">SELECT * FROM table1 AS a INNER JOIN table2 AS b on
a.column=b.column<br />
<br />
c. </font></span><span><font color="#000000" size="3">外连�/font><font size="3"><font color="#000000"><span>OUTER
JOIN<br />
</span>指定æ¡äšg的内˜qžæŽ¥åQŒä»…仅返回符åˆè¿žæŽ¥æ¡ä»¶çš„æ¡ç›®ã€?/font></font><br />
<font color="#000000" size="3">外连接则ä¸åŒåQŒè¿”回的¾l“æžœä¸ä»…包嫽W¦åˆ˜qžæŽ¥æ¡äšg的行åQŒè€Œä¸”包括左表(左外˜qžæŽ¥æ—?span>),
</span>匙¡¨(匙¿žæŽ¥æ—¶)或者两边连æŽ?全外˜qžæŽ¥æ—?的所有数æ®è¡Œã€?/font><br />
<br />
<font color="#000000" size="3">1)</font><font color="#000000" size="3">左外˜qžæŽ¥</font><font size="3"><font color="#000000"><span>LEFT [OUTER] JOIN
<br />
</span>昄¡¤º½W¦åˆæ¡äšg的数æ®è¡ŒåQŒåŒæ—¶æ˜¾½Cºå·¦è¾ÒŽ(gu¨©)•°æ®è¡¨ä¸ç¬¦åˆæ¡ä»¶çš„æ•°æ®è¡Œï¼ŒåŒ™¾¹æ²¡æœ‰å¯¹åº”çš„æ¡ç›®æ˜¾½C?/font></font><font size="3"><font color="#000000">NULL<br />
例如</font></font><span><br />
<font color="#000000" size="3">SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON
a.column=b.column<br />
2)</font></span><font color="#000000" size="3">å›_¤–˜qžæŽ¥</font><font size="3"><font color="#000000"><span>RIGHT [OUTER]
JOIN<br />
</span>昄¡¤º½W¦åˆæ¡äšg的数æ®è¡ŒåQŒåŒæ—¶æ˜¾½Cºå³è¾ÒŽ(gu¨©)•°æ®è¡¨ä¸ç¬¦åˆæ¡ä»¶çš„æ•°æ®è¡Œï¼Œå·¦è¾¹æ²¡æœ‰å¯¹åº”çš„æ¡ç›®æ˜¾½C?/font></font><font size="3"><font color="#000000">NULL<br />
例如</font></font><span><br />
<font color="#000000" size="3">SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON
a.column=b.column<br />
3)</font></span><font color="#000000" size="3">全外˜qžæŽ¥</font><font size="3"><font color="#000000"><span>full [outer]
join<br />
</span>昄¡¤º½W¦åˆæ¡äšg的数æ®è¡ŒåQŒåŒæ—¶æ˜¾½Cºå·¦å³ä¸½W¦åˆæ¡äšg的数æ®è¡ŒåQŒç›¸åº”的左å³ä¸¤è¾¹æ˜„¡¤ºNULLåQŒå³æ˜„¡¤ºå·¦è¿žæŽ¥ã€å³˜qžæŽ¥å’Œå†…˜qžæŽ¥çš„åÆˆé›?/font></font></span></p>
------http://hi.baidu.com/magickerr/blog/item/393c0a01aa13290b7aec2c63.html
<img src ="http://www.aygfsteel.com/algz/aggbug/228218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">ç´«è¶âˆé£›æšâ†—</a> 2008-09-10 21:53 <a href="http://www.aygfsteel.com/algz/articles/228218.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>Hibernate 外键兌™”的问题解å†Ïx–¹æ³?/title><link>http://www.aygfsteel.com/algz/articles/197804.html</link><dc:creator>ç´«è¶âˆé£›æšâ†—</dc:creator><author>ç´«è¶âˆé£›æšâ†—</author><pubDate>Fri, 02 May 2008 14:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/197804.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/197804.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/197804.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/197804.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/197804.html</trackback:ping><description><![CDATA[一.å…ähœ‰å¤–键的表æ ? HQL查询---"from A¾c?报错.<br />
解决æ–ÒŽ(gu¨©)³•: ä¸èƒ½æ¨¡ç³ŠæŸ¥è¯¢,需指定查询的属æ€? å¦? "select 别å.属æ€?from A¾c?as 别å".<br />
(æ³?有时候问题就是那么的奇æ€?如é‡åˆîC¸Š˜q°é—®é¢?å¯ä»¥è¯•试˜q™ä¸ªæ–ÒŽ(gu¨©)³•.MYSQL6.0å¥½åƒæ²¡è¿™é—®é¢˜;5.0å¥½åƒæœ?)<br />
<br />
äº?A表的外键定义B表的éžä¸»é”? HQL查询˜q”回¾l“果为空值或报空指针错误或类型è{æ¢å¤±è´?<br />
解决æ–ÒŽ(gu¨©)³•: å› äØ“(f¨´)Hibernate é»˜è®¤å¤–é”®çš„å…³è”æ˜¯ä¸»é”®, æ‰€ä»¥éœ€åŠ ä¸Š<many-to-one property-ref="å…Œ™”¾cÈš„属æ€? ......> <br />
å…Œ™”¾c?HBM.XML--- <br />
<set name="as" inverse="true"><br />
<key property-ref="content"><br />
<column name="bc" length="45" not-null="true" /><br />
</key><br />
<one-to-many class="com.a.A" /><br />
</set>
<img src ="http://www.aygfsteel.com/algz/aggbug/197804.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">ç´«è¶âˆé£›æšâ†—</a> 2008-05-02 22:55 <a href="http://www.aygfsteel.com/algz/articles/197804.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>主表的键是从表的外键,外键的çñ”è? http://www.aygfsteel.com/algz/articles/191218.htmlç´«è¶âˆé£›æšâ†— ç´«è¶âˆé£›æšâ†— Mon, 07 Apr 2008 04:05:00 GMT http://www.aygfsteel.com/algz/articles/191218.html http://www.aygfsteel.com/algz/comments/191218.html http://www.aygfsteel.com/algz/articles/191218.html#Feedback 0 http://www.aygfsteel.com/algz/comments/commentRss/191218.html http://www.aygfsteel.com/algz/services/trackbacks/191218.html
从表: N�
ä¸»è¡¨çš„é”®åˆ é™¤,ä»Žè¡¨ä¸Žä¹‹å¯¹åº”çš„å¤–é”®ä¹Ÿåˆ é™¤.
ä»Žè¡¨çš„å¤–é”®åˆ é™?ä¸»è¡¨æ— ååº?
ON DELETE/UPDATE CASCADE,åœ¨å¤–é”®å®šä¹‰æ—¶åŠ ä¸Š.
以下内容摘自:http://www.jianglb.com/2007/09/02/mysql-foreign-key.html
外键的作用:(x¨¬)
ä¿æŒæ•°æ®ä¸€è‡´æ€§ï¼Œå®Œæ•´æ€§ï¼Œä¸»è¦ç›®çš„æ˜¯æŽ§åˆ¶å˜å‚¨åœ¨å¤–键表ä¸çš„æ•°æ®ã€?ä½¿ä¸¤å¼ è¡¨å½¢æˆå…Œ™”åQŒå¤–é”®åªèƒ½å¼•用外表ä¸çš„列的å€û|¼
例如åQ?br />
a b 两个�br />
a表ä¸å˜æœ‰ 客户åøP¼Œå®¢æˆ·åç§°
b表ä¸å˜æœ‰ æ¯ä¸ªå®¢æˆ·çš„订å?br />
有了(ji¨£n)外键å?br />
ä½ åªèƒ½åœ¨¼‹®ä¿¡b è¡¨ä¸æ²¡æœ‰å®¢æˆ·x的订å•åŽåQŒæ‰å¯ä»¥åœ¨a表ä¸åˆ 除客户x
å»ºç«‹å¤–é”®çš„å‰æï¼š(x¨¬) 本表的列必须与外键类型相å?外键必须是外表主é”?ã€?
指定主键关键å—:(x¨¬) foreign key(列å)
引用外键关键å—:(x¨¬) references <外键表å>(外键列å)
事äšg触å‘é™åˆ¶: on deleteå’Œon update , å¯è®¾å‚æ•°cascade(è·Ÿéšå¤–键改动), restrict(é™åˆ¶å¤–表ä¸çš„外键改动),set Null(讄¡©ºå€û|¼‰(j¨ª),set DefaultåQˆè®¾é»˜è®¤å€û|¼‰(j¨ª),[默认]no action
例如åQ?
outTableè¡?主键 id ¾cÕdž‹ int
创å¾å«æœ‰å¤–键的表åQ?br />
create table temp(
id int,
name char(20),
foreign key(id) references outTable(id) on delete cascade on update cascade);
说明åQšæŠŠidåˆ?è®¾äØ“(f¨´)外键 å‚照外表outTableçš„idåˆ?å½“å¤–é”®çš„å€¼åˆ é™?本表ä¸å¯¹åº”的列ç›é™?当外键的值改å?本表ä¸å¯¹åº”的列值改å˜ã€?
]]> [转]在MySQLä¸åˆ©ç”¨å¤–键实现çñ”è”åˆ é™¤ï¼ http://www.aygfsteel.com/algz/articles/191215.htmlç´«è¶âˆé£›æšâ†— ç´«è¶âˆé£›æšâ†— Mon, 07 Apr 2008 04:00:00 GMT http://www.aygfsteel.com/algz/articles/191215.html http://www.aygfsteel.com/algz/comments/191215.html http://www.aygfsteel.com/algz/articles/191215.html#Feedback 0 http://www.aygfsteel.com/algz/comments/commentRss/191215.html http://www.aygfsteel.com/algz/services/trackbacks/191215.html
下é¢åQŒæˆ‘们先创å¾ä»¥ä¸‹‹¹‹è¯•用数æ®åº“表:(x¨¬)
CREATE TABLE `roottb` (
`id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,
`data` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) TYPE=InnoDB;
CREATE TABLE `subtb` (
`id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,
`rootid` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`data` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
INDEX (`rootid`),
FOREIGN KEY (`rootid`) REFERENCES roottb(`id`) ON DELETE CASCADE
) TYPE=InnoDB;
注æ„åQ?
1ã€å¿…™åÖM‹É用InnoDB引擎åQ?
2ã€å¤–键必™åÕd¾ç«‹çƒ¦(ch¨³)引(INDEXåQ‰ï¼›
3ã€å¤–键绑定关¾p»è¿™é‡Œä‹É用了(ji¨£n)“ ON DELETE CASCADE”åQŒæ„æ€æ˜¯å¦‚果外键对应数æ®è¢«åˆ 除,ž®†å…³è”æ•°æ®å®Œå…¨åˆ 除,更多信æ¯è¯·å‚考MySQL手册ä¸å…³äºŽInnoDB的文档;
å¥½ï¼ŒæŽ¥ç€æˆ‘们冿¥æ’å…¥‹¹‹è¯•æ•°æ®åQ?
INSERT INTO `roottb` (`id`,`data`)
VALUES ('1', 'test root line 1'),
('2', 'test root line 2'),
('3', 'test root line 3');
INSERT INTO `subtb` (`id`,`rootid`,`data`)
VALUES ('1', '1', 'test sub line 1 for root 1'),
('2', '1', 'test sub line 2 for root 1'),
('3', '1', 'test sub line 3 for root 1'),
('4', '2', 'test sub line 1 for root 2'),
('5', '2', 'test sub line 2 for root 2'),
('6', '2', 'test sub line 3 for root 2'),
('7', '3', 'test sub line 1 for root 3'),
('8', '3', 'test sub line 2 for root 3'),
('9', '3', 'test sub line 3 for root 3');
æˆ‘ä»¬å…ˆçœ‹ä¸€ä¸‹å½“å‰æ•°æ®è¡¨çš„状æ€ï¼š(x¨¬)
mysql>; show tables;
+----------------+
| Tables_in_test |
+----------------+
| roottb |
| subtb |
+----------------+
2 rows in set (0.00 sec)
mysql>; select * from `roottb`;
+----+------------------+
| id | data |
+----+------------------+
| 1 | test root line 1 |
| 2 | test root line 2 |
| 3 | test root line 3 |
+----+------------------+
3 rows in set (0.05 sec)
mysql>; select * from `subtb`;
+----+--------+----------------------------+
| id | rootid | data |
+----+--------+----------------------------+
| 1 | 1 | test sub line 1 for root 1 |
| 2 | 1 | test sub line 2 for root 1 |
| 3 | 1 | test sub line 3 for root 1 |
| 4 | 2 | test sub line 1 for root 2 |
| 5 | 2 | test sub line 2 for root 2 |
| 6 | 2 | test sub line 3 for root 2 |
| 7 | 3 | test sub line 1 for root 3 |
| 8 | 3 | test sub line 2 for root 3 |
| 9 | 3 | test sub line 3 for root 3 |
+----+--------+----------------------------+
9 rows in set (0.01 sec)
嗯,一切都æ£å¸¸åQŒå¥½åQŒä¸‹é¢æˆ‘们è¦è¯•验我们的çñ”è”åˆ é™¤åŠŸèƒ½äº†(ji¨£n)ã€?
我们ž®†åªåˆ 除roottb表ä¸idä¸?的数æ®è®°å½•,看看subtb表ä¸rootidä¸?的相兛_¾Uªå½•是å¦ä¼?x¨¬)è‡ªåŠ¨åˆ é™¤ï¼?x¨¬)
mysql>; delete from `roottb` where `id`='2';
Query OK, 1 row affected (0.03 sec)
mysql>; select * from `roottb`;
+----+------------------+
| id | data |
+----+------------------+
| 1 | test root line 1 |
| 3 | test root line 3 |
+----+------------------+
2 rows in set (0.00 sec)
mysql>; select * from `subtb`;
+----+--------+----------------------------+
| id | rootid | data |
+----+--------+----------------------------+
| 1 | 1 | test sub line 1 for root 1 |
| 2 | 1 | test sub line 2 for root 1 |
| 3 | 1 | test sub line 3 for root 1 |
| 7 | 3 | test sub line 1 for root 3 |
| 8 | 3 | test sub line 2 for root 3 |
| 9 | 3 | test sub line 3 for root 3 |
+----+--------+----------------------------+
6 rows in set (0.01 sec)
嗯,看subtb表ä¸å¯¹åº”数殼‹®å®žè‡ªåŠ¨åˆ é™¤äº?ji¨£n),‹¹‹è¯•æˆåŠŸã€?
¾l“论åQšåœ¨MySQLä¸åˆ©ç”¨å¤–键实现çñ”è”åˆ é™¤æˆåŠŸï¼
-----------转帖:http://www.chinaunix.net/jh/17/462977.html
]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º
°¢ÀÉÆ×óÆì |
¸Ê×ÎÏØ |
³Ê¹±ÏØ |
ÜÆ½ |
ÓÒÓñÏØ |
Ìì×£ |
·ï³ÇÊÐ |
᯹®ÏØ |
ÐÂÓªÊÐ |
ÎÚÉóÆì |
½Ô´ÏØ |
»´ÑôÏØ |
̨ɽÊÐ |
ÓÀÊ¤ÏØ |
ÇàÁú |
¶àÂ×ÏØ |
°¢ÍßÌáÏØ |
³¤º£ÏØ |
ÇåË®ºÓÏØ |
ʯ¼ÒׯÊÐ |
ͬÐÄÏØ |
¶«·½ÊÐ |
ÎÌÅ£ÌØÆì |
IJ¶¨ÏØ |
ÙñÖÝÊÐ |
°Ý³ÇÏØ |
Ò¦°²ÏØ |
Ì©À´ÏØ |
ÇØ°²ÏØ |
ÀäË®½ÊÐ |
ÄϺÍÏØ |
¶«¸ÛÊÐ |
³¤É³ÏØ |
ÔªÀÊÇø |
̨°²ÏØ |
º¼½õºóÆì |
ÂåÑôÊÐ |
¡°²ÏØ |
¹®ÁôÏØ |
¾¸ÖÝ |
ÎäÍþÊÐ |