ºìÁªLinuxÃÅ»§
Linux°ïÖú

Oracle²éѯrownumºÍrowidµÄÇø±ð

·¢²¼Ê±¼ä:2008-10-17 00:08:38À´Ô´:ºìÁª×÷Õß:nilao
¡¡¡¡ÔÚOracleÖУ¬ÓÐÒ»¸öºÜÓÐȤµÄ¶«Î÷£¬ÄǾÍÊÇrownum¡£µ±Äã´Óij¸ö±íÖвéѯÊý¾ÝµÄʱºò£¬·µ»ØµÄ½á¹û¼¯Öж¼»á´øÓÐrownumÕâ¸ö×ֶΣ¬¶øÇÒÓÐʱºòÒ²¿ÉÒÔʹÓÃrownum½øÐÐһЩÌõ¼þ²éѯ¡£

¡¡¡¡ÔÚ²éѯÖУ¬ÎÒÃÇ¿ÉÒÔ×¢Òâµ½£¬ÀàËÆÓÚ¡°select xx from table where rownum < n¡±(n>1)ÕâÑùµÄ²éѯÊÇÓÐÕýÈ·º¬ÒåµÄ£¬¶ø¡°select xx from table where rownum = n¡±ÕâÑùµÄ²éѯֻÔÚn=1µÄʱºò³ÉÁ¢£¬¡°select xx from table where rownum > n¡±(n>1)ÕâÑùµÄ²éѯֻÄܵõ½Ò»¸ö¿Õ¼¯¡£ÁíÍâ¡°select xx from table where rownum > 0¡±Õâ¸ö²éѯ»á·µ»ØËùÓеļǼ¡£ÕâÊÇΪʲôÄØ?Ô­Òò¾ÍÔÚÓÚOracle¶ÔrownumµÄ´¦ÀíÉÏ£¬rownumÊÇÔڵõ½½á¹û¼¯µÄʱºò²úÉúµÄ£¬ÓÃÓÚ±ê¼Ç½á¹û¼¯Öнá¹û˳ÐòµÄÒ»¸ö×ֶΣ¬Õâ¸ö×ֶα»³ÆΪ¡°Î±ÊýÁС±£¬Ò²¾ÍÊÇÊÂʵÉϲ»´æÔÚµÄÒ»¸öÊýÁС£ËüµÄÌصãÊÇ°´Ë³Ðò±ê¼Ç£¬¶øÇÒÊÇÖð´ÎµÝ¼ÓµÄ£¬»»¾ä»°Ëµ¾ÍÊÇÖ»ÓÐÓÐ rownum=1µÄ¼Ç¼£¬²Å¿ÉÄÜÓÐrownum=2µÄ¼Ç¼¡£

¡¡¡¡ÈÃÎÒÃÇ»ØÍ·À´·ÖÎöÒ»ÏÂÔÚwhereÖÐʹÓÃrownum×÷Ϊ²éѯÌõ¼þµÄÇé¿ö¡£ÔÚrownumÈ¡=1£¬»òÕßrownum <= n (n>1)µÄʱºò£¬Ã»ÓÐÎÊÌâ¡£ÄÇôΪʲôµ±Ìõ¼þΪrownum = n»òÕßrownum >= nʱÃ÷Ã÷ÓÐÊý¾ÝÈ´Ö»Äܵõ½Ò»¸ö¿Õ¼¯ÄØ?¼ÙÉèÎÒÃǵIJéѯÌõ¼þΪrownum = 2£¬ÄÇôÔÚ²éѯ³öµÄµÚÒ»Ìõ¼Ç¼µÄʱºò£¬oracle±ê¼Ç´ËÌõ¼Ç¼rownumΪ1£¬½á¹û·¢ÏÖºÍrownum=2µÄÌõ¼þ²»·û£¬ÓÚÊǽá¹û¼¯Îª¿Õ¡£Ð´µ½ÕâÀÎÒºöÈ»ÓÐÒ»¸öÓÐȤµÄÏë·¨£º¼ÙÈçÓÐÒ»Ìõ²éѯÓï¾äΪselect xx,yy from table where zz > 20 and rownum < 10£¬ÄÇôÔÚÖ´ÐеÄʱºò£¬ÊÇÏÈ°´ÕÕzz>20µÄÌõ¼þ²éѯ³öÒ»¸ö½á¹û¼¯£¬È»ºó°´ÕÕrownumÈ¡³öÇ°10Ìõ·µ»Ø?»¹ÊÇÔÚ°´ÕÕzz>20µÄÌõ¼þÏȲéѯ£¬È»ºóÓÐÒ»¸ö¼Ç¼¾Í±ê¼ÇÒ»¸örownum£¬µ½rownum<10µÄʱºò¾ÍÍ£Ö¹²éѯ?ÎÒ¾õµÃÓ¦¸ÃÊǺóÕߣ¬Ò²¾ÍÊÇÔÚÖ´ÐÐÓï¾äµÄʱºò£¬²»ÊÇ×öfull scan£¬¶øÊÇÈ¡¹»Êý¾Ý¾ÍÍ£Ö¹²éѯ¡£ÒªÑéÖ¤Õâ¸öÏë·¨Ó¦¸ÃºÜ¼òµ¥£¬ÕÒÒ»¸öÊý¾ÝÁ¿·Ç³£´óµÄ±í½øÐвéѯ¾Í¿ÉÒÔÁË¡£¿ÉϧĿǰÎÒûÓÐÕâÑùµÄ±í¡£

