SQL 결합

yeoni·2024년 1월 12일
0

SQL

목록 보기
7/11
post-custom-banner

1. UNION

UNION

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

# 성별이 여자인 데이터를 검색하는 쿼리와 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION 으로 실행
SELECT name, sex, agency FROM celeb WHERE sex='F'
UNION
SELECT name, sex, agency FROM celeb WHERE agency='YG엔터테이먼트';

2. JOIN

JOIN 기본

INNER JOIN

  • 두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인방식
SELECT column1, column2..
FROM tableA
INNER JOIN tableB
ON tableA.column = tableB.column
WHERE condition;

# 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

LEFT JOIN

  • 두개의 테이블에서 공통영역을 포함해 왼쪽 테이블의 다른 데이터를 포함하는 조인방식
SELECT column1, column2..
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;

RIGHT JOIN

  • 두개의 테이블에서 공통영역을 포함해 오른쪽 테이블의 다른 데이터를 포함하는 조인방식
SELECT column1, column2..
FROM tableA
RIGHT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;

FULL OUTER JOIN

  • 두개의 테이블에서 공통영역을 포함하여 양쪽 테이블의 다른영역을 모두 포함하는 조인방식
  • MySQL 에서는 FULL JOIN 을 지원하지 않으므로 다음의 쿼리로 같은 결과를 만들 수 있다.
SELECT column1, column2..
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.column
UNION
SELECT column1, column2..
FROM tableA
RIGHT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;

'''
SELECT column1, column2..
FROM tableA
FULL OUTER JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
'''

SELF JOIN

  • self join은 inner join과 비슷하고 많이 사용하는 join
  • 테이블과 테이블 간에 동일한 칼럼명인 경우 칼럼명만 명시하면 에러주의
SELECT column1, column2..
FROM tableA, tableB,..
WHERE condition;

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

  • 조건1: snl_show 에 host 로 출연했고
  • 조건2: 영화배우는 아니면서 YG 엔터테이먼트 소속
  • 조건3: 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 job_title LIKE '%영화배우%' AND agency='YG엔터테이먼트') OR (age>=40 AND agency != 'YG엔터테이먼트'));

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

  • 조건1: snl_show 에 출연
  • 조건2: 에피소드 7, 9, 10 중에 출연했거나 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람
  • 조건3: 작년 9월 15일 이후에 출연했던 사람
SELECT name, season, episode, broadcast_date, agency
FROM celeb, snl_show
WHERE name = host
	AND (episode IN (7, 9, 10) OR agency LIKE 'YG______')
    AND broadcast_date > '2020-09-15';

Reference
1) 제로베이스 데이터스쿨 강의자료

profile
데이터 사이언스 / just do it
post-custom-banner

0개의 댓글