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

수많은 데이터를 저장하는 공간이 데이터베이스이다.
일반적으로 데이터베이스는 용도와 목적에 맞는 데이터들끼리 모아서 저장한다.

1.2 관계형 데이터베이스

관계형 데이터베이스는 관계형 데이터 모델에 기초를 둔 데이터베이스이다.
모든 데이터를 2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의하는 것으로 시작된다.
Oracle, SQL Server(MSSQL), MySQL, MariaDB, PostgreSQL등이 여기에 속한다.

1.3 TABLE

2차원 테이블 형태는 우리가 엑셀을 작성할때 흔히 이용하는 표형식을 떠올리면 이해가 쉽다.
세로 열을 컬러밍라고 하고 각각의 가로 행을 로우라고 한다.
테이블은 관계형 데이터베이스의 기본 단위이고 일반적으로 데이터베이스는 여러개의 테이블로 구성된다.
데이터를 저장하는 주된 목적은 데이터를 활용하는데 에 있고 우리는 그것을 테이블 형태로 조회 변경 삭제할 수 있다.

1.4 SQL

SQL은 관계형 데이터베이스에서 데이터를 다루기 위해 사용하는 언어이다.
데이터베이스는 우리가 사용하는 언어로는 제대로된 의사전달을 할 수 없기때문에 데이터베이스가 이해할 수 있는 언어인 SQL을 사용하는 것이다.
SQL의 라인 수에 따라 복잡하면 성능차가 확연히 드러나기 때문에 잘 작서하고 튜닝하는 것이 매우 중요하다.

2. SELECT문

2.1 SELECT

저장되어 있는 데이터를 조회하고자 할때 사용하는 명령어이다.
*을 사용하면 전체 컬럼이 조회되며 조회되는 컬럼의 순서는 테이블의 커럼 순서와 동일하다. WHERE절이 없으면 테이블의 전체 ROW가 조회된다.
테이블명이나 커럴명에 별칭을 부여할 수 있는데 JOIN하거나 서브쿼리가 있을때 컬러명앞에 테이블을 명시하지 않으면 매우 길어져서 짧게쓰기 위해 Alias를 붙여주는 것이다.

2.2 산술연산자

수학에서 사용하는 사칙연산의 기능을 가진 연선자이다. NUMBER DATE 유형의 데이터와 같이 사용할 수 있다.

연산자 의미 우선순위
() 괄호로 우선순위 조정가능 1
* 곱하기 2
/ 나누기
+ 더하기 3
- 빼기

2.3 합성연산자 ||

문자와 문자를 연결할때 사용하는 연산자이다.
'S' || 'Q' || 'L' => SQL이 된다.

3.함수

데이터베이스에도 수학에서의 함수처럼 매핑을 제공하는 함수들이 있다.

3.1 문자함수

3.1.1 CHR(ASCII코드)

CHR(65) -> A
CHR(아스키코드값) -> 아스키코드상 값

3.1.2 LOWER(문자열) / UPPER(문자열)

1.LOWER
문자열을 소문자로 변환
LOWER('HELLO') -> hello

2.UPPER
문자열을 대문자로 변환
UPPER('hello') -> HELLO

3.1.3 TRIM(문자열 [,특정문자]) []는 옵션이라는 뜻

1.LTRIM
특정문자열 명시하지 않았을 경우 문자열의 왼쪽 공백 제거
명시했을 경우 문자열을 왼쪽부터 한글자씩 특정문자와 비교하여 특정문자에 포함되어 있으면 제거하고 포함되지 않았으면 멈춘다.

LTRIM(' HELLO') -> HELLO
LTRIM('블랙핑크', '블랙') -> 핑크

2.RTRIM
특정문자를 따로 명시해주지 않으면 문자열의 오른쪽 공백 제거
명시하면 오른족부터 한글자씩 특정문자와 비교하여 특정문자에 포함되어 있으면 제거 포함되지 않앗다면 멈춤

RTRIM('HELLO ') -> HELLO
RTRIM('블랙핑크', '핑크') -> 블랙

3.TRIM([위치] [특정문자] [FROM] 문자열)
옵션이 하나도 없을 경우 문자열의 왼쪽 오른쪽 공백제거
문자열의 위치 LEADING TRAILING BOTH로 지정된 곳부터 한글자씩 특정문자와 비교하여 같으면 제거하고 멈춘다.
LTRIM RTRIM과 달리 특정 문자는 한글자만 지정할 수 있다.

TRIM(' HELLO ') -> HELLO
TRIM(LEADING '블' FROM '블랙핑크') -> 랙핑크
TRIM(TRAILING '크' FROM '블랙핑크') -> 블랙핑

3.1.4 SUBSTR(문자열, 시작점 [.길이])

문자열의 원하는 부분만 잘라서 반환해주는 함수이다.
길이를 명시하지 않았을 경우 문자열의 시작점부터 문자열 끝까지 반환한다.
INDEX는 1부터 시작한다.

SUBSTR('HELLO HI',3, 2) -> LL
SUBSTR('HELLO HI',3) -> LLO HI

3.1.5 LENGTH(문자열)

문자열의 길이를 반환해주는 함수이다.
LENGTH('HELLO') -> 5

3.1.6 REPLACE(문자열, 변경전문자열 [, 변경후 문자열])

