´òÓ¡

PostgreSQLѧϰÎĵµ

5.8. ģʽ

Ò»¸ö PostgreSQL Êý¾Ý¿â¼¯Èº °üº¬Ò»¸ö»ò¶à¸öÃüÃûµÄÊý¾Ý¿â¡£Óû§ºÍÓû§×éÔÚÕû¸ö¼¯ÈºµÄ·¶Î§ÄÚ Êǹ²ÏíµÄ£¬µ«ÊÇÆäËüÊý¾Ý²¢²»Êǹ²ÏíµÄ¡£Èκθø¶¨µÄÓë·þÎñÆ÷µÄ¿Í»§Á¬½Ó¶¼Ö» ÄÜ·ÃÎÊÔÚÒ»¸öÊý¾Ý¿âÀïµÄÊý¾Ý£¬¾ÍÊÇÄǸöÔÚÁ¬½ÓÇëÇóÀïÉùÃ÷µÄ¡£

    ×¢Òâ: Ò»¸ö¼¯ÈºµÄÓû§²¢²»Ò»¶¨ÒªÓзÃÎʼ¯ÈºÄÚËùÓÐÊý¾Ý¿âµÄȨÏÞ¡£ ¹²ÏíÓû§ÃûµÄÒâ˼ÊDz»ÄÜÓÐͬÃûÓû§£¬Ò²¾ÍÊÇ£¬ÔÚͬһ¸ö¼¯ÈºÀïµÄÁ½¸ö Êý¾Ý¿âÀï¶¼ÓнРjoe µÄÓû§£»µ«ÊÇϵͳ¿ÉÒÔÅäÖÃ³É Ö»ÔÊÐí joe ·ÃÎÊijЩÊý¾Ý¿â¡£

Ò»¸öÊý¾Ý¿â°üº¬Ò»¸ö»ò¶à¸öÃüÃûµÄ ģʽ£¬ ģʽÓÖ°üº¬±í¡£Ä£Ê½»¹°üº¬ÆäËüÃüÃûµÄ¶ÔÏ󣬰üÀ¨Êý¾ÝÀàÐÍ£¬º¯Êý£¬ ÒÔ¼°²Ù×÷·û¡£Í¬Ò»¸ö¶ÔÏóÃû¿ÉÒÔÔÚ²»Í¬µÄģʽÀïʹÓöø²»»áµ¼Ö³åÍ»£» ±ÈÈ磬schema1 ºÍ myschema ¶¼¿ÉÒÔ°üº¬½Ð×ö mytable µÄ±í¡£ºÍÊý¾Ý¿â²»Í¬£¬Ä£Ê½²»ÊÇÑϸñ·ÖÀëµÄ£º Ò»¸öÓû§¿ÉÒÔ·ÃÎÊËûËùÁ¬½ÓµÄÊý¾Ý¿âÖеÄÈÎÒâģʽÖеĶÔÏó£¬ Ö»ÒªËûÓÐȨÏÞ¡£

ÎÒÃÇÐèҪģʽµÄÔ­ÒòÓкöࣺ

    *

      ÔÊÐí¶à¸öÓû§Ê¹ÓÃÒ»¸öÊý¾Ý¿â¶ø²»»á¸ÉÈÅÆäËüÓû§¡£
    *

      °ÑÊý¾Ý¿â¶ÔÏó×éÖ¯³ÉÂß¼­×飬ÈÃËüÃǸü±ãÓÚ¹ÜÀí¡£
    *

      µÚÈý·½µÄÓ¦ÓÿÉÒÔ·ÅÔÚ²»Í¬µÄģʽÖУ¬ ÕâÑùËüÃǾͲ»»áºÍÆäËü¶ÔÏóµÄÃû×Ö³åÍ»¡£

ģʽÀàËÆÓÚ²Ù×÷ϵͳ²ã´ÎµÄĿ¼£¬Ö»²»¹ýģʽ²»ÄÜǶÌס£
5.8.1. ´´½¨Ò»¸öģʽ

Òª´´½¨Ò»¸öģʽ£¬Ê¹ÓÃÃüÁî CREATE SCHEMA¡£ ¸ø³öÄãÑ¡ÔñµÄģʽÃû×Ö¡£±ÈÈ磺

CREATE SCHEMA myschema;

Òª´´½¨»òÕß·ÃÎÊÔÚģʽÖеĶÔÏó£¬Ð´³öÒ»¸öÊÜÐÞÊεÄÃû×Ö£¬ Õâ¸öÃû×Ö°üº¬Ä£Ê½ÃûÒÔ¼°±í£¨¶ÔÏóÃû£©£¬ËüÃÇÖ®¼äÓÃÒ»¸ö¾äµã·Ö¿ª£º

schema.table

£¨³öÓÚ¼ò»¯£¬ÎÒÃǽ«Ö»ÌÖÂÛ±í£¬Õâ¸ö¸ÅÄîÊÊÓÃÓÚËùÓÐÆäËüÓÐÃû¶ÔÏóÀàÐÍ£¬±ÈÈçÀàÐͺͺ¯Êý¡££©

ʵ¼ÊÉÏ£¬¸üÒ»°ãµÄÓï·¨ÊÇ

database.schema.table

Õâ¸öÓï·¨Ò²¿ÉÒÔʹÓ㬵«Ä¿Ç°ËüÖ»ÊÇΪÁËºÍ SQL ±ê×¼ÐÎʽÉϼæÈÝ¡£ Èç¹ûÄãдÁËÒ»¸öÊý¾Ý¿âÃû£¬ÄÇôËü±ØÐëºÍÄ㵱ǰÁ¬½ÓµÄÊý¾Ý¿âͬÃû¡£

ÒªÔÚÐÂģʽÀï´´½¨Ò»¸ö±í£¬ÓÃ

CREATE TABLE myschema.mytable (
...
);

ÕâÑùµÄ·½·¨ÔÚÈκÎÐèÒªÒ»¸ö±íÃû×ֵĵط½¶¼¿ÉÒÔÓ㬠°üÀ¨Ð޸ıíµÄÃüÁîºÍÎÒÃÇÔÚÏÂÒ»ÕÂÒª½²µÄÊý¾Ý·ÃÎÊÃüÁî¡£

Èç¹ûÒ»¸öģʽÊǿյģ¨ËùÓÐËüÀïÃæµÄ¶ÔÏó¶¼ÒѾ­É¾³ý£©£¬ÄÇôɾ³ýÒ»¸öģʽµÄÃüÁî

DROP SCHEMA myschema;

Ҫɾ³ýÒ»¸ö°üº¬ËùÓжÔÏóµÄģʽ£¬Ê¹ÓÃ

DROP SCHEMA myschema CASCADE;

²ÎÔÄ Section 5.10 »ñÈ¡¶ã²ØÔÚÕâЩ¶¯×÷±³ºó µÄ¶«Î÷µÄÒ»°ã»úÖÆµÄÃèÊö¡£

ͨ³£ÄãÏë´´½¨Ò»¸ö±ðÈËÓµÓеÄģʽ£¨ÒòΪÕâÊÇÒ»ÖÖÏÞÖÆÄãµÄÓû§ ÔÚ¶¨ÒåÁ¼ºÃµÄģʽÖеĻµÄ·½·¨£©¡£ÆäÓï·¨ÈçÏ£º

CREATE SCHEMA schemaname AUTHORIZATION username;

ÄãÉõÖÁ¿ÉÒÔÊ¡ÂÔģʽÃû×Ö£¬ÕâʱģʽÃû½«ºÍÓû§ÃûͬÃû¡£ ²ÎÔÄ Section 5.8.6 »ñÈ¡ÕâÖÖÇé¿ö µÄÊÊÓó¡ºÏ¡£

ÒÔ pg_ ¿ªÍ·µÄģʽÃûÊDZ£Áô¸øÏµÍ³Ê¹Óõģ¬ Óû§²»ÄÜ´´½¨ÕâÑùµÄÃû×Ö¡£
5.8.2. Public ģʽ

ÔÚÇ°ÃæµÄС½ÚÀÎÒÃÇûÓÐÉùÃ÷ÈκÎģʽÃû×־ʹ´½¨ÁË±í¡£ ȱʡʱ£¬ÕâÑùµÄ±í£¨ÒÔ¼°ÆäËû¶ÔÏ󣩶¼×Ô¶¯·Åµ½Ò»¸ö½Ð×ö"public" µÄģʽÖÐÈ¥ÁË¡£Ã¿¸öÐÂÊý¾Ý¿â¶¼°üº¬Ò»¸öÕâÑùµÄģʽ¡£Òò´Ë£¬ÏÂÃæµÄÃüÁîÊǵÈЧµÄ£º

CREATE TABLE products ( ... );

ºÍ

CREATE TABLE public.products ( ... );

5.8.3. ģʽËÑË÷·¾¶

