※ WHERE절

        1. WHERE절이란? - INSERT를 제외한 SELECT, UPDATE, DELETE문을 수행할 때 원하는 데이터만 골라 수행하도록 하는 구문

 

        2. WHERE절 연산자

             ① 비교 연산자 - 빈 문자열이나 NULL에 비교 연산자를 사용할 수 없다. (올바른 결과가 출력되지 않음)

 

 

                       ② 부정 비교 연산자 - 빈 문자열이나 NULL에 부정 비교 연산자를 사용할 수 없다. (올바른 결과가 출력되지 않음)

 

 

             ③ SQL 연산자

 

            ④ 부정 SQL 연산자 

 

            ⑤ 논리 연산자 - 논리 연산자는 ( ) → NOT → AND → OR 순으로 처리된다.

 

 

※ 함수

        1. 문자 함수

 

함수 설명
CHR(ASCII 코드) ASCII 코드에 매핑된 문자나 숫자를 반환하는 함수

Ex)
CHR(65) → A
LOWER(문자열) 문자열을 소문자로 변환하는 함수

Ex)LOWER('SQLD') → sqld 
UPPER(문자열) 문자열을 대문자로 변환해주는 함수

Ex)
UPPER('sqld') → SQLD
LTRIM(문자열, 특정 문자)  특정 문자가 있으면 문자열 왼쪽부터 제거하고 없으면 공백만 제거

 Ex)LTRIM('      SQLD')→ SQLD
Ex)LTRIM('SQLD', 'SL')→ QLD
RTRIM(문자열, 특정 문자) 특정 문자가 있으면 문자열 오른쪽부터 제거하고 없으면 공백만 제거
TRIM(위치 특정 문자 FROM 문자열)   위치(LEADING-왼쪽 or TRAILING-오른쪽 or BOTH-좌우)가 있으면         그쪽부터 특정 문자가 있으면 제거하고 위치가 없으면           양쪽 공백만 제거

Ex)TRIM(LEADING 'S' FROM 'SQLD') → QLD
SUBSTR(문자열, 시작점, 길이)          문자열을 시작점부터 길이만큼 자르거나 길이가 없으면               시작점부터 문자열 끝까지 자르고 반환
LENGTH(문자열) 문자열의 길이를 반환하는 함수
REPLACE(문자열, 변경할 문자열, [대체 문자열])     문자열에서 변경할 문자열을 찾아 대체문자열로 바꾸는 함수로         대체 문자열이 없으면 변경할 문자열을 제거한다.

Ex) REPLACE('SQLD', 'D', 'P') → SQLP

 

        2. 숫자 함수

 

함수 설명
ABS(숫자) 숫자의 절대값을 반환하는 함수
SIGN(숫자) 숫자가 음수면 -1, 양수면 1, 0이면 0을 반환
ROUND(숫자, n) 숫자의 소수점 n번째에서 반올림. n이 음수면 n번째 정수 부분에서 반올림하고 n이 없으면 소수점에서 반올림

Ex) ROUND(167.25, -2) → 200
TRUNC(숫자, n) 숫자의 소수점 n번째까지 반환. n이 음수면 n번째 정수 부분까지 출력하고 n이 없으면 정수 부분만 출력한다.
CEIL(숫자) 숫자보다 크거나 같은 최소 정수 반환

Ex) CEIL(47.25) → 48
Ex) CEIL(-12.33) → -12
FLOOR(숫자) 숫자보다 작거나 같은 최대 정수 반환

Ex) FLOOR(47.25) → 47
Ex) FLOOR(-12.33) → -13
MOD(숫자1, 숫자2)     숫자1를 숫자2로 나눈 나머지를 반환. 숫자2가 0이면 숫자1를        반환하고 두 숫자 모두 음수면 나머지도 음수

 

              3. 날짜 함수

 

