ÓÑÇéÌáʾ£ºÈç¹û±¾ÍøÒ³´ò¿ªÌ«Âý»òÏÔʾ²»ÍêÕû£¬Çë³¢ÊÔÊó±êÓÒ¼ü¡°Ë¢Ð¡±±¾ÍøÒ³£¡ÔĶÁ¹ý³Ì·¢ÏÖÈκδíÎóÇë¸æËßÎÒÃÇ£¬Ð»Ð»£¡£¡ ±¨¸æ´íÎó
¹·¹·Êé¼® ·µ»Ø±¾ÊéĿ¼ ÎÒµÄÊé¼Ü ÎÒµÄÊéÇ© TXTÈ«±¾ÏÂÔØ ½øÈëÊé°É ¼ÓÈëÊéÇ©

SQLÓïÑÔÒÕÊõ(PDF¸ñʽ)-µÚ8ÕÂ

°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡




µÄÈÕÆÚ£»·ñÔò£¬¾Í·µ»ØÒ»¸öÔÚÈκÎÇé¿ö϶¼Ô¶±ÈÎÒÃÇËùÐèÈÕÆÚÒªÔçµÄÈÕÆÚ£¨´Ë´¦Ñ¡Á˹þ˹¶¡Ö®¡¡

ÒÛ£¨battle¡¡of¡¡Hastings£©µÄÈÕÆÚ£©¡£Ö»ÒªÃ¿´ÎÈ¡³ö×î´óÖµ£¬¾Í¿ÉÒÔÈ·±£»ñµÃÐèÒªµÄÈÕÆÚ¡£ÕâÊǸö¡¡

·Ç³£ÊµÓõļ¼ÇÉ£¬Ò²¿ÉÒÔÓ¦ÓÃÔÚ×Ö·û»òÊýÖµÊý¾Ý£¬µÚ11Õ»áÓиüÏêϸµÄ˵Ã÷¡£¡¡



×ܽ᣺SQLÊÇÉùÃ÷ÐÔÓïÑÔ£¨declarative¡¡language£©£¬ËùÒÔÉ跨ʹÄãµÄ´úÂ볬ԽҵÎñ¹ý³ÌµÄ¹æ¸ñ¡¡

˵Ã÷¡£¡¡



SQL¡¡

SSQQLLµÄ½ø¹¥Ê½±à³Ì¡¡



Offensive¡¡Coding¡¡with¡¡SQL¡¡



Ò»°ãµÄ½¨ÒéÊǽøÐзÀÓùʽ±à³Ì£¨code¡¡defensively£©£¬ÔÚ¿ªÊ¼´¦Àí֮ǰÏȼì²éËùÓвÎÊýµÄºÏ·¨ÐÔ¡£¡¡

µ«Êµ¼ÊÉÏ£¬¶ÔÊý¾Ý¿â±à³Ì¶øÑÔ£¬¾¡Á¿Í¬Ê±×ö¼¸¼þÊÂÇéµÄ½ø¹¥Ê½±à³ÌÓÐÇÐʵµÄÓÅÊÆ¡£¡¡



ÓиöºÜºÃµÄÀý×Ó£º½øÐÐÒ»Á¬´®¼ì²é£¬Ã¿µ±ÆäÖÐÒ»¸ö¼ì²éËùÒªÇóµÄÌõ¼þ²»·ûʱ¾Í²úÉúÒì³£¡£ÐÅÓá¡

¿¨¸¶¿îµÄ´¦ÀíÖоÍÉæ¼°ÀàËÆ²½Öè¡£ÀýÈ磬¼ì²éËùÌá½»µÄ¿Í»§Éí·ÝºÍ¿¨ºÅÊÇ·ñÓÐЧ£¬ÒÔ¼°Á½ÕßÊÇ¡¡

·ñÆ¥Å䣻¼ì²éÐÅÓÿ¨ÊÇ·ñ¹ýÆÚ£»×îºó£¬¼ì²éµ±Ç°µÄÖ§¸¶¶îÊÇ·ñ³¬¹ýÁËÐÅÓöî¶È¡£Èç¹ûͨ¹ýÁËËù¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡24¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

Óмì²é£¬Ö§¸¶²Ù×÷²Å¼ÌÐø½øÐС£¡¡



ΪÁËÍê³ÉÉÏÊö¹¦ÄÜ£¬²»ÊìÁ·µÄ¿ª·¢Õß»áд³öÏÂÁÐÓï¾ä£¬²¢¼ì²éÆä·µ»Ø½á¹û£º¡¡