È«³ÆµÄÃû×ÖдÆðÀ´·Ç³£·Ñ¾¢£¬²¢ÇÒÎÒÃÇ×îºÃ²»ÒªÔÚÓ¦ÓÃÀïÖ±½Ó дÉÏÌØ¶¨µÄģʽÃû¡£Òò´Ë£¬±íͨ³£¶¼ÊÇÓÃδÐÞÊεÄÃû×Ö ÒýÓõģ¬ÕâÑùµÄÃû×ÖÀïÖ»ÓбíÃû×Ö¡£ÏµÍ³Í¨¹ý²éÕÒÒ»¸öËÑË÷·¾¶ À´ÅжÏÒ»¸ö±í¾¿¾¹ÊÇÄĸö±í£¬Õâ¸ö·¾¶ÊÇÒ»¸öÐèÒª²éÕÒµÄģʽÁÐ±í¡£ ÔÚËÑË÷·¾¶ÀïÕÒµ½µÄµÚÒ»¸ö±í½«±»µ±×÷Ñ¡¶¨µÄ±í¡£Èç¹ûÔÚËÑË÷·¾¶ÖРûÓÐÆ¥Åä±í£¬ÄÇô¾Í±¨¸æÒ»¸ö´íÎ󣬼´Ê¹Æ¥Åä±íµÄÃû×ÖÔÚÊý¾Ý¿âÆäËüµÄ ģʽÖдæÔÚÒ²Èç´Ë¡£

ÔÚËÑË÷·¾¶ÖеĵÚÒ»¸öģʽ½Ð×öµ±Ç°Ä£Ê½¡£³ýÁËÊÇËÑË÷µÄµÚÒ»¸öģʽ֮Í⣬ Ëü»¹ÊÇÔÚ CREATE TABLE ûÓÐÉùÃ÷ģʽÃûµÄʱºò£¬Ð½¨±í ËùÔڵĵط½¡£

ÒªÏÔʾµ±Ç°ËÑË÷·¾¶£¬Ê¹ÓÃÏÂÃæµÄÃüÁ

SHOW search_path;

ÔÚȱʡµÄÉèÖÃÖУ¬·µ»ØÏÂÃæµÄ¶«Î÷£º

search_path
--------------
$user,public

µÚÒ»¸öÔªËØÉùÃ÷½«ÒªËÑË÷Ò»¸öºÍµ±Ç°Óû§Í¬ÃûµÄģʽ¡£ ÒòΪ»¹Ã»ÓÐÕâÑùµÄģʽ´æÔÚ£¬ËùÒÔÕâÌõ¼Ç¼±»ºöÂÔ¡£µÚ¶þ¸öÔªËØÖ¸Ïò ÎÒÃÇÒѾ­¿´¹ýµÄ¹«¹²Ä£Ê½¡£

ËÑË÷·¾¶ÖдæÔڵĵÚÒ»¸öģʽÊÇ´´½¨Ð¶ÔÏóµÄȱʡλÖᣠÕâ¾ÍÊÇΪʲôȱʡµÄ¶ÔÏ󶼻ᴴ½¨ÔÚ public ģʽÀïµÄÔ­Òò¡£ Èç¹ûÔÚÈÎºÎÆäËü»·¾³ÖÐÒýÓöÔÏ󣬶øÇÒûÓÐÓÃģʽÐÞÊÎ £¨±íÐ޸ģ¬Êý¾Ý±ä¸ü£¬»òÕß²éѯÃüÁ£¬ÄÇôϵͳ»á±éÀú ËÑË÷·¾¶£¬Ö±µ½ÕÒµ½Ò»¸öÆ¥ÅäµÄ¶ÔÏó¡£Òò´Ë£¬ÔÚȱʡµÄÅäÖÃÀ ÈκÎδÐÞÊεķÃÎÊͬÑùÒ²Ö»ÄÜÒýÓà public ģʽ¡£

Òª°ÑеÄģʽ·Åµ½Â·¾¶ÖÐÀ´£¬ÎÒÃÇÓÃ

SET search_path TO myschema,public;

£¨ÎÒÃÇÔÚÕâÀïÊ¡ÂÔÁË $user ÊÇÒòΪÎÒÃÇ ²¢²»ÊÇÁ¢¼´ÐèÒªËü¡££©È»ºóÎÒÃǾͿÉÒÔ²»ÓüÓģʽÐÞÊηÃÎÊ ±íÁË£º

DROP TABLE mytable;

ͬÑù£¬ÒòΪ myschema ÊÇ·¾¶ÖеĵÚÒ»¸öÔªËØ£¬ жÔÏóȱʡʱ½«´´½¨ÔÚÕâÀï¡£

ÎÒÃÇÒ²¿ÉÒÔд³É

SET search_path TO myschema;

È»ºóÎÒÃÇÈç¹û²»Ã÷È·ÐÞÊεϰ£¬¾Í²»ÄÜÔÙ·ÃÎÊ public ģʽÁË¡£ public ģʽûÓÐÈκÎÌØÊâÖ®´¦£¬Ö»²»¹ýËüȱʡʱ¾Í´æÔÚ¡£ ÎÒÃÇÒ²¿ÉÒÔ°ÑËüɾ³ýÁË¡£

ÓÖ¼û Section 9.19 »ñÈ¡ÆäËü·ÃÎÊģʽËÑË÷·¾¶µÄ·½·¨¡£

ËÑË÷·¾¶¶ÔÓÚÊý¾ÝÀàÐÍÃû£¬º¯ÊýÃûÒÔ¼°²Ù×÷·ûÃûµÄÔË×÷·½Ê½ºÍ±íÃû×ÖÍêÈ«Ïàͬ¡£ Êý¾ÝÀàÐͺͺ¯ÊýÃû¿ÉÒÔÏó±íÃû×ÖÒ»Ñù¼ÓÒÔÐÞÊΡ£Èç¹ûÄãÐèÒªÔÚ±í´ïʽÀïдһ¸öÓÐÐÞÊεIJÙ×÷·ûÃû×Ö£¬ ÎÒÃÇÓÐÒ»¸öÌØÊâµÄÒªÇó£ºÄã±ØÐëÕâôд

OPERATOR(schema.operator)

ÕâÑùÊÇΪÁ˱ÜÃâÓï·¨ÆçÒå¡£ÏÂÃæÊÇÒ»¸öÀý×Ó

SELECT 3 OPERATOR(pg_catalog.+) 4;

ʵ¼ÊÉÏÎÒÃÇͨ³£ÒÀÀµËÑË÷·¾¶Ñ°ÕÒ²Ù×÷·û£¬ ÕâÑù¾Í²»ÓÃдÕâôÄÑ¿´µÄ¶«Î÷ÁË¡£
5.8.4. ģʽºÍȨÏÞ

ȱʡʱ£¬Óû§¿´²»µ½Ä£Ê½Öв»ÊôÓÚËûÃÇËùÓеĶÔÏó¡£ ÎªÁËÈÃËûÃÇ¿´µÃ¼û£¬Ä£Ê½µÄËùÓÐÕßÐèÒªÔÚģʽÉϸ³Óè USAGE ȨÏÞ¡£ÎªÁËÈÃÓû§Ê¹ÓÃģʽÖеĶÔÏó£¬ÎÒÃÇ¿ÉÄÜÐèÒª¸³Óè¶îÍâµÄȨÏÞ£¬ Ö»ÒªÊÇÊʺϸöÔÏóµÄ¡£

Óû§Ò²¿ÉÒÔÔÊÐíÔÚ±ðÈ˵ÄģʽÀï´´½¨¶ÔÏó¡£ÒªÔÊÐíÕâô×ö£¬ ÎÒÃÇÐèÒª¸³ÓèÔÚ¸ÃģʽÉ쵀 CREATE ȨÏÞ¡£ Çë×¢Ò⣬ȱʡʱ£¬Ã¿¸öÈ˶¼ÔÚ public ģʽÉÏ ÓÐ CREATE ȨÏÞ¡£ÕâÑù¾ÍÔÊÐíËùÓпÉÒÔÁ¬½Óµ½ Ö¸¶¨Êý¾Ý¿âÉϵÄÓû§ÔÚÕâÀï´´½¨¶ÔÏó¡£Èç¹ûÄã²»ÔÊÐíÕâô×ö£¬ Äã¿ÉÒÔ³·ÏúÕâ¸öȨÏÞ£º

REVOKE CREATE ON public FROM PUBLIC;

£¨µÚÒ»¸ö "public" ÊÇģʽ£¬µÚ¶þ¸ö "public" Òâ˼ÊÇ"ËùÓÐÓû§"¡£ µÚÒ»¾äÀïËüÊǸö±êʶ·û£¬¶øµÚ¶þ¾äÀïÊǸö¹Ø¼ü×Ö£¬ËùÒÔÓв»Í¬µÄ´óСд£» ¼ÇסÎÒÃÇÔÚ Section 4.1.1 ÀïÃæ ˵¹ýµÄÔ­Ôò¡££©
5.8.5. ϵͳ±íģʽ

³ýÁË public ºÍÓû§´´½¨µÄģʽ֮Í⣬ ÿ¸öÊý¾Ý¿â¶¼°üº¬Ò»¸ö pg_catalog ģʽ£¬Ëü°üº¬ ϵͳ±íºÍËùÓÐÄÚÖÃÊý¾ÝÀàÐÍ£¬º¯ÊýºÍ²Ù×÷·û¡£pg_catalog ×ÜÊÇËÑË÷·¾¶ÖеÄÒ»²¿·Ö¡£Èç¹ûËüûÓÐÃ÷È·³öÏÖÔÚ·¾¶ÖУ¬ÄÇô Ëü»áÒþº¬µØÔÚ·¾¶ÀïµØÄ£Ê½Ö®Ç°ËÑË÷¡£ÕâÑù¾Í±£Ö¤ÁËÄÚÖõØÃû×Ö ×ÜÊÇ¿ÉÒÔËÑË÷µØ¡£²»¹ý£¬Äã¿ÉÒÔÃ÷È·µØ°Ñpg_catalog ·ÅÔÚÄãµÄËÑË÷·¾¶µÄºóÃæ£¬Èç¹ûÄãÏëÓÃÓû§¶¨ÒåµÄÃû×Ö¸²¸ÇÄÚÖõÄÃû×ֵϰ¡£

