10장 테이블 합치기
1. 내부 조인
-
- SELECT 테이블명1.열 이름1, 테이블명2.열 이름2
FROM 테이블명1, 테이블명2
WHERE 테이블명1.KEY=테이블명2.KEY;
- SELECT 테이블명1.열 이름1, 테이블명2.열 이름2
-
- SELECT 별칭1.열 이름1, 별칭2.열 이름2
FROM 테이블명1 (AS) 별칭1, 테이블명2 (AS) 별칭2
WHERE 별칭1.KEY=별칭2.KEY;
- SELECT 별칭1.열 이름1, 별칭2.열 이름2
-
- SELECT 테이블명1.열 이름1, 테이블명2.열 이름2
FROM 테이블명1 INNER JOIN 테이블명2
ON 테이블명1.KEY=테이블명2.KEY;
- SELECT 테이블명1.열 이름1, 테이블명2.열 이름2
-
- SELECT 별칭1.열 이름1, 별칭2.열 이름2
FROM 테이블명1 (AS) 별칭1 INNER JOIN 테이블명2 (AS) 별칭2
ON 별칭1.KEY=별칭2.KEY;
- SELECT 별칭1.열 이름1, 별칭2.열 이름2
EX1) INNER JOIN 사용하기
- SELECT TMP1.*, TMP2.MOBILE_NO
FROM ADDR AS TMP1 INNER JOIN MOBILE AS TMP2
ON TMP1.CUST_ID = TMP2.CUST_ID;
EX2) CUSTOMERS와 ORDERS 테이블을 이용하여 주문이력이 있는 고객아이디, 고객이름, 주문번호를 출력
-
- SELECT C.CUST_ID, C.CUST_NM, O.ORDER_ID
FROM CUSTOMERS AS C INNER JOIN ORDERS AS O
ON C.CUST_ID = O.CUST_ID
- SELECT C.CUST_ID, C.CUST_NM, O.ORDER_ID
조인 조건을 지정하지 않고 조인하면 곱집함이 되어 모든 행을 곱하여 출력한다.
SELECT CUSTOMERS.*, ORDERS.* FROM CUSTOMERS, ORDERS;
2. 외부 조인
a. LEFT/RIGHT JOIN
-
-
- SELECT 별칭1.열 이름1, 별칭2.열 이름2
FROM 테이블명1 (AS) 별칭1 LEFT/RIGHT (OUTER) JOIN 테이블명2 (AS) 별칭2
ON 별칭1.KEY = 별칭2.KEY;
- SELECT 별칭1.열 이름1, 별칭2.열 이름2
-
b. FULL JOIN
-
-
- SELECT 별칭1.열 이름1, 별칭2.열 이름2
FROM 테이블명1 (AS) 별칭1 FULL (OUTER) JOIN 테이블명2 (AS) 별칭2
ON 별칭1.KEY = 별칭2.KEY;
- SELECT 별칭1.열 이름1, 별칭2.열 이름2
-
EX3) CUSTOMERS와 ORDERS 테이블을 이용하여 주문이력이 있는 고객과 없는 고객의 숫자 출력
-
- SELECT CASE WHEN O.CUST_ID IS NOT NULL THEN 1
CASE WHEN O.CUST_ID IS NULL THEN 0
ELSE -1 END AS ORDER_FLAG,
COUNT(*) AS CNT
FROM CUSTOMERS C LEFT JOIN ORDERS O
ON C.CUST_ID = O.CUST_ID
GROUP BY ORDER_FLAG;
- SELECT CASE WHEN O.CUST_ID IS NOT NULL THEN 1
EX4) EMPLOYEE, ORDERS, CUSTOMERS 테이블을 이용하여 직원아이디, 이름, 해당 직원이 맡았던 주문번호를 나타내고
해당 주문번호와 고객아이디를 매칭시켜 고객이름을 출력
-
- SELECT E.EMP_ID, E.NM, O.ORDER_ID, C.CUST_NM
FROM EMPLOYEE E
LEFT JOIN ORDERS O
ON E.EMP_ID = O.EMP_ID
LEFT JOIN CUSTOMERS C
ON O.CUST_ID = C.CUST_ID
ORDER BY E.EMP_ID;
- SELECT E.EMP_ID, E.NM, O.ORDER_ID, C.CUST_NM
3. 행 합치기 - UNION
-
- SELECT 열 이름1, 열 이름2 FROM 테이블명1 WHERE 조건절
UNION
SELECT 열 이름1, 열 이름2 FROM 테이블명1 WHERE 조건절
ORDER BY 1;
- SELECT 열 이름1, 열 이름2 FROM 테이블명1 WHERE 조건절
기본적으로 중복을 제거하고 출력한다.
중복을 포함한 모든 값을 출력하고 싶다면 UNION ALL 연산자를 이용하자.
11장 하위 쿼리
1. FROM절의 하위 쿼리
-
- SELECT 열 이름1, 열 이름2
FROM
(SELECT *
FROM 테이블명
WHERE 조건절) (AS) 별칭
WHERE 조건저리
- SELECT 열 이름1, 열 이름2
-
- SELECT 별칭1.열 이름1, 별칭2.열 이름2
FROM 테이블명1 (AS) 별칭1 LEFT JOIN
(SELECT 열 이름1, 열 이름2
FROM 테이블명2
WHERE 조건절) (AS) 별칭2
ON 별칭1.KEY = 별칭2.KEY;
- SELECT 별칭1.열 이름1, 별칭2.열 이름2
EX1) CARD_ACCT, CUST_PARTY 테이블을 이용하여 현재 살아있는 신용카드 보유 고객과 미보유 고객의 수 출력
-
- SELECT CASE WHEN CLOSE_DT IS NULL THEN 1
CASE WHEN CLOSE_DT IS NOT NULL THEN 0
ELSE -1 END AS ALIVE_FLG,
COUNT(*) AS CNT
FROM CUST_PARTY TMP1
LEFT JOIN (SELECT DISTINCT SSN
FROM CARD_ACCT
WHERE CLOSE_DT IS NULL
AND CC_GRADE IN ('1', '2')) TMP2
ON TMP1.SSN = TMP2.SSN
GROUP BY ALIVE_FLG;
- SELECT CASE WHEN CLOSE_DT IS NULL THEN 1
2. WHERE절의 하위 쿼리
-
- SELECT 열 이름1, 열 이름2
FROM 테이블명1
WHERE 열 이름 IN (SELECT 열 이름 FROM 테이블명2 WHERE 조건절);
- SELECT 열 이름1, 열 이름2
EX2) CUST_PARTY, DLQ_PARTY 테이블을 사용하여 연체일 수가 30일이 안 된 고객의 주민등록번호, 이름, 휴대폰번호 출력
-
- SELECT SSN, PARTY_NM, MOBILE_NO
FROM CUST_PARTY
WHERE SSN IN (SELECT DISTINCT SSN
FROM DLQ_PARTY
WHERE CURR_DLQ = 'Y'
AND DLQ_DURATION <= 30);
- SELECT SSN, PARTY_NM, MOBILE_NO
EX3) 현재 연체 중이거나 과거 10일 이상 연체 기록이 있는 고객들을 제외한 대출 가능 고객 리스트 출력
-
- SELECT SSN, PARTY_NM, MOBILE_NO
FROM CUST_PARTY
WHERE SSN NOT IN (SELECT DISTINCT SSN
FROM DLQ_PARTY
WHERE CURR_DLQ = 'Y'
OR (CURR_DLQ = 'N'
AND DLQ_DURATION >= 10)
);
- SELECT SSN, PARTY_NM, MOBILE_NO
12장 데이터 및 테이블 조작
1. 데이터 삽입
-
- INSERT INTO 테이블명(열 이름1, 열 이름2, 열 이름3)
VALUES (값1, 값2, 값3);
- INSERT INTO 테이블명(열 이름1, 열 이름2, 열 이름3)
-
- INSERT INTO 테이블명1(열 이름1, 열 이름2, 열 이름3)
SELECT 열 이름1, 열 이름2, 열 이름3 FROM 테이블명2 WHERE 조건절;
- INSERT INTO 테이블명1(열 이름1, 열 이름2, 열 이름3)
2. 데이터 삭제
-
- DELETE FROM 테이블명;
-
- DELETE FROM 테이블명
WHERE 조건절;
- DELETE FROM 테이블명
3. 데이터 수정
-
- UPDATE 테이블명
SET 열 이름=변경할 값
WHERE 조건절;
- UPDATE 테이블명
4. 테이블 생성
-
- CREATE TABLE 생성할 테이블명
(
열 이름 데이터 형식 (크기) NOT NULL DEFAULT 1,
SSN CHAR (10) PRIMARY KEY,
CUST_ID VARCHAR(100) NOT NULL
REFERENCES 테이블1 (테이블1 고유키)
);
- CREATE TABLE 생성할 테이블명
5. 테이블 변경
-
- ALTER TABLE 수정할 테이블명
ADD (추가/변경할 열 이름 데이터 형식(크기);
- ALTER TABLE 수정할 테이블명
-
- RENAME 변경 전 테이블명 TO 변경 후 테이블명;
6. 테이블 삭제
-
- DROP TABLE 삭제할 테이블명;
여기까지 '칼퇴족 김대리는 알고 나만 모르는 SQL 기초편'의 내용입니다.
'스터디 > SQL' 카테고리의 다른 글
[SQL] SQL 기초교재 07 ~ 09 (0) | 2019.08.03 |
---|---|
[SQL] SQL 기초교재 04 ~ 06 (0) | 2019.08.03 |
[SQL] SQL 기초교재 01 ~ 03 (0) | 2019.08.03 |