¡¡select¡¡count£¨*£©¡¡

¡¡from¡¡customers¡¡

¡¡where¡¡customer_id¡¡=¡¡provided_id¡¡



½ÓÏÂÀ´£¬Ëû»á×öÀàËÆµÄ¹¤×÷£¬²¢ÔÙÒ»´Î¼ì²é´íÎó´úÂ룺¡¡



¡¡select¡¡card_num£»¡¡expiry_date£»¡¡credit_limit¡¡

¡¡from¡¡accounts¡¡

¡¡where¡¡customer_id¡¡=¡¡provided_id¡¡



Ö®ºó£¬Ëû²Å»á´¦Àí½ðÈÚ½»Òס£¡¡



Ïà·´£¬ÊìÁ·µÄ¿ª·¢Õ߸üϲ»¶ÏñÏÂÃæÕâÑù±àд´úÂ루¼ÙÉètoday£¨£©·µµ±Ç°ÈÕÆÚ£©£º¡¡

¡¡¡¡update¡¡accounts¡¡

¡¡¡¡set¡¡balance¡¡=¡¡balance¡¡purchased_amount¡¡

¡¡¡¡where¡¡balance¡¡¡·=¡¡purchased_amount¡¡

¡¡¡¡and¡¡credit_limit¡¡¡·=¡¡purchased_amount¡¡

¡¡¡¡and¡¡expiry_date¡¡¡·¡¡today£¨£©¡¡

¡¡¡¡and¡¡customer_id¡¡=¡¡provided_id¡¡

¡¡¡¡and¡¡card_num¡¡=¡¡provided_cardnum¡¡

½Ó×Å£¬¼ì²é±»¸üеÄÐÐÊý¡£Èç¹û½á¹ûΪ¡¡0£¬Ö»ÐèÖ´ÐÐÏÂÃæµÄÒ»¸ö²Ù×÷¼´¿ÉÅжϳö´íÔ­Òò£º¡¡

¡¡¡¡select¡¡c¡£customer_id£»¡¡a¡£card_num£»¡¡a¡£expiry_date£»¡¡

¡¡¡¡a¡£credit_limit£»¡¡a¡£balance¡¡

¡¡¡¡from¡¡customers¡¡c¡¡

¡¡¡¡leftouter¡¡join¡¡accounts¡¡a¡¡

¡¡¡¡on¡¡a¡£customer_id¡¡=¡¡c¡£customer_id¡¡

¡¡¡¡and¡¡a¡£card_num¡¡=¡¡provided_cardnum¡¡

¡¡¡¡where¡¡c¡£customer_id¡¡=¡¡provided_id¡¡



Èç¹û´Ë²éѯûÓзµ»ØÊý¾Ý£¬Ôò¿É¶Ï¶¨customer_id¡¡µÄÖµÊÇ´íµÄ£»Èç¹û¡¡card_num¡¡ÊÇ¡¡null£¬Ôò¿É¡¡

¶Ï¶¨¿¨ºÅÊÇ´íµÄ£»µÈµÈ¡£Æäʵ£¬¶àÊýÇé¿öÏ´˲éѯÎÞÐè±»Ö´ÐС£¡¡



×¢Òâ¡¡



ÄãÊÇ·ñ×¢Òâµ½£¬ÉÏÊöµÚÒ»¶Î´úÂëÖÐʹÓÃÁËcount£¨*£©ÄØ£¿ÕâÊǸöcount£¨*£©±»ÎóÓÃÓÚ´æÔÚÐÔ¼ì²âµÄ¾ø¡¡

¼ÑÀý×Ó¡£¡¡

¡°½ø¹¥Ê½±à³Ì¡±µÄ±¾ÖÊÌØÕ÷ÊÇ£ºÒÔºÏÀíµÄ¿ÉÄÜÐÔ£¨reasonableprobabilities£©Îª»ù´¡¡£ÀýÈ磬¼ì²é¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡25¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¿Í»§ÊÇ·ñ´æÔÚÊǺÁÎÞÒâÒåµÄ¡ª¡ªÒòΪ¼ÈÈ»¸Ã¿Í»§²»´æÔÚ£¬ÄÇôËûµÄ¼Ç¼¸ù±¾¾Í²»ÔÚÊý¾Ý¿âÖУ¡¡¡