¡¡¡¡ÎÒÃÇ¿ÉÒÔ¿´³ö£¬Ö±½ÓʹÓÃrownumÊÇÒªÊܵ½ÏÞÖƵġ£µ«ÊǺÜÈÝÒ×Óöµ½ÕâÑùµÄÐèÇó¡°²é³ö·ûºÏÌõ¼þµÄµÚxxÌõµ½µÚxxÌõ¼Ç¼¡±£¬±ÈÈçÒ³ÃæµÄ·ÖÒ³´¦Àí¡£Õâ¸öʱºòÈçºÎ¹¹Ôì³öÊʺÏ×Ô¼ºµÄ½á¹û¼¯?àÅ£¬Ç½±ßÄÇλ˵ȫȡ³öÀ´ÊÖ¹¤ÌôÑ¡µÄ¸çÃÇ¿ÉÒÔÀ­³öÈ¥ÁË¡£µ±È»ÕâÑù×öÒ²ÊÇ¿ÉÒԵģ¬µ«ÊÇÇ°ÌáÊÇÕû¸öÊý¾Ý¼¯µÄÊý¾ÝÌõÊý²»¶àµÄÇé¿öÏ¡£¼ÙÈçÓöµ½ÉÏÊ®Íò°ÙÌõµÄÊý¾Ý£¬È«²¿È¡³öÀ´µÄ»°£¬Óû§¾Í²»ÓøɱðµÄÊÂÇéÁË¡£Õâ¸öʱºòÓû§Ó¦¸ÃÔõô×öÄØ?µ±È»¾ÍÊÇÒªÓõ½ÎÒÃǽéÉܵÄrownum À­!rownum²»ÊǸö¡°Î±ÊýÁС±Ã´£¬ºÃ˵£¬ÎÒÃÇÏÖÔÚ°ÑËüŪ³ÉÒ»¸öʵÔÚµÄ×ֶξͿÉÒÔÁË¡£¾ßÌå×ö·¨¾ÍÊÇÀûÓÃ×Ó²éѯ£¬ÔÚ¹¹½¨ÁÙʱ±íµÄʱºò£¬°ÑrownumÒ²Ò»Æð¹¹Ôì½øÈ¥¡£±ÈÈç¡°select xx,yy from (select xx,yy,rownum as xyz from table where zz >20) where xyz between 10 and 20¡±ÕâÑù¾Í¿ÉÒÔÁË¡£ÁíÍâʹÓÃoracleÌṩµÄ½á¹û¼¯´¦Àíº¯ÊýminusÒ²¿ÉÒÔ×öµ½£¬ÀýÈç¡°select xx,yy from table where zz > 20 and rownum <20 minus select xx,yy from table where zz>20 and rownum <10¡±£¬µ«ÊÇʹÓÃminusºÃÏñ±ÈʹÓÃ×Ó²éѯ¸ü¼ÓÏûºÄ×ÊÔ´¡£

¡¡¡¡ºÍrownumÏàËÆ£¬oracle»¹ÌṩÁËÁíÍâÒ»¸öαÊýÁУºrowid¡£²»¹ýrowidºÍrownum²»Í¬£¬Ò»°ã˵À´Ã¿Ò»ÐÐÊý¾Ý¶ÔÓ¦µÄ rowidÊǹ̶¨¶øÇÒΨһµÄ£¬ÔÚÕâÒ»ÐÐÊý¾Ý´æÈëÊý¾Ý¿âµÄʱºò¾ÍÈ·¶¨ÁË¡£¿ÉÒÔÀûÓÃrowidÀ´²éѯ¼Ç¼£¬¶øÇÒͨ¹ýrowid²éѯ¼Ç¼ÊDzéѯËÙ¶È×î¿ìµÄ²éѯ·½·¨¡£(Õâ¸öÎÒûÓÐÊÔ¹ý£¬ÁíÍâÒª¼Çסһ¸ö³¤¶ÈÔÚ18룬¶øÇÒûÓÐÌ«Ã÷ÏÔ¹æÂɵÄ×Ö·û´®ÊÇÒ»¸öºÜÀ§ÄѵÄÊÂÇ飬ËùÒÔÎÒ¸öÈËÈÏΪÀûÓÃrowid²éѯ¼Ç¼µÄʵÓÃÐÔ²»ÊǺܴó)rowidÖ»ÓÐÔÚ±í·¢ÉúÒƶ¯(±ÈÈç±í¿Õ¼ä±ä»¯£¬Êý¾Ýµ¼Èë/µ¼³öÒÔºó)£¬²Å»á·¢Éú±ä»¯¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