함수 설명
SYSDATE 현재 날짜 출력
EXTRACT(특정 날짜 단위 FROM 날짜 데이터) 날짜 데이터에서 특정 날짜 단위만 출력
ADD_MONTH(날짜 데이터, 특정 개월 수)   날짜 데이터에 특정 개월 수를 더한 날짜 출력. 결과값이 존재할 수    없는 일자를 갖고 있는 경우 해당 월의 마지막 일자로 변경

Ex) ADD_MONTH(DATE '2022-02-28', 1) 2022-03-31

 

              4. 변환 함수

                 ① 암시적 형변환 - 데이터베이스가 자동으로 데이터 유형을 변환하나 에러와 성능 저하가 발생가능

                 ② 명시적 형변환 - 변환 함수를 사용하여 개발자가 데이터 유형을 변환

 

함수 설명
TO_NUMBER(문자열) 문자열을 숫자형으로 변환하나 문자열이 숫자형이 아닐 경우 에러 발생
TO_CHAR(숫자 or 날짜, 포맷) 숫자나 날짜 데이터를 포맷 형식의 문자형으로 변환
TO_DATE(문자열, 포맷) 문자열을 포맷 형식의 날짜형으로 변환

 

        5. NULL 관련 함수

 

함수 설명
NVL(인수1, 인수2) 인수1의 값이 NULL인 경우 인수2를 반환하고 NULL이 아닐 경우 인수1을 반환
NULLIF(인수1, 인수2) 인수1과 인수2가 같으면 NULL을 반환하고 같지 않으면 인수1을 반환
COALESCE(인수1, 인수2, 인수3 ...) NULL이 아닌 최초의 인수를 반환

 

        6. CASE문 - WHEN의 조건에 참이면 THEN을 실행하고 거짓이면 ELSE를 실행

                       • CASE ~

                            WHEN ~ THEN ~

                            ELSE ~

                          END

※ 관계형 데이터베이스 개요

        1. 데이터베이스란? - 용도와 목적에 맞는 데이터들끼리 모아서 저장하는 공간으로 여러 개의 테이블로 구성된다.

 

        2. 관계형 데이터베이스(Relational Database, RDB)란? - 관계형 데이터 모델에 기초를 둔 데이터베이스로 설계 시 모든 데이터를                       2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의한다. RDB을 관리 · 감독하기 위해 RDBMS을 사용하며 MySQL,                             MariaDB 등이 이에 속한다.

 

        3. 테이블 - 관계형 데이터베이스의 기본 단위. 데이터 모델에서 엔터티에 해당하며 세로 열(Column)은 인스턴스를 나타내고                               가로 행(Row)은 속성을 나타낸다.

 

        4. SQL(Structured Query Language) - 관계형 데이터베이스에서 데이터를 다루기 위해 사용하는 언어

 

※ SELECT문

        1. SELECT - 저장되어 있는 데이터를 조회할 때 사용하는 명령어

             Ex) SELECT 컬럼1, 컬럼 2, ... FROM 테이블 WHERE 컬럼1 = '아무개';

             

             1-1) 컬럼을 명시하지 않고 *를 사용하면 전체 컬럼이 조회되며 조회되는 컬럼의 순서는 테이블의 컬럼 순서와 동일하다.                                     또한 별도의 WHERE절이 없으면 테이블의 전체 Row가 조회된다.

                      Ex) SELECT * FROM 테이블;

 

             1-2) 테이블명이나 컬럼명에 별칭을 붙여줘서 여러 개의 테이블을 JOIN하거나 서브쿼리가 있을 때 컬럼명의 앞에 같이                                       명시된 테이블명을 짧게 줄여쓴다.

                      Ex) SELECT BAND.BAND_NAME, BAND_MEMBER.MEMBER_NAME  

                         FROM BAND, BAND_MEMBER

                         WHERE BAND.BAND_CODE = BAND_MEMBER.BAND_CODE;

                                                             

                         SELECT B.BAND_NAME, BM.MEMBER_NAME  

                         FROM BAND B, BAND_MEMBER BM

                         WHERE B.BAND_CODE = BM.BAND_CODE;

 

        2. 산술 연산자

               Ex) SELECT COL1+COL2 AS A, COL1-COL2 AS B FROM TEST;

 

