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;
'💡 Lecture > 데이터분석가 회사에서 많이 쓰는 완전 기초 쿼리' 카테고리의 다른 글
[SQL] 데이터분석가 많이 쓰는 완전 기초 쿼리 5탄 : 집계함수 count, min, max, sum, avg, decode, group by, having (0) | 2023.11.10 |
---|---|
[SQL] 데이터분석가 많이 쓰는 완전 기초 쿼리 4탄 : row number, (dense) rank, ntile (0) | 2023.11.10 |
[SQL] 데이터분석가 회사에서 많이 쓰는 완전 기초 쿼리 2탄 : 시간 함수 (1) | 2023.11.09 |
[SQL] 데이터분석가 회사에서 많이 쓰는 완전 기초 쿼리 1탄 (1) | 2023.11.09 |