본문 바로가기
Database/PGSQL

상속

by 반화넬 2007. 6. 4.
반응형
상속
====

CREATE TABLE capitals (
name text,
population real,
altitude int, -- (in ft)
state char(2)
);

CREATE TABLE non_capitals (
name text,
population real,
altitude int -- (in ft)
);

두 테이블을 만들어 다음과 같은 뷰를 만들면 모든 결과를 볼 수 있다.

CREATE VIEW cities AS
SELECT name, population, altitude FROM capitals
UNION
SELECT name, population, altitude FROM non_capitals;

PostgreSQL은 상속이 가능하다. 그러므로 다음과 같은 상속이 가능하다.

쩝...
생소하닷!!
메뉴얼의 예제는 도통 이해가 가지 않아 웹의 자료를 찾아보니 대충 이해가 간다.



SELECT name, altitude
FROM cities
WHERE altitude > 500;

which returns:

  name    | altitude
-----------+----------
 Las Vegas |    2174
 Mariposa  |    1953
 Madison  |      845

(3 rows)

위의 쿼리는 altitude가 500보다 큰 것을 가져와라이다.
이것은 capitals 테이블의 것 까지 포함하여 모두 가져온다.
즉, WHERE altitude > 500 조건은 cities 테이블에서만 통한다는 것이다...
그러므로 capitals 테이블에는 조건이 없는 것이나 마찬가지 이므로...
값이 나오는 것이다...만약 cities 테이블의 것만 가져오고 싶다면..
FROM 절에 only 키워드를 사용하면 된다.


SELECT name, altitude
FROM onLY cities
WHERE altitude > 500;

  name    | altitude
-----------+----------
 Las Vegas |    2174
 Mariposa  |    1953

(2 rows)







CREATE TABLE city (
name text,
population real,
altitude int -- (in ft)
);

CREATE TABLE capitals (
state char(2)
) INHERITS (city);


insert into capitals(name, population, altitude, state) values('Las Vegas', 1234, 2174, 'LA');
insert into capitals(name, population, altitude, state) values('Las Vegas', 1234, 1953, 'SA');
insert into capitals(name, population, altitude, state) values('Las Vegas', 1234, 845, 'SA');





Pervasive Demo DB=>  SELECT name, altitude
Pervasive Demo DB->    FROM city
Pervasive Demo DB->    WHERE altitude > 500;
  name    | altitude
-----------+----------
 Las Vegas |    2174
 Las Vegas |    1953
 Las Vegas |      845
(3 rows)

Pervasive Demo DB=> select name, altitude
Pervasive Demo DB-> from only city
Pervasive Demo DB-> where altitude > 500;
 name | altitude
------+----------
(0 rows)

Pervasive Demo DB=> select * from only city;
 name | population | altitude
------+------------+----------
(0 rows)

Pervasive Demo DB=> select * from city;
  name    | population | altitude
-----------+------------+----------
 Las Vegas |      1234 |    2174
 Las Vegas |      1234 |    1953
 Las Vegas |      1234 |      845
(3 rows)

Pervasive Demo DB=> select * from altitude;
ERROR:  relation "altitude" does not exist
Pervasive Demo DB=> select * from capitals;
  name    | population | altitude | state
-----------+------------+----------+-------
 Las Vegas |      1234 |    2174 | LA
 Las Vegas |      1234 |    1953 | SA
 Las Vegas |      1234 |      845 | SA
(3 rows)

Pervasive Demo DB=>
반응형