PostgreSQL
PrevNext

Chapter 12. 継承

2つのクラスを作りましょう。 州都クラスには州都が含まれていて、それはまた市でもあります。 自然と州都クラスは市を継承します。

CREATE TABLE 市 (
    名称            text,
    人口            float,
    標高            int
);

CREATE TABLE 州都 (
    州              char2
) INHERITS (市);
このケースで、「州都」のインスタンスはその親である「市」のすべての属性 (名称、人口、標高)を継承しています。 名称属性の型は textで、可変長の ASCII 文字列のための Postgres固有の型です。 人口属性の型はfloatで、 倍精度小数のための Postgres固有の型です。 州都には余分な属性である「州」があり、それはその州を表しています。 Postgresでは、 クラスはゼロあるいはいくつかの他のクラスを継承することができ、 問い合わせは、 あるクラスのすべてのインスタンス、 あるいはあるクラスとその子孫のすべてのインスタンスの どちらかでも参照することができます。

NOTE: 継承階層は循環できないまっすぐのグラフになります。

例えば、次の問い合わせは 500フィート以上の標高にあるすべての市を見つけます:
SELECT 名称, 標高
    FROM 市
    WHERE 標高 > 500;

+----------+----------+
|名称      | 標高     |
+----------+----------+
|Las Vegas | 2174     |
+----------+----------+
|Mariposa  | 1953     |
+----------+----------+

On the other hand, to find the names of all cities, including state capitals, that are located at an altitude over 500ft, the query is:

SELECT c.名称, c.標高
    FROM 市* c
    WHERE c.標高 > 500;
これは次のように返ります:
+----------+----------+
|名称      | 標高     |
+----------+----------+
|Las Vegas | 2174     |
+----------+----------+
|Mariposa  | 1953     |
+----------+----------+
|Madison   | 845      |
+----------+----------+
ここで市の後の“*”が 継承階層で「市」以下にあるすべてのクラスに対して行われることを示しています。 既に議論したコマンドの多く (selectupdatedelete) は、alter のように、 この “*” 表記をサポートしています。


PrevHomeNext
ArraysUp問い合わせ言語