DataBase - 그룹조회(GROUP By절 / HAVING 절 / JOIN 절 ) / 서브 쿼리 (SubQuery)

지영·2022년 1월 12일
0

DataBase

목록 보기
6/7
post-thumbnail

Group By 절

  • 특정 컬럼 값을 기준으로 테이블의 전체 행을 그룹별로 나누기 위한 절
SELECT 컬럼 FROM 테이블이름 WHERE 검색조건 GROUP BY 컬럼 ORDER BY 컬럼
  • 그루핑 전에 WHERE절을 사용하여 그룹 대상을 먼저 선택 가능
  • GROUP BY 절에는 반드시 칼럼 이름이 포함되어야 하며 별명 사용 불가.
  • SELECT절에서 집계 함수 없이 나열된 칼럼 이름이나 표현식은 GROUP BY절에 반드시 포함되어야 함.
  • GROUP BY 절에 나열된 칼럼 이름은 SELECT절에 명시하지 않아도 됨
  • SELECT 절에서 그룹 함수를 사용할 경우 GROUP BY 절에서 나눈 그룹 안에서 집계를 수행한다.

❗️주의해야 할 GROUP BY절 사용법

  • SELECT문에는 명시하였지만 GROUP BY 절에서 명시하지 않은 칼럼에 대한 처리 조건이 SELECT문에 지정되지 않을 경우 에러를 발생시킨다!
    • 즉 SELECT문에 처리 조건을 지정하지 않은 컬럼을 GROUP BY 절에서도 명시하지 않았다면 에러가 발생한다!
  • GROUP BY절에 명시되지 않은 컬럼을 SELECT 문에서 사용할 경우, 집계 함수를 SELECT문에 명시된 칼럼의 처리 조건으로 사용하여 GROUP BY 절에 명시된 컬럼을 기준으로 그룹화된 각 그룹 데이터들에 대한 집계 함수에 인한 통계 데이터를 얻을 수 있다!
  • GROUP BY절에서 두개 이상의 컬럼을 콤마(,)로 구분하여 명시할 경우 첫번째 컬럼에 대한 그룹을 형성하고, 각 그룹 안에서 두 번째 컬럼에 대한 2차 그룹을 형성한다.
SELECT 컬럼 FROM 테이블이름 WHERE 검색조건 GROUP BY 컬럼1,컬럼2,컬럼n... ORDER BY 컬럼

Having 절

  • SELECT 명령문의 WHERE 절과 비슷한 기능을 하는 것으로 GROUP BY절에서 조건 검색을 할 경우 반드시 HAVING 절을 사용해야 한다.
  • 집계 함수에 대한 검색 조건을 지정하고자 할 경우는 GROUP BY 절 뒤에 HAVING 절을 사용해야 한다.
SELECT 컬럼 FROM 테이블이름 WHERE 검색조건 GROUP BY 컬럼1,컬럼2,컬럼n... HAVING 검색조건 ORDER BY 컬럼

JOIN 절

  • 두 개 이상의 테이블을 결합하여 필요한 데이터를 조회하는 기능
  • 테이블을 여러번 조회해야 하는 경우 JOIN 절을 이용하면 한번에 조회가 가능하다.

JOIN 의 종류

  • 카티션 곱(cross join)
  • EQUI JOIN
  • INNER JOIN
  • OUTER JOIN

JOIN 의 기본 문법

SELECT 컬럼(필드) FROM 테이블명1,테이블명2,... WHERE 검색조건 GROUP BY 컬럼 ORDER BY 컬럼이름 [정렬 옵션] 
  • 조회하고자 하는 테이블의 이름을 콤마(,)로 구분한다.
  • 조인이 이루어지는 테이블에 각각 동일한 이름의 컬럼이 존재할 경우, SELECT 절에서 '테이블이름.컬럼이름' 의 형식으로 명시되어야 한다.

❗️TIP!
FROM 절에 명시되는 테이블 이름에 공백으로 구분하여 별칭을 SELECT 절이나 WHERE 절에서 풀네임을 명시하지 않아도 된다.

카디션 곱

  • 테이블에서 연결 가능한 모든 경우의 수가 조합되어 출력되는 경우를 '카디션 곱' 이라 한다.
  • 항상 카디션 곱이 발생하지 않도록 주의해야 한다.

카디션 곱의 원인은?

  • WHERE 절에서 조인 조건을 명시하지 않거나 잘못 설정하여 양쪽 테이블을 연결하는 조건을 만족하는 행이 하나도 없는 경우 발생한다.

카디션 곱을 해결하려면 어떻게 해야할까?

  • 카디션 곱을(연결 가능한 모든 경우의 수가 조합되어 출력되는 경우) 해결하기 위해서는 JOIN의 조건이 되는 적절한 WHERE 절을 명시한다.