ÔÚ PostgreSQL °æ±¾ 7.3 ֮ǰ£¬ ÒÔ pg_ ¿ªÍ·µÄ±íÃû×ÖÊDZ£ÁôµÄ¡£Õâ¸ö¹æÔòÏÖÔÚ ²»ÔÙÊÇÕýÈ·µÄÁË£ºÈç¹û±ØÒª£¬Äã¿ÉÒÔ´´½¨ÕâÑùµÄ±íÃû×Ö£¬ Ö»ÒªÊÇÔÚ·ÇϵͳģʽÀï¡£²»¹ý£¬ÎÒÃÇ×îºÃ»¹ÊDz»ÒªÊ¹ÓÃÕâÑùµÄÃû×Ö£¬ ÒÔ±£Ö¤×Ô¼º½«À´²»»áºÍа汾³åÍ»£ºÄÇЩ°æ±¾Ò²Ðí»á¶¨ÒåһЩºÍ ÄãµÄ±íͬÃûµÄ±í¡££¨ÔÚȱʡËÑË÷·¾¶ÖУ¬Ò»¸ö¶ÔÄãµÄ±íµÄÎÞÐÞÊÎ ÒýÓý«½âÎöΪϵͳ±í¡££©ÏµÍ³±í½«¼ÌÐø×ñÑ­ÒÔpg_ ¿ªÍ·µÄ´«Í³£¬Òò´Ë£¬Ö»ÒªÄãµÄ±í²»ÊÇÒÔpg_ ¿ªÍ·£¬ ¾Í²»»áºÍÎÞÐÞÊεÄÓû§±íÃû×Ö³åÍ»¡£
5.8.6. ʹÓ÷½Ê½

ģʽ¿ÉÒÔÒÔ¶àÖÖ·½Ê½×éÖ¯ÄãµÄÊý¾Ý¡£ÏÂÃæÊÇһЩ½¨ÒéʹÓõÄģʽ£¬ ËüÃÇÒ²ºÜÈÝÒ×ÔÚȱʡÅäÖÃÖеõ½Ö§³Ö£º

    *

      Èç¹ûÄãûÓд´½¨ÈκÎģʽ£¬ÄÇôËùÓÐÓû§Òþº¬¶¼·ÃÎÊpublicģʽ¡£ ÕâÑù¾ÍÄ£ÄâÁË»¹Ã»ÓÐģʽµÄʱºòµÄÇé¾°¡£ÕâÖÖÉèÖý¨ÒéÖ÷ÒªÓÃÔÚ Ö»ÓÐÒ»¸öÓû§»òÕßÊý¾Ý¿âÀïÖ»Óм¸¸öºÏ×÷Óû§µÄÇéÐΡ£ÕâÑùµÄÉèÖà ҲÔÊÐíÎÒÃÇÆ½»¬µØ´ÓÎÞģʽµÄ»·¾³¹ý¶É¡£
    *

      Äã¿ÉÒÔΪÿ¸öÓû§´´½¨Ò»¸öģʽ£¬Ãû×ÖºÍÓû§Ïàͬ¡£Òª¼ÇµÃȱʡµÄ ËÑË÷·¾¶´Ó$user¿ªÊ¼£¬Ëü»á½âÎöΪÓû§Ãû¡£ Òò´Ë£¬Èç¹ûÿ¸öÓû§¶¼ÓÐÒ»¸ö¶ÀÁ¢µÄģʽ£¬ÄÇôËûÃÇȱʡʱ·ÃÎÊËûÃÇ ×Ô¼ºµÄģʽ¡£

      Èç¹ûÄãʹÓÃÁËÕâÑùµÄÉèÖã¬ÄÇôÄã¿ÉÄÜ»¹Ïë³·Ïú¶ÔpublicģʽµÄ·ÃÎÊ £¨»òÕßÒ»²¢É¾³ýÁËËü£©£¬Òò´Ë£¬Óû§¾ÍÕæµÄÏÞÖÆÓÚËûÃÇ×Ô¼ºµÄģʽÁË¡£
    *

      Òª°²×°¹²ÏíµÄÓ¦Ó㨱»ËùÓÐÈËʹÓÃµÄ±í£¬µÚÈý·½ÌṩµÄ¶îÍâµÄº¯ÊýµÈµÈ£©£¬ ÎÒÃÇ¿ÉÒÔ°ÑËüÃǷŵ½¶ÀÁ¢µÄģʽÖС£Ö»Òª¼ÇµÃ¸ø·ÃÎÊËüÃǵÄÓû§¸³ÓèºÏÊÊ µÄȨÏ޾ͿÉÒÔÁË¡£È»ºóÓû§¾Í¿ÉÒÔͨ¹ýÓÃÒ»¸öģʽÃûÐÞÊÎÕâЩÃû×ÖÀ´Ê¹Óà ÕâЩ¶îÍâµÄ¶ÔÏ󣬻òÕßËûÃÇ¿ÉÒ԰ѶîÍâµÄģʽ·Åµ½ËûÃǵÄËÑË÷·¾¶ÖУ¬ÓÉËûÃÇ ¶¨¡£

5.8.7. ÒÆÖ²ÐÔ

ÔÚ SQL ±ê×¼ÀÔÚͬһ¸öģʽÀïµÄ¶ÔÏóÓɲ»Í¬µÄÓû§ËùÓеĸÅÄîÊDz»´æÔڵġ£ ¶øÇÒ£¬ÓÐЩʵÏÖ²»ÔÊÐíÄã´´½¨ºÍËüÃǵÄËùÓÐÕß²»Í¬ÃûµÄģʽ¡£Êµ¼ÊÉÏ£¬ ģʽºÍÓû§µÄ¸ÅÄîÔÚÄÇЩֻʵÏÖÁ˱ê×¼Öй涨µÄ»ù±¾Ä£Ê½Ö§³ÖµÄÊý¾Ý¿âϵͳÀXºõÊÇÒ»ÑùµÄ¡£ Òò´Ë£¬Ðí¶àÓû§¿¼ÂǶÔÃû×Ö¼ÓÒÔÐÞÊΣ¬Ê¹ËüÃÇÕæÕýÓÉ username.tablename×é³É¡£ Èç¹ûÄãΪÿ¸öÓû§¶¼´´½¨ÁËÒ»¸öģʽ£¬Õâʵ¼ÊÉϾÍÊÇ PostgreSQL µÄÐÐΪ¡£

ͬÑù£¬ÔÚ SQL ±ê×¼ÀïҲûÓÐ public ģʽµÄ¸ÅÄî¡£ ΪÁË×î´óÏ޶ȵØ×ñÑ­±ê×¼£¬Äã²»Ó¦¸ÃʹÓ㨿ÉÄÜÉõÖÁÊÇÓ¦¸Ãɾ³ý£© public ģʽ¡£

µ±È»£¬ÓÐЩ SQL Êý¾Ý¿âϵͳ¿ÉÄܸù±¾Ã»ÓÐʵÏÖģʽ£¬»òÕßÊÇͨ¹ýÔÊÐí £¨¿ÉÄÜÊÇÓÐÏÞÖÆµÄ£©¿çÊý¾Ý¿â·ÃÎÊÀ´ÌṩģʽµÄÖ§³Ö¡£ Èç¹ûÄãÐèÒªÔÚÕâЩϵͳÉϸɻÄÇô×î´óÏ޶ȵÄÒÆÖ²ÐÔÀ´×Ô¸ù±¾²»ÓÃģʽ¡£

TOP

5.9. ÆäËüÊý¾Ý¿â¶ÔÏó

ÔÚ¹ØÏµ½á¹¹À±íÊǺËÐĵĶÔÏó£¬ÒòΪËüÃDZ£´æÄãµÄÊý¾Ý¡£ µ«ÊÇËüÃDz¢·Ç´æÔÚÓÚÊý¾Ý¿âÖеÄΨһ¶ÔÏó¡£ÎÒÃÇ¿ÉÒÔ´´½¨Ðí¶àÆäËüÀàÐ͵ĶÔÏóÀ´ÈÃÎÒÃǶÔÊý¾ÝµÄʹÓú͹ÜÀí±äµÃ¸ü·½±ã¡£ ÎÒÃÇûÓÐÔÚÕâÒ»ÕÂÀïÌÖÂÛÕâЩ¶ÔÏ󣬵«ÊÇÎÒÃÇÔÚÕâÀï»á¸øÄãÒ»¸öÁÐ±í£¬ÕâÑùÄã¾ÍÖªµÀʲôÊÇ¿ÉÄܵġ£

    *

      ÊÓͼ
    *

      º¯Êý£¬²Ù×÷·û£¬Êý¾ÝÀàÐÍ£¬Óò
    *

      ´¥·¢Æ÷ºÍÖØÐ´¹æÔò

ÕâЩÖ÷ÌâµÄÏàÐÅÐÅÏ¢ÔÚ Part V Àï¡£
5.10. ÒÀÀµÐÔ×·×Ù

