SQL 실습

이용만·2022년 7월 6일
0
  1. Divide and Conquer(분할정복법)

주어진 문제의 입력을 더 이상 나눌 수 없을 때까지 두 개 이상의 작은 문제로 순환적으로 분할하고, 이렇게 분할된 작은 문제들을 각각 해결한 후 그 해를 결합하여 원래 문제의 해를 구하는 방식
SQL을 작성할 때도, 해결할 문제를 분할하여 작성하고, 합쳐 나가는 습관을 갖는 것이 중요

  1. 데이터 SELECT

SELECT문은 데이터베이스로부터 저장되어 있는 데이터를 검색하는데 사용한다.
SELECT 문법
더보기
3. 데이터 정렬 - ORDER BY

ORDER BY 절은 데이터의 정렬을 위해 사용한다.
ASC : 오름차순 (Default)
DESC : 내림차순
4. 데이터 그룹핑 - GROUP BY

GROUP BY절은 데이터들을 원하는 그룹으로 나눌 수 있다.
나누고자 하는 그룹의 컬럼명을 SELECT절과 GROUP BY절 뒤에 추가하면 된다.
집계함수와 함께 사용되는 상수는 GROUP BY절에 추가하지 않아도 된다.(개발자 분들이 많이 실수함)
GROUP BY절은 집계 함수 없이도 사용될 수 있다.(DISTINCT와 용도가 비슷)
DISTINCT vs GROUP BY
더보기

  1. 데이터 존재여부 확인 -EXISTS

EXISTS (서브쿼리)는 서브 쿼리의 결과가 "한 건이라도 존재하면" TRUE 없으면 FALSE를 리턴한다.
EXISTS는 서브 쿼리에 일치하는 결과가 한 건이라도 있으면 쿼리를 더 이상 수행하지 않는다.
6. 데이터 검색 - NOT EXISTS

NOT EXISTS (서브쿼리)는 서브 쿼리의 결과가 "존재하지 않으면" TRUE 있으면 FALSE를 리턴한다.
NOT EXISTS는 서브 쿼리에 일치하는 결과가 한 건도 없으면 쿼리를 더 이상 수행하지 않는다.
7. 데이터 여러 조건 검색 - IN

IN (list) : list의 값 중 어느 하나와 일치하는 데이터를 출력
8. 데이터 여러 조건 검색 - NOT IN

NOT IN (list) : list의 값과 일치하지 않는 데이터를 출력
9. 데이터 검색 - LIKE

문자 형태로 일치하는 데이터를 출력(%, 사용)
검색 STRING 값에 대한 와일드 카드 검색을 위해서 LIKE 연산자를 사용
% : 여러 개의 문자열을 나타내는 와일드 카드
: 단 하나의 문자를 나타내는 와일드 카드
ESCAPE : 와일드 카드 문자를 일반문자처럼 사용하고 싶은 경우에 사용 ex) WHERE name LIKE '%_y%' ESCAPE '\'
LIKE 연산자는 대소문자를 구분한다.
UPPER() 함수를 이용해 대소문자 구분없이 출력할 수 있다.
예시
더보기
10. 데이터 검색 - NOT LIKE

문자 형태와 일치하지 않는 데이터를 출력
11. 데이터 순번 부여 - ROWNUM

조회된 순서되로 순번을 출력
12. 데이터 순위부여 - RANK

RANK 함수는 순위를 부여하는 함수로 동일순위 처리가 가능하다.(중복 순위 다음 순서 건너뜀 - 1,2,2,4)
DENSE_RANK 함수는 RANK함수와 같은 역할을 하지만 동일 등수가 순위에 영향이 없다(중복순위 다음 순위 연속 - 1,2,2,3)
ROW_NUMBER 함수는 특정 순위로 일련번호를 제공하는 함수로 동일순위 처리가 불가능하다.(중복순위 없이 유일값 - 1,2,3,4)
순위 함수 사용시 ORDER BY절은 필수로 입력해야 한다.
사용 예) RANK() OVER( ORDER BY column DESC)
13. 데이터 코드변환 - DECODE

DECODE 함수는 조건에 따라 데이터를 다른 값이나 컬럼값으로 추출할 수 있다.
DECODE(VALUE, IF1, THEN1, IF2, THEN2, ...) 형태로 사용할 수 있다.
VALUE 값이 IF1일 경우에 THEN1 값을 반환하고, VALUE 값이 IF2일 경우에는 THEN2 값을 반환한다.
DECODE 함수 안에 DECODE 함수를 중첩으로 사용할 수 있다.
사용 예제) DECODE(deptno, 10, 'ACCOUNTING', 20, 'RESEARCH'. 30. 'SALES', 'OPERATIONS')
DECODE 함수는 집계함수와 함께 통계 데이터를 추출할 때 많이 사용한다.
14. 데이터 조건부 - CASE WHEN

