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

OracleÖеÄÓÅ»¯Æ÷ÈçºÎ½øÐÐÆÀ¹ÀÓÅ»¯

·¢²¼Ê±¼ä:2007-03-06 00:45:28À´Ô´:ºìÁª×÷Õß:beautiful
OracleÓÅ»¯Æ÷ÔÚÈκοÉÄܵÄʱºò¶¼»á¶Ô±í´ïʽ½øÐÐÆÀ¹À£¬²¢ÇÒ°ÑÌØ¶¨µÄÓï·¨½á¹¹×ª»»³ÉµÈ¼ÛµÄ½á¹¹£¬Õâô×öµÄÔ­ÒòÊÇ£º

?Ҫô½á¹û±í´ïʽÄܹ»±ÈÔ´±í´ïʽ¾ßÓиü¿ìµÄËÙ¶È¡£

?ҪôԴ±í´ïʽֻÊǽá¹û±í´ïʽµÄÒ»¸öµÈ¼ÛÓïÒå½á¹¹¡£

²»Í¬µÄSQL½á¹¹ÓÐʱ¾ßÓÐͬÑùµÄ²Ù×÷£¨ÀýÈ磺= ANY (subquery) and IN (subquery)£©£¬Oracle»á°ÑËûÃÇÓ³Éäµ½Ò»¸öµ¥Ò»µÄÓïÒå½á¹¹¡£

ÏÂÃæ½«ÌÖÂÛÓÅ»¯Æ÷ÈçºÎÆÀ¹ÀÓÅ»¯ÈçϵÄÇé¿öºÍ±í´ïʽ£º

³£Á¿ LIKE ²Ù×÷·û IN ²Ù×÷·û ANYºÍSOME ²Ù×÷·û ALL ²Ù×÷·û BETWEEN ²Ù×÷·û NOT ²Ù×÷·û

´«µÝ£¨Transitivity£© È·¶¨ÐÔ£¨DETERMINISTIC£©º¯Êý

³£Á¿

³£Á¿µÄ¼ÆËãÊÇÔÚÓï¾ä±»ÓÅ»¯Ê±Ò»´ÎÐÔÍê³É£¬¶ø²»ÊÇÔÚÿ´ÎÖ´ÐÐʱ¡£ÏÂÃæÊǼìË÷ÔÂн´óÓÚ2000µÄµÄ±í´ïʽ£º
¡¡¡¡
¡¡¡¡? sal > 24000/12
¡¡¡¡
¡¡¡¡? sal > 2000
¡¡¡¡
¡¡¡¡? sal*12 > 24000

Èç¹ûSQLÓï¾ä°üÀ¨µÚÒ»ÖÖÇé¿ö£¬ÓÅ»¯Æ÷»á¼òµ¥µØ°ÑËüת±ä³ÉµÚ¶þÖÖ¡£

×¢Ò⣺ÓÅ»¯Æ÷²»»á¼ò»¯¿çÔ½±È½Ï·ûµÄ±í´ïʽ£¬ÀýÈçµÚÈýÌõÓï¾ä£¬¼øÓÚ´Ë£¬Ó¦ÓóÌÐò¿ª·¢ÕßÓ¦¸Ã¾¡Á¿Ð´Óó£Á¿¸ú×ֶαȽϼìË÷µÄ±í´ïʽ£¬¶ø²»Òª½«×Ö¶ÎÖÃÓÚ±í´ïʽµ±ÖС£

LIKE ²Ù×÷·û

ÓÅ»¯Æ÷°ÑʹÓÃLIKE²Ù×÷·ûºÍÒ»¸öûÓÐͨÅä·ûµÄ±í´ïʽ×é³ÉµÄ¼ìË÷±í´ïʽת»»ÎªÒ»¸ö¡°=¡±²Ù×÷·û±í´ïʽ¡£

ÀýÈ磺ÓÅ»¯Æ÷»á°Ñ±í´ïʽename LIKE 'SMITH'ת»»Îªename = 'SMITH'ÓÅ»¯Æ÷Ö»ÄÜת»»Éæ¼°µ½¿É±ä³¤Êý¾ÝÀàÐ͵ıí´ïʽ£¬Ç°Ò»¸öÀý×ÓÖУ¬Èç¹ûENAME×ֶεÄÀàÐÍÊÇCHAR(10)£¬ ÄÇôÓÅ»¯Æ÷½«²»×öÈκÎת»»¡£

IN ²Ù×÷·û