ËùÒÔ£¬Ó¦¸ÃÏȼÙÉèûÓÐÊÂÇé»á³ö´í£»µ«Èç¹û³ö´íÁË£¬¾ÍÔÚ³ö´íµÄµØ·½£¨¶øÇÒÖ»ÔÚÄǸöµØ·½£©²É¡¡

È¡ÏàÓ¦´ëÊ©¡£ÓÐȤµÄÊÇ£¬ÕâÖÖ·½·¨ºÜÏñһЩÊý¾Ý¿âϵͳÖвÉÓõġ°ÀÖ¹Û²¢·¢¿ØÖÆ£¨optimistic¡¡

concurrency¡¡control£©¡±£¬ºóÕß»á¼ÙÉèupdate³åÍ»²»»á·¢Éú£¬Ö»ÔÚ³åÍ»ÕæµÄ·¢Éúʱ²Å½øÐпØÖÆ´¦Àí¡£¡¡

½á¹û£¬ÀÖ¹Û·½·¨±È±¯¹Û·½·¨µÄÍÌÍÂÁ¿¸ßµÃ¶à¡£¡¡



×ܽ᣺ÒÔ¸ÅÂÛΪ»ù´¡½øÐбà³Ì¡£¼ÙÉè×î¿ÉÄܵĽá¹û£»²»ÊǵÄÈ·±ØÒª£¬²»Òª²ÉÓÃÒì³£²¶×½µÄ´¦Àí¡¡

·½Ê½¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡SQL¡¡

¼ò½àµÄSSQQLL¡¡



Succinct¡¡SQL¡¡



ÊìÁ·µÄ¿ª·¢ÕßʹÓþ¡¿ÉÄÜÉٵġ¡SQLÓï¾äÍê³É¾¡¿ÉÄܶàµÄÊÂÇé¡£Ïà·´£¬×¾ÁӵĿª·¢ÕßÔòÇãÏòÓÚÑÏ¡¡

¸ñ×ñÑ­ÒÑÖÆ¶©ºÃµÄ¸÷¹¦Äܲ½Ö裬ÏÂÃæÊǸöÕæÊµµÄÀý×Ó£º¡¡



¡¡¡­Get¡¡the¡¡start¡¡of¡¡the¡¡accounting¡¡period¡¡

¡¡select¡¡closure_date¡¡

¡¡into¡¡dtPerSta¡¡

¡¡from¡¡tperrslt¡¡

¡¡where¡¡fiscal_year=to_char£¨Param_dtAcc£»'YYYY'£©¡¡

¡¡and¡¡rslt_period='1'¡¡£ü£ü¡¡to_char£¨Param_dtAcc£»'MM'£©£»¡¡



¡¡¡­Get¡¡the¡¡end¡¡of¡¡the¡¡period¡¡out¡¡of¡¡closure¡¡

¡¡select¡¡closure_date¡¡

¡¡into¡¡dtPerClosure¡¡

¡¡from¡¡tperrslt¡¡

¡¡where¡¡fiscal_year=to_char£¨Param_dtAcc£»'YYYY'£©¡¡

¡¡and¡¡rslt_period='9'¡¡£ü£ü¡¡to_char£¨Param_dtAcc£»'MM'£©£»¡¡



¾ÍËãËÙ¶È¿ÉÒÔ½ÓÊÜ£¬ÕâÒ²ÊǶμ«ÔãµÄ´úÂë¡£ºÜ²»ÐÒ£¬ÐÔÄÜר¼Ò¾­³£Óöµ½ÕâÖÖÔã¸âµÄ´úÂë¡£¼ÈÈ»¡¡

Á½¸öÖµÀ´×ÔÓÚͬһ±í£¬ÎªÊ²Ã´Òª·Ö±ðÓÃÁ½¸ö²»Í¬µÄÓï¾äÄØ£¿ÏÂÃæÓÃOracleµÄbulk¡¡collect×Ӿ䣬¡¡

Ò»´ÎÐÔ½«Á½¸öÖµ·Åµ½Êý×éÖУ¬ÕâºÜÈÝÒ×ʵÏÖ£¬¹Ø¼üÔÚÓÚ¶Ôrslt_period½øÐÐorder¡¡by²Ù×÷£¬ÈçÏÂËù¡¡

ʾ£º¡¡

¡¡¡¡¡¡select¡¡closure_date¡¡

¡¡¡¡¡¡bulk¡¡collect¡¡into¡¡dtPerStaArray¡¡