Èç¹ûÄã´´½¨ÁËÒ»¸ö°üº¬Ðí¶à±í£¬²¢ÇÒ´øÓÐÍâ¼üÔ¼Êø£¬ÊÓͼ£¬ ´¥·¢Æ÷£¬º¯ÊýµÈµÈµÄ¸´ÔÓÊý¾Ý¿â½á¹¹¡£ÄÇôÄã¾Í»áÔÚ¶ÔÏó Ö®¼äÒþº¬µØ´´½¨ÁËÒ»¸öÒÀÀµÐÔµÄÍøÂç¡£±ÈÈ磬һ¸ö´øÓÐÍâ¼ü Ô¼ÊøµÄ±íÒÀÀµÓÚËüÒýÓÃµÄ±í¡£

ΪÁ˱£Ö¤Õû¸öÊý¾Ý¿â½á¹¹µÄÍêÕûÐÔ£¬PostgreSQL ±£Ö¤ ÄãÎÞ·¨É¾³ýÄÇЩ»¹ÓÐÆäËü¶ÔÏóÒÀÀµµÄ¶ÔÏó¡£±ÈÈ磬ÊÔͼɾ³ýÎÒÃÇÔÚ Section 5.4.5 ÀÂǵIJúÆ·±í£¬Õâ¸öʱºò ¶©µ¥±íÈÔÈ»ÒÀÀµËü£¬ÕâÑùµÄɾ³ý¶¯×÷ÊDz»Äܳɹ¦µÄ£¬»áÓÐÀàËÆÏÂÃæµÄ´íÎóÐÅÏ¢³öÏÖ£º

DROP TABLE products;

NOTICE:  constraint orders_product_no_fkey on table orders depends on table products
ERROR:  Cannot drop table products because other objects depend on it
        Use DROP ... CASCADE to drop the dependent objects too

Õâ¸ö´íÎóÐÅÏ¢°üº¬Ò»¸öÓÐÓõÄÌáʾ£ºÈç¹ûÄã²»ÏëÈÇÀ´·Ö±ðɾ³ýËùÓÐ ÒÀÀµ¶ÔÏóµÄÂé·³£¬Äã¿ÉÒÔÔËÐÐ

DROP TABLE products CASCADE;

È»ºóËùÓб»ÒÀÀµµÄ¶ÔÏó¶¼½«±»É¾³ý¡£ÔÚÕâÖÖÇé¿öÏ£¬ Ëü²¢²»É¾³ý¶©µ¥±í£¬Ëüֻɾ³ýÍâ¼üÔ¼Êø¡££¨Èç¹ûÄãÏë¼ì²é DROP ... CASCADE »á¸Éʲô£¬ÔËÐв»´ø CASCADE µÄ DROPÈ»ºóÔĶÁ NOTICE ÐÅÏ¢¡££©

PostgreSQL ÀïµÄËùÓÐɾ³ýÃüÁî¶¼ Ö§³ÖÉùÃ÷ CASCADE¡£µ±È»£¬¾ßÌåµÄÒÀÀµÐÔʵÌå È¡¾öÓÚ¶ÔÏóµÄÀàÐÍ¡£ÄãÒ²¿ÉÒÔд RESTRICT£¬¶ø ²»ÊÇ CASCADE£¬ÒÔ»ñȡȱʡµÄÐÐΪ£¬ Õâ¸öʱºòÏÞÖÆÓÚɾ³ýÄÇЩÆäËü¶ÔÏóÒÀÀµµÄ¶ÔÏó¡£

    ×¢Òâ: ¸ù¾Ý SQL ±ê×¼£¬ÒªÇóÖÁÉÙÉùÃ÷ RESTRICT »òÕß CASCADE ÖеÄÒ»¸ö¡£ ʵ¼ÊÉÏûÓÐÄÄÖÖÊý¾Ý¿âϵͳÊÇÕâôʵÏֵ쬵«ÊÇȱʡµÄÐÐΪÊÇ RESTRICT »¹ÊÇ CASCADE ÔòÒòϵͳ¶øÒì¡£

    ×¢Òâ: ÔÚ PostgreSQL 7.3 ֮ǰµÄÍâ¼üÔ¼ÊøÒÀÀµÐÔºÍÐòÁÐ×Ö¶ÎÒÀÀµÐÔ ÔÚÉý¼¶¹ý³ÌÖж¼²»»áµÃµ½Î¬»¤»òÕß´´½¨¡£ËùÓÐÆäËüµÄÒÀÀµÐÔÀàÐÍ ÔÚÉý¼¶¹ý³ÌÖж¼½«µÃµ½Ç¡µ±µÄ´´½¨¡£

TOP

6.1. ²åÈëÊý¾Ý

ÔÚ´´½¨Ò»¸ö±íµÄʱºò£¬ËüÀïÃæÃ»ÓÐÊý¾Ý¡£ÔÚÊý¾Ý¿â¿ÉÒÔÓеãÓÃ֮ǰ Òª×öµÄµÚÒ»¼þʾÍÊÇÏòÀïÃæ²åÈëÊý¾Ý¡£Êý¾ÝÔÚ¸ÅÄîÉÏÊÇÿ´ÎÒ»ÐеزåÈëµÄ¡£ ÎÒÃǵ±È»¿ÉÒÔÿ´Î²åÈë¶àÐУ¬ µ«ÊǵÄȷûÓа취һ´Î²åÈëÉÙÓÚÒ»ÐеÄÊý¾Ý¡£¼´Ê¹ÄãÖ»ÖªµÀ¼¸¸ö×Ö¶Î µÄÊýÖµ£¬ÄÇôÄãÒ²±ØÐë´´½¨Ò»¸öÍêÕûµÄÐС£

Òª´´½¨Ò»¸öÐÂÐУ¬ÎÒÃÇʹÓà INSERT ÃüÁî¡£ ÕâÌõÃüÁîÒªÇóÌṩ±íÃû×ֺ͸ø±íÖÐÿ¸ö×Ö¶ÎÌṩһ¸öÊýÖµ¡£ ±ÈÈ磬¼ÙÉèÀ´×Ô Chapter 5 µÄ²úÆ·±í£º

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
);

ÏÂÃæÊÇÒ»¸öÏò±íÖвåÈëÒ»ÐеÄÀý×Ó£º

INSERT INTO products VALUES (1, 'Cheese', 9.99);

Êý¾ÝÖµÊǰ´ÕÕÕâЩ×Ö¶ÎÔÚ±íÖгöÏÖµÄ˳ÐòÁгöµÄ£¬²¢ÇÒÓöººÅ·Ö¸ô¡£ ͨ³££¬Êý¾ÝÖµÊÇÎı¾£¨³£Á¿£©£¬µ«Ò²ÔÊÐíʹÓñêÁ¿±í´ïʽ¡£

ÉÏÃæµÄÓï·¨µÄȱµãÊÇÄã±ØÐëÖªµÀ±íÖÐ×ֶεÄ˳Ðò¡£Òª±ÜÃâÕâ¸öÎÊÌ⣬ ÄãÒ²¿ÉÒÔÃ÷È·µØÁгö×ֶΡ£±ÈÈ磬ÏÂÃæµÄÁ½ÌõÃüÁî¶¼ÓкÍÉÏÃæÄÇÌõ ÃüÁîÒ»ÑùµÄЧ¹û£º

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);
INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);

Ðí¶àÓû§ÈÏΪÃ÷È·Áгö×Ö¶ÎÃû×ÖÊǸöºÃϰ¹ß¡£

Èç¹ûÄãûÓлñµÃËùÓÐ×ֶεÄÊýÖµ£¬ÄÇôÄã¿ÉÒÔÊ¡ÂÔÆäÖеÄһЩ¡£ Õâ¸öʱºò£¬ÕâЩ×ֶν«±»Ìî³äΪËüÃǵÄȱʡÊýÖµ¡£±ÈÈ磬

INSERT INTO products (product_no, name) VALUES (1, 'Cheese');
INSERT INTO products VALUES (1, 'Cheese');

µÚ¶þÖÖÐÎʽÊÇ PostgreSQL µÄÒ»¸öÀ©Õ¹¡£ Ëü´Ó×ó¿ªÊ¼Ìî³äÎÒÃǸø³öµÄÊýÖµ¸öÊýµÄ×Ö¶ÎÊý£¬ÆäËûµÄ½«ÊÇȱʡ¡£

ΪÁ˱£³ÖÇåÎú£¬ÄãÒ²¿ÉÒÔÃ÷È·ÒªÇóȱʡֵ£¬ÓÃÓÚ¶ÀÁ¢µÄ×ֶλòÕßÓÃÓÚ Õû¸öÐУº

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT);
INSERT INTO products DEFAULT VALUES;

    Ìáʾ: Òª½øÐÐ"ÅúÁ¿×°ÔØ"£¬Ò²¾ÍÊÇ˵£¬²åÈë´óÁ¿Êý¾Ý£¬ ÎÒÃÇ¿ÉÒÔ¿´¿´ COPY ÃüÁî¡£ Ëü²»Ïñ INSERT ÃüÁîÄÇôÁé»î£¬µ«ÊǸü¸ßЧ¡£

TOP

6.2. ¸üÐÂÊý¾Ý

