SQLD - Part2 - Chapter1 - SQL 기본
관계형 데이터베이스 개요
데이터베이스
- 간단하게 말하자면 당연히 데이터들이 저장되는 공간
- 용도와 목적에 맞는 데이터들끼리 모아서 저장한다
관계형 데이터베이스(Relational DataBase => RDB)
- 관계형 데이터 모델에 기초를 둔 DB이다.
- 모든 데이터를 2차원 테이블 형태로 표현함.
- RDBMS는 RDB를 관리 감독하기 위한 시스템이며 우리가 익히 알고 있는 Oracle, SQL Server(MSSQL), MySQL, MariaDB, PstgreSQL등이 있음.
TABLE
- RDB의 기본 단위이고 일반적으로 DB는 여러 개의 테이블로 구성이 됨.
- 이렇게 데이터를 저장하는 주된 목적은 다음과 같은 기능을 수행하기 위함.
- 테이블 형태로 조회
- 변경 또는 삭제
SQL(Strctured Query Language)
- SQL은 RDB에서 데이터를 다루기 위해 사용하는 언어.
SELECT 문
SELECT
- 저장되어 있는 데이터를 조회하고자 할 때 사용하는 명령어이다.
- 컬럼 명에 별도의 별칭인 Alias를 붙여줄 수 있음. Alias 설정시 테이블 명 대신 Alias로 써야됨.
- ex) SELECT BAND.BAND_NAME FROM BAND;
- SELECT B.BAND_NAME FROM BAND B;
- ex) SELECT BAND.BAND_NAME FROM BAND;
산술 연산자
- 수학에서 사용하는 사칙연산의 기능을 가진 연산자이다. NUMBER DATE 유형의 데이터와 같이 사용할 수 있다.
- () : 괄호로 우선순위를 조정할 수 있음.
-
- : 곱하기.
- / : 나누기.
-
- : 더하기.
-
- : 빼기.
- 우선순위는[ () ] > [ *, / ] > [ +, - ]이다.
합성 연산자
- 문자와 문자를 연결 할 때 사용하는 연산자이다.
-
ex) SELECT ‘S’ ‘Q’ ‘L’ AS SQLD FROM DUAL;
함수
문자 함수
-
CHR(ASCII 코드)
- 128개의 문자를 숫자로 표현할 수 있도록 정의해 놓은 코드.
- ASCII 코드를 인수로 입력했을 때 매핑되는 문자가 무엇인지 알려줌.
- ex) SELECT CHR(65) FROM DUAL;
-
LOWER(문자열)
- 문자열을 소문자로 변환해주는 함수.
- ex) SELECT LOWER(‘JENNIE’) FROM DUAL; => jennie가 나옴.
-
UPPER(문자열)
- 당연히 LOWER과는 반대로 문자열을 대문자로 변환해주는 함수.
-
LTRIM(문자열, [특정 문자]) => []는 옵션임…
- 특정 문자를 따로 명시해주지 않으면 문자열의 왼쪽 공백을 제거하고, 명시해주었을 경우 문자열을 왼쪽부터 한 글자씩 특정 문자와 비교하여 특정문자에 포함되어 있으면 제거하고 포함되어 있지 않으면 멈춘다.
- ex) SELECT LTRIM(‘ JENNIE’) FROM DUAL; => ‘JENNIE’
- ex) SELECT LTRIM(‘블랙핑크’, ‘블랙’) FROM DUAL; => ‘핑크’
-
RTRIM(문자열, [특정 문자])
- 4번과 반대라고 보면 됨.
- ex) SELECT LTRIM(‘ JENNIE ‘) FROM DUAL; => ‘JENNIE’
- ex) SELECT LTRIM(‘블랙핑크’, ‘핑크’) FROM DUAL; => ‘핑크’
- 4번과 반대라고 보면 됨.
-
TRIM([위치] [특정 문자] [FROM] 문자열) *[]는 옵션
- 옵션이 하나도 없을 경우 문자열의 왼쪽과 오른쪽 공백을 제거하고, 그렇지 않을 경우 문자열을 위치(LEADING or TRAILING or BOTH)로 지정된 곳부터 한 글자씩 특정 문자와 비교하여 같으면 제거하고 같지 않으면 멈춘다.
- LTRIM, RTRIM과는 달리 특정 문자는 한 글자만 지정할 수 있다.
- ex) SELECT TRIM(‘ JENNIE ‘) FROM DUAL; => JENNIE
- ex) SELECT TRIM(LEADING ‘블’ FROM ‘블랙핑크’) FROM DUAL ; => 랙핑크
- ex) SELECT TRIM(TRAILING ‘크’ FROM ‘블랙핑크’) FROM DUAL; => 블랙핑
-
SUBSTR(문자열, 시작점 [,길이]) *[]는 옵션
- 문자열의 원하는 부분만 잘라서 반환해주는 함수이다.
- ex) SELECT SUBSTR(‘블랙핑크제니’, 3, 2) FROM DUAL; => 핑크
- ex) SELECT SUBSTR(‘블랙핑크제니’, 3, 4) FROM DUAL; => 핑크제니
-
LENGTH(문자열)
- 문자열의 길이를 반환해주는 함수이다.
- ex) SELECT LENGTH(‘JENNIE’) FROM DUAL; => 6
- ex) SELECT LENGTH(‘블랙핑크’) FROM DUAL; => 4
-
REPLACE(문자열, 변경 전 문자열 [, 변경 후 문자열]) => []는 옵션.
- 문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 바꿔주는 함수이다. 변경 후 문자열을 명시해주지 않으면 문자열에서 변경 전 문자열을 제거한다.
- ex) SELECT REPLACE(‘블랙핑크제니’, ‘제니’, ‘지수) FROM DUAL; => 블랙핑크 지수
- ex) SELECT REPLACE(‘블랙핑크제니’, ‘블랙’) FROM DUAL; => 핑크제니
숫자 함수
-
ABS(수)
- 수의 절대 값을 반환.
-
SIGN(수)
- 수의 부호를 반환. 양수면 1, 음수면 -1, 0이면 0을 반환.
-
ROUND(수, [,자릿수])
- 수를 지정된 소수점 자릿수까지 반올림하여 반환해주는 함수.
-
TRUNC(수, [,자릿수])
- 수를 지정된 소수점 자릿수까지 버림하여 반환해주는 함수.
-
CEIL(수)
- 소수점 이하의 수를 올림한 정수를 반환해주는 함수이다.
-
FLOOR(수)
- 소수점 이하의 수를 버림한 정수를 반환해주는 함수이다.
-
MOD(수1, 수2)
- 수1을 수2로 나눈 나머지를 반환해주는 함수이다.
- 수1, 수2 모두 다 음수이면 나머지도 그대로 음수값으로 도출된다.
날짜 함수
-
SYSDATE
- 현재의 연, 월, 일, 시, 분, 초를 반환해주는 함수.
- ex) SELECT SYSDATE FROM DUAL; => 2021-09-21 22:08:08
-
EXTRACT(특정단위 FROM 날짜 데이터)
- 날짜 데이터에서 특정 단위(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)만을 출력해서 반환해주는 함수이다.
- ex) SELECT EXTRACT(YEAR FROM SYSDATE) AS YEAR FROM DUAL;
-
ADD_MONTHS(날짜 데이터, 특정 개월 수)
- 날짜 데이터에서 특정 개월 수를 더한 날짜를 반환해주는 함수이다.
- 이전 달이나 다음 달에 기준 날짜의 일자가 존재하지 않으면 해당 월의 마지막 일자가 반환된다.
- ex) SELECT ADD_MONTHS(TO_DATE(‘2021-12-31’, ‘YYYY-MM-DD’),-1) AS PREV_MONTH FROM DUAL; => 2021-11-30;
변환 함수
-
명시적 형변환과 암시적 형변환
- 명시적 형변환 : 변환 함수를 사용하여 데이터 유형을 명시적으로 나타냄.
- 암시적 형변환 : 데이터베이스가 내부적으로 알아서 데이터 유형을 변환함.
-
명시적 형변환에 쓰이는 함수
-
TO_NUMBER(문자열)
- 문자열을 숫자형으로 형변환
-
TO_CHAR(수 or 날짜 [,포멧])
- 수나 날짜형의 데이터를 포멧 형식의 문자형으로 변환.
-
TO_DATE(문자열, 포멧)
- 포멧 형식의 문자형 데이터를 날짜형으로 변환해주는 함수.
-
NULL 관련 함수
-
NVL(인수1, 인수2)
- 인수1의 값이 NULL일 경우 인수2를 반환하고 NULL이 아닐 경우 인수1을 반환해주는 함수이다.
-
NULLF(인수1, 인수2)
- 인수1과 인수2가 같으면 NULL을 반환하고 같지 않으면 인수1을 반환해주는 함수이다.
-
COALESCE(인수1, 인수2, 인수3…)
- NULL이 아닌 최초의 인수를 반환해주는 함수이다.
CASE
- CASE는 함수보다 구문에 가깝긴 함.
- 같은 기능을 하는 함수로는 Oracle의 DECODE가 있음.
ex) CASE WHEN SUBWAY_LINE = ‘1’ THEN ‘BLUE’ ㅤㅤㅤWHEN SUBWAY_LINE = ‘2’ THEN ‘GREEN’ ㅤㅤㅤWHEN SUBWAY_LINE = ‘3’ THEN ‘ORANGE’ ㅤㅤㅤ[ELSE ‘GRAY’] END
ex) SELECT SUBWAY_LINE, DECODE(SUBWAY_LINE, ‘1’, ‘BLUE’, ‘2’, ‘GREEN’, ‘3’, ‘ORANGE’, ‘GRAY’) AS LINE_COLOR FROM SUBWAY_INFO;