EQUI JOIN

  • SQL문에서 가장 많이 사용되는 조인으로,
    조인 대상 테이블에서 공통 칼럼에 대하여 '='비교를 명시하여 같은 값을 갖는 행을 연결하여 결과를 생성하는 JOIN 방법이다.

    이미 JOIN 조건을 명시하기 위해 WHERE 절에 사용된 경우, 추가적인 검색 조건은 AND 연산자를 사용한다.

    이 때 검색 조건은 양쪽 테이블중 하나에 대해서만 지정하면 된다!


INNER JOIN

  • EQUI JOIN 을 다른 형태로 표현한 JOIN 처리이다.
  • EQUI JOIN 과 INNER JOIN 의 공통점은 두 테이블 모두에서 JOIN 조건을 만족하는 교집합을 조회한다는 점이다.

INNER JOIN 의 구문

  • EQUI JOIN 에서 테이블 이름을 구분하는 콤마(,)를 INNER JOIN 이라는 키워드로 변경하고, WHERE 절은 ON절로 변경한다.
SELECT 테이블1.컬럼, 테이블2.컬럼 FROM 테이블1 INNER JOIN 테이블 2 ON 테이블1.column = table2.column;

❗️추가적인 검색 조건 설정시 EQUI JOIN과 INNER JOIN의 차이점!

  • EQUI JOIN은 조인 조건에 WHERE 절을 사용하기 때문에 추가적인 검색 조건은 AND 절을 사용한다.
  • INNER JOIN은 조인 조건에 ON 절을 사용하기 때문에 추가적인 검색 조건은 WHERE 절을 사용한다.

OUTER JOIN

  • INNER JOIN이 JOIN 조건에 부합하는 행들만 JOIN이 발생하는 것이라면,
    OUTER JOIN 은 조건에 부합하지 않는 행들까지도 포함시켜 결합하는 것을 의미한다.

OUTER JOIN 의 종류

종류설명
LEFT OUTER JOINJOIN 절에서 명시한 테이블 중, 왼쪽의 테이블에 대하여 조건에 부합하지 않는 테이터까지 조회한다.
RIGHT OUTER JOINJOIN 절에서 명시한 테이블 중, 오른쪽의 테이블에 대하여 조건에 부합하지 않는 데이터까지 조회한다.
FULL OUTER JOINJOIN 절에서 사용하는 모든 테이블에서 조건에 부합하지 않는 데이터까지 조회한다.
시스템의 성능에 큰 영향을 주기 때문에 실무에서는 잘 사용하지 않는다.

두 개 이상의 테이블에 대한 조인

- 두 개 이상의 테이블을 조인하는 경우 기준이 되는 하나의 테이블을 정하고, 기준 테이블에서 다른 테이블을 조인하도록 작성한다.

EQUI JOIN 으로 두 개 이상의 테이블을 JOIN 한 경우

SELECT 컬럼(또는 테이블.컬럼) FROM 테이블1, 테이블2. 테이블 3 
WHERE 테이블1.컬럼=테이블2.컬럼 
AND 테이블1.컬럼=테이블3.컬럼 

INNER JOIN 으로 두 개 이상의 테이블을 JOIN 한 경우

SELECT 컬럼(또는 테이블.컬럼) FROM 테이블1 
INNER JOIN 테이블2 ON 테이블1.컬럼=테이블2.컬럼
INNER JOIN 테이블3 ON 테이블1.컬럼=테이블3.컬럼

OUTER JOIN 구문 또한 다중 테이블 조인에서 사용할 수 있다!

SELECT 컬럼(또는 테이블.컬럼) FROM 테이블1
INNER JOIN 테이블2 ON 테이블1.컬럼=테이블2.컬럼
LEFT OUTER JOIN 테이블3 ON 테이블1.컬럼=테이블3.컬럼

서브 쿼리

SQL 안의 SQL

  • 하나의 SQL 명령문의 처리 결과를 다른 SQL 명령문에 전달하기 위해 두 개 이상의 SQL문을 하나의 SQL문으로 연결한 형태이다.
  • 서브 쿼리를 포함한 SQL 문을 메인쿼리 라고 한다.
  • 서브쿼리는 SELECT 문의 시작과 끝에 ()를 묶어서 메인 쿼리와 구분한다.
SELECT 컬럼 FROM 테이블 WHERE 컬럼 연산자 (SELECT...)
서브 쿼리 종류설명
단일 행 서브쿼리단 하나의 검색 결과만을 반환하는 형태.
서브쿼리를 검색 결과로 사용하기 위해 비교 연산자가 사용된다.
다중 행 서브쿼리하나 이상의 검색 결과를 반환하는 형태
서브 쿼리를 검색 결과로 사용하기 위해 IN 연산자가 사용된다.
profile
천천히 운영되는 개발 블로그

0개의 댓글