ÐÞ¸ÄÒѾ­´æ´¢ÔÚÊý¾Ý¿âÖеÄÊý¾ÝµÄÐÐΪ½Ð×ö¸üС£Äã¿ÉÒÔ¸üР¶ÀÁ¢µÄÐУ¬Ò²¿ÉÒÔ¸üбíÖÐËùÓеÄÐУ¬»¹¿ÉÒÔ¸üÐÂÆäÖеÄÒ»²¿·ÖÐС£ ÎÒÃÇ¿ÉÒÔ¶ÀÁ¢µØ¸üÐÂÿ¸ö×ֶΣ¬¶øÆäËûµÄ×Ö¶ÎÔò²»ÊÜÓ°Ïì¡£

ÒªÖ´ÐÐÒ»´Î¸üУ¬ÄãÐèÒªÈýÖÖÐÅÏ¢£º

   1.

      ±íµÄÃû×ÖºÍÒª¸üеÄ×Ö¶ÎÃû£¬
   2.

      ×ֶεÄÐÂÊýÖµ£¬
   3.

      Òª¸üеÄÊÇÄÄÐС£

ÎÒÃÇÔÚ Chapter 5 Àï˵¹ý£¬SQL ͨ³£²¢²»ÎªÊý¾ÝÐÐÌṩΨһ±êʶ¡£ Òò´ËÎÒÃÇÎÞ·¨Ö±½ÓÉùÃ÷ÐèÒª¸üÐÂÄÄÒ»ÐС£µ«ÊÇ£¬ ÎÒÃÇ¿ÉÒÔͨ¹ýÉùÃ÷Ò»¸öÒª¸üеÄÐбØÐëÂú×ãµÄÌõ¼þ¡£ Ö»ÓÐÔÚ±íÀïÃæ´æÔÚÖ÷¼üµÄʱºò£¨²»¹ÜÄã½ÐËüʲô£©£¬ÎÒÃDzÅÄܿɿ¿µØÖ¸¶¨Ò»¸ö¶ÀÁ¢µÄÐУ¬ ·½·¨ÊÇѡȡһ¸öÆ¥ÅäÖ÷¼üµÄÐС£Í¼Ðλ¯µÄÊý¾Ý¿â·ÃÎʹ¤¾ßÒÀÀµÕâ¸ö¶«Î÷À´ÈÃÎÒÃÇ¿ÉÒÔ¶ÀÁ¢µØ¸üÐÂijЩÐС£

±ÈÈ磬ÕâÌõÃüÁî¸üм۸ñΪ5µÄËùÓвúÆ·µÄµÄ¼Û¸ñΪ10£º

UPDATE products SET price = 10 WHERE price = 5;

ÕâÑù×ö¿ÉÄܵ¼ÖÂÁãÐУ¬Ò»ÐлòÕ߸ü¶àÊý¾ÝÐб»¸üС£ Èç¹ûÎÒÃÇÊÔͼ×öÒ»¸ö²»Æ¥ÅäÈκÎÊý¾ÝÐеĸüУ¬ÄÇÒ²²»Ëã´íÎó¡£

ÈÃÎÒÃÇ×Ðϸ¿´¿´Õâ¸öÃüÁî¡£Ê×ÏÈÊǹؼü×Ö UPDATE£¬ È»ºó¸ú×űíÃû×Ö¡£ºÍƽ³£Ò»Ñù£¬±íÃû×ÖÒ²¿ÉÒÔÊÇÓÃģʽÐÞÊεģ¬ ·ñÔò¾Í»á´Ó·¾¶ÖаÑËüÕÒ³öÀ´¡£È»ºóÊǹؼü×Ö SET£¬ ºóÃæ¸ú×Å×Ö¶ÎÃû£¬Ò»¸öµÈºÅÒÔ¼°ÐµÄ×Ö¶ÎÊýÖµ¡£ÐµÄ×Ö¶ÎÊýÖµ¿ÉÒÔÊÇÈÎÒâ±êÁ¿±í´ïʽ£¬ ¶ø²»½ö½öÊdz£Á¿¡£±ÈÈ磬Èç¹ûÄãÏë°ÑËùÓвúÆ·µÄ¼Û¸ñÌá¸ß 10%£¬Äã¿ÉÒÔÓãº

UPDATE products SET price = price * 1.10;

ÈçÄãËù¼û£¬ÓÃÓÚÐÂÖµµÄ±í´ïʽҲ¿ÉÒÔÒýÓÃÐÐÖÐÏÖÓеÄÊýÖµ¡£ÎÒÃÇ»¹ºöÂÔÁË WHERE ×Ӿ䡣Èç¹ûÎÒÃǺöÂÔÁËÕâ¸ö×Ӿ䣬 ÄÇô¾ÍÒâζ×űíÖеÄËùÓÐÐж¼Òª¸üС£Èç¹û³öÏÖÁËWHERE ×Ӿ䣬 ÄÇôֻÓÐÆ¥ÅäËüºóÃæµÄÌõ¼þµÄÐб»¸üС£Çë×¢ÒâÔÚ SET ×Ó¾äÖеĵȺÅÊÇÒ»¸ö¸³Öµ£¬ ¶øÔÚ WHERE ×Ó¾äÖеĵȺÅÊDZȽϣ¬²»¹ýÕâÑù²¢²»»áµ¼ÖÂÈÎºÎÆçÒå¡£ µ±È»Ìõ¼þ WHERE ²»Ò»¶¨·ÇµÃÊÇÏàµÈ²âÊÔ¡£ Ðí¶àÆäËû²Ù×÷·ûÒ²¶¼¿ÉÒÔʹÓ㨲ÎÔÄ Chapter 9£©¡£ µ«ÊDZí´ïʽ±ØÐëµÃ³öÒ»¸ö²¼¶û½á¹û¡£

Ä㻹¿ÉÒÔÔÚÒ»¸ö UPDATE ÃüÁîÖиüиü¶àµÄ×ֶΣ¬ ·½·¨ÊÇÔÚ SET ×Ó¾äÖÐÁгö¸ü¶à¸³Öµ¡£±ÈÈ磺

UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;

TOP

6.3. ɾ³ýÊý¾Ý

µ½Ä¿Ç°ÎªÖ¹ÎÒÃÇÒѾ­½âÊÍÁËÈçºÎÏò±íÖÐÔö¼ÓÊý¾ÝÒÔ¼°ÈçºÎ¸Ä±äÊý¾Ý¡£ ʣϵÄÊÇÌÖÂÛÈçºÎɾ³ý²»ÔÙÐèÒªµÄÊý¾Ý¡£ºÍÇ°ÃæÔö¼ÓÊý¾ÝÒ»Ñù£¬É¾³ýÊý¾ÝÒ²±ØÐëÊÇ´Ó±íÖÐÕûÐÐÕûÐеØÉ¾³ý¡£ ÔÚÇ°ÃæµÄÒ»½ÚÀïÎÒÃǽâÊÍÁË SQL²»Ìṩֱ½Ó·ÃÎʶÀÁ¢Ðеķ½·¨¡£ ÒòΪ£¬É¾³ýÐÐÖ»ÄÜÊÇͨ¹ýÉùÃ÷±»É¾³ýÐбØÐëÆ¥ÅäµÄÌõ¼þµÄÇé¿öϽøÐС£ Èç¹ûÄãÔÚ±íÉÏÓÐÒ»¸öÖ÷¼ü£¬ÄÇôÄã¿ÉÒÔÉùÃ÷׼ȷµÄÐС£µ«ÊÇÄãÒ²¿ÉÒÔɾ³ýÆ¥ÅäÌõ¼þµÄÐÐ×飬 »òÕßÄã¿ÉÒÔÒ»´Î´Ó±íÖÐɾ³ýËùÓÐÐС£

ÎÒÃÇʹÓà DELETE ÃüÁîɾ³ýÐУºËüµÄÓï·¨ ºÍ UPDATE ÃüÁî·Ç³£ÀàËÆ¡£±ÈÈ磬Ҫ´Ó²úÆ· ±íÖÐɾ³ýËùÓм۸ñΪ10µÄ²úÆ·£¬ÓÃ

DELETE FROM products WHERE price = 10;

Èç¹ûÄãÖ»ÊÇдµ½

DELETE FROM products;

ÄÇô±íÖÐËùÓÐÐж¼»á±»É¾³ý£¡³ÌÐòÔ±Ò»¶¨Òª×¢Òâ¡£

TOP

²éѯ ÒÔºóѧϰ

TOP

7.1. ¸ÅÊö

´ÓÊý¾Ý¿âÖмìË÷Êý¾ÝµÄ¹ý³Ì»òÃüÁî½Ð×ö²éѯ¡£ ÔÚ SQL Àï SELECT ÃüÁîÓÃÓÚÉùÃ÷²éѯ¡£ SELECT ÃüÁîµÄͨÓÃÓï·¨ÊÇ

SELECT select_list FROM table_expression [sort_specification]

ÏÂÃæ¼¸½ÚÃèÊöÑ¡ÔñÁÐ±í£¬±í±í´ïʽ£¬ºÍÅÅÐòÉùÃ÷µÄϸ½Ú¡£

×î¼òµ¥µÄ²éѯµÄÐÎʽÈçÏÂ

SELECT * FROM table1;

