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
'Database > PostGresQL' 카테고리의 다른 글
[PostgreSQL] 4장 - 인덱스와 제약조건 (0) | 2025.09.12 |
---|---|
[PostgreSQL] 3장 - 고급 SQL 활용하기 - 서브쿼리(Subquery) (0) | 2025.09.03 |
[PostgreSQL] 1장 - 데이터베이스와 테이블 (2) | 2025.08.30 |
[PostGreSQL] PostgreSQL 이란? (0) | 2025.02.22 |