Loading the catalog…
Loading the catalog…
주문 화면에 고객 이름을 표시하려고 합니다. 고객 이름은 고객 표에, 주문 번호는 주문 표에 들어 있습니다. 두 표를 연결하면 이름과 주문 번호를 한 줄에 함께 보여 줄 수 있습니다. DB(Database)는 자료를 저장하고 찾는 시스템입니다. 표의 한 줄은 행, 이름이나 번호처럼 같은 종류의 값을 담는 항목은 열이라고 부릅니다. SQL은 DB에 작업을 요청하는 언어입니다. 이번 글에서는 SQL의 JOIN으로 관련 행을 연결하고, 연결 조건에 따라 결과가 어떻게 달라지는지 확인하겠습니다. 앞선 Index 글 에서는 원하는 행을 찾는 보조 자료구조인 Index를 살펴봤습니다. 이번에는 찾은 행들이 어떤 짝으로 연결되는지에 집중하겠습니다. 고객 번호로 주문을 연결하기 JOIN은 여러 표의 관련 행을 묶어 읽는 작업입니다. 고객 표에는 세 명이 있고, 주문 표에는 세 건이 있다고 하겠습니다. 이름과 주문은 설명을 위해 만든 가상 자료입니다. 고객 번호 이름 1 가람 2 나래 3 다온 주문 번호 고객 번호 결제 상태 101 1 PAID 102 1 CANCELLED 103 2 PAID PAID 는 결제 완료, CANCELLED 는 취소를 뜻합니다. 고객 번호 1은 주문 101과 102에 모두 들어 있습니다. 따라서 가람의 행은 두 주문과 각각 연결됩니다. ON 은 행을 연결할 조건을 적는 부분입니다. 여기서는 고객 표의 번호와 주문 표의 고객 번호가 같을 때 연결합니다. INNER JOIN 은 조건에 맞는 짝을 결과로 내보냅니다. 고객 3은 연결할 주문이 없으므로 이 예제의 결과에는 고객 1과 2의 주문 세 건이 들어갑니다. SQLite JOIN 규칙 SQL로 세 쌍 확인하기 SQLite는 DB를 관리하는 프로그램입니다. 아래 코드는 SQLite의 새 Memory DB에서 실행했습니다. Memory는 실행 중에 자료를 담는 공간입니다. 예제 전용 공간에서 고객과 주문 표를 만들었습니다. CREATE TABLE customer ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ); CREATE TABLE orders ( id INTEGER PRIMARY KEY, customer_id INTEGER NOT NULL, status TEXT NOT NULL ); INSERT INTO customer VALUES (1, '가람'), (2, '나래'), (3, '다온'); INSERT INTO orders VALUES (101, 1, 'PAID'), (102, 1, 'CANCELLED'), (103, 2, 'PAID'); SELECT c.id AS customer_id, c.name, o.id AS order_id FROM customer AS c INNER JOIN orders AS o ON c.id = o.customer_id ORDER BY c.id, o.id; CREATE TABLE 은 표를 만들고, INSERT 는 행을 넣습니다. INTEGER 는 정수, TEXT 는 글자 값을 담습니다. PRIMARY KEY 는 행을 구분하는 기본 열을 지정합니다. NOT NULL 은 값이 없음을 나타내는 NULL 의 입력을 제한합니다. SELECT 는 읽을 열을, FROM 은 읽을 표를 정합니다. AS 는 짧은 이름을 붙입니다. c 는 고객 표, o 는 주문 표를 가리킵니다. 따라서 c.id 는 고객의 번호이고, o.customer_id 는 주문에 적힌 고객 번호입니다. ORDER BY 는 출력 순서를 정합니다. 여기서는 고객 번호, 같은 고객 안에서는 주문 번호의 작은 순서로 출력합니다. 실제 반환 값은 다음과 같았습니다. customer_id name order_id 1 가람 101 1 가람 102 2 나래 103 주문이 없는 고객도 남기기 전체 고객 목록을 보려면 LEFT JOIN 을 사용할 수 있습니다. 왼쪽 표의 행을 남기고, 연결할 오른쪽 행이 있으면 그 값을 붙입니다. 연결할 주문이 없는 고객 3의 주문 열에는 NULL 이 들어갑니다. NULL 은 해당 값이 없거나 알 수 없음을 나타내는 표시입니다. SELECT c.id AS customer_id, c.name, o.id AS order_id FROM customer AS c LEFT JOIN orders AS o ON c.id = o.customer_id ORDER BY c.id, o.id; 이 조회는 앞의 세 행에 (3, 다온, NULL) 을 더해 네 행을 반환했습니다. 고객 1은 연결된 주문이 두 건이므로 여전히 두 행을 차지합니다. 그림 아래에서 화살표 하나는 고객과 주문의 연결 하나를 뜻합니다. 고객 1이 두 줄에 등장하는 이유는 연결된 주문이 두 건이기 때문입니다. 결과 행 수를 읽을 때는 고객 수와 연결된 짝의 수를 구분해야 합니다. 결제 조건을 어디에 적을까? “전체 고객을 보여 주고, 결제 완료 주문만 붙이기”라는 요청을 생각해보겠습니다. 결제 상태를 ON 에 적으면 연결할 주문을 고르는 조건이 됩니다. SELECT c.id AS customer_id, c.name, o.id AS order_id FROM customer AS c LEFT JOIN orders AS o ON c.id = o.customer_id AND o.status = 'PAID' ORDER BY c.id, o.id; AND 로 연결한 두 조건을 모두 만족하는 주문이 붙습니다. 결과는 (1, 가람, 101) , (2, 나래, 103) , (3, 다온, NULL) 입니다. 고객 3은 결제 완료 주문이 없어도 왼쪽 표의 행으로 남습니다. WHERE 는 결과에 남길 행의 조건을 적습니다. 같은 결제 조건을 WHERE 에 적으면 연결 결과에서 결제 완료인 행만 남깁니다. SELECT c.id AS customer_id, c.name, o.id AS order_id FROM customer AS c LEFT JOIN orders AS o ON c.id = o.customer_id WHERE o.status = 'PAID' ORDER BY c.id, o.id; 반환 값은 (1, 가람, 101) , (2, 나래, 103) 두 행입니다. 고객 3의 결제 상태는 NULL 입니다. 이 행은 PAID 라는 조건을 만족하지 않아 결과에서 빠집니다. LEFT JOIN에서 오른쪽 표의 조건을 적을 때는 모든 고객을 남길지, 조건을 만족하는 연결만 남길지 먼저 정해야 합니다. PostgreSQL도 DB 관리 프로그램입니다. 연결 규칙은 공식 문서를 참고했고, 위 네 조회는 SQLite에서 실행했습니다. PostgreSQL 18의 ON과 WHERE 예제 그림과 설명은 결과를 이해하기 위한 연결 규칙입니다. 실제로 자료를 읽는 순서는 DB가 선택한 실행 계획에 따라 달라집니다. 이 글에서는 반환 값을 확인했으며, 조회 시간은 따로 측정하지 않았습니다. 확인 문제 고객 1에게 주문 104를 추가하면 INNER JOIN의 전체 결과는 몇 행일까요? 주문 표의 모든 행을 지우면 LEFT JOIN에는 고객이 몇 명 남을까요? 전체 고객을 유지하면서 결제 완료 주문만 연결하려면 결제 조건을 어디에 적을까요? 답과 해설 네 행입니다. 고객 1은 세 주문과 연결되고, 고객 2는 한 주문과 연결됩니다. 세 명입니다. 각 고객의 주문 열에는 NULL이 들어갑니다. 연결한 주문이 있는지 확인할 때는 주문 번호 열을 읽을 수 있습니다. ON에 적습니다. 연결할 주문을 결제 완료로 제한하고, LEFT JOIN으로 전체 고객을 남깁니다. WHERE에 적은 결제 조건은 연결한 결과에서 조건을 만족하는 행만 남깁니다. 오늘은 SQL을 실행하기 전에 네 조회의 결과를 종이에 적어보겠습니다. 하루 뒤에는 고객 3에게 주문을 하나 추가하고 바뀌는 행을 예상해보겠습니다. 일주일 뒤에는 목록 화면의 행 하나가 고객 한 명인지, 고객과 주문의 한 쌍인지 설명해보면 좋겠습니다. 이어지는 학습 주제는 Composite Index, 즉 여러 열을 정해진 순서로 묶은 Index의 열 순서입니다. 자료 확인: 2026-10-07, SQLite 공식 문서와 PostgreSQL 18 공식 문서. 예제 검증 환경: 프로그램을 작성하는 언어인 Python 3.12.14, SQLite 3.53.1, 독립 :memory: DB. 위 네 조회의 반환 값과 주문 추가·빈 주문 표의 결과를 확인했습니다.
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
주문과 고객을 한 줄로 연결하기: JOIN과 연결 조건. 주문 화면에 고객 이름을 표시하려고 합니다. 고객 이름은 고객 표에, 주문 번호는 주문 표에 들어 있습니다. 두 표를 연결하면 이름과 주문 번호를 한 줄에 함께 보여 줄 수 있습니다. DB(Database)는 자료를 저장하고 찾는 시스템입니다. 표의 한 줄은 행, 이름이나 번호처럼 같은 종류의 값을 담는 항목은 열이라고 부릅니다. SQL은 DB에 작업을 요청하는 언어입니다. 이번 글에서는 SQL의 JOIN으로 관련 행을 연결하고, 연결 조건에 따라 결과가 어떻게 달라지는지 확인하겠습니다. 앞선 Index 글 에서는 원하는 행을 찾는 보조 자료구조인 Index를 살펴봤습니다. 이번에는 찾은 행들이 어떤 짝으로 연결되는지에 집중하겠습니다. 고객 번호로…
Open source