SQL 첫걸음 31-33강

Andrew·2022년 1월 20일
0

SQL 첫걸음

목록 보기
9/9

본 글은 아사이 아츠시 저 '하루 30분 36강으로 배우는 완전 초보의 SQL 따라잡기'를 기반으로 작성되었습니다.

31. 집합 연산

UNION

select * from sample71_a
union
select * from sample71_b;

select a from sample71_a
union
select b from sample71_b
union
select age from sample31;

중복을 제거한 합집합을 구하는 UNION 명령어이다. 주의할 점은 합쳐지는 테이블에서 선택된 열의 개수와 각각의 자료형이 일치해야 한다는 점이다.

결과 테이블은 먼저 select하는 순서대로 나열된다.

UNION ORDER BY

select a as c from sample71_a
union
select b as c from sample71_b order by c;

UNION으로 SELECT 명령을 연결하는 경우, 가장 마지막 SELECT 명령에 대해서만 ORDER BY 구를 지정할 수 있다. ORDER BY 구에 지정하는 열은 별명을 붙여 이름을 일치시켜야 한다.

UNION ALL

select * from sample71_a
union all
select * from sample71_b;

중복 포함하여 합집합을 구하는 UNION ALL 명령어이다.

참고로 MySQL에서는 교집합과 차집합을 지원하지 않는다. Oracle, SQL server 등에서 INTERSECT, EXCEPT(Oracle에서는 MINUS)로 지원한다.

32. 테이블 결합

Cross Join

Cartesian Product를 통해 스포츠 대진표를 만든다고 생각하면 쉽다. 모든 팀이 한 번씩 전부 경기를 하는 경우를 나열하는 방식이다.

select * from sample72_x, sample72_y;

명령어는 간단하게 FROM 구에 두 개 이상의 테이블을 쉼표(,)로 연결해주면 된다.

INNER JOIN

코딩테스트에서 가장 많이 출제되면서 헷갈리는 명령어가 아닐까 한다. 내부결합을 통해 Join하려는 기본키가 두 테이블 중 하나에 없으면 검색 결과에 나타나지 않게 된다.

기본키(Primary Key, PK)란 테이블의 행마다 유일성이 보장되는 키라고 생각하면 된다. 예를 들어 상품코드, id 등이 있을 수 있다. 반드시 유일성이 보장되어야만 기본키 설정을 할 수 있다.

외부키(Foreign Key, FK)란 테이블 B가 테이블 A와 조인하기 위해 사용하는 테이블 A의 PK가 테이블 B의 외부키가 된다.

select *
from tableA A
  inner join tableB B
  on A.pk = B.pk
where A.col1 = 'ABC';

LEFT(RIGHT) JOIN

LEFT JOIN이란 Join을 하기위한 기본키가 왼쪽 테이블에는 존재하지만, 오른쪽 테이블에는 존재하지 않을 때, 오른쪽 테이블에서 부족한 기본키를 제외한 모든 열에 전부 NULL(혹은 기본값)으로 채워넣고 Join하는 방식이다. 그 반대로 하게 되면 RIGHT JOIN이 된다.

select *
from tableA A
  left join tableB B
  on A.pk = B.pk
where A.col1 = 'ABC';

33. 관계형 모델

관계형 모델의 용어

  • 릴레이션(Relation): 관계형 모델에서의 테이블
  • 속성(Attribute): 테이블의 열
  • 튜플(Tuple): 테이블의 행
profile
조금씩 나아지는 중입니다!

0개의 댓글