ÓÅ»¯Æ÷°ÑʹÓÃIN±È½Ï·ûµÄ¼ìË÷±í´ïÊ½Ìæ»»ÎªµÈ¼ÛµÄʹÓá°=¡±ºÍ¡°OR¡±²Ù×÷·ûµÄ¼ìË÷±í´ïʽ¡£ÀýÈ磬ÓÅ»¯Æ÷»á°Ñ±í´ïʽename IN ('SMITH','KING','JONES')Ìæ»»Îª:
¡¡¡¡
¡¡¡¡ename = 'SMITH' OR ename = 'KING' OR ename = 'JONES'

ANYºÍSOME ²Ù×÷·û

ÓÅ»¯Æ÷½«¸úËæ£¨following£©ÖµÁбíµÄANYºÍSOME¼ìË÷Ìõ¼þÓõȼ۵ÄͬµÈ²Ù×÷·ûºÍ¡°OR¡±×é³ÉµÄ±í´ïÊ½Ìæ»»¡£

ÀýÈ磬ÓÅ»¯Æ÷½«ÈçÏÂËùʾµÄµÚÒ»ÌõÓï¾äÓõڶþÌõÓï¾äÌæ»»£º
¡¡¡¡
¡¡¡¡? sal > ANY (:first_sal, :second_sal)
¡¡¡¡
¡¡¡¡? sal > :first_sal OR sal > :second_sal
¡¡¡¡
ÓÅ»¯Æ÷½«¸úËæ×Ó²éѯµÄANYºÍSOME¼ìË÷Ìõ¼þת»»³ÉÓÉ¡°EXISTS¡±ºÍÒ»¸öÏàÓ¦µÄ×Ó²éѯ×é³ÉµÄ¼ìË÷±í´ïʽ¡£

ÀýÈ磬ÓÅ»¯Æ÷½«ÈçÏÂËùʾµÄµÚÒ»ÌõÓï¾äÓõڶþÌõÓï¾äÌæ»»£º
¡¡¡¡
¡¡¡¡? x > ANY (SELECT sal FROM emp WHERE job = 'ANALYST')
¡¡¡¡
¡¡¡¡? EXISTS (SELECT sal FROM emp WHERE job = 'ANALYST' AND x > sal)

ALL ²Ù×÷·û

ÓÅ»¯Æ÷½«¸úËæÖµÁбíµÄALL²Ù×÷·ûÓõȼ۵ġ°=¡±ºÍ¡°AND¡±×é³ÉµÄ±í´ïÊ½Ìæ»»¡£

ÀýÈ磬sal > ALL (:first_sal, :second_sal)±í´ïʽ»á±»Ì滻Ϊ£º

¡¡¡¡sal > :first_sal AND sal > :second_sal
¡¡¡¡
¶ÔÓÚ¸úËæ×Ó²éѯµÄALL±í´ïʽ£¬ÓÅ»¯Æ÷ÓÃANYºÍÁíÍâÒ»¸öºÏÊʵıȽϷû×é³ÉµÄ±í´ïÊ½Ìæ»»¡£ÀýÈ磬ÓÅ»¯Æ÷»á°Ñ±í´ïʽ x > ALL (SELECT sal FROM emp WHERE deptno = 10) Ìæ»»Îª£º
¡¡¡¡
¡¡¡¡NOT (x <= ANY (SELECT sal FROM emp WHERE deptno = 10))

