자격증/SQLD
[SQL기본및활용] 2-1. SQL 기본 (2)
염두리안
2023. 3. 16. 01:40
728x90
반응형

목차 |
05. GROUP BY, HAVING 절 06. ORDER BY 절 07. JOIN 08. STANDARD JOIN |
05. GROUP BY, HAVING 절
- GROUP BY : 데이터를 그룹별로 묶을 수 있도록 해주는 절
- 집계함수) 그룹별로 집계 데이터 도출 가능
COUNT(*) : 전체 ROW를 COUNT해서 반환
COUNT(컬럼) : NULL인 ROW제외하고 카운트해서 반환
COUNT(DISTINCT 컬럼) : NULL 아니고 & ROW에서 중복 제외한 COUNT 반환
이외에도 SUM, AVG, MIN, MAX가 있다
- HAVING : GROUP BY절을 사용할 때 WHERE절처럼 사용하는 조건절 / 주로 데이터를 그룹핑 후 특정 그룹을 골라낼 때 사용 / WHERE절을 사용해도 되는 조건까지 HAVING에 사용하면 성능상 불리할 수 있음(데이터가 많아서)
- SELECT 논리적 수행 순서) FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
06. ORDER BY 절
- ORDER BY을 사용해 SELECT한 데이터 정렬 가능... 따로 명시 안하면 데이터는 임의 순서대로 출력
- ASC(오름차순) / DESC(내림차순)
- 오라클의 경우 NULL은 최댓값 취급하기 때문에 맨 마지막에 위치함(MSSQL은 반대)... 바꾸고 싶으면 NULLS FIRST, NULLS LAST를 쓰자
07. JOIN
- 각기 다른 테이블을 한 번에 보여줄 때 쓰이는 쿼리
--1. EQUI JOIN : = 조건으로 조인 / 가장 흔한 조인임
SELECT A.PRODUCT_CODE, B.PRODUCT_CODE
FROM PRODUCT_A, PRODUCT_REVIIEW_B
WHERE A.PRODUCT_CODE = B.PRODUCT_CODE;
--2. NON EQUI JOIN : =조건이 아닌 다른 조건(BETWEEN, 부등호들)으로 조인하는 방식
SELECT A.EVENT_NAME, B.MEMBER_ID, B_COUNT, B_REG_DATE
FROM EVENT A, PRODUCT_REVIIEW B
WHERE B.REG_DATE BETWEEN A.START_DATE AND A.END_DATE;
--3. 3개 이상 TABLE JOIN
SELECT A.PRODUCT_NAME, B.MEMBER_ID, B.CONTENT, C.EVENT_NAME
FROM PRODUCT A, PRODUCT_REVIIEW B, EVENT C
WHERE A.PRODUCT_CODE = B.PRODUCT_CODE
AND B.REG_DATE BETWEEN C.START_DATE AND C.END_DATE;
- OUTER JOIN : 조인 조건에 만족하지 않는 행들도 출력되는 형태 / INNER, LEFT OUTER, RIGHT OUTER
- LEFT OUTER JOIN : LEFT&RIGHT TABLE 데이터 중 JOIN에 성공한 데이터와 조인에 성공하지 못한 LEFT TABLE의 데이터가 함께 출력... 오라클에선 모든 행이 출력되는 테이블의 반대편 테이블의 옆에 (+) 붙이면 됨
SELECT A.PRODUCT_CODE, A.PRODUCT_NAME, B.MEMBER_ID, B.CONTENT, B.REG_DATE
FROM PRODUCT A, PRODUCT_REVIEW B
WHERE A.PRODUCT_CODE = B.PRODUCT_CODE(+)
08. STANDARD JOIN
- INNER JOIN : JOIN 조건에 충족하는 데이터만 출력... JOIN조건을 ON절을 사용해 작성해야 함
SELECT A.PRODUCT_CODE, A.PRODUCT_NAME, B.MEMBER_ID, B.CONTENT, B.REG_DATE
FROM PRODUCT A INNER JOIN PRODUCT_REVIEW B
ON A.PRODUCT_CODE = B.PRODUCT_CODE(+);
- OUTER JOIN : JOIN 조건에 충족하지 않아도 출력 가능
- LEFT OUTER JOIN : 왼쪽에 표기된 테이블의 데이터는 무조건 출력... 대신 오른쪽 테이블에 조인되는 데이터가 없는 ROW는 NULL로 출력
- RIGHT OUTER JOIN : 레프트 반대
- FULL OUTER JOIN : 왼쪽&오른쪽 데이터가 모두 출력(합집합)
SELECT A.PRODUCT_CODE, A.PRODUCT_NAME, B.MEMBER_ID, B.CONTENT, B.REG_DATE
FROM PRODUCT A LEFT JOIN PRODUCT_REVIEW B
ON A.PRODUCT_CODE = B.PRODUCT_CODE;
SELECT A.CAST AS R_CAST, B.CAST AS I_CAST
FROM RUNNING_MAN A FULL OUTER JOIN INFINITE_CHALLENGE B
ON A.CAST = B.CAST;
- NATURAL JOIN : A테이블과 B테이블에서 같은 이름을 가진 컬럼들이 모두 동일한 데이터를 가지고 있을 경우 JOIN / MSSQL에선 지원 X
SELECT *
FROM RUNNING_MAN A NATURAL JOIN INFINITE_CHALLENGE B;
- CROSS JOIN : A, B테이블 사이에 JOIN조건이 없는 경우, 조합할 수 있는 모든 경우 출력 / Cartesian Product라고 함
SELECT A.NAME, A.JOB, A.BIRTHDAY, B.DRINK_CODE, B.DRINK_NAME
FROM ENTERTAINER A CROSS JOIN DRINK B;
728x90
반응형