산출결과

        3. 합성 연산자 - 문자와 문자를 연결할 때 사용하는 연산자

               Ex) SELECT 'S' || 'Q' || 'L'  AS SQLD FROM TEST;

 

산출결과

 

※ 반정규화

        1. 반정규화란? - 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정으로                                 입력, 수정, 삭제 성능이 저하되거나 정합성 이슈가 발생할 수 있다. 정규화가 끝난 후 일정한 규칙에 따라 반정규화 단계를 진행한다.

 

        2. 반정규화 절차

               2-1) 테이블 반정규화

                        ㉮ 테이블 병합 - 업무 프로세스 중 JOIN이 필요한 경우가 많아 엔터티를 통합하는 것이 성능 향상에 도움 될 경우 고려함

 

                              1:1 관계 테이블 병합 - 비교적 판단하기 수월하며 부작용도 적다

                              1:M 관계 테이블 병합 - 데이터가 중복될 수 있고 많이 중복될 경우 테이블 병합이 적절하지 못함

 

                             ㉢ 슈퍼/서브 타입 테이블 병합 - 테이블을 통합하여 성능 향상

                              * 예를 들어 주문 엔터티는 의류 주문이나 신발 주문으로 분류되므로 주문 엔터티는 슈퍼 타입이 되고 의류 주문이나                                     신발 주문은 서브 타입이 된다.

 

                       ㉯ 테이블 분할

                             ㉠ 테이블 수직 분할(속성 분할) - 엔터티의 속성 중 자주 사용되지 않거나 대부분의 인스턴스가 해당 속성값을                                                  NULL로 갖고 있을 때 해당 속성을 별도의 엔터티로 분할하는 것을 고려한다. (1:1 관계 성립)

 

                             ㉡ 테이블 수평 분할(인스턴스 분할, 파티셔닝) - 엔터티의 특정 인스턴스를 특정 기준으로 서로 간의 관계가 없는                                              별도의 엔터티로 분할한다. (파티셔닝)

 

                   

                       ㉰ 테이블 추가

                             ㉠ 중복 테이블 추가 - 데이터의 중복을 감안하더라도 성능 향상을 위해 필요한 경우 중복된 데이터를 가진                                                      별도의 엔터티를 추가

                             ㉡ 통계 테이블 추가 - 데이터의 통계치를 미리 계산하여 저장한 별도의 엔터티를 추가

                             ㉢ 이력 테이블 추가 - 이력 데이터를 가진 별도의 엔터티를 추가

                             ㉣ 부분 테이블 추가 - 특정 범위의 많은 데이터를 자주 사용하는 경우 이를 저장한 별도의 엔터티를 추가

 

              2-2. 컬럼 반정규화

                      ㉮ 중복 컬럼 추가

                      ㉯ 파생 컬럼 추가

                      ㉰ 이력 테이블 컬럼 추가

 

              2-3. 관계 반정규화(중복관계 추가)

 

※ 트랜잭션(Transaction)

        1. 트랜잭션이란? - 데이터를 조작하기 위한 하나의 논리적인 작업 단위

             Ex) 이벤트 응모 시 쿠폰을 발행해주는 이벤트가 있을 경우 '이벤트 응모 이력 저장'과 '쿠폰 발행'을 논리적으로 하나의                                      단위로 묶는다. 쿠폰이 소진되어 쿠폰 발행이 실패할  경우 이벤트 응모 이력 또한 롤백된다.

 

※ NULL

        1. NULL이란? - 아직 정의되지 않은 값을 의미하며 0을 의미하진 않는다. 테이블 연산 시 가로 연산에 NULL이 포함되어 있으면                           결괏값이 NULL이 되고 세로 연산에 NULL이 포함되어 있으면 연산식에서 NULL을 제외시키고 연산한다.

 

+ Recent posts