반응형

본 글은 책 "칼퇴족 김대리는 알고 나만 모르는 SQL 기초 편"의 정리 내용입니다.

INNER JOIN (내부 조인)


더보기
CREATE TABLE ADDR
(
CUST_ID INT NOT NULL,
HOME_ADDR1 CHAR(50) NOT NULL,
HOME_ADDR2 CHAR(50) NOT NULL,
PRIMARY KEY('CUST_ID')
);

INSERT INTO ADDR
VALUES
(5465, '서울시 강남구 역삼동', '111-11'),
(2354, '서울시 종로구 공평', '222-22'),
(5410, '서울시 중구 서소문동', '333-33');

CREATE TABLE MOBILE
(
CUST_ID INT NOT NULL,
MOBILE_NO CHAR(50) NOT NULL,
PRIMARY KEY('CUST_ID')
);

INSERT INTO MOBILE
VALUES
(5465, '010-1111-1111'),
(2354, '010-2222-2222');

 

  • 2개의 테이블을 하나의 테이블로 합치는 방법들 중 하나
    • ADDR 테이블에서 CUST_ID, MOBILE 테이블에서 CUST_ID가 공통으로 존재하는 Key

 

SELECT ADDR.*, MOBILE.MOBILE_NO
FROM ADDR INNER JOIN MOBILE 
ON ADDR.CUST_ID = MOBILE.CUST_ID;
  • 공통된 키 열을 매칭 시킬 때 ON 키워드를 사용
  • 위 코드의 두 번째 줄에서 아래와 같이 ‘ADDR’과 ‘MOBILE’의 위치를 변경해서 작성해도 똑같이 동작함
SELECT ADDR.*, MOBILE.MOBILE_NO
FROM MOBILE INNER JOIN ADDR
ON ADDR.CUST_ID = MOBILE.CUST_ID;

 

예제 


  • 총 3가지 테이블을 사용

1. 고객원장 테이블: CUSTOMERS

CUST_ID CUST_NM HOME_TEL
5464 JH KIM 02-333-1111
6570 LY KIM 031-111-1133
8780 AR KIM 032-998-5555
5632 KK LEE 02-6677-8888
2445 HJ WANG 055-4444-5666
3210 HH AN 031-888-0111
2596 DK SUNG 02-113-3331
더보기
CREATE TABLE CUSTOMERS
(
CUST_ID INT NOT NULL,
CUST_NM CHAR(20) NOT NULL,
HOME_TEL CHAR(20) NOT NULL,
PRIMARY KEY('CUST_ID')
);

INSERT INTO CUSTOMERS
VALUES
(5464, 'JH KIM', '02-333-1111'),
(6570, 'LY KIM', '031-111-1133'),
(8780, 'AR KIM', '032-998-5555'),
(5632, 'KK LEE', '02-6677-8888'),
(2445, 'HJ WANG', '055-4444-5666'),
(3210, 'HH AN', '031-888-0111'),
(2596, 'DK SUNG', '02-113-3331');

 

2. 주문 테이블: ORDERS

ORDER_ID CUST_ID EMP_ID ORDER_DT
10000 2596 23480 2013-12-06
10001 5464 16780 2013-11-01
10002 3210 63278 2014-03-02
10003 2445 15501 2014-02-23
10004 5632 15687 2013-11-13
더보기
CREATE TABLE ORDERS (
	ORDER_ID	INTEGER NOT NULL,
	CUST_ID	INTEGER NOT NULL,
	EMP_ID	INTEGER NOT NULL,
	ORDER_DT	TEXT NOT NULL,
	PRIMARY KEY("ORDER_ID")
);

INSERT INTO ORDERS
VALUES
(10000, 2596, 23480, '2013-12-06'),
(10001, 5464, 16780, '2013-11-01'),
(10002, 3210, 63278, '2014-03-02'),
(10003, 2445, 15501, '2014-02-23'),
(10004, 5632, 15687, '2013-11-13');

 

3. 직원정보 테이블: EMPLOYEE

