µ±Ç°Î»ÖãºÊ×Ò³ > Êý¾Ý¿âϵͳ¼°Ó¦Óý̳Ì(SQL Server 2008)ϰÌâ1-8Õ´ð°¸
³£ÓÐЧ£¬ÔÚÿһÕÅ»ù±¾±íÖÐÖ»ÄÜÓÐÒ»¸ö¾Û¼¯Ë÷Òý¡£
ΨһË÷Òý£º²»ÔÊÐí¾ßÓÐË÷ÒýÖµÏàͬµÄÐУ¬´Ó¶ø½ûÖ¹ÖØ¸´µÄË÷Òý»ò¼üÖµ¡£²¢ÔÚÿ´ÎʹÓà INSERT »ò UPDATE Óï¾äÌí¼ÓÊý¾Ýʱ½øÐмì²é
2£®¼òÊöÊý¾Ý¿âÊÓͼºÍ»ù±¾±íµÄÁªÏµÓëÇø±ð¡£ ´ð£º
ÁªÏµ£ºÊÓͼ£¨view£©ÊÇÔÚ»ù±¾±íÖ®ÉϽ¨Á¢µÄ±í£¬ËüµÄ½á¹¹£¨¼´Ëù¶¨ÒåµÄÁУ©ºÍÄÚÈÝ£¨¼´ËùÓÐÊý¾ÝÐУ©¶¼À´×Ô»ù±¾±í£¬ËüÒÀ¾Ý»ù±¾±í´æÔÚ¶ø´æÔÚ¡£Ò»¸öÊÓͼ¿ÉÒÔ¶ÔÓ¦Ò»¸ö»ù±¾±í£¬Ò²¿ÉÒÔ¶ÔÓ¦¶à¸ö»ù±¾±í¡£ÊÓͼÊÇ»ù±¾±íµÄ³éÏóºÍÔÚÂß¼ÒâÒåÉϽ¨Á¢µÄйØÏµ
Çø±ð£º
(1) ÊÓͼÊÇÒѾ±àÒëºÃµÄsqlÓï¾ä£¬¶ø±í²»ÊÇ¡£ (2) ÊÓͼûÓÐʵ¼ÊµÄÎïÀí¼Ç¼¡£¶ø±íÓС£ (3) ±íÊÇÄÚÈÝ£¬ÊÓͼÊÇ´°¿Ú¡£
(4) ±íÖ»ÓÃÎïÀí¿Õ¼ä¶øÊÓͼ²»Õ¼ÓÃÎïÀí¿Õ¼ä£¬ÊÓͼֻÊÇÂß¼¸ÅÄîµÄ´æÔÚ£¬±í¿ÉÒÔ¼°Ê±ËÄ
¶ÔËü½øÐÐÐ޸쬵«ÊÓͼֻÄÜÓд´½¨µÄÓï¾äÀ´Ð޸ġ£ (5) ±íÊÇÄÚģʽ£¬ÊÔͼÊÇÍâģʽ
(6) ÊÓͼÊDz鿴Êý¾Ý±íµÄÒ»ÖÖ·½·¨£¬¿ÉÒÔ²éѯÊý¾Ý±íÖÐijЩ×ֶι¹³ÉµÄÊý¾Ý£¬Ö»ÊÇһЩ
SQLÓï¾äµÄ¼¯ºÏ¡£´Ó°²È«µÄ½Ç¶È˵£¬ÊÓͼ¿ÉÒÔ²»¸øÓû§½Ó´¥Êý¾Ý±í£¬´Ó¶ø²»ÖªµÀ±í½á¹¹¡£
(7) ±íÊôÓÚÈ«¾ÖģʽÖÐµÄ±í£¬ÊÇʵ±í£»ÊÓͼÊôÓÚ¾Ö²¿Ä£Ê½µÄ±í£¬ÊÇÐé±í¡£ (8) ÊÓͼµÄ½¨Á¢ºÍɾ³ýÖ»Ó°ÏìÊÓͼ±¾Éí£¬²»Ó°Ïì¶ÔÓ¦µÄ»ù±¾±í¡£ 3£®¿É¸üÐÂÊÓͼ±ØÐëÂú×ãÄÄЩÌõ¼þ£¿ ´ð£º×îÖØÒªµÄÒ»¸öÌõ¼þ¾ÍÊÇÒ»¸ö¿É¸üÐÂÊÓͼֻÄܰüº¬Ò»¸ö±í¡£ÆäËûµÄÏÞÖÆ°üÀ¨²»ÔÊÐíʹÓÃGROUP BY×Ó¾äºÍORDER BY×Ӿ䡢²»Ö§³ÖDISTINCT¹Ø¼ü×Ö¡¢²»ÄÜʹÓþۺϺ¯Êý»ò×Ó²éѯÒÔ¼°²»Äܰüº¬¼ÆËãÁеȡ£ÖîÈç´ËÀàµÄÏÞÖÆ»¹ÓкܶࡣijЩSQLÓï¾ä»¹ÒªÇóһЩ¶îÍâµÄ¾ßÌåÌõ¼þ¡£ÀýÈ磬Ҫ¶ÔÒ»¸öÊÓͼִÐÐINSERTÓï¾ä£¬Ôò±ØÐ뽫ËùÓж¨ÒåΪNOT NULLµÄÁж¼°üº¬ÔÚ´´½¨¸ÃÊÓͼµÄSELECTÓï¾äÖС£
4£®¼ÙÉèij¡°²Ö¿â¹ÜÀí¡±¹ØÏµÐÍÊý¾Ý¿âÓÐÏÂÁÐÎå¸ö¹ØÏµÄ£Ê½£º Áã¼þPART(PNO,PNAME,COLOR,WEIGHT) ÏîÄ¿PROJECT(JNO,JNAME,JDATE)
¹©Ó¦ÉÌSUPPLIER(SNO,SNAME,SADDR) ¹©Ó¦P_P(JNO,PNO,TOTAL)
²É¹ºP_S(PNO,SNO,QUANTITY)
(1) ÊÔ½«PROJECT¡¢P_P¡¢PARTÈý¸ö»ù±¾±íµÄ×ÔÈ»Áª½Ó¶¨ÒåΪһ¸öÊÓͼVIEW1£¬ PART¡¢P_S¡¢SUPPLIERÈý¸ö»ù±¾±íµÄ×ÔÈ»Áª½Ó¶¨ÒåΪһ¸öÊÓͼVIEW2¡£ (2) ÊÔÔÚÉÏÊöÁ½¸öÊÓͼµÄ»ù´¡ÉϽøÐÐÊý¾Ý²éѯ£º ¢Ù ¼ìË÷ÉϺ£µÄ¹©Ó¦ÉÌËù¹©Ó¦µÄÁã¼þµÄ±àºÅºÍÃû×Ö¡£
¢Ú ¼ìË÷ÏîÄ¿J4ËùÓÃÁã¼þµÄ¹©Ó¦É̱àºÅºÍÃû×Ö¡£ ½â£º
(1) CREATE VIEW VIEWl
AS SELECT A.JNO,JNAME,DATE,C.PNO,PNAME,COLOR,WEIGHT,TOTAL FROM PROJECT A,P_P B£¬PART C
WHERE A.JNO=B.JNO AND B.PNO=C.PNO; CREATE VIEW VIEW2
AS SELECT A.PNO,PNAME,COLOR,WEIGHT,C.SNO,SNAME,SADDR,QUANTITY
21
FROM PART A,P_S B,SUPPLIER C
WHERE A.PNO=B.PNO AND B.SNO=C.SNO; (2) ¢Ù
SELECT PNO,PNAME FROM VIEW2
WHERE SADDR LIKE ¡¯ÉϺ££¥¡¯; ¢Ú SELECT SNO,SNAME FROM VIEWl,VIEW2
WHERE VIEWl.PNO=VIEW2.PNO AND JNO=¡¯J4¡¯;
5. ¶ÔÓÚ½ÌÎñ¹ÜÀíÊý¾Ý¿âÖлù±¾±íSC£¬½¨Á¢ÊÓͼÈçÏ£º CREATE VIEW S_GRADE(SNO,C_NUM,AVG_GRADE) AS SELECT SNO,COUNT(CNO),AVG(GRADE) FROM SC
GROUP BY SNO
ÊÔÅжÏÏÂÁвéѯºÍ¸üÐÂÊÇ·ñÔÊÐíÖ´ÐС£ÈôÔÊÐí£¬Ð´³öת»»µ½»ù±¾±íSCÉϵÄÏàÓ¦²Ù ×÷£º
(1) SELECT * FROM S_GRADE (2) SELECT SNO,C_NUM FROM S_GRADE
WHERE AVG_GRADE>80; (3) SELECT SNO,AVG_GRADE FROM S_GRADE
WHERE C_NUM>(SELECT C_NUM FROM S_GRADE SNO=¡¯200912121¡¯); (4) UPDATE S_GRADE
SET C_NUM=C_NUM+1 WHERE SNO=¡¯200915122¡¯ (5) DELETE FROM S_GRADE WHERE C_NUM>4;
½â£º
´ð£º¢Å ÔÊÐí²éѯ¡£ÏàÓ¦µÄ²Ù×÷ÈçÏ£º
SELECT SNO,COUNT(CNO) AS C_NUM,AVG(GRADE) AS AVG_GRADE FROM SC
GROUP BY SNO;
¢Æ ÔÊÐí²éѯ¡£ÏàÓ¦µÄ²Ù×÷ÈçÏ£º
SELECT SNO,COUNT(CNO)AS C_NUM FROM SC
GROUP BY SNO
HAVING AVG(GRADE)>80;
¢Ç ÔÊÐí²éѯ¡£ÏàÓ¦µÄ²Ù×÷ÈçÏ£º
SELECT SNO,AVG(GRADE) AS AVG_GRADE FROM SC
22
GROUP BY SNO
HAVING COUNT(CNO)>(SELECT COUNT(CNO) FROM SC
GROUP BY SNO
HAVING SNO=¡¯200912121¡¯);
¢È ²»ÔÊÐí¡£C_NUMÊǶÔSCÖеÄѧÉúÑ¡Ð޿γ̵ÄÃÅÊý½øÐÐͳ¼Æ£¬ÔÚδ¸ü¸ÄSC±íʱ£¬ÒªÔÚÊÓͼS_GRADEÖиü¸ÄÃÅÊý£¬ÊDz»¿ÉÄܵġ£
¢É ²»ÔÊÐí¡£ÔÚÊÓͼS_GRADEÖÐɾ³ýÑ¡Ð޿γ̵ÄÃÅÊýÔÚ4ÃÅÒÔÉϵÄѧÉúÔª×é£¬ÊÆ±ØÔì³ÉSCÖÐÕâЩѧÉúѧϰԪ×éµÄɾ³ý£¬Õâ²»Ò»¶¨ÊÇÓû§µÄÔÒ⣬Òò´ËʹÓ÷Ö×éºÍ¾ÛºÏ²Ù×÷µÄÊÓͼ£¬²»ÔÊÐíÓû§Ö´ÐиüвÙ×÷¡£
6£®¼òÊö´´½¨Ë÷ÒýµÄ±ØÒªÐÔºÍ×÷Óá£
´ð£ºÊý¾Ý¿âµÄË÷Òý¾ÍÀàËÆÓÚÊé¼®µÄĿ¼£¬Èç¹ûÏë¿ìËÙ²éÕÒ¶ø²»ÊÇÖðÒ³²éÕÒÖ¸¶¨µÄÄÚÈÝ£¬¿ÉÒÔͨ¹ýĿ¼ÖÐÕ½ڵÄÒ³ºÅÕÒµ½Æä¶ÔÓ¦µÄÄÚÈÝ¡£ÀàËÆµØ£¬Ë÷Òýͨ¹ý¼Ç¼±íÖеĹؼüÖµÖ¸Ïò±íÖеļǼ£¬ÕâÑùÊý¾Ý¿âÒýÇæ¾Í²»ÓÃɨÃèÕû¸ö±í¶ø¶¨Î»µ½Ïà¹ØµÄ¼Ç¼¡£Ïà·´£¬Èç¹ûûÓÐË÷Òý£¬Ôò»áµ¼ÖÂSQL ServerËÑË÷±íÖеÄËùÓмǼ£¬ÒÔ»ñȡƥÅä½á¹û£¬ÕâÑù¾Í»á´ó´ó½µµÍ²éѯµÄЧÂÊ¡£
7£®¾Û¼¯Ë÷ÒýºÍ·Ç¾Û¼¯Ë÷ÒýÓкÎÖÖÒìͬ£¿ ´ð£º
¾Û¼¯Ë÷ÒýºÍ·Ç¾Û¼¯Ë÷ÒýµÄ¸ù±¾Çø±ðÊDZí¼Ç¼µÄÅÅÁÐ˳ÐòºÍÓëË÷ÒýµÄÅÅÁÐ˳ÐòÊÇ·ñÒ»Ö¡£¾Û¼¯Ë÷Òý¼´ÐèÒª¶ÔÒÑÓбíÊý¾ÝÖØÐ½øÐÐÅÅÐò£¨Èô±íÖÐÒÑÓÐÊý¾Ý£©£¬¼´É¾³ýÔʼµÄ±íÊý¾ÝºóÔÙ½«ÅÅÐò½á¹û°´ÎïÀí˳Ðò²å»Ø£¬¹Ê¾Û¼¯Ë÷Òý½¨Á¢Íê±Ïºó£¬½¨Á¢¾Û¼¯Ë÷ÒýµÄÁÐÖеÄÊý¾ÝÒѾȫ²¿°´ÐòÅÅÁС£Ò»¸ö±íÖÐÖ»Äܰüº¬Ò»¸ö¾Û¼¯Ë÷Òý£¬µ«¸ÃË÷Òý¿ÉÒÔ°üº¬¶à¸öÁС£·Ç¾Û¼¯Ë÷ÒýÀàËÆÊé±¾Ë÷Òý£¬Ë÷ÒýÓëÊý¾Ý´æ·ÅÔÚ²»Í¬µÄÎïÀíÇøÓò£¬½¨Á¢·Ç¾Û¼¯Ë÷ÒýʱÊý¾Ý±¾Éí²»½øÐÐÅÅÐò¡£Ò»¸ö±íÖпÉÒÔº¬¶à¸ö·Ç¾Û¼¯Ë÷Òý¡£
Ïà֮ͬ´¦¾ÍÊÇËüÃǶ¼ÊÇË÷Òý£¬¶¼¿ÉÒÔÌá¸ßÊý¾ÝµÄ²éѯËÙ¶È¡£
8£®ÓÃT-SQLÓï¾ä£¬°´Êý¾Ý¿âJXGLÖÐÑ¡Ð޿γ̱íSCµÄ³É¼¨ÁнµÐò´´½¨Ò»¸öÆÕͨË÷Òý£¨·ÇΨһ¡¢·Ç¾Û¼¯£©¡£
½â£º
USE JXGL GO
CREATE INDEX SC_GRADE ON SC(GRADE DESC) GO
µÚ8ÕÂ
1£®Ãû´Ê½âÊÍ£º
´æ´¢¹ý³Ì ´¥·¢Æ÷ Óû§¶¨Ò庯Êý ´ð£º
´æ´¢¹ý³Ì£ºÊÇÒ»×éΪÁËÍê³ÉÌØ¶¨¹¦ÄܵÄSQL Óï¾ä¼¯£¬¾±àÒëºó´æ´¢ÔÚÊý¾Ý¿âÖУ¬Óû§Í¨¹ýÖ¸¶¨´æ´¢¹ý³ÌµÄÃû×Ö²¢¸ø³ö²ÎÊý£¨Èç¹û¸Ã´æ´¢¹ý³Ì´øÓвÎÊý£©À´Ö´ÐÐËü¡£
´¥·¢Æ÷£ºÊÇÒ»ÖÖ¶Ô±í½øÐвåÈë¡¢¸üС¢É¾³ýµÄʱºò»á×Ô¶¯Ö´ÐеÄÌØÊâ´æ´¢¹ý³Ì¡£
23
Óû§¶¨Ò庯Êý£ºÏñϵͳÄÚÖú¯ÊýÒ»Ñù£¬¿ÉÒÔ½ÓÊܲÎÊý£¬Ö´Ðи´ÔӵIJÙ×÷²¢½«²Ù×÷½á¹ûÒÔÖµµÄÐÎʽ·µ»Ø£¬Ò²¿ÉÒÔ½«½á¹ûÓñí¸ñ±äÁ¿·µ»Ø¡£
2£®¶ÔÓÚÀý5.9½Ìѧ¹ÜÀíÊý¾Ý¿âµÄ±íSºÍSC£¬ÓÐÏÂÁгÌÐòÇåµ¥£¬ÊÔÐðÊöÆä¹¦ÄÜ¡£
USE JXGL GO
DECLARE @MyNo CHAR(9) SET @MyNo='S7'
IF (SELECT SDEPT FROM S WHERE SNO=@MyNo)='CS' BEGIN
SELECT AVG(GRADE) AS 'ƽ¾ù³É¼¨' FROM SC
WHERE SNO=@MyNo
END ELSE
PRINT 'ѧºÅΪ'+@MyNo+'µÄѧÉú²»´æÔÚ»ò²»ÊôÓÚ¼ÆËã»ú¿ÆÑ§Ïµ' GO
´ð£ºÊäÈëÒ»¸öѧÉúµÄѧºÅ£¬Èç¹û¸ÃѧÉúÊôÓÚ¼ÆËã»ú¿ÆÑ§ÏµÔòÊä³ö¸ÃѧÉúµÄƽ¾ù³É¼¨£¬·ñÔòÊä³ö£º¸ÃѧºÅµÄѧÉú²»´æÔÚ»ò²»ÊôÓÚ¼ÆËã»ú¿ÆÑ§ÏµµÄÌáʾ¡£
3£®¼òÊö´æ´¢¹ý³ÌÓë´¥·¢Æ÷µÄÇø±ð¡£
´ð£º´¥·¢Æ÷Óë´æ´¢¹ý³Ì¿ÉÒÔ˵ÊǷdz£ÏàËÆ£¬¿ÉÒÔ˵ÊÇÒ»ÖÖ±äÖֵĴ洢¹ý³Ì£¬´¥·¢Æ÷ºÍ´æ´¢¹ý³ÌÒ»Ñù¶¼ÊÇSQLÓï¾ä¼¯¡£´æ´¢¹ý³ÌÖ´ÐкóפÁôÔÚ¼ÆËã»úµÄ¸ßËÙ»º³åÇøÖУ¬ÀûÓô洢¹ý³Ì¿ÉÒÔÌá¸ß³ÌÐòµÄЧÂÊ£¬µ«´æ´¢¹ý³ÌÖ»ÄÜͨ¹ýµ÷ÓÃÀ´ÔËÐУ¬¿ÉÒÔÓзµ»ØµÄ״ֵ̬£¬´æ´¢¹ý³Ì¿ÉÒÔÔÚ³ÌÐò¶Ëµ÷ÓÃÖ´ÐС£´¥·¢Æ÷ÊDz»¿ÉÒÔÔÚ³ÌÐò¶Ëµ÷Óõģ¬ËüÊÇSQL·þÎñÆ÷¶Ë×Ô¶¯ÔËÐС£´¥·¢Æ÷Óë´æ´¢¹ý³ÌµÄÖ÷񻂿±ðÔÚÓÚ´¥·¢Æ÷µÄÔËÐз½Ê½¡£´æ´¢¹ý³Ì±ØÐëÓÐÓû§¡¢Ó¦ÓóÌÐò»òÕß´¥·¢Æ÷À´ÏÔʾµÄµ÷Óò¢Ö´ÐУ¬¶ø´¥·¢Æ÷Êǵ±Ìض¨Ê±¼ä³öÏÖµÄʱºò£¬×Ô¶¯Ö´ÐлòÕß¼¤»îµÄ£¬ÓëÁ¬½ÓÓÃÊý¾Ý¿âÖеÄÓû§¡¢»òÕßÓ¦ÓóÌÐòÎ޹ء£µ±Ò»Ðб»²åÈë¡¢¸üлòÕßɾ³ýʱ´¥·¢Æ÷²ÅÖ´ÐУ¬Í¬Ê±»¹È¡¾öÓÚ´¥·¢Æ÷ÊÇÔõÑù´´½¨µÄ£¬µ±UPDATE·¢ÉúʱʹÓÃÒ»¸ö¸üд¥·¢Æ÷£¬µ±INSERT·¢ÉúʱʹÓÃÒ»¸ö²åÈë´¥·¢Æ÷£¬µ±DELETE·¢ÉúʱʹÓÃÒ»¸öɾ³ý´¥·¢Æ÷¡£
4£®AFTER´¥·¢Æ÷ºÍINSTEAD OF´¥·¢Æ÷ÓÐʲô²»Í¬£¿
´ð£ºAFTER´¥·¢Æ÷ÒªÇóÖ»ÓÐÖ´ÐÐijһ²Ù×÷INSERT¡¢UPDATE¡¢DELETEÖ®ºó´¥·¢Æ÷²Å±»´¥·¢£¬ÇÒÖ»Äܶ¨ÒåÔÚ±íÉÏ£¬Ò²¿ÉÒÔÕë¶Ô±íµÄͬһ²Ù×÷¶¨Òå¶à¸ö´¥·¢Æ÷ÒÔ¼°ËüÃÇ´¥·¢µÄ˳Ðò¡£¶øINSTEAD OF´¥·¢Æ÷±íʾ²¢²»Ö´ÐÐÆä¶¨ÒåµÄ²Ù×÷£¨INSERT¡¢UPDATE¡¢DELETE£©¶ø½öÊÇÖ´Ðд¥·¢Æ÷±¾Éí¡£¼È¿ÉÒÔÔÚ±íÉ϶¨ÒåINSTEAD OF´¥·¢Æ÷£¬Ò²¿ÉÒÔÔÚÊÓͼÉ϶¨Ò壬µ«¶Ôͬһ²Ù×÷Ö»Äܶ¨ÒåÒ»¸öINSTEAD OF´¥·¢Æ÷¡£
5£®ÔÚ½Ìѧ¹ÜÀíÊý¾Ý¿âÖУ¬´´½¨Ò»¸öÃûΪSTU_AGEµÄ´æ´¢¹ý³Ì£¬¸Ã´æ´¢¹ý³Ì¸ù¾ÝÊäÈëµÄѧºÅ£¬Êä³ö¸ÃѧÉúµÄ³öÉúÄê·Ý¡£
½â£º
USE JXGL GO
CREATE PROCEDURE STU_AGE @S_NAME CHAR(8) AS
SELECT YEAR(GETDATE()-AGE) AS 'YEAR' FROM S
24
¹²·ÖÏí92ƪÏà¹ØÎĵµ