doo_ 2024. 2. 22. 14:49

1. 관계형 데이터베이스 개요

1) 데이터베이스

> 데이터 :

> 데이터 베이스

2) 관계형 데이터베이스 (RDB : Relational Database)

> 관계형 데이터 모델에 기초를 둔 데이터베이스로 데이터를 2차원 테이블 형태로 표현한다.

> RDB를 관리하는 시스템으로 RDBMS가 있다. (ex.Oracle, MySQL 등)

3) TABLE 구성

> 로우(인스턴스, 행), 칼럼(속성, 열)로 표현

4) SQL(Structured Query Language)

> 데이터를 다루기 위해 사용하는 언어다.

> 기본 형태

SELECT COLUMN1, COLUMN2
FROM TABLE1
WHERE COLUMN1 = 'Condition'

 

2. SELECT문

> 저장된 데이터를 조회할 때 사용하는 명령어

1) 산술연산자 : ( ) , * , / , + , -

* 참고로 NULL값이 포함되어 있으면 결과값은 NULL

2) 합성연산자 : ||

 

3. 함수

1) 문자함수

- chr(ASCII코드), LOWER(문자열), UPPER(문자열), LENGTH(문자열)

- TRIM(문자열 [, 특정문자])  SUBSTR(문자열, 시작점 [, 길이]), REPLACE(문자열, 변경 전 문자 [, 변경 후 문자])

*[ ]은 옵션

2) 숫자함수

- ABS(수), SIGN(수)

- ROUND(수, 자릿수), TRUNC(수, 자릿수), CEIL(수), FLOOR(수)

- MOD(수1, 수2)

3) 날짜함수

- SYSDATE

- EXTRACT(특정 단위 FROM 날짜 데이터)

- ADD_MONTHS(날짜 데이터, 특정 개월수)

4) 변환함수

- 암시적 형변환 : 데이터베이스가 내부적으로 알아서 데이터 유형을 변환해주는 것이다. 그러나 성능 저하 혹은 에러가 일어나는 경우가 있기 때문에 되도록 명시적 형변환을 사용하는 것이 좋다.

EX. BIRTHDATE가 VARCHAR형식으로 되어 있는데 WHERE절에 BIRTHDATE = 20240222 이렇게 숫자와 비교하는 경우

- 명시적 형변환 : 변환 함수를 사용하여 데이터 유형을 변환한 것

a. TO_NUMBER(문자열), TO_CHAR(수 or 날짜), TO_DATE(문자열, 포맷)

YYYY HH24 시(24)
MM HH 시(12)
DD MI
    SS

5) NULL 관련 함수

- NVL(인수1, 인수2), NULLIF(인수1,인수2), COALESCE(인수1, 인수2, 인수3 ---)

6) CASE

SELECT
   CASE WHEN condition1 THEN 'A'
    	WHEN condition2 TEHN 'B'
        ELSE 'C'
    END AS CASE1
FROM TABLE1

- 같은 기능으로 DECODE가 있다.

SELECT
    DECODE(COLUMN1,1,'A', 2,'B','C') AS ABC
    -- COLUMN1의 값이 1이면 A 2이면 B 나머지 C
FROM TABLE1

 

4. WHERE절

1) 비교 연산자 : = / < / >

2) 부정 연산자 : != / <> / NOT 칼럼명 = / NOT 칼럼명 >

3) SQL 연산자 :

- BETWEEN A AND B

- LIKE '비교 문자열' + % or _

- IN(LIST)

- IS NULL 

4) 논리 연산자는 (  ) -> NOT -> AND -> OR 순서

 

5. GROUP BY, HAVING 절

1) GROUP BY : 데이터를 그룹별로 묶는 작업

2) 집계함수 : COUNT, SUM, AVG, MIN, MAX

+) 기본적으로 NULL값은 제외하고 계산

+) * : 전체 , DISTINCT는 중복제거

3) HAVING : 집계함수에 대한 조건절

 

6. ORDER BY 절 : 데이터 정렬

+) 참고로 ORACLE에서 NULL값이 최댓값 취급

[SQL문 수행 순서]

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

SELECT COLUMN1, COLUMN2, SUM(*) AS Total
FROM TABLE1
WHERE COLUMN1 = 'Condition'
GROUP BY (COLUMN1, COLUMN2)
HAVING Condition
ORDER BY COLUMN1 ASC # 또는 DESC

 

7. JOIN : 두 개의 테이블을 합칠 때 사용

1) EQUI JOIN

> WHERE 절에서 조건 '='로 조인하는 것

3) NON EQUI JOIN

> WHERE절에서 조건 '='이 아닌 BETWEEN, >,< 등으로 조인하는 것

4) 3개 이상 TABLE JOIN

> 순서대로 조인하면 된다

 

8. STANDARD JOIN : FROM절에서 조인

1) INNER JOIN

SELECT *
FROM 
    TABLE1 A
    [INNER] JOIN TABLE2 B
    ON A.ID = B.ID

2) OUTER JOIN

SELECT *
FROM 
    TABLE1 A
    [RIGHT | LEFT | FULL] JOIN TABLE2 B
    ON A.ID = B.ID

3) NATURAL JOIN (Oracle에서 지원) 공통 칼럼이 있으면 자동으로 그 칼럼을 기준으로 조인

SELECT *
FROM 
    TABLE1 A NATURAL JOIN TABLE2 B

 

4) CROSS JOIN : 조합할 수 있는 모든 경우의 수를 조합

SELECT *
FROM 
    TABLE1 A CROSS JOIN TABLE2 B