¡¡¡¡¡¡from¡¡tperrslt¡¡

¡¡¡¡¡¡where¡¡fiscal_year=to_char£¨Param_dtAcc£»'YYYY'£©¡¡

¡¡¡¡¡¡and¡¡rslt_period¡¡in¡¡£¨'1'¡¡£ü£ü¡¡to_char£¨Param_dtAcc£»'MM'£©£»¡¡

¡¡¡¡¡¡'9'¡¡£ü£ü¡¡to_char£¨Param_dtAcc£»'MM'£©£©¡¡

¡¡¡¡¡¡order¡¡by¡¡rslt_period£»¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡26¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

ÓÚÊÇ£¬ÕâÁ½¸öÈÕÆÚ±»·Ö±ð±£´æÔÚÊý×éµÄµÚÒ»¸öºÍµÚ¶þ¸öλÖá£ÆäÖУ¬bulkcollect¡¡ÊÇ¡¡PL/SQL¡¡Óï¡¡

ÑÔÌØÓе쬵«ÈκÎÖ§³ÖÏÔʽ»òÒþʽÊý×éÌáÈ¡µÄÓïÑÔ¶¼¿ÉÈç·¨ÅÚÖÆ¡£¡¡



ÆäʵÉõÖÁÊý×é¶¼ÊDz»±ØÒªµÄ£¬ÓÃÒÔϵÄС¼¼ÇÉ£¨×¢6£©£¬ÕâÁ½¸öÖµ¾Í¿ÉÒÔ±»ÌáÈ¡µ½Á½¸ö±äÁ¿ÖУº¡¡



¡¡¡¡¡¡select¡¡max£¨decode£¨substr£¨rslt_period£»¡¡1£»¡¡1£©£»¡¡¡­Check¡¡the¡¡first¡¡character¡¡

¡¡¡¡¡¡'1'£»¡¡closure_date£»¡¡

¡¡¡¡¡¡¡­If¡¡it's¡¡'1'¡¡return¡¡the¡¡date¡¡we¡¡want¡¡

¡¡¡¡¡¡to_date£¨'14/10/1066'£»¡¡'DD/MM/YYYY'£©£©£©£»¡¡

¡¡¡¡¡¡¡­Otherwise¡¡something¡¡old¡¡

¡¡¡¡¡¡max£¨decode£¨substr£¨rslt_period£»¡¡1£»¡¡1£©£»¡¡

¡¡¡¡¡¡'9'£»¡¡closure_date£»¡¡¡­The¡¡date¡¡wewant¡¡

¡¡¡¡¡¡to_date£¨'14/10/1066'£»¡¡'DD/MM/YYYY'£©£©£©£»¡¡

¡¡¡¡¡¡into¡¡dtPerSta£»¡¡dtPerClosure¡¡

¡¡¡¡¡¡from¡¡tperrslt¡¡

¡¡¡¡¡¡where¡¡fiscal_year=to_char£¨Param_dtAcc£»'YYYY'£©¡¡

¡¡¡¡¡¡and¡¡rslt_period¡¡in¡¡£¨'1'¡¡£ü£ü¡¡to_char£¨Param_dtAcc£»'MM'£©£»¡¡

¡¡¡¡¡¡'9'¡¡£ü£ü¡¡to_char£¨Param_dtAcc£»'MM'£©£©£»¡¡



ÔÚÕâ¸öÀý×ÓÖУ¬Ô¤ÆÚ·µ»ØÖµÎªÁ½ÐÐÊý¾Ý£¬ËùÒÔÎÊÌâÊÇ£ºÈçºÎ°ÑÔ­±¾ÊôÓÚÒ»¸ö×ֶεÄÁ½ÐÐÊý¾Ý£¬¡¡

ÒÔÒ»ÐÐÊý¾ÝÁ½¸ö×ֶεķ½Ê½¼ìË÷³öÀ´£¨ÕýÈçÊý×éÌáÈ¡µÄÀý×ÓÒ»Ñù£©¡£Îª´Ë£¬ÎÒÃÇ¡¡



¼ì²érslt_period×ֶΣ¬Á½ÐÐÊý¾ÝµÄrslt_period×Ö¶ÎÓв»Í¬Öµ£»Èç¹ûÕÒµ½ÐèÒªµÄ¼Ç¼£¬¾Í·µ»ØÒªÕÒ¡¡

