advanced.source
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. ---------------------------------------------------------------------------
  2. --
  3. -- advanced.sql-
  4. --    more POSTGRES SQL features. (These are not part of the SQL-92
  5. --    standard.)
  6. --
  7. --
  8. -- Copyright (c) 1994, Regents of the University of California
  9. --
  10. -- $Id: advanced.source,v 1.3 1999/07/08 15:28:51 momjian Exp $
  11. --
  12. ---------------------------------------------------------------------------
  13. -----------------------------
  14. -- Inheritance:
  15. -- a table can inherit from zero or more tables. A query can reference
  16. -- either all rows of a table or all rows of a table plus all of its
  17. -- descendants.
  18. -----------------------------
  19. -- For example, the capitals table inherits from cities table. (It inherits 
  20. -- all data fields from cities.)
  21. CREATE TABLE cities (
  22. name text,
  23. population float8,
  24. altitude int -- (in ft)
  25. );
  26. CREATE TABLE capitals (
  27. state char(2)
  28. ) INHERITS (cities);
  29. -- now, let's populate the tables
  30. INSERT INTO cities VALUES ('San Francisco', 7.24E+5, 63);
  31. INSERT INTO cities VALUES ('Las Vegas', 2.583E+5, 2174);
  32. INSERT INTO cities VALUES ('Mariposa', 1200, 1953);
  33. INSERT INTO capitals VALUES ('Sacramento', 3.694E+5, 30, 'CA');
  34. INSERT INTO capitals VALUES ('Madison', 1.913E+5, 845, 'WI');
  35. SELECT * FROM cities;
  36. SELECT * FROM capitals;
  37. -- like before, a regular query references rows of the base table only
  38. SELECT name, altitude
  39. FROM cities
  40. WHERE altitude > 500;
  41. -- on the other hand, you can find all cities, including capitals, that
  42. -- are located at an altitude of 500 'ft or higher by:
  43. SELECT c.name, c.altitude
  44. FROM cities* c
  45. WHERE c.altitude > 500;
  46. -----------------------------
  47. -- Time Travel:
  48. -- this feature allows you to run historical queries. 
  49. -- removed for v6.3, but possible using triggers.
  50. -- see contrib/spi/README for more information.
  51. -----------------------------
  52. -- first, let's make some changes to the cities table (suppose Mariposa's
  53. -- population grows 10% this year)
  54. -- UPDATE cities
  55. -- SET population = population * 1.1
  56. -- WHERE name = 'Mariposa';
  57. -- the default time is the current time ('now'):
  58. -- SELECT * FROM cities WHERE name = 'Mariposa';
  59. -- we can also retrieve the population of Mariposa ever has. ('epoch' is the
  60. -- earliest time representable by the system)
  61. -- SELECT name, population
  62. -- FROM cities['epoch', 'now'] -- can be abbreviated to cities[,]
  63. -- WHERE name = 'Mariposa';
  64. ----------------------
  65. -- Arrays:
  66. --      attributes can be arrays of base types or user-defined types
  67. ----------------------
  68. CREATE TABLE sal_emp (
  69. name text,
  70. pay_by_quarter int4[],
  71. schedule text[][]
  72. );
  73. -- insert instances with array attributes.  Note the use of braces
  74. INSERT INTO sal_emp VALUES (
  75. 'Bill',
  76. '{10000,10000,10000,10000}',
  77. '{{"meeting", "lunch"}, {}}');
  78. INSERT INTO sal_emp VALUES (
  79. 'Carol',
  80. '{20000,25000,25000,25000}',
  81. '{{"talk", "consult"}, {"meeting"}}');
  82. ----------------------
  83. -- queries on array attributes
  84. ----------------------
  85. SELECT name FROM sal_emp WHERE
  86. sal_emp.pay_by_quarter[1] <> sal_emp.pay_by_quarter[2];
  87. -- retrieve third quarter pay of all employees
  88. SELECT sal_emp.pay_by_quarter[3] FROM sal_emp;
  89. -- select subarrays
  90. SELECT sal_emp.schedule[1:2][1:1] FROM sal_emp WHERE
  91. sal_emp.name = 'Bill';
  92. -- clean up (you must remove the children first)
  93. DROP TABLE sal_emp;
  94. DROP TABLE capitals;
  95. DROP TABLE cities;