CASE 함수는 DECODE 함수가 제공하지 못하는 비교연산의 단점을 해결할 수 있는 함수이다.
DECODE 함수에서 비교연산을 수행하기 위해서는 GREATEST, LEAST 등의 함수를 사용해야 하지만, CASE 함수에서는 조건 연산자를 모두 사용할 수 있다.
CASE 함수는 IF...THEN...ELSE 구문과 비슷하다. WHEN 절 다음에 여러 조건이 올 수 있다.
사용 예) CASE deptno WHEN 10 THEN 'ACCOUNTING' WHEN 20 THEN 'RESEARCH' WHEN 30 THEN 'SALES' ELSE 'OPERATIONS' END as 'Depot Name'
15. 데이터 합치기 - UNION / UNION ALL

UNION과 UNION ALL의 차이는 정렬작업의 수행 여부이다.
UNION은 중복을 제거해야 하기 때문에 정렬작업을 수행하므로 성능이 저하된다.
UNION(합칩합)은 두 테이블의 결합을 나타내며, 결합시키는 두 테이블의 중복되지 않은 값들을 반환한다.
UNION ALL(중복을 포함하는 합집합)은 UNION과 같으나 두 테이블의 중복되는 값까지 반환한다.
16. 데이터 집계함수(Aggregate function)

GROUP BY절을 이용하여 그룹 당 하나의 결과로 그룹화 할 수 있다.
HAVING절을 사용하여 집계함수를 이용한 조건 비교를 할 수 있다.
MIN, MAX 함수는 모든 자료형에 사용할 수 있다.
일반적으로 가장 많이 사용하는 집계함수에는 AVG(평균), COUNT(개수), MAX(최대값), MIN(최소값), SUM(합계) 등이 있다.
COUNT : COUNT함수는 검색된 행의 수를 반환한다.
MAX : MAX 함수는 컬럼값 중에서 최대값을 반환한다.
MIN : MIN 함수는 컬럼값 중에서 최소값을 반환한다.
AVG : AVG 함수는 평균 값을 반환한다.
SUM : SUM 함수는 검색된 컬럼의 합을 반환한다.
STDDEV : STDDEV 함수는 표준편차를 반환한다.
17. 데이터 집계 - HAVING

WHERE 절에서는 집계함수를 사용할 수 없다.
HAVING 절은 집계함수를 가지고 조건비교를 할 때 사용한다.
HAVING절은 GROUP BY절과 함께 사용이 된다.
18. 데이터 조인 - INNER JOIN

일반 조인시 ,(콤마)를 생략하고 INNER JOIN을 추가하고, WHERE 절 대신 ON절을 사용하면 된다.
INNER는 생략 가능하다.
사용 예)
더보기
19. 데이터 조인 - OUTER JOIN

EQUI JOIN은 조인을 생성하려는 두 개의 테이블의 한쪽 컬럼에서 값이 없다면 데이터를 반환하지 못한다.
동일 조건에서 조인 조건을 만족하는 값이 없는 행들을 조회하기 위해 OUTER JOIN을 사용한다.
OUTER JOIN 연산자는 "(+)"이다.
조인시 값이 없는 조인측에 "(+)"를 위치시킨다.
OUTER JOIN 연산자는 표현식의 한 편에만 올 수 있다.
사용 예)
더보기
LEFT OUTER JOIN : LEFT OUTER JOIN은 오른쪽 테이블에 조인시킬 컬럼의 값이 없는 경우 사용한다.
RIGHT OUTER JOIN : RIGHT OUTER JOIN은 왼쪽 테이블에 조인시킬 컬럼의 값이 없는 경우 사용한다.
FULL OUTER JOIN : FULL OUTER JOIN은 양쪽 테이블 모두 OUTER JOIN 걸어야 하는 경우 사용한다.
20. 데이터 조인 - NULL 값 처리

NVL : NVL 함수는 NULL 값을 다른 값으로 바꿀 때 사용하며, 모든 데이터 타입에 적용이 가능하다.
더보기
NVL2 : NVL2라는 함수는 NVL 함수의 DECODE 함수의 개념을 합쳤다고 생각하면 쉽다.
NVL2(expr, expr1, expr2)
expr의 값이 NULL이 아닐 경우에는 expr1의 값을 반환하고, NULL일 경우에는 expr2의 값을 반환한다.
더보기
NULLIF : NULLIF(exp1, exp2)
exp1 값과 exp2값이 동일하면 NULL을 그렇지 않으면 exp1을 반환
CASE WHEN expr1 = expr2 THEN ELSE expr1 END
COALESCE : COALESCE(expr1, expr2, expr3, ...)
expr1이 NULL이 아니면 expr1 값을 그렇지 않으면 COALESCE(expr2, expr3, ...) 값을 반환
NVL 함수와 비슷하다.

profile
성장하는 개발자가 되고자 합니다.

0개의 댓글