¼ÙÉèÓÐÒ»¸ö±í½Ð×ötable1£¬ÕâÌõÃüÁ´Ótable1ÖмìË÷ËùÓÐÐкÍËùÓÐ×ֶΡ£ £¨¼ìË÷µÄ·½·¨È¡¾öÓÚ¿Í»§¶ËÓ¦ÓᣱÈÈ磬psql ³ÌÐò½«ÔÚÆÁÄ»ÉÏÏÔʾһ¸ö ASCII ÒÕÊõ¹¹³ÉµÄ±í¸ñ£¬ ¿Í»§¶Ë¿â½«Ìṩ¼ìË÷¶ÀÁ¢ÐкÍ×ֶεĺ¯Êý¡££© Ñ¡ÔñÁбíÉùÃ÷ * Òâζ×ÅËùÓбí±í´ïʽÌṩµÄ×ֶΡ£ Ò»¸öÑ¡ÔñÁбíÒ²¿ÉÒÔÑ¡Ôñ¿ÉÓÃ×ֶεÄÒ»¸ö×Ó¼¯»òÕßÔÚ¼ìË÷ËüÃÇ֮ǰ¶Ô×ֶνøÐмÆË㣻±ÈÈ磬Èç¹ûtable1ÓнÐ×öa£¬b£¬ºÍcµÄ×ֶΣ¨¿ÉÄÜ»¹ÓÐÆäËû£©£¬ÄÇôÄã¿ÉÒÔÓÃÏÂÃæµÄ²éѯ£º

SELECT a, b + c FROM table1;

£¨¼ÙÉèbºÍc¶¼ÊÇÊý×ÖÊý¾ÝÀàÐÍ£©¡£ ²ÎÔÄ Section 7.3 »ñÈ¡¸ü¶àϸ½Ú¡£

FROM table1 ÊÇÒ»Öַdz£¼òµ¥µÄ±í±í´ïʽ£ºËüÖ»¶ÁÈ¡ÁËÒ»¸ö±í¡£ ͨ³££¬±í±í´ïʽ¿ÉÒÔÊÇ»ù±¾±í£¬Á¬½Ó£¬ºÍ×Ó²éѯµÄ¸´ÔÓ¹¹Ôì¡£ µ«ÄãÒ²¿ÉÒÔÊ¡ÂÔ±í±í´ïʽ¼Ç¼¶øÓÃSELECTÃüÁîµ±×öÒ»¸ö¼ÆËãÆ÷£º

SELECT 3 * 4;

Èç¹ûÑ¡ÔñÁбíÀïµÄ±í´ïʽ·µ»Ø±ä»¯µÄ½á¹û£¬ÄÇôÕâ¸ö¶«Î÷¾Í¸üÓÐÓÃÁË¡£ ±ÈÈ磬Äã¿ÉÒÔÓÃÕâ¸ö·½·¨µ÷Óú¯Êý£º

SELECT random();

TOP

7.2. ±í±í´ïʽ

±í±í´ïʽ¼ÆËãÒ»¸ö±í¡£ ¸Ã±í±í´ïʽ°üº¬Ò»¸öFROM×Ӿ䣬¸Ã×Ó¾ä¿ÉÒÔ¸ù¾ÝÐèҪѡÓÃWHERE£¬GROUP BY£¬ ºÍHAVING ×Ӿ䡣´ó²¿·ÖµÄ±í±í´ïʽֻÊÇÖ¸Ïò´ÅÅÌÉϵÄÒ»¸ö±í£¬Ò»¸öËùνµÄ»ù±¾±í£¬µ«ÊÇÎÒÃÇ¿ÉÒÔÓøü¸´Ôӵıí±í´ïʽÒÔ¸÷ÖÖ·½·¨Ð޸Ļò×éºÏ»ù±¾±í¡£

±í±í´ïʽÀïµÄWHERE£¬GROUP BY£¬ºÍ HAVING ×Ó¾äÉùÃ÷һϵÁжÔÔ´×Ô FROM ×Ó¾äµÄ±íµÄת»»²Ù×÷¡£ËùÓÐÕâЩת»»×îºóÉú³ÉÒ»¸öÐéÄâ±í£¬Ìṩ´«µÝ¸øÑ¡ÔñÁÐ±í¼ÆËã²éѯÊä³öÐеÄÊý¾ÝÐС£
7.2.1. FROM ×Ó¾ä

FROM ×Ó¾ä ´ÓÒ»¸öÓöººÅ·Ö¸ôµÄ±íÒýÓÃÁбíÖеÄÒ»¸ö»ò¸ü¶à¸öÆäËü±íÖÐÉú³ÉÒ»¸ö±í¡£

FROM table_reference [, table_reference [, ...]]

±íÒýÓÿÉÒÔÊÇÒ»¸ö±íÃû×Ö£¨¿ÉÄÜÓÐģʽÐÞÊΣ©»òÕßÊÇÒ»¸öÉú³ÉµÄ±í£¬ ±ÈÈç×Ó²éѯ£¬Ò»¸ö±íÁ¬½Ó£¬»òÕßÕâЩ¶«Î÷µÄ¸´ÔÓ×éºÏ¡£Èç¹ûÔÚFROM×Ó¾äÖÐÁгöÁ˶àÓÚÒ»¸ö±í£¬ ÄÇôËüÃDZ» cross join £¨¼ûÏÂÎÄ£©ÐγÉÒ»¸öÅÉÉú±í£¬¸Ã±í¿ÉÒÔ½øÐÐ WHERE£¬GROUP BY ºÍ HAVING ×Ó¾äµÄת»»´¦Àí£¬²¢×îºóÉú³ÉËùÓбí±í´ïʽµÄ½á¹û¡£

Èç¹ûÒ»¸ö±íÒýÓÃÊÇÒ»¸ö¼òµ¥µÄ±íÃû×Ö²¢ÇÒËüÊDZí¼Ì³Ð¼¶±ðÖеij¬¼¶±í£¬ ÄÇô¸Ã±íµÄÐаüÀ¨ËùÓÐËüµÄºó´ú×Ó±íµÄÐУ¬³ý·ÇÄãÔڸñíÃû×ÖÇ°Ãæ¼ÓONLY¹Ø¼ü×Ö¡£ ÕâÑùµÄ»°£¬Õâ¸öÒýÓþÍÖ»Éú³É³öÏÖÔÚÃüÃû±íÖеÄÁÐ ¡ª ÈκÎÔÚ×Ó±íÖÐ×·¼ÓµÄÁж¼»á±»ºöÂÔ¡£
7.2.1.1. Á¬½Ó±í

Ò»¸öÁ¬½Ó±íÊǸù¾ÝÌØ¶¨µÄÁ¬½ÓÀàÐ͵ĹæÔò´ÓÁ½¸öÆäËü±í£¨ÕæÊµ±í»òÉú³É±í£©ÖÐÅÉÉúµÄ±í¡£ ÎÒÃÇÖ§³ÖÄÚÁ¬½Ó£¬ÍâÁ¬½ÓºÍ½»²æÁ¬½ÓÀàÐÍ¡£

Á¬½ÓÀàÐÍ

½»²æÁ¬½Ó

    T1 CROSS JOIN T2

    ¶Ôÿ¸ö´Ó T1 ºÍ T2 À´µÄÐеÄ×éºÏ£¬ Éú³ÉµÄ±í½«°üº¬ÕâÑùÒ»ÐУºËü°üº¬ËùÓÐ T1 ÀïÃæµÄ×ֶκóÃæ¸ú×ÅËùÓÐ T2 ÀïÃæµÄ×ֶΡ£ Èç¹ûÁ½±í·Ö±ðÓÐ N ºÍ M ÐУ¬Á¬½Ó³ÉµÄ±í½«ÓÐ N * M ÐС£

    FROM T1 CROSS JOIN T2 µÈЧÓÚ FROM T1, T2¡£ Ëü»¹µÈЧÓÚ FROM T1 INNER JOIN T2 ON TRUE£¨¼ûÏÂÎÄ£©¡£
