본문 바로가기

나누어 놓은 표를 다시 연결하다 | 정보처리의 흐름 FLOW 03 | K-BOOKS

FLOW 03 · INFORMATION PROCESSING
DIRECTION 03 · 연결된 세계를 걷다 · DB · SQL · 트랜잭션

나누어 놓은 표를 다시 연결하다

DB · SQL · 트랜잭션

QUESTION · 질문에서 시작합니다

정규화를 하면서 회원과 예약을 서로 다른 표로 나누었다. 그런데 화면에는 회원 이름과 예약시간을 함께 보여줘야 한다.

“나눈 데이터를 다시 한 번에 볼 수 있을까?”

이때 서로 관련 있는 행을 공통된 값을 기준으로 연결한다.

공통된 값을 기준으로 연결한다

SELECT m.name, r.reserve_date, r.reserve_time FROM member m JOIN reservation r ON m.member_id = r.member_id;

회원번호가 같은 행을 찾아 회원 이름과 예약 정보를 하나의 결과처럼 보여준다.

기술 이름 둘 이상의 테이블을 관련된 열을 기준으로 결합해 조회하는 것을 JOIN이라고 한다.
ILLUST A | ILL-09 | member와 reservation JOIN 결과 | JOIN 전후 결과

양쪽에 모두 있는 데이터만 볼 것인가

두 테이블에 모두 대응되는 데이터만 보고 싶다면 내부 조인을 사용할 수 있다.

반면 아직 예약하지 않은 회원까지 모두 보고 싶다면 어떻게 해야 할까?

JOIN은 문법만 외우면 금세 헷갈린다. 어느 쪽 데이터를 반드시 남겨야 하는가를 먼저 생각하면 쉽다.

LEFT JOIN을 읽을 때는 ‘왼쪽 테이블을 기준으로 모두 남긴다’고 생각하면 된다. 오른쪽에서 일치하는 값이 없으면 그 부분은 비어 보일 수 있지만, 왼쪽 행 자체는 사라지지 않는다. JOIN은 결과에 어떤 행을 남길지 결정하는 문제다.

결과 안에서 다시 질문할 수도 있다

“예약이 가장 많은 회원을 찾고 싶다”처럼 한 번의 단순 조건으로 해결하기 어려운 질문도 있다.

SELECT name FROM member WHERE member_id IN ( SELECT member_id FROM reservation WHERE reserve_date = '2026-09-20' );
기술 이름 SQL 문 안에 다시 포함된 SELECT 문을 서브쿼리(Subquery)라고 한다.

안쪽 질문이 먼저 회원번호 목록을 만들고, 바깥쪽 질문이 그 결과를 다시 조건으로 사용하는 구조다.

서브쿼리는 복잡한 질문을 두 단계로 나누는 방법으로 생각하면 쉽다. 안쪽 SELECT가 중간 결과를 만들고, 바깥 SELECT가 그 결과를 다시 조건이나 비교 대상으로 사용한다. 먼저 안쪽 결과가 어떤 모양인지 예상해 보면 전체 문장이 훨씬 잘 읽힌다.

더 찾아보고 싶다면846면 학습 아카이브에서 검색하세요.
K-BOOKS Q&A이 내용이 헷갈리나요?

공부하던 페이지를 자동으로 연결해 질문할 수 있습니다.

RELATED STUDY MATERIALS

이 개념과 이어서 볼 정보처리 자료

학습자료실 65개 →

CONTINUE · INFORMATION PROCESSING ENGINEERDB에서 시험 학습으로 이어가기
이야기형 개념 설명은 그대로 두고, 필요한 시험 요약·문제·실습으로 연결합니다.