본문 바로가기
Programming/Database

postgres Database # Foreign Key

by 하하호호 2021. 10. 24.
반응형

# FOREIGN KEY

외래키는 두개의 테이블간의 관계를

나타내는 키워드다. 

 

외래키는 BIGINT 형으로 REFERENCES를

추가해주고, 외래키로 받을 테이블의 

column을 추가해준다. 

기본키에 대해서 유일성을 가져야 하기

때문에  UNIQUE 키워드를 추가해준다.

 

외래키로 삽입할 테이블을 먼저 CREATE

해준 다음에 기본키의 테이블을 CREATE

해주어야 에러가 발생하지 않는다.

CREATE TABLE car (
	id BIGSERIAL NOT NULL PRIMARY KEY,
	make VARCHAR(100) NOT NULL,
	model VARCHAR(100) NOT NULL,
	price NUMERIC(19,2) NOT NULL
);

create table person (
	id BIGSERIAL NOT NULL PRIMARY KEY,
	first_name VARCHAR(50) NOT NULL,
	last_name VARCHAR(50) NOT NULL,
	email VARCHAR(150),
	gender VARCHAR(50) NOT NULL,
	date_of_birth DATE NOT NULL,
	country_of_birth VARCHAR(50) NOT NULL,
    car_id BIGINT REFERENCES car(id),
    UNIQUE(car_id)
);

 

# UPDATE FOREIGN KEY

FOREIGN KEY에 업데이트를 진행하면

다음 결과를 얻을 수 있다.

test=# UPDATE person SET car_id=1 WHERE id=1;
UPDATE 1
test=# UPDATE person SET car_id=2 WHERE id=2;
UPDATE 1
test=# UPDATE person SET car_id=3 WHERE id=3;
UPDATE 1

 

#INNER JOIN

두개의 테이블 간의 관계를 표시하는 명령어다.

기본 테이블에 JOIN할 테이블의 이름을 입력하고

외래키의 조건값을 입력하면 두개의 테이블이

합쳐진 형태로 출력이 가능하다.

SELECT person.first_name, car.make, car.model, car.price FROM person JOIN car ON person.car_id = car.id;

 

# LEFT JOIN

기본 테이블을 중심으로

새로운 테이블과의 관계를 보여준다.

다만 새로운 테이블의 Record가 없는

테이블 까지 모두 출력하는 특징이 있다.

 

왜냐하면 기본키가 중심이기 때문에,

외래 테이블의 데이터 유무는

중요하지 않기 때문이다.

 

SELECT * FROM person LEFT JOIN car ON car_id=car.id;

출력된 결과물을 보면,

car TABLE이 들어있지 않은

테이블을 포함해 모든 테이블

record를 출력한다.

 

외래 테이블이 비어있는 record만 출력하기

위해서는 IS NULL 키워드를 사용한다.

SELECT * FROM person LEFT JOIN car ON car_id=car.id WHERE car_id IS NULL;

반응형

'Programming > Database' 카테고리의 다른 글

postgreSQL in Django  (0) 2021.10.25
postgres DATABASE URL FORMAT  (0) 2021.10.24
postgres DATABASE #Export CSV, UUID, JOIN USING  (0) 2021.10.24
postgres Database # Primary Key  (0) 2021.10.24
postgres Database 명령어  (0) 2021.10.22
postgreSQL in windows BASIC TUTORIAL  (0) 2021.10.22

댓글