[제로베이스] 데이터 사이언스 15기 - (06-19 SQL 스터디노트)

윤태호·2023년 6월 19일
0
post-thumbnail

오늘 수강한 강의 - SQL Union (01 ~ 06), Join (01 ~ 11), Concat(01 ~ 06)

01 ~ 06 Union

실습환경 만들기

  • zerobase 사용 (이동)
  • 기존 테스트용 데이터 확인
  • 테스트용 테이블 생성
  • 테스트 데이터 추가

  • 데이터 확인 - 1
  • 데이터 확인 - 2

UNION

여러 개의 SQL문을 합쳐서 하나의 SQL 문으로 만들어주는 방법 (주의. 칼럼의 개수가 같아야함)

UNION 문법

  • UNION : 중복된 값을 제거하여 알려준다
  • UNION ALL : 중복된 값도 모두 보여준다

예제 1 - UNION ALL

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

예제 2 - UNION ALL

  • 성별이 여자인 데이터를 검색하는 쿼리와 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION ALL 로 실행
  • 성별이 여자인 데이터를 검색하는 쿼리와 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION 으로 실행

예제 3

가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와, 1980년대에 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리를 UNION으로 실행
  • 가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리
  • 1980년대에 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리
  • 가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와, 1980년대에 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리를 UNION으로 실행

01 ~ 11 Join

실습환경 만들기

  • zerobase 사용 (이동)
  • 실습할 데이터 확인
  • 새로운 테이블 추가
  • 추가한 테이블 정보 확인
  • 추가한 테이블에서 데이터 추가
  • 추가한 테이블에서 데이터 추가
  • 추가한 테이블의 데이터 확인

JOIN

  • 두 개 이상의 테이블을 결합하는 것
  • 두 개의 실습 테이블 확인

INNER JOIN

  • 두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인방식
  • INNER JOIN 문법
  • snl_show 에 호스트로 출연한 celeb 을 기준으로 celeb 테이블과 snl_show 테이블을 INNER JOIN

LEFT JOIN

  • 두 개의 테이블에서 공통영역을 포함해 왼쪽 테이블의 다른 데이터를 포함하는 조인방식
  • LEFT JOIN 문법
  • LEFT JOIN 예제

RIGHT JOIN

  • 두 개의 테이블에서 공통영역을 포함해 오른쪽 테이블의 다른 데이터를 포함하는 조인방식
  • RIGHT JOIN 문법
  • RIGHT JOIN 예제

FULL OUTER JOIN

  • 두 개의 테이블에서 공통영역을 포함하여 양쪽 테이블의 다른영역을 모두 포함하는 조인방식
  • FULL OUTER JOIN 문법 - SQL
  • FULL OUTER JOIN 예제 - SQL
- snl_show 에 호스트로 출연한 celeb 을 기준으로
- celeb 테이블과 snl_show 테이블을 FULL OUTER JOIN

  • FULL OUTER JOIN 문법 - MySQL
MySQL 에서는 FULL JOIN 을 지원하지 않으므로 다음의 쿼리로 같은 결과를 만들 수 있다

  • FULL OUTER JOIN 예제 - MySQL
- snl_show 에 호스트로 출연한 celeb 을 기준으로
- celeb 테이블과 snl_show 테이블을 FULL OUTER JOIN


SELF JOIN

  • SELF JOIN 문법

예제 - 1

  • snl_show 에 호스트로 출연한 celeb 을 기준으로 celeb 테이블과 snl_show 테이블을 SELF JOIN

예제 - 2

celeb 테이블의 연예인 중, snl_show 에 host 로 출연했고 소속사가 안테나인 사람의 이름과 직업을 검색
  • celeb 테이블의 연예인 중, 소속사가 안테나인 사람의 이름과 직업
  • celeb 테이블의 연예인 중, snl_show 에 host 로 출연했고
  • celeb 테이블의 연예인 중, snl_show 에 host 로 출연했고 소속사가 안테나인 사람의 이름과 직업

예제 - 3

celeb 테이블의 연예인 중,
snl_show 에 host 로 출연했고,
영화배우는 아니면서 YG 엔터테이먼트 소속이거나 40세 이상이면서 YG 엔터테이먼트 소속이 아닌 연예인의 이름과 나이, 직업, 소속사, 시즌, 에피소드 정보를 검색
  • celeb 테이블의 연예인 중, 영화배우는 아니면서
  • celeb 테이블의 연예인 중, 영화배우는 아니면서 YG 엔터테이먼트 소속
  • celeb 테이블의 연예인 중, 40세 이상이면서
  • celeb 테이블의 연예인 중, 40세 이상이면서 YG 엔터테이먼트 소속이 아닌
  • celeb 테이블의 연예인 중, snl_show 에 host 로 출연했고
  • celeb 테이블의 연예인 중, snl_show 에 host 로 출연했고, 영화배우는 아니면서 YG 엔터테이먼트 소속이거나
  • (에러)

  • celeb 테이블의 연예인 중, snl_show 에 host 로 출연했고, 영화배우는 아니면서 YG 엔터테이먼트 소속이거나 40세 이상이면서 YG 엔터테이먼트 소속이 아닌 연예인의 이름과 나이, 직업, 소속사 정보, 시즌, 에피소드