½ÓÏÂÀ´ÓÅ»¯Æ÷»á°ÑµÚ¶þ¸ö±í´ïʽÊÊÓÃANY±í´ïʽµÄת»»¹æÔòת»»ÎªÏÂÃæµÄ±í´ïʽ£º
¡¡¡¡
¡¡¡¡NOT EXISTS (SELECT sal FROM emp WHERE deptno = 10 AND x <= sal)
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. beautiful ÓÚ 2007-03-06 00:46:02·¢±í:

    BETWEEN ²Ù×÷·û

    ÓÅ»¯Æ÷×ÜÊÇÓá°>=¡±ºÍ¡°<=¡±±È½Ï·ûÀ´µÈ¼ÛµÄ´úÌæBETWEEN²Ù×÷·û¡£ÀýÈ磺ÓÅ»¯Æ÷»á°Ñ±í´ïʽsal BETWEEN 2000 AND 3000ÓÃsal >= 2000 AND sal <= 3000À´´úÌæ¡£

    NOT ²Ù×÷·û

    ÓÅ»¯Æ÷×ÜÊÇÊÔͼ¼ò»¯¼ìË÷Ìõ¼þÒÔÏû³ý¡°NOT¡±Âß¼­²Ù×÷·ûµÄÓ°Ï죬Õâ½«Éæ¼°µ½¡°NOT¡±²Ù×÷·ûµÄÏû³ýÒÔ¼°´úÒÔÏàÓ¦µÄ±È½ÏÔËËã·û¡£

    ÀýÈ磬ÓÅ»¯Æ÷½«ÏÂÃæµÄµÚÒ»ÌõÓï¾äÓõڶþÌõÓï¾ä´úÌæ£º
    ¡¡¡¡
    ¡¡¡¡? NOT deptno = (SELECT deptno FROM emp WHERE ename = 'TAYLOR')
    ¡¡¡¡
    ¡¡¡¡? deptno <> (SELECT deptno FROM emp WHERE ename = 'TAYLOR')

    ͨ³£Çé¿öÏÂÒ»¸öº¬ÓÐNOT²Ù×÷·ûµÄÓï¾äÓкܶ಻ͬµÄд·¨£¬ÓÅ»¯Æ÷µÄת»»Ô­ÔòÊÇʹ¡°NOT¡±²Ù×÷·ûºó±ßµÄ×Ӿ価¿ÉÄܵļòµ¥£¬¼´Ê¹¿ÉÄÜ»áʹ½á¹û±í´ïʽ°üº¬Á˸ü¶àµÄ¡°NOT¡±²Ù×÷·û¡£ÀýÈ磬ÓÅ»¯Æ÷½«ÈçÏÂËùʾµÄµÚÒ»ÌõÓï¾äÓõڶþÌõÓï¾ä´úÌæ£º
    ¡¡¡¡
    ¡¡¡¡? NOT (sal < 1000 OR comm IS NULL)
    ¡¡¡¡
    ¡¡¡¡? NOT sal < 1000 AND comm IS NOT NULL sal >= 1000 AND comm IS NOT NULL

    ´«µÝ£¨Transitivity£©

    Èç¹û¡°WHERE¡±×Ó¾äµÄÁ½¸ö¼ìË÷Ìõ¼þÉæ¼°ÁËÒ»¸ö¹²Í¬µÄ×ֶΣ¬ÓÅ»¯Æ÷ÓÐʱ»á¸ù¾Ý´«µÝÔ­ÀíÍÆ¶Ï³öµÚÈý¸ö¼ìË÷Ìõ¼þ£¬Ëæºó¿ÉÒÔ¸ù¾ÝÕâ¸öÍÆ¶Ï³öµÄÌõ¼þ¶ÔÓï¾ä½øÐÐÓÅ»¯£¬ÍƶϳöµÄÌõ¼þ¿ÉÄܻἤ»îÒ»¸öÔ­À´µÄ¼ìË÷Ìõ¼þûÓ줻îµÄDZÔڵĽӿÚ·¾¶£¨access path£©¡£×¢Ò⣺´«µÝ½ö½ö±»ÓÃÔÚ»ùÓÚ´ú¼Û£¨cost-based£©µÄÓÅ»¯ÖС£

    ¼ÙÉèÓÐÒ»¸öÕâÑùµÄ°üº¬Á½¸ö¼ìË÷Ìõ¼þµÄ¡°WHERE¡±×Ӿ䣺WHERE ×Ö¶Î1 ³£Á¿ AND×Ö¶Î1 = ×Ö¶Î2£¬ÔÚÕâ¸öÀý×ÓÀÓÅ»¯Æ÷»áÍÆ¶Ï³öеļìË÷Ìõ¼þ£º×Ö¶Î2 ³£Á¿¡£ÔÚÕâÀÊDZȽÏÔËËã·û=¡¢!=¡¢^=¡¢<>¡¢>¡¢<= »ò >=Ö®ÖеÄÈκÎÒ»¸ö£¬³£Á¿ÊÇÖ¸ÈκÎÒ»¸öÉæ¼°Á˲Ù×÷·û¡¢SQLº¯Êý¡¢ÎÄ×Ö¡¢°ó¶¨±äÁ¿£¨bind variables£©»òÕß¹ØÁª±äÁ¿£¨correlation variables£©µÄ³£Á¿±í´ïʽ¡£

    ÀýÈ磬¿¼ÂÇÕâÑùÒ»¸ö°üº¬Á½¸ö¸÷×ÔʹÓÃÁË×Ö¶ÎEMP.DEPTNOµÄ¼ìË÷Ìõ¼þµÄWHERE×Ó¾äµÄ²éѯ£º

    ¡¡¡¡SELECT * FROM emp, dept WHERE emp.deptno = 20 AND emp.deptno = dept.deptno;

    ʹÓô«µÝÓÅ»¯£¬ÓÅ»¯Æ÷»áÍÆ¶Ï³öÈçÏÂÌõ¼þ£ºdept.deptno = 20¡£Èç¹ûÓÐË÷Òý´æÔÚÓÚEMP.DEPTNO×Ö¶ÎÉÏ£¬Õâ¸öÌõ¼þ»áʹµ÷ÓÃÕâ¸öË÷ÒýµÄ½Ó¿Ú·¾¶ÓÐЧ¡£×¢Ò⣺ÓÅ»¯Æ÷Ö»ÄܶÔ×ֶιØÁª³£Á¿µÄ±í´ïʽ½øÐÐÍÆ¶Ï£¬¶ø²»ÊÇ×ֶιØÁª×ֶεıí´ïʽ¡£ÀýÈ磬°üº¬ÕâÑùÌõ¼þµÄWHERE×Ӿ䣺×Ö¶Î1 ×Ö¶Î3 AND ×Ö¶Î1 = ×Ö¶Î2£¬ÕâÖÖÇé¿ö²»ÄÜÍÆ¶Ï³ö±í´ïʽ£º×Ö¶Î2 < comp_oper> ×Ö¶Î3¡£

    È·¶¨ÐÔ£¨DETERMINISTIC£©º¯Êý

    ÔÚijЩÇé¿öÏ£¬ÓÅ»¯Æ÷Äܹ»Ê¹ÓÃÏÈǰµÄº¯Êý·µ»Ø½á¹û¶ø²»ÊÇÖØÐÂÖ´ÐÐÓû§¶¨ÒåµÄº¯Êý£¬Õâ½ö½ö¶ÔÄÇЩÒÔÏÞÖÆµÄ·½Ê½À´Ö´Ðеĺ¯ÊýÀ´ËµÊÇÓÐЧµÄ¡£ÕâЩº¯Êý±ØÐë¶ÔÈκεÄÊäÈë¶¼ÓÐͬÑùµÄ·µ»ØÖµ£¬º¯ÊýµÄ½á¹û±ØÐë²»ÄÜÒòΪ°ü£¨PACKAGE£©±äÁ¿¡¢Êý¾Ý¿â»ò»á»°£¨SESSION£©µÄ²ÎÊý£¨ÀýÈçNLS²ÎÊý£©²»Í¬¶ø±ä»¯£¬Èç¹ûº¯ÊýÔÚ½«À´ÖØÐ¶¨Ò壬·µ»ØÖµ±ØÐë¶ÔÈκβÎÊýÀ´ËµÈÔÈ»ÓëÒÔǰµÄ·µ»ØÖµÏàͬ¡£º¯ÊýµÄ´´½¨Õß¿ÉÒÔÔÚÒÔCREATE FUNCTION¡¢CREATE PACKAGE»òÕßCREATE TYPEÉùÃ÷º¯Êýʱ¸ù¾ÝÒÔÉϵÄÒªÇóʹÓÃDETERMINISTIC¹Ø¼ü×ÖÏòÊý¾Ý¿âÉêÃ÷¸Ãº¯ÊýΪȷ¶¨ÐÔº¯Êý£¬Êý¾Ý¿â²»»á¶ÔÈ·¶¨ÐÔº¯ÊýµÄºÏ·¨ÐÔ½øÐÐУÑ飬¼´Ê¹Ò»¸öº¯ÊýÃ÷ÏÔµÄʹÓÃÁ˰ü±äÁ¿»ò²Ù×÷ÁËÊý¾Ý¿â£¬ÈÔÈ»¿ÉÒÔ±»¶¨ÒåΪȷ¶¨ÐÔº¯Êý£¬Õâ¾ÍÊÇ˵ÈçºÎ°²È«ºÏ·¨µÄʹÓúͶ¨ÒåÈ·¶¨ÐÔº¯ÊýÊdzÌÐòÔ±µÄÔðÈΡ£

    µ±È·¶¨ÐÔº¯ÊýÔÚͬһ¸ö²éѯÀï±»¶à´Îµ÷Ó㬻òÕß±»»ùÓÚº¯ÊýµÄË÷Òý»òÎﻯÊÓͼ£¨materialized view£©µ÷ÓÃʱ£¬ÓпÉÄܱ»Ò»¸öÒѾ­¼ÆËã³öµÄֵȡ´ú¡£