Base - 그룹조회(GROUP By절 / HAVING 절 / JOIN 절 ) / 서브 쿼리 (SubQuery)
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 의 종류
SELECT 컬럼 FROM 테이블이름 WHERE 검색조건 GROUP BY 컬럼 ORDER BY 컬럼
❗️주의해야 할 GROUP BY절 사용법
- SELECT문에는 명시하였지만 GROUP BY 절에서 명시하지 않은 칼럼에 대한 처리 조건이 SELECT문에 지정되지 않을 경우 에러를 발생시킨다!
- 즉 SELECT문에 처리 조건을 지정하지 않은 컬럼을 GROUP BY 절에서도 명시하지 않았다면 에러가 발생한다!
SELECT 컬럼 FROM 테이블이름 WHERE 검색조건 GROUP BY 컬럼1,컬럼2,컬럼n... ORDER BY 컬럼
- 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 의 종류
SELECT 컬럼(필드) FROM 테이블명1,테이블명2,... WHERE 검색조건 GROUP BY 컬럼 ORDER BY 컬럼이름 [정렬 옵션]
❗️TIP!
FROM 절에 명시되는 테이블 이름에 공백으로 구분하여 별칭을 SELECT 절이나 WHERE 절에서 풀네임을 명시하지 않아도 된다.
카디션 곱의 원인은?
- WHERE 절에서 조인 조건을 명시하지 않거나 잘못 설정하여 양쪽 테이블을 연결하는 조건을 만족하는 행이 하나도 없는 경우 발생한다.
카디션 곱을 해결하려면 어떻게 해야할까?
- 카디션 곱을(연결 가능한 모든 경우의 수가 조합되어 출력되는 경우) 해결하기 위해서는 JOIN의 조건이 되는 적절한 WHERE 절을 명시한다.
- 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 의 종류
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 절을 사용한다.
- INNER JOIN이 JOIN 조건에 부합하는 행들만 JOIN이 발생하는 것이라면,
OUTER JOIN 은 조건에 부합하지 않는 행들까지도 포함시켜 결합하는 것을 의미한다.
OUTER JOIN 의 종류
종류 | 설명 |
---|---|
LEFT OUTER JOIN | JOIN 절에서 명시한 테이블 중, 왼쪽의 테이블에 대하여 조건에 부합하지 않는 테이터까지 조회한다. |
RIGHT OUTER JOIN | JOIN 절에서 명시한 테이블 중, 오른쪽의 테이블에 대하여 조건에 부합하지 않는 데이터까지 조회한다. |
FULL OUTER JOIN | JOIN 절에서 사용하는 모든 테이블에서 조건에 부합하지 않는 데이터까지 조회한다. 시스템의 성능에 큰 영향을 주기 때문에 실무에서는 잘 사용하지 않는다. |
두 개 이상의 테이블에 대한 조인
- 두 개 이상의 테이블을 조인하는 경우 기준이 되는 하나의 테이블을 정하고, 기준 테이블에서 다른 테이블을 조인하도록 작성한다.
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...)
SELECT 컬럼 FROM 테이블 WHERE 컬럼 연산자 (SELECT...)
서브 쿼리 종류 | 설명 |
---|---|
단일 행 서브쿼리 | 단 하나의 검색 결과만을 반환하는 형태. 서브쿼리를 검색 결과로 사용하기 위해 비교 연산자가 사용된다. |
다중 행 서브쿼리 | 하나 이상의 검색 결과를 반환하는 형태 서브 쿼리를 검색 결과로 사용하기 위해 IN 연산자가 사용된다. |
Author And Source
이 문제에 관하여(Base - 그룹조회(GROUP By절 / HAVING 절 / JOIN 절 ) / 서브 쿼리 (SubQuery)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jen_jyseo/DataBase-그룹조회저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)