TIL / DB 1주차(4) / 서브쿼리 / JOIN / SET

병아리코더 아카이브·2023년 9월 1일
0

DB

목록 보기
4/9
post-thumbnail

서브쿼리

  • 서브쿼리는 '쿼리 안의 쿼리' 라는 뜻이다

  • 서브쿼리는 사전에 추출된 내용에서 재검색을 하거나, 검색한 내용으로 가상 컬럼을 만들어 추가할 수 있다.

  • 즉, 서브쿼리를 사용하는 이유는 가져온 데이터를 재 정제 하기 위함이라 볼 수 있다.



JOIN

  • 서브쿼리만 사용한다면 쿼리가 굉장히 복잡해지므로 JOIN 을 사용한다.

  • JOIN 은 둘 이상의 테이블을 연결하여 데이터를 검색하는 방법이다.

  • 각 테이블에는 공통되는 컬럼이 적어도 하나 이상은 존재해야 한다.

  • 일반적으로 기본키(PK)와 외래키(FK) 를 이용한다.


CROSS JOIN

  • cross join 은 카테시안 곱을 수행한 뒤 그 조합을 반환 한다.

  • SELECT [칼럼명,...] FROM [테이블1] CROSS JOIN [테이블2];

  • 이때 CROSS JOIN 은 생략이 가능하다.

  • cross join 은 두 테이블의 모든 조합을 반환하기 때문에 의미있는 데이터를 추출하기 어렵다.

카테시안 곱은 발생가능한 모든 경우의 수의 행이 출력되는 것을 의미한다.


EQUI JOIN

  • 가장 일반적인 JOIN (=) 을 사용한다.

등가조인

  • 등가조인을 사용하면 등호(=) 의 양 옆에 공통적인 부분만 보여준다.

  • 이때 별칭(ALIAS) 을 사용한다.

별칭(ALIAS) :

컬럼, 테이블, 서브 쿼리, where절 등에 내가 원하는 이름(별칭)을 붙여주는 것. 주로 AS 를 사용하고 생략이 가능하다.
WHERE 절이 SELECT 보다 먼저 처리되기 때문에 칼럼 별칭은 WHERE 절에서는 사용이 안된다.
( 단, GROUP BY나 ORDER BY 같은 절에는 사용 OK )

INNER JOIN (내부조인)

  • where 절을 조건으로 이용하면 이 조건이 join 에 대한 조건인지, 그냥 일반 조건인지 헷갈린다.

  • 이때 사용하는 것이 INNER JOIN 이다.

  • SELECT [칼럼명,...] FROM [테이블1] INNER JOIN [테이블2] ON [조건]; -
    INNER 은 생략 가능하다.

  • on 대신 using 을 조건으로 사용할 수 있다.
    using 안에는 사용될 컬럼명을 넣을 수도 있으며, 서브쿼리도 넣을 수 있다.

NATURL JOIN

  • 동일한 값을 갖는 컬럼을 내부적으로 자연스럽게 JOIN 하므로 조건을 주지 않는다.

  • 다만 동일한 컬럼(기준)은 단축명을 주지 않는다.


OUTER JOIN

  • Equi join 에서 할 수 없는 것들을 한다.

  • 기존의 양 옆 공통 부분과 기준이 되는 쪽의 데이터까지 추가로 보여준다.

  • SELECT [칼럼명,...] FROM [tableA] [LEFT|RIGHT|FULL] OUTER JOIN [tableB] ON [조건절] -
    OUTER 은 생략이 가능하다.

  • ( JOIN 을 기준으로 )
    LEFT OUTER JOIN : 왼쪽을 기준으로 더 있는 값을 보여준다.
    RIGHT OUTER JOIN : 오른쪽을 기준으로 더 있는 값을 보여준다.
    FULL OUTER JOIN : 양쪽 서로에게 없는 값들을 보여준다.
    ( mariaDB는 지원 X -> UNION 을 사용하여 대체 )


SELF JOIN (자기조인)

  • Equi join 과 같으나 대상 테이블이 스스로라는 점이 차이점이다.

  • 자기조인은 두 데이터간의 카다시안 곱을 수행한다.



SET

  • set 은 집합을 의미한다.

  • UNION , UNION ALL , INTERSCET 가 존재한다.

  • [쿼리1] [ UNION | UNION ALL | INTERSECT ] [쿼리2]


UNION

  • 중복을 제거한 합집합

  • 중복 제거시 속도가 저하되어 사용을 권장하지 않는다.

  • 동일한 컬럼이 하나는 있어야 한다.

  • union 을 활용하면 FULL OUTER JOIN 효과를 낼 수 있다.
    ( RIGHT / LEFT OUTER JOIN 을 UNION 으로 합침 )


UNION ALL

  • 중복을 제거하지 않은 합집합

  • union 은 중복 제거시 속도가 느려 사용을 권장하지 않는다.

  • 이때 활용하는 것이 union all 로 우선 데이터를 확보해논 뒤 select distinct 로 중복을 제거하는 것이 좀 더 빠르다.


INTERSECT

  • 양쪽에 존재하는 값만 가져온다
    ( Equi join 과 비슷한 효과를 낼 수 있다. )

MINUS

  • mariaDB 에서는 차집합 함수가 없어 NOT IN 을 활용한다.

0개의 댓글

관련 채용 정보