날짜자료형
- 년, 월, 일, 시, 분, 초의 값을 보관 (년 월 일 / 시 분 초, 따로 저장)
- 덧셈과 뺄셈의 대상이 될 수 있음
- 기본제공 함수로 SYSDATE, SYSTIMESTAMP 가 제공됨
- DATE, TIMESTAMP(더 정교한 시간)
DATE
기본 날짜형
컬럼명 DATE
사용 예시
CREATE TABLE TEMP06 (
COL1 DATE,
COL2 DATE );
INSERT INTO TEMP06 VALUES(SYSDATE, SYSDATE-10);
SELECT * FROM TEMP06;
시 분 초는 출력은 안되지만 저장은 되어있음
형변환 함수(TO_CHAR)를 통해 출력
SELECT TO_CHAR(COL1,'YYYY-MM-DD HH24:MI:SS')
FROM TEMP06;
* 지정된 날짜 저장하는 법 - ' YYYYMMDD '
형식 지정 문자열
INSERT INTO TEMP06 VALUES('20240308',20240308);
오류 보고 -
SQL 오류: ORA-00932: inconsistent datatypes: expected DATE got NUMBER 00932. 00000 - "inconsistent datatypes: expected %s got %s" 숫자→날짜 저장x
*Cause:
*Action:
INSERT INTO TEMP06 VALUES('20240308',SYSDATE+10);
우선 순위 : 숫자 → 날짜 → 문자열
* 지정된 날짜 저장하는 법 - TO_DATE ('날짜시간', 'YYYYMMDDHH24MISS')
INSERT INTO TEMP06 VALUES('20240308',TO_DATE('20200308151650','YYYYMMDDHH24MISS'));
TIMESTAMP
컬럼명 TIMESTAMP 시간대 정보 저장하지 않음
컬럼명 TIMESTAMP WITH LOCAL TIME ZONE 클라이언트가 위치한 시간대정보(TIMEZONE 타입과 동일)
컬럼명 TIMESTAMP WITH TIME ZONE 서버가 위치한 지역의 시간대 정보
- 10억분의 1초 단위의 정교한 시각 정보를 년월일 정보와 함께 저장
- 시간대(TIMEZONE)정보 저장
- TIMESTAMP 타입에 저장하는 날짜함수는 SYSTIMESTAMP임
사용 예시
CREATE TABLE TEMP07 (
COL1 TIMESTAMP,
COL2 TIMESTAMP WITH LOCAL TIME ZONE,
COL3 TIMESTAMP WITH TIME ZONE );
INSERT INTO TEMP07 VALUES (SYSDATE,SYSDATE,SYSDATE);
INSERT INTO TEMP07 VALUES (SYSTIMESTAMP,SYSTIMESTAMP,SYSTIMESTAMP);
SELECT * FROM TEMP07;
기타 자료형
- 2진 데이터를 저장하기 위한 자료형
- BLOB, BFILE, RAW, LONG RAW가 지원
- 2진자료를 저장하면 DBMS는 해당 2진 자료를 변환하거나 해석하지 않음
RAW
컬럼명 RAW (크기)
- 상대적으로 작은 양의 이진자료 저장
- 인덱스 처리 가능
- 최대 2000 byte 저장 가능
- 16진수(4bit)와 2진수 형태로 저장
사용예시
CREATE TABLE TEMP08 (
COL1 RAW(1000),
COL2 RAW(50) );
INSERT INTO TEMP08 VALUES (HEXTORAW('7DA5'),'0111110110100101');
SELECT * FROM TEMP08;
해석되거나 변환되어 저장되어지지 않음
BFILE
컬럼명 BFILE
- 이진자료 저장
- 최대 4GB까지 저장
- 원본자료를 데이터베이스 밖에 저장하고 데이터베이스에는 파일명과 경로명만 저장
- 자주 업데이트(변경)되는 이진자료 저장에 유리함
사용 예시
CREATE TABLE TEMP09 (
COL1 BFILE) ;
** BFILE 형태로 그림을 저장하는 절차
1. 원본파일 (그림파일) 저장
simple.jpg
2.디렉토리객체생성
CREATE DIRECTORY 절대경로 AS 별칭
CREATE DIRECTORY TEST_DIR AS 'D:\A_TeachingMaterial\02_Oracle\work';
3. 자료 삽입
INSERT INTO TEMP09 VALUES(BFILENAME('TEST_DIR','sample.jpg'));
SELECT * FROM TEMP09;
BLOB
컬럼명 BLOB
- 이진자료 저장
- 최대 4GB까지 저장
- 원본자료를 데이터베이스 내부에 저장
- 변경이 일어나지 않은 이진자료 저장에 유리함
- 데이터의 저장과 변환은 PL/SQL의 문법을 사용해야함
사용 예시
CREATE TABLE TEMP10 (
COL1 BLOB);
** 자료 삽입 - 익명 BLOCK 사용
DECLARE
L_DIR VARCHAR2(20):='TEST_DIR'; -- 초기값
L_FILE VARCHAR2(30):='sample.jpg'; -- 초기값
L_BFILE BFILE;
L_BLOB BLOB;
BEGIN
INSERT INTO TEMP10 (COL1) VALUES(EMPTY_BLOB()) RETURN COL1 INTO L_BLOB;
L_BFILE := BFILENAME(L_DIR, L_FILE);
DBMS_LOB.FILEOPEN(L_BFILE, DBMS_LOB.FILE_READONLY);
DBMS_LOB.LOADFROMFILE(L_BLOB,L_BFILE,DBMS_LOB.GETLENGTH(L_BFILE));
DBMS_LOB.FILECLOSE(L_BFILE);
COMMIT;
END;
:= : (연산자) 오른쪽에있는 변수를 왼쪽 변수에 저장
SELECT
SELECT문으로 검색 기능 수행
SELECT *|[DISTINCT][컬럼명 [AS 별칭],
컬럼명 [AS 별칭],
:
컬럼명 [AS 별칭]
FROM 테이블명
[WHERE 조건]
[GROUP BY 컬럼명[,컬럼명,...]]
[HAVING 조건]
[ORDER BY 컬럼명|컬럼인덱스 [ASC|DESC][,컬럼명|컬럼인덱스 [ASC|DESC],...]]
- SELECT문은 SELECT절, FROM절, WHERE절,GROUP BY절, HAVING절, ORDER BY절로 구성
- 필수 절은 SELECT, FROM 절
- 수행순서 : FROM -> WHERE -> SELECT
SELECT 절
추출한 컬럼 정의 담당
- ' * ' :모든 컬럼 조회
- DISTINCT : 중복행 제거 (대표로 1개)
- 컬럼명 [AS 별칭] : 해당 컬럼에 별칭을 부여 (컬럼의 이름_참조하기 위해 사용)
- 별칭에 특수문자(공백 등)나 예약어(명령어 등)를 사용할 때는 반드시 " "로 묶어야함
- AS는 생략 가능
- 한 컬럼의 끝은 반드시 ' , '를 사용해야하며 마지막 컬럼 정의에는 ' , ' 생략
FROM 절
사용할 테이블(또는 뷰) 기술
- QUERY 실행에 테이블이 불필요한 경우 'DUAL' (가상 테이블명)을 사용 (ex. 날짜 SYSDATE를 불러올때)
ORDER BY 절
출력 데이터의 정렬 지정
- 기술된 '컬럼명'이나 '컬럼의 인덱스(SELECT 절에 기술된 컬럼의 순번)'를 기준으로 오름차순(ASC)이나 내림차순(DESC)으로 정렬 (기본값 : 오름차순)
- 두 번째 기술되는 컬럼명은 첫 번째 컬럼명으로 정렬을 할 수 없을 때(같은 값) 적용된다.
사용 예시
1) 회원테이블 (MEMBER)에서 회원번호 (MEM_ID), 회원명(MEM_NAME), 직업(MEM_JOB),
보유 마일리지(MEM_MILEAGE)를 조회하시오.
조건이 없으므로 WHERE절 x
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_JOB AS 직업,
MEM_MILEAGE AS "보유 마일리지"
FROM MEMBER;
공백은 " "
2) 상품 분류 테이블(LPROD)의 모든 자료를 조회하시오.
SELECT *
FROM LPROD;
3) 상품테이블(PROD)에서 상품번호(PROD_ID), 상품명(PROD_NAME),
매입단가(PROD_COST), 매출단가(PROD_PRICE), 할인판매단가(PROD_SALE)를 조회하시오.
SELECT PROD_ID AS 상품번호,
PROD_NAME AS 상품명,
PROD_COST AS 매입단가,
PROD_PRICE AS 매출단가,
PROD_SALE AS 할인판매단가
FROM PROD;
4) 사원테이블(HR.EMPLOYEES)에서 사용하고 있는 부서번호(DEPARTMENT_ID)를 모두 조회하되
중복하지 않게 조회하며 순서대로 출력하시오 (작은값 -> 큰값)
SELECT DISTINCT DEPARTMENT_ID AS 부서번호
FROM HR.EMPLOYEES
ORDER BY DEPARTMENT_ID DESC;
5) HR계정의 부서테이블(HR.DEPARTMENTS)의 모든 자료를 조회하시오.
SELECT *
FROM HR.DEPARTMENTS;
'DB Oracle' 카테고리의 다른 글
[Oracle] 연산자 - 기타연산자 (0) | 2024.03.12 |
---|---|
[Oracle] 연산자 - 산술/비교(관계)/논리연산자 (0) | 2024.03.11 |
[Oracle] 데이터 타입 (1) | 2024.03.07 |
[Oracle] DDL - CREATE, ALTER (1) | 2024.03.06 |
[Oracle] 데이터 베이스 & SQL정의 (0) | 2024.03.05 |