예제 - 4

snl_show 에 출연한 연예인의 snl_show 아이디, 시즌, 에피소드, 이름, 직업 정보를 검색
  • CASE 1. 칼럼명 앞에 테이블명을 명시
  • CASE 2. 칼럼명만 명시 (에러 - 동일한 칼럼명인 경우)
  • CASE 3. 동일한 칼럼명이 존재하는 경우에만 테이블명을 암시

예제 - 5

snl_show 에 출연한 celeb 중, 에피소드 7, 9, 10 중에 출연했거나 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람 중 작년 9월15일 이후에 출연했던 사람을 검색
  • snl_show 에 출연한 celeb 중
  • snl_show 에 출연한 celeb 중, 에피소드 7, 9, 10 중에 출연했거나
  • snl_show 에 출연한 celeb 중, 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람
  • snl_show 에 출연한 celeb 중, 에피소드 7, 9, 10 중에 출연했거나
    소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람 (에러)

  • snl_show 에 출연한 celeb 중, 에피소드 7, 9, 10 중에 출연했거나 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람
  • snl_show 에 출연한 celeb 중, 작년 9월 15일 이후에 출연했던 사람
  • snl_show 에 출연한 celeb 중, 에피소드 7, 9, 10 중에 출연했거나 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람 중 작년 9월 15일 이후에 출연했던 사람

01 ~ 06 Concat

실습환경 만들기

  • zerobase 사용 (이동)
  • 실습할 데이터 확인 celeb

    실습할 데이터 확인 snl_show

CONCAT

여러 문자열을 하나로 합치거나 연결
  • CONCAT 문법
  • CONCAT 예제 1
  • CONCAT 예제 2

ALIAS

칼럼이나 테이블 이름에 별칭 생성
  • ALIAS 문법 1 - Column
  • ALIAS 문법 1 - Table
  • name 을 이름으로 별칭을 만들어서 검색
  • name 은 이름으로, agency 는 소속사로 별칭을 만들어서 검색
  • name 과 job_title 을 합쳐서 profile 이라는 별칭을 만들어서 검색
  • snl_korea 에 출연한 celeb 을 기준으로 두 테이블을 조인하여,
    celeb 테이블은 c, snl_show 테이블은 s 라는 별칭을 만들어서 출연한 시즌과 에피소드, 이름, 직업을 검색
  • snl_korea 에 출연한 celeb 을 기준으로 두 테이블을 조인하여 다음과 같이 각 데이터의 별칭을 사용하여 검색
• 시즌, 에피소드, 방송일을 합쳐서 ‘방송정보’
• 이름, 직업을 합쳐서 ‘출연자정보’

  • AS는 생략도 가능

DISTINCT

검색한 결과의 중복 제거
  • DISTINCT 문법
  • 연예인 소속사 종류를 검색 - 중복 포함
  • 연예인 소속사 종류를 검색 - 중복 제외 (DISTINCT)
  • 가수 중에서, 성별과 직업별 종류를 검색 - 중복 포함
  • 가수 중에서, 성별과 직업별 종류를 검색 - 중복 제외 (DISTINCT)

LIMIT

검색결과를 정렬된 순으로 주어진 숫자만큼만 조회
  • LIMIT 문법
  • celeb 데이터 3개만 가져오기

    나이가 가장 적은 연예인 4명을 검색
  • STEP 1. 나이가 가장 적은
  • STEP 2. 나이가 가장 적은 연예인 4명

재미있었던 부분

UNION 과 UNION ALL 을 이용하여 합치는 부분이 알아보기도 쉽고 재미있었다

어려웠던 부분

가면 갈수록 입력하는 부분이 많아지고 특히 JOIN 부분의 SELF JOIN 예제에서 조건이 너무 길어지고 문제를 읽었을때 무엇부터 입력해야 하는지 헷갈리는 느낌을 받았다

느낀점 및 내일 학습 계획

기본에 충실하려고 노력했지만 뒤에서 문제가 길어지면서 말도 안되게 복잡하고 헷갈리는 느낌이다
걱정이 되지만 일단은 자주 보고 익혀야겠다
내일은 SQL 심화 과정을 공부할 예정이다

profile
데이터 부트캠프 참여중

0개의 댓글