[SQL] SQL 응용(엉용)

이건희·2021년 8월 26일

KOSA_log

목록 보기
8/8

2021 K-Digital 교육 (한국SW산업협회 주관) 에서 배운 내용을 제멋대로 정리해보는 공간입니다.
모든 오류 지적은 언제나 환영입니다.

모든 자료의 저작권은 허진경 선생님께 있습니다.🎈


변환함수

🤞 DECODE 함수

IF-THEN-ELSE 구문과 유사한 방법으로 표현식 해독

기본구문
DECODE(column or expression, search1, result1)

expression 해독 후 각각의 SearchN에 대해 비교, 같으면 resultN, 다르면 기본값 혹은 Null 반환

🙌 CASE 문

자바의 if~else 문 또는 switch ~ case와 같은 기능

  1. CASE 뒤에 표현식 있을경우 WHEN 절에는 값
  2. CASE 뒤 아무것도 없을 경우, WHEN 절에 조건식
SELECT job_id, salary,
  CASE job_id WHEN 'IT_PROG'  THEN salary*1.1
       ELSE salary
  END AS REVISED_SALARY
FROM employees;

📍 그룹함수

  • AVG(n) : 평균 출력
  • SUM(n) : 합계
  • MIN(n) : 최솟값
  • MAX(n) : 최댓값
  • COUNT(n) : 행의 갯수
  • STDDEV(n) : n의 표준편차
  • VARIANCE(n) : n의 분산

❗️COUNT(*)을 제외한 상기 함수는 전부 NULL 값을 무시하고 연산

GROUP BY

테이블의 행을 더 작은 그룹으로 나눕니다.

주의 !
GROUP BY 절에 명시 되지 않은 열은, SELECT절에서 그룹함수에 의해(ex : AVG) 호출되어야 합니다.

SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id;

GROUP_BY 절은 HAVING 절에 의해 제한합니다.

사용 예)

급여평균이 8000을 초과하는 부서의 번호와 급여 평균 출력

SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 8000;

💣 JOIN

하나 이상의 테이블로부터 데이터를 질의하기 위해 조인 사용

본 포스팅에서는 안시조인을 기본으로 다루겠습니다.

ANSI JOIN

기본구문

SELECT table1.column, table2.column
FROM table1
\[LEFT | RIGHT | FULL] [OUTER] JOIN table2
ON join_conditions
[WHERE conditions];

🌎 NATURAL JOIN

같은 이름을 갖는 열들에 대해 조인을 합니다.

  • 같은 데이터 유형이어야 하며, Alias 혹은 테이블명을 접두사 불가
SELECT first_name, job_title
FROM employees
NATURAL JOIN jobs;

USING 절

원하는 특정열에 대해서만 EQUI조인을 할 수 있음

SELECT first_name, job_title
FROM employees
JOIN jobs
USING (job_id);

🌼 ON JOIN

ON 절 이용 시 JOIN 이후 논리 연산, 서브쿼리같은 추가 서술 가능

SELECT department_name, city, state_province
FROM departments d
JOIN locations l
ON d.location_id = l.location_id;

WHERE 절을 추가한다면 별도의 조건으로 제한 가능

⭐️ OUTER JOIN

  • LEFT OUTER JOIN : A,B가 있을때 왼쪽에 있는 A가 기준이 됨. 같은 것이 있을 때 그 Data, B가 없는 경우엔 NULL 처리
  • RIGHT OUTER JOIN : A,B가 있을때 오른쪽에 있는 B가 기준이 됨. 같은 것이 있을 때 그 Data, A가 없는 경우엔 NULL 처리
  • FULL OUTER JOIN : 위 두개를 UNION으로 합친 결과

🔥 서브쿼리

  • SELECT 절의 서브쿼리 (스칼라 서브쿼리)
  • FROM 절의 서브쿼리 (인라인 뷰)
  • WHERE 절
  • HAVING 절
  • ORDER BY 절
  • INSERT 문의 VALUES 절
  • UPDATE 문의 SET 절
  • CREATE TABLE 문의 AS 절
  • 서브쿼리는 괄호로 둘러싸야 함
  • 비교 연산자의 오른쪽에 있어야 함

🌸 계층형 쿼리

기본 구문

SELECT select_list
FROM table
WHERE conditions
START WITH top_level_condition
CONNECT BY [NOCYCLE] [PRIOR] connenct_condition
ORDER SIBLINGS BY order_condition;
  • START WITH : 루트 노드를 지정하는 조건. 이 조건을 만족하는 모든 행은 루트 노드 가 됨
  • CONNECT BY : 부모와 자식 노드들 사이의 관계를 명시
  • ORDER SIBLINGS BY : 정렬 조건

DML 문

INSERT INTO table
VALUES () ;

UPDATE table
SET column = value [, column = value] ;

  • WHERE 절이 생략되면 모든 행의 데이터가 변경될 수 있음.

DELETE FROM table
[WHERE condition]

🔥 delete, truncate, drop의 차이점은?

  • delete : 데이터 삭제, rollback 명령으로 취소가능
  • truncate : 테이블 구조 유지하며 데이터만 삭제, rollback으로 취소불가
  • drop : 테이블 전체를 삭제(구조포함), rollback으로 취소불가`
profile
데이터분석에 관심있는 글쟁이 입니다. 재치있는 사람을 꿈꿉니다.

0개의 댓글