관리 메뉴

민우의 코딩노트

[SQL] 데이터분석가 회사에서 많이 쓰는 완전 기초 쿼리 3탄 : 테이블 생성, 삭제, JOIN 본문

Lecture/데이터분석가 회사에서 많이 쓰는 완전 기초 쿼리

[SQL] 데이터분석가 회사에서 많이 쓰는 완전 기초 쿼리 3탄 : 테이블 생성, 삭제, JOIN

미미누 2023. 11. 9. 23:29

https://www.youtube.com/watch?v=E-8kpSSLulU

 

본 글은 [SQL] 데이터분석가 회사에서 많이 쓰는 완전 기초 쿼리, 을 시청하고 정리한 글입니다.

 


LEFT JOIN

왼쪽 테이블의 키 값을 기준으로, 오른쪽 테이블을 붙이는 것

 

 

RIGHT JOIN

오른쪽 테이블의 키 값을 기준으로, 왼쪽 테이블을 붙이는 것

 

INNER JOIN

두 테이블을 키 값을 기준으로 조인하여, 교집합을 만드는 것

 

FULL OUTER JOIN

합집합(둘 중의 하나의 키값만 있어도 조인)

 

UNION

행을 기준으로 조인하기 때문에, 테이블 구성이 똑같아야 함

 

UNION ALL

중복 상관 없이, 행을 기준으로 조인하는 것

 


-- 테이블 생성 및 데이터 삽입

CREATE TABLE dasql.CUST_INFO
(
    CUST_NAME VARCHAR(10) NOT NULL
    , AGE INT(2)
    , SEX VARCHAR(3)
);

INSERT INTO dasql.cust_info VALUES('김서연', 36, '여');
INSERT INTO dasql.cust_info VALUES('박수민', 27, '여');
INSERT INTO dasql.cust_info VALUES('최민준', 32, '남');
INSERT INTO dasql.cust_info VALUES('김지민', 41, '여');
INSERT INTO dasql.cust_info VALUES('이하은', 23, '여');

SELECT * FROM DASQL.cust_info;

CREATE TABLE DASQL.CUST_BUY_INFO
(
    CUST_NAME VARCHAR(10) NOT NULL
    , BUY_DATE DATE
    , BUY_NM VARCHAR(30)
    , PAY INT(10)
);

-- MYSQL의 경우, TO_DATE를 지원하지 않아, STR_TO_DATE를 사용

INSERT INTO DASQL.CUST_BUY_INFO VALUES('김서연', STR_TO_DATE('20220805', '%Y%m%d'), '삼푸, 린스', 23000);
INSERT INTO DASQL.CUST_BUY_INFO VALUES('이예준', STR_TO_DATE('2022.08.05', '%Y.%m.%d'), '삼푸, 린스', 23000);
INSERT INTO DASQL.CUST_BUY_INFO VALUES('김지민', STR_TO_DATE('2022.08.31', '%Y.%m.%d'), '오렌지주스', 23000);
INSERT INTO DASQL.CUST_BUY_INFO VALUES('신우진', STR_TO_DATE('2022.08.18', '%Y.%m.%d'), '아이스크림', 1500);
INSERT INTO DASQL.CUST_BUY_INFO VALUES('이하은', STR_TO_DATE('2022.08.26', '%Y.%m.%d'), '밑반찬', 23000);

SELECT * FROM DASQL.CUST_BUY_INFO;

-- LEFT JOIN

SELECT A.CUST_NAME
     , A.AGE
     , A.SEX
     , B.BUY_DATE
     , B.BUY_NM
     , B.PAY
FROM DASQL.CUST_INFO A
LEFT JOIN DASQL.CUST_BUY_INFO B ON A.CUST_NAME = B.CUST_NAME;

-- RIGHT JOIN

SELECT A.CUST_NAME
     , A.AGE
     , A.SEX
     , B.BUY_DATE
     , B.BUY_NM
     , B.PAY
FROM DASQL.CUST_INFO A
RIGHT JOIN DASQL.CUST_BUY_INFO B ON A.CUST_NAME = B.CUST_NAME;

-- INNER JOIN

SELECT A.CUST_NAME
     , A.AGE
     , A.SEX
     , B.BUY_DATE
     , B.BUY_NM
     , B.PAY
FROM DASQL.CUST_INFO A
INNER JOIN DASQL.CUST_BUY_INFO B ON A.CUST_NAME = B.CUST_NAME;

-- FULL OUTER JOIN

SELECT *
    FROM DASQL.CUST_INFO A
    LEFT JOIN DASQL.CUST_INFO B ON A.CUST_NAME = B.CUST_NAME

UNION

SELECT *
    FROM DASQL.CUST_INFO A
    RIGHT JOIN DASQL.CUST_INFO B ON A.CUST_NAME = B.CUST_NAME;

-- 만들어진 테이블 틀은 남기고, 데이터만 삭제
TRUNCATE TABLE DASQL.CUST_INFO;

-- 테이블을 아예 삭제
DROP TABLE DASQL.CUST_INFO;

CREATE TABLE DASQL.BASIC_TEMP1
(
    CUST_NAME VARCHAR(10) NOT NULL
    , SEX VARCHAR(3)
    , AGE INT(2)
);

INSERT INTO DASQL.BASIC_TEMP1 VALUES('앤', '여', 34);
INSERT INTO DASQL.BASIC_TEMP1 VALUES('해밀턴', '남', 42);
INSERT INTO DASQL.BASIC_TEMP1 VALUES('빌리', '남', 16);

CREATE TABLE DASQL.BASIC_TEMP2
(
    CUST_NAME VARCHAR(10) NOT NULL
    , SEX VARCHAR(3)
    , AGE INT(2)
);

INSERT INTO DASQL.BASIC_TEMP2 VALUES('앤', '여', 34);
INSERT INTO DASQL.BASIC_TEMP2 VALUES('빌리', '남', 16);
INSERT INTO DASQL.BASIC_TEMP2 VALUES('제니', '여', 14);
INSERT INTO DASQL.BASIC_TEMP2 VALUES('윌리엄', '남', 5);
INSERT INTO DASQL.BASIC_TEMP2 VALUES('애슐린', '여', 23);

-- UNION 중복 허용 X
SELECT * FROM DASQL.BASIC_TEMP1
UNION
SELECT * FROM DASQL.BASIC_TEMP2;

-- UNION ALL 중복 허용 O
SELECT * FROM DASQL.BASIC_TEMP1
UNION ALL
SELECT * FROM DASQL.BASIC_TEMP2;