µÄÈÕÆÚ£»·ñÔò£¬¾Í·µ»ØÒ»¸öÔÚÈκÎÇé¿ö϶¼Ô¶±ÈÎÒÃÇËùÐèÈÕÆÚÒªÔçµÄÈÕÆÚ£¨´Ë´¦Ñ¡Á˹þ˹¶¡Ö®¡¡

ÒÛ£¨battle¡¡of¡¡Hastings£©µÄÈÕÆÚ£©¡£Ö»ÒªÃ¿´ÎÈ¡³ö×î´óÖµ£¬¾Í¿ÉÒÔÈ·±£»ñµÃÐèÒªµÄÈÕÆÚ¡£ÕâÊǸö¡¡

·Ç³£ÊµÓõļ¼ÇÉ£¬Ò²¿ÉÒÔÓ¦ÓÃÔÚ×Ö·û»òÊýÖµÊý¾Ý£¬µÚ11Õ»áÓиüÏêϸµÄ˵Ã÷¡£¡¡



×ܽ᣺SQLÊÇÉùÃ÷ÐÔÓïÑÔ£¨declarative¡¡language£©£¬ËùÒÔÉ跨ʹÄãµÄ´úÂ볬ԽҵÎñ¹ý³ÌµÄ¹æ¸ñ¡¡

˵Ã÷¡£¡¡



SQL¡¡

SSQQLLµÄ½ø¹¥Ê½±à³Ì¡¡



Offensive¡¡Coding¡¡with¡¡SQL¡¡



Ò»°ãµÄ½¨ÒéÊǽøÐзÀÓùʽ±à³Ì£¨code¡¡defensively£©£¬ÔÚ¿ªÊ¼´¦Àí֮ǰÏȼì²éËùÓвÎÊýµÄºÏ·¨ÐÔ¡£¡¡

µ«Êµ¼ÊÉÏ£¬¶ÔÊý¾Ý¿â±à³Ì¶øÑÔ£¬¾¡Á¿Í¬Ê±×ö¼¸¼þÊÂÇéµÄ½ø¹¥Ê½±à³ÌÓÐÇÐʵµÄÓÅÊÆ¡£¡¡



ÓиöºÜºÃµÄÀý×Ó£º½øÐÐÒ»Á¬´®¼ì²é£¬Ã¿µ±ÆäÖÐÒ»¸ö¼ì²éËùÒªÇóµÄÌõ¼þ²»·ûʱ¾Í²úÉúÒì³£¡£ÐÅÓá¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡27¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¿¨¸¶¿îµÄ´¦ÀíÖоÍÉæ¼°ÀàËÆ²½Öè¡£ÀýÈ磬¼ì²éËùÌá½»µÄ¿Í»§Éí·ÝºÍ¿¨ºÅÊÇ·ñÓÐЧ£¬ÒÔ¼°Á½ÕßÊÇ¡¡

·ñÆ¥Å䣻¼ì²éÐÅÓÿ¨ÊÇ·ñ¹ýÆÚ£»×îºó£¬¼ì²éµ±Ç°µÄÖ§¸¶¶îÊÇ·ñ³¬¹ýÁËÐÅÓöî¶È¡£Èç¹ûͨ¹ýÁËËù¡¡

Óмì²é£¬Ö§¸¶²Ù×÷²Å¼ÌÐø½øÐС£¡¡



ΪÁËÍê³ÉÉÏÊö¹¦ÄÜ£¬²»ÊìÁ·µÄ¿ª·¢Õß»áд³öÏÂÁÐÓï¾
·µ»ØÄ¿Â¼ ÉÏÒ»Ò³ ÏÂÒ»Ò³ »Øµ½¶¥²¿ ÔÞ£¨0£© ²È£¨0£©
δÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
ÎÂܰÌáʾ£º ο´Ð¡ËµµÄͬʱ·¢±íÆÀÂÛ£¬Ëµ³ö×Ô¼ºµÄ¿´·¨ºÍÆäËüС»ï°éÃÇ·ÖÏíÒ²²»´íŶ£¡·¢±íÊéÆÀ»¹¿ÉÒÔ»ñµÃ»ý·ÖºÍ¾­Ñé½±Àø£¬ÈÏÕæÐ´Ô­´´ÊéÆÀ ±»²ÉÄÉΪ¾«ÆÀ¿ÉÒÔ»ñµÃ´óÁ¿½ð±Ò¡¢»ý·ÖºÍ¾­Ñé½±ÀøÅ¶£¡