EMP_ID GRADE NM TELNO
15501 8 YK MO 5740
15687 8 SS CHANG 5547
16780 5 HY YOO 2327
63278 7 JW PARK 2304
87871 7 SW HONG 2367
23578 6 JI CHOI 4654
32480 6 JM CHA 1270
23480 5 KE LEE 5466
더보기
CREATE TABLE EMPLOYEE
(
EMP_ID INT NOT NULL,
GRADE INT NOT NULL,
NM CHAR(20) NOT NULL,
TELNO INT NOT NULL,
PRIMARY KEY('EMP_ID'));

INSERT INTO EMPLOYEE
VALUES
(15501, 8, 'YK MO', 5740),
(15687, 8, 'SS CHANG', 5547),
(16780, 5, 'HY YOO', 2327),
(63278, 7, 'JW PARK', 2304),
(87871, 7, 'SW HONG', 2367),
(23578, 6, 'JI CHOI', 4654),
(32480, 6, 'JM CHA', 1270),
(23480, 5, 'KE LEE', 5466);

 

Q1. CUSTOMERS와 ORDERS 테이블을 이용해 주문 이력이 있는 고객 아이디(CUST_ID), 고객 이름(CUST_NM), 주문번호(ORDER_ID) 출력

CUST_ID CUST_NM ORDER_ID
2596 DK SUNG 10000
5464 JH KIM 10001
3210 HH AN 10002
2445 HJ WANG 10003
5632 KK LEE 10004
더보기
SELECT CUSTOMERS.CUST_ID, CUST_NM, ORDER_ID 
FROM CUSTOMERS INNER JOIN ORDERS
ON CUSTOMERS.CUST_ID = ORDERS.CUST_ID;

 

Q2. 위 3개의 테이블을 이용해 주문이력이 있는 고객아이디(CUST_ID), 고객이름(CUST_NM), 주문번호(ORDER_ID), 판매직원 아이디(EMP_ID) 및 직원 이름(NM) 출력 (3개의 테이블을 합치는 문제)

CUST_ID CUST_NM ORDER_ID EMP_ID NM
2596 DK SUNG 10000 23480 KE LEE
5464 JH KIM 10001 16780 HY YOO
3210 HH AN 10002 63278 JW PARK
2445 HJ WANG 10003 15501 YK MO
5632 KK LEE 10004 15687 SS CHANG
더보기
SELECT TMP1.CUST_ID, TMP1.CUST_NM, TMP2.ORDER_ID, TMP3.EMP_ID, TMP3.NM
FROM CUSTOMERS TMP1
	 INNER JOIN ORDERS TMP2 ON TMP1.CUST_ID = TMP2.CUST_ID
	 INNER JOIN EMPLOYEE TMP3 ON TMP2.EMP_ID = TMP3.EMP_ID;

- 각 테이블에 TMP1, TMP2, TMP3 라는 별칭을 붙여서 쿼리문 작성

 

참고


  • 조인 조건을 지정하지 않은 채 두 테이블을 조인하면 곱집합이 됨
    • 위의 Q1 에서 ON 절을 제외하면 조인 조건이 지정되지 않아 두 테이블 각각의 행수를 곱한 7*5 = 35 개의 행이 출력됨
    • SELECT CUSTOMERS.CUST_ID, CUSTOMERS.CUST_NM, ORDERS.ORDER_ID
      FROM CUSTOMERS INNER JOIN ORDERS;
      
CUST_ID CUST_NM ORDER_ID
5464 JH KIM 10000
5464 JH KIM 10001
5464 JH KIM 10002
5464 JH KIM 10003
5464 JH KIM 10004
6570 LY KIM 10000
6570 LY KIM 10001
6570 LY KIM 10002
6570 LY KIM 10003
6570 LY KIM 10004
8780 AR KIM 10000
8780 AR KIM 10001
8780 AR KIM 10002
8780 AR KIM 10003
8780 AR KIM 10004
5632 KK LEE 10000
5632 KK LEE 10001
5632 KK LEE 10002
5632 KK LEE 10003
5632 KK LEE 10004
2445 HJ WANG 10000
2445 HJ WANG 10001
2445 HJ WANG 10002
2445 HJ WANG 10003
2445 HJ WANG 10004
3210 HH AN 10000
3210 HH AN 10001
3210 HH AN 10002
3210 HH AN 10003
3210 HH AN 10004
2596 DK SUNG 10000
2596 DK SUNG 10001
2596 DK SUNG 10002
2596 DK SUNG 10003
2596 DK SUNG 10004
반응형

+ Recent posts