1. 파일시스템 포맷 방식
2. 연산자 종류와 활용
3. 오라클 함수 - 문자함수
4. 오라클 함수 - 숫자함수
5. 오라클 함수 - 날짜함수
✔️ 파일시스템
- 응용 프로그램이 개별 데이터를 직접 관리함
- 데이터가 중복 될 수 있음
- 응용 프로그램이 데이터를 쓰는 방식이 각각 다름
- 데이터가 응용 프로그램에 종속되어 있으므로 응용 프로그램을 변경하면 기존 데이터를 사용할 수 없음
✔️ 데이터베이스
- 하나의 소프트웨어가 데이터를 관리하므로 중복을 피할 수 있음
- 여러 응용프로그램이 DBMS를 통해 사용하므로 데이터를 공유할 수 있음
- 하나의 DBMS에서 데이터를 관리하기 때문에 각 응용 프로그램이 데이터를 관리하는 방식이 통합됨
- 응용 프로그램과 별도로 데이터가 DBMS에 의해 관리, 보관되기 때문에 업데이트 또는 변경과 관계없이 데이터를 사용할 수 있음
파일 시스템 또는 fs 라고도 하는 파일 시스템은 운영 체제가 데이터 저장 및 검색 방법을 제어하는 데 사용하는 방법 및 데이터 구조이다. 데이터를 조각으로 분리하고 각각에 이름을 지정하면 데이터를 쉽게 분리하고 식별할 수 있다. 종이 기반 데이터 관리 시스템의 이름을 따서 각 데이터 그룹을 '파일'이라고하며 데이터 그룹과 그 이름을 명명하는 데 사용되는 구조 및 논리 규칙을 '파일 시스템'이라고 합니다.
구분 | FAT | NTFS | exFAT |
---|---|---|---|
볼륨 최대 크기 | 32GB | 2TB | 512TB |
최대 파일 크기 | 4GB | 볼륨 크기 | 볼륨 크기 |
호환성 | 상 | 하 | 상 |
보안 | 하 | 상 | 하 |
안정성 | 상 | 중 | 하 |
속도 | 상 | 하 | 중 |
[참고]https://www.easeus.co.kr/diskmanager/file-system.html
https://iboxcomein.com/file-system-ntfs-fat32-exfat/#ftoc-heading-4
WindowsNT : ms에서 만든 서버임 (안정성을 강조 / 운영체제임)
IIS : ms에서 만든 웹서버
MS-SQL : ms에서 만든 DBMS
IBM : 메인프레임 (역사상 가장 뛰어남 / 비쌈)
"="
A = 1
1을 A에 할당한다. ( 같다는 의미X )A <- 1
언어에 따라서 화살표로 표현하는 경우도 있음산술연산자 : +, -, *, /...
비교연산자 : >, <, <=, >=, !=, <>, ^=
논리부정연산자 : NOT
1. 🔍 연봉이 10,000이상이고, 직업이 ANALYST인 사원이름, 월급, 직업, 연봉 출력하기
SELECT ENAME, SAL, JOB, SAL*12 AS YEAR_SAL
FROM EMP
WHERE SAL*12 >= 10000 AND JOB='ANALYST';
2. 🔍 사원 이름이 "F"이후로 시작되거나, 월급이 3000이 아닌 사원 출력하기
SELECT ENAME, SAL
FROM EMP
WHERE ENAME >= 'F' OR SAL <> 3000;
❔ WHERE ENAME >= 'F' OR SAL <> 3000;
사원 이름이 "F"이상 이거나("F"포함하여 이후 알파벳으로 시작함을 뜻함) 월급이 3000이 아닌 사원 이름, 월급 데이터 출력
3. 🔍 문자열 여러개 비교하기
SELECT ENAME
FROM EMP
WHERE ENAME <= 'FORZ'
ORDER BY ENAME DESC;
❔ WHERE ENAME <= 'FORZ'
사원이름이 "FORZ"이하인 사원(시작 A,B,C,D,E, "F"일경우 2,3,4번째 O,R,Z까지 비교)
☑️ 알파벳도 비교연산자 사용이 가능하며, 비교문자열이 여러개일 때도 사용할 수 있음.
☑️ 등가비교 연산자 DB에서는 "<>"를 자주 사용함
WHERE COLUMN_NAME IN ( A, B, C )
WHERE COLUMN_NAME IN ( A, B, C )
WHERE COLUMN_NAME = A OR COLUMN_NAME = B, COLUMN_NAME = C
1. 🔍 부서번호가 10이거나 30인 데이터 출력하기
SELECT DEPTNO, ENAME
FROM EMP
WHERE DEPTNO IN (10, 30);
❔ WHERE DEPTNO IN (10, 30)
부서번호가 10이거나 30인 데이터 출력
WHERE COLUMN_NAME BETWEEN 최솟값 AND 최댓값
1. 🔍 월급이 1000초과거나 2000미만 사원정보 출력하기
SELECT ENAME, SAL
FROM EMP
WHERE SAL NOT BETWEEN 1000 AND 2000;
❔ WHERE SAL NOT BETWEEN 1000 AND 2000
BETWEEN A AND B의 차집합을 NOT을 이용하여 출력함
WHERE COLUMN_NAME LIKE 'S%'
WHERE COLUMN_NAME LIKE 'S%'
S로 시작하는 데이터 출력종류 | 의미 |
---|---|
_ | 어떤 값이든 상관없이 한 개의 문자 데이터를 의미 |
% | 길이와 상관없이(문자 없는 경우도 포함) 모든 문자 데이터를의미 |
1. 🔍 이름에 "AM"이 포함된 사원 출력하기
SELECT ENAME
FROM EMP
WHERE ENAME LIKE '%AM%';
❔ WHERE
ENAME LIKE
'%AM%' 이름에 "AM"이 포함된 사원
2. 🔍 뒤에서 두번째 글자가 "T"인 사원 데이터 출력하기
SELECT ENAME
FROM EMP
WHERE ENAME LIKE '%T_';
❔ WHERE ENAME LIKE '%T_'
"T" 앞쪽은 자리 상관 없는 모든 데이터, "_" 는 뒷자리 고정데이터
WHERE COLUMN_NAME IS NULL;
COLUMN_NAME의 값이 NULL인 데이터 출력
🚫 WHERE COLUMN_NAME = NULL (X)
잘못된 표현! 🚫
1. 🔍 COMM이 NULL값 이거나 직속상관이 있는 사원 출력하기
SELECT ENAME, COMM, MGR
FROM EMP
WHERE COMM IS NULL
OR MGR IS NOT NULL;
SELECT COLUMN_NAME1, COLUMN_NAME2, COLUMN_NAME3 FROM TABLE_NAME1 WHERE 조건1
UNION, UNION ALL, MINUS, INTERSECT
SELECT COLUMN_NAME1, COLUMN_NAME2, COLUMN_NAME3 FROM TABLE_NAME2 WHERE 조건2
종류 | 설명 |
---|---|
UNION | 연결된 SELECT문의 결과 값을 합집합으로 묶어주며, 중복값은 제외된다. |
UNION ALL | 연결된 SELECT문의 결과 값을 합집합으로 묶어주며, 중복값은 포함된다. |
MINUS | 먼저 작성한 SELECT문의 결과 값에서 다음 작성한 SELECT문의 결과 값을 차집합처리 한다. |
INTERSECT | 연결된 SELECT문의 결과 값의 교집합을 출력한다. |
1. 🔍 부서번호가 10번, 20번인 결과값을 합집합 하기.
SELECT EMPNO, ENAME, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION
SELECT EMPNO, ENAME, DEPTNO
FROM EMP
WHERE DEPTNO = 20;
2. 🔍 연결된 SELECT문의 COLUMN의 갯수가 맞지 않을 경우
SELECT EMPNO, ENAME, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION
SELECT EMPNO, ENAME
FROM EMP
WHERE DEPTNO = 20;
ORA-01789: 질의 블록은 부정확한 수의 결과 열을 가지고 있습니다.
01789. 00000 - "query block has incorrect number of result columns"
*Cause:
*Action:
☑️ 연결된 SELECT문의 COLUMN갯수가 같아야 함!
3. 🔍 연결된 SELECT문의 COLUMN의 순서가 맞지 않을 경우(데이터타입이 같은 경우)
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION
SELECT EMPNO, ENAME, DEPTNO, SAL
FROM EMP
WHERE DEPTNO = 20;
❔ SELECT EMPNO, ENAME, SAL, DEPTNO
❔ SELECT EMPNO, ENAME, DEPTNO, SAL
❔ 연결된 SELECT문의 COLUMN 순서가 바뀜( 데이터 형태는 같음 : NUMBER(7, 2) )
☑️ 순서는 바뀌었지만, 데이터 타입이 같은 경우 뒤죽박죽 되어 출력 됨
4. 🔍 연결된 SELECT문의 COLUMN의 순서가 맞지 않을 경우(데이터타입이 다른 경우)
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION
SELECT ENAME, EMPNO, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 20;
❔ SELECT EMPNO, ENAME
, SAL, DEPTNO (데이터 타입: VARCHAR2)
❔ SELECT ENAME, EMPNO
, SAL, DEPTNO (데이터 타입: NUMBER)
ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다
01790. 00000 - "expression must have same datatype as corresponding expression"
*Cause:
*Action:
28행, 8열에서 오류 발생
☑️ 데이터 타입이 다른 경우 출력되지 않음!
5. 🔍 부서번호 20번인 사원 제외하고 출력하기(차집합)
SELECT EMPNO, DEPTNO
FROM EMP
MINUS
SELECT EMPNO, DEPTNO
FROM EMP
WHERE DEPTNO = 20;
6. 🔍 부서번호 20번인 사원 출력하기(교집합)
SELECT EMPNO, DEPTNO
FROM EMP
INTERSECT
SELECT EMPNO, DEPTNO
FROM EMP
WHERE DEPTNO = 20;
7. 🔍 급여가 2500을 초과하고 부서번호가 10번이거나 20번인 사원정보 출력하기
SELECT ENAME, DEPTNO, SAL
FROM EMP
WHERE SAL > 2500 AND DEPTNO IN (10, 20);
문자 데이터를 가공해주는 문자함수
SELECT UPPER(COLUMN_NAME), LOWER(COLUMN_NAME), INITCAP
FROM TABLE_NAME;
UPPER()
: 소문자를 대문자로 변환LOWER()
: 대문자를 소문자로 변환INITCAP()
: 첫글자는 대문자로 나머지는 소문자로 변환1. 🔍 UPPER, LOWER, INITCAP 함수 사용해보기
SELECT ENAME, LOWER(ENAME) AS LOWER, UPPER(ENAME) AS UPPER, INITCAP(ENAME) AS INITCAP
FROM EMP;
SELECT LENGTH(), LENGTHB()
FROM TABLE_NAME;
LENGTH()
: 문자열의 길이를 반환LENGTHB()
: 문자열의 바이트 수를 반환1. 🔍 LENGTH, LENGTHB 함수 사용해보기
SELECT ENAME, LENGTH(ENAME) AS LENGTH, LENGTHB(ENAME) AS LENGTHB
FROM EMP;
2. 🔍 LENGTH, LENGTHB 함수 사용해보기(한글)
SELECT LENGTH('한글'), LENGTHB('한글')
FROM DUAL;
☑️ 영어는 1글자에 1바이트 / 한글은 1글자에 2바이트!
DUAL 테이블은 오라클의 최고 권한 관리자 계정인 SYS 소유의 테이블로 SCOTT계정도 사용할 수 있는(dummy)테이블이다. 데이터 저장공간이 아닌 임시 연산이나 함수의 결과 값 확인 용도로 종종 사용한다.
SUBSTR(문자열 데이터, 시작위치, 추출 길이(생략가능))
문자열 중 일부를 추출할 때 사용
1. 🔍 SUBSTR 함수 사용해보기
SELECT JOB, SUBSTR(JOB, 3, 2), SUBSTR(JOB, 5)
FROM EMP;
2. 🔍 SUBSTR 함수 사용해보기(LENGTH함수 이용)
SELECT ENAME, SUBSTR(ENAME, LENGTH(ENAME)-3), SUBSTR(ENAME, -LENGTH(ENAME)+3)
FROM EMP;
☑️ 오라클은 인덱스가 0부터 시작하지 않고 1부터 시작함!⭐️⭐️⭐️
INSTR([대상 문자열 데이터(필수)], [위치를 찾으려는 부분 문자(필수)], [위치 찾기를 시작할 대상 문자열 데이터 위치(선택, 기본값은 1)], [시작 위치에서 찾으려는 문자가 몇 번째인지 지정(선택, 기본값은 1)])
문자열에서 특정문자의 위치를 찾는 함수
1. 🔍 INSTR 함수 사용해보기
SELECT INSTR('HELLO, ORACLE!', 'L'), INSTR('HELLO, ORACLE!', 'L', 5),
INSTR('HELLO, ORACLE!', 'L', 2, 2)
FROM DUAL;
2. 🔍 사원이름에 S가 포함된 사원정보 출력하기
SELECT ENAME
FROM EMP
WHERE INSTR(ENAME, 'S') > 0;
REPLACE([문자열 데이터 또는 열이름(필수)], [찾는문자(필수)], [대체할 문자(선택)])
특정 문자를 다른 문자로 대체하는 함수
1. 🔍 REPLACE 함수 사용해보기
SELECT '0-2-3-4' AS INF, REPLACE('0-2-3-4', '-', '%'), REPLACE('0-2-3-4', '-')
FROM DUAL;
☑️ 대체 문자를 생략할 경우 찾는 문자가 삭제되어 출력됨!
LPAD([문자열 데이터 또는 열이름(필수)], [채울자리수(필수)], [채울문자(선택)])
RPAD([문자열 데이터 또는 열이름(필수)], [채울자리수(필수)], [채울문자(선택)])
빈 공간을 특정 문자로 채우는 함수(왼쪽부터 OR 오른쪽부터)
1. 🔍 LPAD, RPAD 함수 사용해보기
SELECT 'ORACLE', LPAD('ORACLE', 10, '%'), RPAD('ORACLE', 10, '%'),LPAD('ORACLE', 10), RPAD('ORACLE', 10)
FROM DUAL;
☑️ 채울 문자를 입력하지 않을 경우 공백으로 채워진다!
CONCAT([문자열 데이터 또는 열이름(필수)], [문자열 데이터 또는 열이름(필수)])
[문자열 데이터 또는 열이름(필수)]||[문자열 데이터 또는 열이름(필수)]
두 문자열을 연결해주는 함수
1. 🔍 CONCAT 함수 사용해보기
SELECT CONCAT(EMPNO, ENAME), CONCAT(EMPNO, CONCAT(' : ', ENAME))
FROM EMP
WHERE ENAME = 'SCOTT';
2. 🔍 CONCAT 함수 사용해보기(세개의 열 합치기)
SELECT CONCAT(EMPNO, ENAME, DEPTNO)
FROM EMP
WHERE ENAME = 'SCOTT';
ORA-00909: 인수의 개수가 부적합합니다
00909. 00000 - "invalid number of arguments"
*Cause:
*Action:
51행, 8열에서 오류 발생
☑️ 세개의 인자는 사용할 수 없음
3. 🔍 CONCAT 함수 사용해보기(세개의 열 합치기)
SELECT CONCAT(CONCAT(EMPNO, ENAME), DEPTNO)
FROM EMP
WHERE ENAME = 'SCOTT';
4. 🔍 CONCAT 함수 사용해보기(세개의 열 합치기)
SELECT EMPNO||ENAME||DEPTNO
FROM EMP
WHERE ENAME = 'SCOTT';
☑️ 세개의 열을 합치고 싶을 땐 이중 CONCAT을 이용하거나 "||"를 사용함!
함수 | 설명 |
---|---|
ROUND | 지정된 숫자의 특정 위치에서 반올림한 값을 반환 |
TRUNC | 지정된 숫자의 특정 위치에서 버림한 값을 반환 |
CEIL | 지정된 숫자보다 같거나 큰 정수 중 가장 작은 정수를 반환 |
FLOOR | 지정된 숫자보다 같거나 작은 정수 중 가장 큰 정수를 반환 |
MOD | 지정된숫자를 나눈 나머지 값을 반환 |
ROUND([숫자(필수)], [반올림위치(선택)])
TRUNC([숫자(필수)], [버림위치(선택)])
1. 🔍 ROUND, TRUNC 함수 사용해보기
SELECT TRUNC(12.234, -1), ROUND(12.234, 1), TRUNC(12.234, 0)
FROM DUAL;
☑️ 위치 0은 소수점이고 0을 기준으로 1,2...은 소수점 아래 첫째자리, 둘째자리이고 -1, -2는 일의 자리, 십의자리... 이다!
CEIL(), FLOOR()
1. 🔍 CEIL, FLOOR 함수 사용해보기
SELECT CEIL(12.234), FLOOR(12.234), FLOOR(-12.234)
FROM DUAL;
MOD(A,B)
"A"를 "B"로 나눈 나머지의 값을 출력
1. 🔍 MOD 함수 사용해보기
SELECT MOD(15,6)
FROM DUAL
SYSDATE함수는 별다른 입력 데이터 없이, 오라클 데이터베이스 서버가 놓인 OS의 현재 날짜와 시간을 보여준다.
1. 🔍 SYSDATE 함수 사용해보기
SELECT SYSDATE AS TODAY, SYSDATE-1 AS YESTERDAY, SYSDATE+1 AS TOMORROW
FROM DUAL;
ADD_MONTHS(날짜데이터, N)
N개월이후 날짜를 구하는 함수
1. 🔍 입사일자로부터 100일 뒤, 100개월 뒤 날짜 출력하기
SELECT ENAME, HIREDATE, HIREDATE+100, ADD_MONTHS(HIREDATE,100)
FROM EMP;
MONTHS_BETWEEN(날짜데이터, 날짜데이터)
두 날짜데이터 사이의 개월 수 차이를 구하는 함수
1. 🔍 MONTHS_BETWEEN 함수 사용하기
SELECT EMPNO, ENAME, HIREDATE, SYSDATE,
TRUNC(MONTHS_BETWEEN(HIREDATE, SYSDATE), 2),
ROUND(MONTHS_BETWEEN(SYSDATE, HIREDATE), 2)
FROM EMP;
포맷 모델 | 기준 단위 |
---|---|
CC, SCC | 네 자리 연도의 끝 두자리를 기준으로 사용(2016년 이면 2050이하이므로, 반올림할 경우 2001년으로 처리) |
SYYYY, YYYY, YEAR, SYEAR, YYY, YY,Y | 날짜 데이터의 해당 연, 월, 일의 7월 1일을 기준 (2016년 7월 1일 일 경우, 2017년으로 처리) |
IYYY, IYY, IY, I | ISO 9601에서 제정한 날짜 기준년도 포맷을 기준 |
Q | 각 분기의 두번째 달의 16일 기준 |
MONTH, MON, MM, RM | 각 달의 16일 기준 |
WW | 해당 연도의 몇 주 (1~53번째 주)를 기준 |
IW | ISO 8601에서 제정한 날짜 기준 해당 연도의 주(WEEEK)를 기준 |
W | 해당 월의 주(1~5번째 주)를 기준 |
DDD, DD, J | 해당 일의 정오(12:00:00)을 기준 |
DAY, DY, D | 한 주가 시작되는 날짜를 기준 |
HH, HH12, HH24 | 해당일의 시간을 기준 |
MI | 해ㅐ당ㅇㄹ 시간의 분을 기준 |
SELECT ROUND(SYSDATE, 'CC'), ROUND(SYSDATE, 'YYY'), ROUND(SYSDATE, 'DD'), ROUND(SYSDATE, 'HH')
FROM DUAL;