[제로베이스 데이터 취업스쿨] 23.07.18 스터디 노트

김준호·2023년 7월 18일
0
post-thumbnail

1. Logical Operations

  • 실습 환경
    celeb테이블

1) IN

  • 나이가 28세, 48세 중 하나인 데이터 검색
    select * from celeb where age in (28,48);
  • 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 성별이 여자거나 나이가 45세 이상인 데이터 검색
  • celeb에서 소속사가 안테나, YG엔터테이먼트 중 하나가 아니고, 성별이 여자인 데이터 조회
  • celeb테이블에서 아이유,송강, 강동원,차승원중에 YG엔터테이먼트 소속이 아니거나 나이가 40~50세인 사람을 찾아보자

2) LIKE

pattern이란게 좀 애매하다.
예제로 확인

  • YG로 시작하는 소속사 이름을 가진 데이터 검색
    select * from celeb where agency LIKE "YG%";
  • 엔터테이먼트 로 끝나는 소속사 이름 검색
    select * from celeb where agency like "%엔터테이먼트";
  • 직업명에 가수 가 포함된 데이터 검색
    select * from celeb where job_title like "%가수%";
  • 소속사 이름의 두번째 글자가 G인 데이터 검색
    select * from celeb where agency like "_G%";
  • 직업명이 "가"로 시작하고 최소 2글자 이상인 데이터 검색
    select * from celeb where jobtitle like "가%";
  • 영화배우와 텔런트를 병행하는 데이터 검색
    select * from celeb where job_title like "%영화배우%" and job_title like "%텔런트%;
  • 직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예임 검색
    select * from celeb where job_title like "%,%" and
    job_title like "%영화배우%" or "%텔런트%";
  • celeb 테이블에서 나이가 30~50세 이면서 개그맨이 아닌 데이터 검색
  • celeb 테이블에서 아이유, 이미주, 송강, 이수현 중에 가수만 직업으로 가졌거나, 가수를 병행하지 않고 텔런트를 하는 사람을 검색

2. UNION

1) 환경 만들기

  • test 1,2 table을 만들고 각각 123, 563 데이터를 넣었다.

2) 문법

  • 여러개의 SQL문을 합쳐서 하나의 SQL문으로 만들어 주는 방법
  • 주의사항 : colum의 개수가 동일해야 한다.

union all

union

3) 실습

환경 : celeb table

  • 문제1. 직업이 가수를 포함하는 데이터를 검색하는 쿼리와
    직업이 텔런트를 포함하는 데이터를 검색하는 쿼리를
    중복을 제거해 합치기
  1. 가수를 포함하는 데이터 검색하는 쿼리
    select * from celeb where job_title like "%가수%";
  1. 텔런트를 포함하는 데이터를 검색하는 쿼리
    select * from celeb where job_title like "%텔런트%";
  1. 중복 제거하고 합치기(union)
    아이유가 중복이니 아이유는 한번만 나와야 한다.
  • 문제2. 성이 이씨인 데이터를 검색하는 쿼리와
    1970년대 생을 검색하는 쿼리를 중복 포함해서 합치기
  1. 성이 이씨인 데이터 검색
  1. 1970년대 생 검색
  1. 중복 포함 합치기(union all)

3. JOIN

1) 실습환경 구성

table1. celeb

table2. snl_show

2) INNER JOIN

문법

예제

  • snl_show에 호스트로 출연한 celeb을 기준으로 celeb테이블과 snl_show테이블을 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;

3) LEFT JOIN

문법

  • from 에 쓰여진 table이 left table이 되고
    left join뒤에 쓰여진 table이 right table이 된다.

예제

  • snl_show에 호스트로 출연한 celeb을 기준으로 celeb테이블과 snl_show테이블을 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;

4) RIGHT JOIN

문법

  • from 에 쓰여진 table이 left table이 되고
    left join뒤에 쓰여진 table이 right table이 된다.

예제

  • snl_show에 호스트로 출연한 celeb을 기준으로 celeb테이블과 snl_show테이블을 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;

5) FULL OUTER JOIN

  • 문제점: MySQL에서는 full outer join을 지원하지 않는다.

문법

full outer join을 지원하는 dbms에서 사용하는 문법

MySQL에서 full outer join과 같은 결과를 만들 수 있는 문법

  • left join결과와 right join의 결과를 union시키면 된다.

예제

  • snl_show에 호스트로 출연한 celeb을 기준으로 celeb테이블과 snl_show테이블을 full outer join시키기
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;

6) SELF JOIN

  • 가장 많이 사용되는 JOIN
  • INNER JOIN과 같은 결과를 가져옴
  • 동일한 이름의 컬럼이 아니라면 table.column처럼 앞에 테이블명을 명시 해주지 않아도 된다.

문법

예제

  • snl_show에 호스트로 출연한 celeb을 기준으로 celeb테이블과 snl_show테이블을 self join해보자
select celeb.id, celeb.name, snl_show.id, snl_show.host
from celeb, snl_show
where celeb.name = snl_show.host;

  • celeb테이블의 연예인 중, snl_show에 호스트로 출연했고 소속사가 안테나인 사람의 이름과 직업을 검색
select celeb.name, celeb.job_title
from celeb, snl_show
where celeb.name = snl_show.host and celeb.agency="안테나";

  • celeb 테이블의 연예인 중,
    snl_show 에 host 로 출연했고,
    영화배우는 아니면서 YG 엔터테이먼트 소속이거나 40세 이상이면서 YG 엔터테이먼트 소속이 아닌
    연예인의 이름과 나이, 직업, 소속사, 시즌, 에피소드 정보를 검색
select celeb.name, celeb.age, celeb.job_title, celeb.agency, snl_show.season, snl_show.episode
from celeb, snl_show
where celeb.name = snl_show.host and
((not celeb.job_title like "%영화배우%" 
and
celeb.agency="YG엔터테이먼트") 
or 
(celeb.age >= 40 and not agency like "YG엔터테이먼트"));

  • snl_show 에 출연한 celeb 중,
    에피소드 7, 9, 10 중에 출연했거나
    소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람 중
    2020년9월15일 이후에 출연했던 사람을 검색
select name, episode, agency, broadcast_date
from celeb, snl_show
where name = host and
((episode in (7,9,10) or agency like "YG%______") and broadcast_date between "2020-09-15"and"2023-07-18");

  • snl_show 에 출연한 celeb 테이블의 연예인 중,
    영화배우나 텔런트가 아닌 연예인의
    아이디, 이름, 직업, 시즌, 에피소드 정보를 검색하세요.
select celeb.id, name, job_title, season, episode
from celeb,snl_show
where name = host and
not (job_title like "%영화배우%" or job_title like "%텔런트%");

  • snl_show 에 출연한 celeb 중,
    작년 9월 15일 이후에 출연했거나
    소속사 이름이 ‘엔터테이먼트’ 로 끝나지 않으면서
    영화배우나 개그맨이 아닌 연예인의
    celeb 아이디, 이름, 직업, 소속사를 검색하세요.
select celeb.id, name, job_title, agency
from celeb, snl_show
where name = host and
(broadcast_date > "2020-09-15") or 
(not agency like "%엔터테이먼트" 
and not(job_title like "%영화배우%"
or job_title like "%개그맨%")));

profile
취업공부

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

뛰어난 글이네요, 감사합니다.

답글 달기