Ìõ¼þÁ¬½Ó(join)

    T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON boolean_expression
    T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 USING ( join column list )
    T1 NATURAL { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2

    INNER ºÍ OUTER ¶ÔËùÓÐÁ¬½Ó£¨join£© ÀàÐͶ¼ÊÇ¿ÉÑ¡µÄ¡£ INNER ÊÇȱʡ£»LEFT£¬RIGHT£¬ºÍ FULL Òþº¬ÍâÁ¬½Ó¡£

    Á¬½ÓÌõ¼þÔÚON»òUSING×Ó¾äÀïÉùÃ÷£¬ »òÕßÓùؼü×ÖNATURALÒþº¬µØÉùÃ÷¡£Á¬½ÓÌõ¼þÅжÏÀ´×ÔÁ½¸öÔ´±íÖеÄÄÇЩÐÐÊÇ"Æ¥Åä"µÄ£¬ÕâЩÎÒÃǽ«ÔÚÏÂÃæÏêϸ½âÊÍ¡£

    ON×Ó¾äÊÇ×î³£¼ûµÄÁ¬½ÓÌõ¼þµÄÀàÐÍ£ºËü½ÓÊÕÒ»¸öºÍWHERE×Ó¾äÀïÓõÄÒ»ÑùµÄ²¼¶ûÖµ±í´ïʽ¡£ Èç¹ûÁ½¸ö·Ö±ðÀ´×ÔT1ºÍT2µÄÐÐÔÚON±í´ïʽÉÏÔËËãµÄ½á¹ûÎªÕæ£¬ÄÇôËüÃǾÍËãÊÇÆ¥ÅäµÄÐС£

    USINGÊǸöËõдµÄ¸ÅÄËü½ÓÊÕÒ»¸öÓöººÅ·Ö¸ôµÄ×Ö¶ÎÃû×ÖÁÐ±í£¬ ÕâЩ×ֶαØÐëÊÇÁ¬½Ó±í¹²Óеģ¬×îÖÕÐγÉÒ»¸öÁ¬½ÓÌõ¼þ£¬±íʾÕâЩ×ֶζԱØÐëÏàͬ¡£ ×îºó£¬JOIN USING µÄÊä³ö»áΪÿһ¶ÔÏàµÈµÄÊäÈë×Ö¶ÎÊä³öÒ»¸ö×ֶΣ¬ºóÃæ¸ú×ÅÀ´×Ô¸÷¸ö±íµÄËùÓÐÆäËü×ֶΡ£ Òò´Ë£¬USING (a, b, c) µÈЧÓÚ ON (t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c) Ö»²»¹ýÊÇÈç¹ûʹÓÃÁËON£¬ÄÇôÔÚ½á¹ûÀï a£¬b£¬ºÍ c×Ö¶Îÿ¸ö¶¼»áÓÐÁ½¸ö£¬ ¶øÓÃUSINGµÄʱºòÿ¸ö×ֶξÍÖ»»áÓÐÒ»¸ö¡£

    ×îºó£¬NATURAL ÊÇ USING µÄËõдÐÎʽ£ºËüÐγÉÒ»¸ö USING ÁÐ±í£¬ ¸ÃÁбíÓÉÄÇЩÔÚÁ½¸ö±íÀï¶¼³öÏÖÁ˵Ä×Ö¶ÎÃû×Ö×é³É¡£ºÍUSINGÒ»Ñù£¬ÕâЩ×Ö¶ÎÖ»ÔÚÊä³ö±íÀï³öÏÖÒ»´Î¡£

    Ìõ¼þÁ¬½Ó¿ÉÄܵÄÀàÐÍÊÇ£º

    INNER JOIN

        ¶ÔÓÚ T1 µÄÿһÐÐ R1£¬Éú³ÉµÄÁ¬½Ó±í¶¼ÓÐÒ»ÐжÔÓ¦ T2 ÖеÄÿһ¸öÂú×ãºÍ R1 µÄÁ¬½ÓÌõ¼þµÄÐС£
    LEFT OUTER JOIN

        Ê×ÏÈ£¬Ö´ÐÐÒ»´ÎÄÚÁ¬½Ó¡£È»ºó£¬Îª T1 ÀïÄÇЩºÍ T2 ÀïÈκÎÒ»Ðж¼²»Âú×ãÁ¬½ÓÌõ¼þµÄÐзµ»ØÒ»¸öÁ¬½ÓÐУ¬ ͬʱ¸ÃÁ¬½ÓÐÐÀï¶ÔÓ¦ T2 µÄÁÐÓÿÕÖµ²¹Æë¡£Òò´Ë£¬ Éú³ÉµÄÁ¬½Ó±íÀïÎÞÌõ¼þµØ°üº¬À´×Ô T1 ÀïµÄÿһÐÐÖÁÉÙÒ»¸ö¸±±¾¡£
    RIGHT OUTER JOIN

        Ê×ÏÈ£¬Ö´ÐÐÒ»´ÎÄÚÁ¬½Ó¡£È»ºó£¬Îª T2 ÀïÄÇЩºÍ T1 ÀïÈκÎÒ»Ðж¼²»Âú×ãÁ¬½ÓÌõ¼þµÄÐзµ»ØÒ»¸öÁ¬½ÓÐУ¬ ͬʱ¸ÃÁ¬½ÓÐÐÀï¶ÔÓ¦ T1 µÄÁÐÓÿÕÖµ²¹Æë¡£Òò´Ë£¬ Éú³ÉµÄÁ¬½Ó±íÀïÎÞÌõ¼þµØ°üº¬À´×Ô T2 ÀïµÄÿһÐС£
    FULL OUTER JOIN

        Ê×ÏÈ£¬Ö´ÐÐÒ»´ÎÄÚÁ¬½Ó¡£È»ºó£¬Îª T1 ÀïÄÇЩºÍ T2 ÀïÈκÎÒ»Ðж¼²»Âú×ãÁ¬½ÓÌõ¼þµÄÐзµ»ØÒ»¸öÁ¬½ÓÐУ¬ ͬʱ¸ÃÁ¬½ÓÐÐÀï¶ÔÓ¦ T2 µÄÁÐÓÿÕÖµ²¹Æë¡£ ͬÑù£¬Îª T2 ÀïÄÇЩºÍ T1 ÀïµÄÈκÎÐж¼²»Âú×ãÁ¬½ÓÌõ¼þµÄÐзµ»ØÒ»¸öÁ¬½ÓÐУ¬¸ÃÐÐÀï¶ÔÓ¦ T1 µÄÁÐÓÿÕÖµ²¹Æë¡£

Èç¹û T1 ºÍ T2 ÓÐÒ»¸ö»òÕß¶¼ÊÇ¿ÉÒÔÁ¬½ÓµÄ±í£¬ ÄÇôËùÓÐÀàÐ͵ÄÁ¬½Ó¶¼¿ÉÒÔ´®ÔÚÒ»Æð»òǶÌ×ÔÚÒ»Æð¡£ Äã¿ÉÒÔÔÚJOIN×Ó¾äÖÜΧʹÓÃÔ²À¨»¡À´¿ØÖÆÁ¬½Ó˳Ðò£¬ Èç¹ûûÓÐÔ²À¨»¡£¬ÄÇôJOIN×Ó¾äÊÇ´Ó×óÏòÓÒǶÌ׵ġ£

TOP

ΪÁ˽âÊÍÕâЩÎÊÌ⣬¼ÙÉèÎÒÃÇÓÐÒ»¸ö±í t1

num | name
-----+------
   1 | a
   2 | b
   3 | c

ºÍ t2

num | value
-----+-------
   1 | xxx
   3 | yyy
   5 | zzz

È»ºóÎÒÃÇÓò»Í¬µÄÁ¬½Ó·½Ê½¿ÉÒÔ»ñµÃ¸÷ÖÖ½á¹û£º

=> SELECT * FROM t1 CROSS JOIN t2;
num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   1 | a    |   3 | yyy
   1 | a    |   5 | zzz
   2 | b    |   1 | xxx
   2 | b    |   3 | yyy
   2 | b    |   5 | zzz
   3 | c    |   1 | xxx
   3 | c    |   3 | yyy
   3 | c    |   5 | zzz
(9 rows)

=> SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num;
num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   3 | c    |   3 | yyy
(2 rows)

=> SELECT * FROM t1 INNER JOIN t2 USING (num);
num | name | value
-----+------+-------
   1 | a    | xxx
   3 | c    | yyy
(2 rows)

=> SELECT * FROM t1 NATURAL INNER JOIN t2;
num | name | value
-----+------+-------
   1 | a    | xxx
   3 | c    | yyy
(2 rows)

=> SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num;
num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   2 | b    |     |
   3 | c    |   3 | yyy
(3 rows)

=> SELECT * FROM t1 LEFT JOIN t2 USING (num);
num | name | value
-----+------+-------
   1 | a    | xxx
   2 | b    |
   3 | c    | yyy
(3 rows)

=> SELECT * FROM t1 RIGHT JOIN t2 ON t1.num = t2.num;
num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   3 | c    |   3 | yyy
     |      |   5 | zzz
(3 rows)

=> SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num;
num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   2 | b    |     |
   3 | c    |   3 | yyy
     |      |   5 | zzz
(4 rows)

Óà ON ÉùÃ÷µÄÁ¬½ÓÌõ¼þÒ²¿ÉÒÔ°üº¬ÓëÁ¬½Ó²»Ö±½ÓÏà¹ØµÄÌõ¼þ¡£ÕâÖÖ¹¦ÄÜ¿ÉÄܶÔijЩ²éѯºÜÓÐÓ㬵«ÊÇÐèÒªÎÒÃÇ×ÐϸÏëÇå³þ¡£ ±ÈÈ磺

=> SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND t2.value = 'xxx';
num | name | num | value
-----+------+-----+-------
   1 | a    |   1 | xxx
   2 | b    |     |
   3 | c    |     |
(3 rows)

TOP

7.2.1.2. ±íºÍÁбðÃû

Äã¿ÉÒÔ¸øÒ»¸ö±í»ò¸´ÔÓ±íÒýÓÃÒ»¸öÁÙʱµÄÃû×Ö£¬ÓÃÓÚʣϵIJéѯÖÐÒýÓÃÄÇЩÅÉÉúµÄ±í¡£ ÕâÑù×ö½Ð×ö±í±ðÃû¡£

Òª´´½¨Ò»¸ö±í±ðÃû£¬ÎÒÃÇ¿ÉÒÔд£º

FROM table_reference AS alias

»òÕß

FROM table_reference alias

AS ¹Ø¼ü×ÖÄ¿Ç°Ã»É¶ÌØ±ðµÄº¬Òå¡£ alias ¿ÉÒÔÊÇÈÎÒâ±êʶ·û¡£

±í±ðÃûµÄµäÐÍÓ¦ÓÃÊǸø³¤±íÃû¸³Óè±È½Ï¶ÌµÄ±êʶ·û£¬ ºÃÈÃÁ¬½Ó×Ó¾ä¸üºÃ¶ÁһЩ¡£±ÈÈ磺

SELECT * FROM some_very_long_table_name s JOIN another_fairly_long_name a ON s.id = a.num;

±ðÃû³ÉΪµ±Ç°²éѯµÄ±íÒýÓõÄÐÂÃû³Æ ¡ª ÎÒÃDz»ÔÙÄܹ»Óøñí×î³õµÄÃû×ÖÒýÓÃËüÁË¡£Òò´Ë

SELECT * FROM my_table AS m WHERE my_table.a > 5;

ÊDz»ºÏ·¨µÄ SQL Óï·¨¡£ÕâÀォ·¢ÉúµÄÊÂÇ飨ÕâÊÇ PostgreSQL¶Ô±ê×¼µÄÀ©Õ¹£©ÊÇÔÚ FROM ×Ó¾äÀïÃæÒþº¬µØÔö¼ÓÁËÒ»¸ö±íÒýÓã¬Òò´ËÕâ¸ö²éѯ½«»áÏóÏÂÃæÕâÑù´¦Àí

SELECT * FROM my_table AS m, my_table AS my_table WHERE my_table.a > 5;

ÕâÑù»áÉú³ÉÒ»¸ö½»²æÁ¬½Ó£¬Í¨³£¿É²»ÊÇÄãÏëÒªµÄ¡£

Ô²À¨»¡ÓÃÓÚ½â¾öÆçÒ壮ÏÂÃæµÄÓï¾ä½«°Ñ±ðÃû b ¸³ÓèÁ¬½ÓµÄ½á¹û£¬ÕâÊǺÍÇ°ÃæµÄÀý×Ó²»Í¬µÄ£º

SELECT * FROM (my_table AS a CROSS JOIN my_table) AS b ...

ÁíÍâÒ»ÖÖÐÎʽµÄ³ýÁ˸ø±í±ðÃû»¹¸ø¸Ã±íµÄ×ֶθ³ÓèÁËÁÙʱÃû×Ö£º

FROM table_reference [AS] alias ( column1 [, column2 [, ...]] )

Èç¹ûÉùÃ÷µÄ×ֶαðÃû±È±íÀïʵ¼ÊµÄ×Ö¶ÎÉÙ£¬ÄÇôºóÃæµÄ×ֶξÍûÓÐÖØÃüÃû£® Õâ¸öÓï·¨¶ÔÓÚ×ÔÁ¬½Ó»ò×Ó²éÑ¯ÌØ±ðÓÐÓã®

Èç¹ûÓÃÕâЩÐÎʽÖеÄÈκÎÒ»ÖÖ¸øÒ»¸öJOIN×Ó¾äµÄÊä³ö¸½¼ÓÁËÒ»¸ö±ðÃû£¬ ÄÇô¸Ã±ðÃû¾ÍÔÚJOINÀïÒþ²ØÁËÆäԭʼµÄÃû×Ö¡£±ÈÈç

SELECT a.* FROM my_table AS a JOIN your_table AS b ON ...

ÊǺϷ¨ SQL£¬µ«ÊÇ

SELECT a.* FROM (my_table AS a JOIN your_table AS b ON ...) AS c

ÊDz»ºÏ·¨µÄ£º±í±ðÃû a ÔÚ±ðÃûcÍâÃæÊÇ¿´²»µ½µÄ¡£
7.2.1.3. ×Ó²éѯ

ÉùÃ÷Ò»¸öÅÉÉú±íµÄ×Ó²éѯ±ØÐë°üΧÔÚÔ²À¨»¡Àï²¢ÇÒ±ØÐ븳ÓèÒ»¸ö±ðÃû¡£ £¨²ÎÔÄ Section 7.2.1.2£®£©±ÈÈ磺

FROM (SELECT * FROM table1) AS alias_name

Õâ¸öÀý×ÓµÈЧÓÚ FROM table1 AS alias_name¡£ ¸üÓÐȤµÄÀý×ÓÊÇÔÚ×Ó²éѯÀïÃæÓзÖ×é»ò¾Û¼¯µÄʱºò£¬ Õâ¸öʱºò×Ó²éѯ²»ÄܹéÄɳÉÒ»¸ö¼òµ¥µÄÁ¬½Ó¡£
7.2.1.4. ±íº¯Êý

±íº¯ÊýÊÇÄÇЩÉú³ÉÒ»¸öÐм¯ºÏµÄº¯Êý£¬Õâ¸ö¼¯ºÏ¿ÉÒÔÊÇÓÉ»ù±¾Êý¾ÝÀàÐÍ£¨±êÁ¿ÀàÐÍ£©×é³É£¬ Ò²¿ÉÒÔÊÇÓÉ·ûºÏÊý¾ÝÀàÐÍ£¨±íµÄÐУ©×é³É¡£ËûÃǵÄÓ÷¨ÀàËÆÒ»¸ö±í£¬ÊÓͼ£¬»òÕßÔÚ²éѯµÄFROM×Ó¾äÀïµÄ×Ó²éѯ¡£ ±íº¯Êý·µ»ØµÄ×ֶοÉÒÔÏñÒ»¸ö±í£¬ÊÓͼ£¬»òÕß×Ó²éѯ×Ö¶ÎÄÇÑù°üº¬ÔÚ SELECT£¬JOIN£¬»òÕß WHERE ×Ó¾äÀï¡£

Èç¹ûÒ»¸ö±íº¯Êý·µ»ØÒ»¸ö»ù±¾Êý¾ÝÀàÐÍ£¬ÄÇôµ¥ÁеĽá¹ûÊý¾ÝÊÇÒÔº¯ÊýµÄÃû×ÖÃüÃûµÄ¡£ Èç¹ûº¯Êý·µ»ØÒ»¸ö¸´ºÏÀàÐÍ£¬ÄÇô½á¹û×ֶεÄÃû×ֺ͸ÃÀàÐ͵Äÿ¸ö¶ÀÁ¢ÊôÐÔµÄÃû×ÖÏàͬ¡£

±íº¯Êý¿ÉÒÔÔÚ FROM ×Ó¾äÖÐȡһ¸ö±ðÃû£¬µ«ÄãÒ²¿ÉÒÔ²»¸øËü±ðÃû¡£ Èç¹ûÒ»¸öº¯ÊýÔÚ FROM ×Ó¾äÖÐûÓбðÃû£¬ÄÇô½«Ê¹Óú¯ÊýÃû×÷Ϊ½á¹û±íµÄÃû×Ö¡£

Àý×Ó£º

CREATE TABLE foo (fooid int, foosubid int, fooname text);

CREATE FUNCTION getfoo(int) RETURNS SETOF foo AS $$
    SELECT * FROM foo WHERE fooid = $1;
$$ LANGUAGE SQL;

SELECT * FROM getfoo(1) AS t1;

SELECT * FROM foo
    WHERE foosubid IN (select foosubid from getfoo(foo.fooid) z
                           where z.fooid = foo.fooid);

CREATE VIEW vw_getfoo AS SELECT * FROM getfoo(1);

SELECT * FROM vw_getfoo;

ÓÐʱºî£¬°ÑÒ»¸öº¯Êý¶¨Òå³É¸ù¾Ý²»Í¬µÄµ÷Ó÷½·¨¿ÉÒÔ·µ»Ø²»Í¬µÄ×Ö¶ÎÊǺÜÓÐÓõġ£ ΪÁËÖ§³ÖÕâЩ£¬±íº¯Êý¿ÉÒÔÉùÃ÷Ϊ·µ»ØÎ±ÀàÐÍ record¡£ Èç¹ûÔÚ²éѯÀïʹÓÃÕâÑùµÄº¯Êý£¬ÄÇôÎÒÃDZØÐëÔÚ²éѯÖÐÉùÃ÷Ô¤ÆÚµÄÐнṹ£¬ ÕâÑùϵͳ²ÅÖªµÀÈçºÎ·ÖÎöºÍ¹æ»®¸Ã²éѯ¡£ÈÃÎÒÃÇ¿´¿´ÏÂÃæµÄÀý×Ó£º

SELECT *
    FROM dblink('dbname=mydb', 'select proname, prosrc from pg_proc')
      AS t1(proname name, prosrc text)
    WHERE proname LIKE 'bytea%';

dblink º¯ÊýÖ´ÐÐÒ»¸öÔ¶³ÌµÄ²éѯ£¨²ÎÔÄ contrib/dblink£©¡£ ËüÉùÃ÷Ϊ·µ»Ø record£¬ÒòΪËü¿ÉÄܻᱻÓÃÓÚÈκÎÀàÐ͵IJéѯ¡£ ʵ¼ÊµÄ×ֶμ¯±ØÐëÔÚµ÷ÓÃËüµÄ²éѯÖÐÉùÃ÷£¬ÕâÑù·ÖÎöÆ÷²ÅÖªµÀÀàËÆ * ÕâÑùµÄ¶«Î÷Ó¦¸ÃÀ©Õ¹³ÉʲôÑù×Ó¡£

TOP


¸ÐлһֱÒÔÀ´Äú¶ÔÎÒÃǵÄÖ§³Ö£¡
µ±Ç°Ê±Çø GMT+8, ÏÖÔÚʱ¼äÊÇ 2008-10-13 14:32 ¾©ICPÖ¤060528 ºÅ

Designed By 17DST