코딩하는 타코야끼

[스터디 노트] Week8_3일차 [basic_8 ~ 11] - SQL 본문

zero-base 데이터 취업 스쿨/스터디 노트

[스터디 노트] Week8_3일차 [basic_8 ~ 11] - SQL

가스오부시 2023. 8. 25. 02:50
728x90
반응형

1. UNION

  • 여러 개의 SQL문을 합쳐서 하나의 SQL 문으로 만들어주는 방법 (주의. 칼럼의 개수가 같아야함)
    • UNION : 중복된 값을 제거하여 알려준다.
    • UNION ALL : 중복된 값도 모두 보여준다.

환경 설정 (test db)


📍 UNION ALL

  • test1 의 모든 데이터와 test2 의 모든 데이터를 중복된 값을 포함하여 검색


📍 UNION

  • test1 의 모든 데이터와 test2 의 모든 데이터를 중복된 값을 제거하여 검색


📍 NULL AS

  • 가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와,
  • 1980년대에 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리를 UNION으로 실행
SELECT NAME, JOB_TITLE, NULL AS BIRTHDAY, NULL AS AGE 
FROM celeb 
WHERE JOB_TITLE LIKE '%가수%'
UNION
SELECT NAME, NULL AS JOB_TITLE, BIRTHDAY, AGE 
FROM celeb
WHERE BIRTHDAY BETWEEN '1980-01-01' AND '1989-12-31';

❗️주의

  • UNION을 할때 두개의 SELECT문 열을 맞춰야합니다
  • 열의 순서도 맞춰야 합니다
    • 순으로 이름, 직업, 생일, 나이 순서가 일치해야합니다
    • SELECT NAME, JOB_TITLE, NULL AS BIRTHDAY, NULL AS AGESELECT NAME, NULL AS JOB_TITLE, BIRTHDAY, AGE
    • 열의 순서가 일치하지 않으면 정확한 쿼리가 나오지 않습니다.
    • SELECT NAME, JOB_TITLE, NULL AS BIRTHDAY, NULL AS AGESELECT NAME, BIRTHDAY, AGE, NULL AS JOB_TITLE
# 직업이 가수인 (가수를 포함하는) 데이터를 검색하는 쿼리와
# 직업이 텔런트인 (텔런트를 포함하는) 데이터를 검색하는 쿼리를
# 중복을 제거하여 합쳐서 실행하세요.

SELECT * FROM celeb WHERE JOB_TITLE LIKE '%가수%'
UNION
SELECT * FROM celeb WHERE JOB_TITLE LIKE '%텔런트%';

# 성이 이씨인 데이터를 검색하는 쿼리와 1970년대생을 검색하는 쿼리를
# 중복을 포함하여 합쳐서 실행하세요.

SELECT * FROM celeb WHERE NAME LIKE '이%'
UNION ALL
SELECT * FROM celeb WHERE BIRTHDAY BETWEEN '1970-01-01' AND '1979-12-31';


2. JOIN

  • 두 개 이상의 테이블을 결합하는 것

🔌 Table ( celeb )

🔌 Table ( snl_show )


3. INNER JOIN

SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
FROM celeb INNER JOIN snl_show
ON celeb.NAME = snl_show.HOST;


4. LEFT JOIN

SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
FROM celeb LEFT JOIN snl_show
ON celeb.NAME = snl_show.HOST;


5. RIGHT JOIN

SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
FROM celeb RIGHT JOIN snl_show
ON celeb.NAME = snl_show.HOST;


6. FULL OUTER JOIN

  • MySQL 에서는 FULL JOIN 을 지원하지 않으므로 다음의 쿼리로 같은 결과를 만들 수 있다.
  • LEFT JOIN 과 RIGHT JOIN 쿼리를 UNION 시킨다.
SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
FROM celeb LEFT JOIN snl_show
ON celeb.NAME = snl_show.HOST
UNION
SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
FROM celeb RIGHT JOIN snl_show
ON celeb.NAME = snl_show.HOST;

반응형