자격증/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(컬럼) : NULLROW제외하고 카운트해서 반환
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
반응형