문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 바꿔주는 함수이다.
변경후 문자열을 명시하지 않으면 문자열에서 변경전 문자열을 제거한다.

REPLACE('HELLO', L, 'P') -> HEPPO
REPLACE('HELLO', L) -> HEO

3.2 숫자함수

3.2.1 ABS(수)

수의 절대값을 반환해주는 함수이다.

ABS(-1) -> 1
ABS(2) -> 2

3.2.2 SIGN(수)

수의 부호를 반환해주는 함수이다.
양수이면 1 음수이면 -1 0이면 0을 반환한다.

SIGN(-7) -> -1
SIGN(7) -> 1

3.2.3 ROUND(수 [,자리수])

수를 지정된 소수점 자루사까지 반올림하고 반환해준다.
자리수를 명시하지 않았을 경우 기본값은 0이다.
반올림된 정수로 반환하고 자리수가 음수일 경우 지저된 정수부를 반올림하여 반환한다.

ROUND(12.36, 1) -> 12.4
ROUND(163.76, -2) -> 200

3.2.4 TRUNC(수 [,자리수])

소수점 자리수까지 버림하는 함수
명시하지 않으면 0 자리수가 음수일 경우 지정된 정수부에서 버림하여 반환

TRUNC(54.29, 1) -> 54.2
TRUNC(54.29, -1) -> 50

3.2.5 CEIL(수)

소수점 이하의 수를 올림한 정수를 반환

CEIL(72.86) -> 73
CEIL(-33.4) -> -33

3.2.6 FLOOR(수)

소수점 이하의 수를 버리한 정수를 반환
주의할점!! 음수일때 버리면 더작아져야한다.

FLOOR(72.86) -> 72
FLOOR(-33.3) -> -34

3.2.7 MOD(수1, 수2)

수1을 수2로 나눈 나머지를 변환
SQL 수 법칙과는 다름을 인지해야할 것 같다.
앞이 음수면 -나머지고 앞이 양수면 뒤가 음수여도 +나머지이다.

MOD(15, 7) -> 1
MOD(15, -4) -> 3 계산기는 1
MOD(-15, 4) -> -3 계산기는 -1
MOD(-15, -4) -> -3

계산기 값과 코딩값이 다르다. 이유가 뭘까?
코딩값은 이해하기 쉽다 그냥 하고 본 숫자의 부호만 신경쓰면된다.

3.3 날짜함수

3.3.1 SYSDATE

현재의 연 월 일 시 분 초를 반환해주는 함수
정해놓은 포맷에 따라 양식이 달라질 수는 있다.

SYSDATE -> 2023-10-24 15:04:44

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

날짜 데이터에서 특정단위 YEAR MONTH DAY HOUR MINUTE SECOND만을 출력해서 반환

EXTRACT(YEAR FROM SYSDATE) -> 2023
EXTRACT(MONTH FROM SYSDATE) -> 10

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

날짜 데이터 에서 특정 개월 수를 더한 날짜를 반환해주는 함수
날짜의 이전 달이나 다음달에 기준 날짜의 일자가 존재하지 않으면 해당 월의 마지막 일자가 반환

ADD_MONTHS(TO_DATE('2021-12-31', 'YYYY-MM-DD'), -1) -> 2021-11-30
ADD_MONTHS(TO_DATE('2021-12-31', 'YYYY-MM-DD'), 1) -> 2022-1-31
ADD_MONTHS(TO_DATE('2021-01-31', 'YYYY-MM-DD'), 1) -> 2021-2-28

3.3.4 변환함수

명시적 형변환과 암시적 형변환
명시적 형변환 : 변환 함수를 사용하여 데이터 유형 변환을 명시적으로 나타냄
암시적 형변환 : 데이터베이스가 내부에서 알아서 데이터 유형을 변환함

예를들어 VARCHAR 유형의 BIRATHDAY 컬럼을 숫자와 비교할 경우
데이터베이스는 오류를 뱇지 않고 내부적으로 NUMBER로 변환해서 계산해준다.
하지만 암시적이 가능하다고 해서 막 사용하면 성능저하를 불러올 수 있기 때문에 명시적 형변환을 사용하는 것이 좋다.

명시적 형변환 함수

3.3.4.1 TO_NUMBER(문자열)

문자열을 숫자형으로 변환해주는 함수

TO_NUMBER('1234') -> 1234
TO_NUMBER('abc') -> 에러발생

3.3.4.2 TO_CHAR(수 OR 날짜 [,포맷])

수나 날짜형의 데이터를 포맷 형식의 문자형으로 변환해주는 함수

TO_CHAR(1234) -> '1234'
TO_CHAR(SYSDATE, 'YYYYMMDD') -> '20231024'

3.3.4.3 TO_DATE(문자열, 포맷)

포맷 형식의 문자형의 데이터를 날짜형으로 변환해주는 함수

TO_DATE('20231024', 'YYYYMMDD') ->2023-10-24

'개념정리 > SQLD' 카테고리의 다른 글

SQLD SQL기본 3  (1) 2023.10.26
SQLD SQL기본 2  (0) 2023.10.25
SQLD 데이터 모델링과 SQL  (0) 2023.10.24
SQLD 데이터 모델링의 이해  (0) 2023.10.23
자격증 SQLD 공부시작!  (0) 2023.10.23

+ Recent posts