자바스크립트를 허용해주세요.
[ 자바스크립트 활성화 방법 ]
from Mohon Aktifkan Javascript!
 

[PostgreSQL] 2장 - 고급 SQL 활용하기 - 조인(JOIN)

728x90

▶️ 1. Join(조인)이란?

Join(조인)은 두 개 이상의 테이블을 공통된 컬럼(Primary Key와 Foreign Key)을 기준으로 연결해 데이터를 가져오는 방식으로 SQL에서 데이터를 여러 테이블로 분리해두는 이유가 정규화(Normalization)인데, 필요할 때는 Join(조인)과 다시 합치는 작업과정을 거쳐야 합니다.


▶️ 2. 예제 테이블 

먼저 테이블을 하나 생성해보도록하겠습니다.

-- Engineering Table
CREATE TABLE computers (
    universe_id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    major VARCHAR(50),
    year INT
);



-- Degree Table
CREATE TABLE degrees (
    degree_id SERIAL PRIMARY KEY,
    universe_id INT,
    course VARCHAR(50),
    grade CHAR(1)
);

-- SELECT
SELECT * FROM computers

SELECT * FROM degrees;

DROP TABLE computers;
DROP TABLE degrees;


-- Sample Table 
INSERT INTO computers (name, major, year) VALUES 
('Estela', 'Computer Engineering', 1),
('Patrick', 'Computer Science', 3),
('James', 'Computer Science', 2);

INSERT INTO computers (name, year) VALUES 
('Jimmy', 4);


-- major Table 
INSERT INTO degrees (universe_id, course, grade) VALUES 
(1, 'Data structure', 'A'),
(2, 'DataBase', 'A'),
(3, 'Software', 'B');

▶️ 3. INNER JOIN

INNER JOIN은 두 테이블에서 조건이 일치하는 행만 가져옵니다, 즉 교집합 개념입니다.

SELECT c.universe_id,c.name, d.course, d.grade
FROM computers c
INNER JOIN degrees d
ON c.universe_id = d.degree_id;
universe_id name course grade year
1 Estela Data structure A 1
2 Patrick DataBase A 3
3 James Software B 2

▶️ 4. LEFT JOIN

왼쪽 테이블(computers)를 기준으로 모든 행을 가져오고, 오른쪽(degress)에서 매칭되는 값이 있으면 출력합니다. 매칭된 값이 없다면 NULL로 표시됩니다. 즉 왼쪽 기준으로 "전체 + 교집합"

SELECT c.universe_id, c.name, d.course, d.grade, year 
FROM computers c
LEFT JOIN degrees d
ON c.universe_id = d.universe_id;
universe_id name course grade year
1 Estela Data structure A 1
2 Patrick DataBase B 3
3 James Software B 2
4 Jimmy (NULL) (NULL) 4
  • Jimmy도 universe_id 목록에 있어 표시되지만 전공 성적점수가 없어 NULL 

▶️ 5. RIGHT JOIN

오른쪽 테이블(degrees)를 기준으로 모든 행을 가져오고, 왼쪽(computers)에서 매칭되는 값만 출력되고 없으면 NULL값을 반환합니다. 즉, 오른쪽 기준으로 "전체 + 교집합"

SELECT c.universe_id, c.name, d.course, d.grade, year 
FROM computers c
RIGHT JOIN degrees d
ON c.universe_id = d.universe_id;
universe_id name course grade year
1 Estela Data structure A 1
2 Patrick DataBase B 3
3 James Software B 2
  • degress에 없는 학생(Jimmy)은 표시되지 않음

▶️ 6. FULL JOIN

왼쪽과 오른쪽 테이블의 모든 행을 가져오며 매칭이 안 되면 NULL로 표시됩니다. 즉 합집합 개념입니다.

SELECT c.universe_id, c.name, d.course, d.grade, year 
FROM computers c
FULL JOIN degrees d
ON c.universe_id = d.degree_id;
universe_id name course grade year
1 Estela Data structure A 1
2 Patrick Data structure A 3
3 Patrick Data structure B 2
4 Jimmy (NULL) (NULL) 4

☑️ 정리

  • INNER JOIN -> 교집합 (매칭되는 데이터만 조회)
  • LEFT JOIN -> 왼쪽 테이블 기준 전체 + 매칭
  • RIGHT JOIN -> 오른쪽 테이블 전체 + 매칭
  • FULL JOIN -> 합집합 (양쪽 전체)

 

 

GitHub - Koras02/postgresql-bloging

Contribute to Koras02/postgresql-bloging development by creating an account on GitHub.

github.com

 

728x90
LIST