麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL7.0手冊-教程 -73. Postgres SQL 高級特性

2019-09-08 23:34:00
字體:
來源:轉載
供稿:網友
第七十三章. Postgres SQL 高級特性
內容 
繼承 
非原子數值 
更多高級特性 
在結束了使用 PostgresSQL 訪問你的數據的基本方法的課程之后,我們將開始討論Postgres區別于其他傳統數據庫管理器的特性.這些特性包括:繼承,時間跟蹤和非定量數值(數組和有值字段)(array- and set-valued attributes).本節的例子可以在教程目錄的 advance.sql 文件中找到.(如何使用參見  第 72 章 。) 
  
繼承
讓我們創建兩個表.表 capitals 包含各州的首府,同時也是cities表.自然而然,表 capitals 應該從表 cities 繼承下來. 
CREATE TABLE cities (
    name            text,
    population      float,
    altitude        int     -- (in ft)
);

CREATE TABLE capitals (
    state           char(2)
) INHERITS (cities);
在本例中,一條 capitals 的記錄 繼承 所有父表 cities 的字段(name,population,和 altitude). 字段 name 的類型是 text, Postgres 用于變長 ASCII 字符串的類型.字段 population 的類型是 float, Postgres 的雙精度浮點數據類型.表 capitals 多一個字段,state,表明首府所在的州.在 Postgres 里,一個表可以從0或更多個其他表繼承下來,一個查詢可以檢索一個表的所有記錄,也可以檢索一個表和其所有后代的記錄. 
注意: 繼承層次是一種開放的不循環的圖形.
例如,下面查詢將找出所有海拔500英尺以上的城市. 
SELECT name, altitude
    FROM cities
    WHERE altitude > 500;

+----------+----------+
|name      | altitude |
+----------+----------+
|Las Vegas | 2174     |
+----------+----------+
|Mariposa  | 1953     |
+----------+----------+
另一方面,如果要找出包括州首府在內的海拔高于500英尺的城市,查詢應該是這樣的: 
  
SELECT c.name, c.altitude
    FROM cities* c
    WHERE c.altitude > 500;
返回: 
+----------+----------+
|name      | altitude |
+----------+----------+
|Las Vegas | 2174     |
+----------+----------+
|Mariposa  | 1953     |
+----------+----------+
|Madison   | 845      |
+----------+----------+
在這里 cities 后的 “*” 表明該查詢應該遍歷cities 和繼承層次底于 cities 的表. 許多我們已經討論過的命令(SELECT,UPDATE 和 DELETE)都支持“*”(譯注:類似通配符),還有其他的一些命令,象 ALTER.

--------------------------------------------------------------------------------

-------------------------------------------------------------------------------

非原子數值
關系型模型的一個要求就是所有關系的字段都是原子化(譯注:意為不可分割,目前正在尋找最準確的譯法.)的.Postgres沒有這個限制;字段可以有自己的子值,這些值可以通過查詢語言訪問.例如,你可以創建數組類字段. 
數組
Postgres 允許一個字段被定義成定長或不定長的多維數組.數組可以是任何基本類型或者用戶自定義的類型.為說明這些,我們先創建一個由基本類型數組組成的表. 
CREATE TABLE SAL_EMP (
    name            text,
    pay_by_quarter  int4[],
    schedule        text[][]
);
上面的查詢語句將創建一個叫 SAL_EMP的表,表中有一個 text 串(name),一個 int4 型的一維數組(pay_by_quarter),代表以季度為單位的雇員薪水和一個二維的 text 型數組(schedule),代表雇員的周計劃.現在我們做一些插入 (INSERTSs);注意當我們向數組中追加數據時,我們用大括號將數據括起來,并且用逗號將它們區別開.如果你懂 C,這和初始化一個結構的語法很像. 
INSERT INTO SAL_EMP
    VALUES ('Bill',
    '{10000, 10000, 10000, 10000}',
    '{{"meeting", "lunch"}, {}}');

INSERT INTO SAL_EMP
    VALUES ('Carol',
    '{20000, 25000, 25000, 25000}',
    '{{"talk", "consult"}, {"meeting"}}');
Postgres 缺省使用 "1為基" 的數組(下標)計數方法,也就是說,一個 n 個元素的數組第一個元素是array[1],最后一個元素是array[n].現在,我們在 SAL_EMP 表上運行一些查詢.首先,我們展示如何一次訪問一個數組的某一元素.這個查詢檢索出在第二季度收入改變了的雇員名: 
SELECT name
    FROM SAL_EMP
    WHERE SAL_EMP.pay_by_quarter[1] <>
    SAL_EMP.pay_by_quarter[2];

+------+
|name  |
+------+
|Carol |
+------+
下面的查詢檢索所有雇員第三季度的收入: 
SELECT SAL_EMP.pay_by_quarter[3] FROM SAL_EMP;



+---------------+
|pay_by_quarter |
+---------------+
|10000          |
+---------------+
|25000          |
+---------------+
我們還可以訪問數組任意片段或者子數組.下面查詢檢索 Bill 周計劃頭兩天的第一項. 
  
SELECT SAL_EMP.schedule[1:2][1:1]
    FROM SAL_EMP
    WHERE SAL_EMP.name = 'Bill';

+-------------------+
|schedule           |
+-------------------+
|{{"meeting"},{""}} |
+-------------------+

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

更多的高級特性
Postgres 有許多這個教程沒有提到的特性,這些特性是面向新SQL 用戶的.這些特性將在用戶手冊和程序員手冊中詳細描述.

-----------------------------------------------------------------------------
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 精品久久久久久久 | 亚洲第一视频 | 成人在线观看地址 | 国产日产精品一区四区介绍 | 精品午夜久久 | 精品黑人一区二区三区国语馆 | 欧美视频黄色 | 久综合 | 国产高潮失禁喷水爽到抽搐视频 | av资源在线 | 中文字幕一区二区三区久久 | 污视频在线免费 | 一本色道久久综合狠狠躁篇适合什么人看 | 免费毛片小视频 | 成人18网站 | 自拍亚洲伦理 | 91亚洲免费视频 | 欧美综合在线观看视频 | 日本免费a∨ | av老司机久久 | av在线免费电影 | 日本高清在线免费 | 午夜视频亚洲 | 多人乱大交xxxxx变态 | 久久情爱网| 亚洲国产高清视频 | 欧美日韩亚洲视频 | 久久精品一二三区 | 中文字幕在线亚洲精品 | 国产一区毛片 | 逼特逼视频在线观看 | 一本色道久久综合亚洲精品图片 | 国产精品.com | 亚州综合网 | 国产精品成人久久久久a级 av电影在线免费 | 男人天堂新地址 | 欧美色爱综合 | 黄色片免费看看 | 欧美日韩国产一区二区三区在线观看 | 中国性xxx| 精品成人免费一区二区在线播放 |