본문 바로가기
IT/SQL

SQL 정리4

by 김보리 2021. 11. 30.
728x90
반응형
2021-0611-01)
INSERT INTO TEMP01 VALUES('IL POST', 'ILPOSTINO', '무궁화 꽃이 피었습니다');

INSERT INTO TEMP01 VALUES('A', 'SESORISAMAK', 'FUSE');

SELECT * FROM TEMP01;

-- 글자 수(BYTE 수) 알아보기
SELECT LENGTHB(COL1),
       LENGTHB(COL2), -- 
       LENGTHB(COL3) -- 40BYTE 중 32BYTE 사용, 8BYTE 남음
  FROM TEMP01;
  
1. 문자열 자료형
  가. ' '로 묶인 자료
  나. CHAR, VARCHAR, VARCHAR2, NVARCHAR2, NCHAR, LONG, RAW, CLOB
    1) CHAR : 고정길이 문자열을 저장  -- 고정적인 문자에 사용, 자주 사용
      가) : 2000BYTE 까지 저장가능(한글 한 글자는 3BYTE)
      나) 기억공간이 남으면 왼쪽에 공백이 삽입
      다) 주로 기본키 정의에 사용
      
      사용형식)
       컬럼명 CHAR(n [BYTE|CHAR])
         - n : 기억공간의 크기
         - BYTE|CHAR : n이 BYTE인지 문자의 갯수를 나타내는지 설정. 기본값은 BYTE
            ex) ABC CHAR(2000 CHAR) -- 영어 기준 2000byte 들어가며, 
																		-- 한글로 입력 시 666글자까지 가능 초과 시 오류
            
        사용예)
            CREATE TABLE TEMP01(
            COL1 CHAR(20), -- 20글자 중 12칸 남음
            COL2 CHAR(20 BYTE), -- 20BYTE 중 10칸 남음
            COL3 CHAR(20 CHAR) -- 20CHAR 중 33BYTE 사용 7BYTE 남음 CHAR : 2BYTE
            );
            
            INSERT INTO TEMP01
                VALUES('IL POSTI', 'IL POSTINO', '무궁화 꽃이 피었습니다.');
            
            SELECT * FROM TEMP01;
            
    2) VARCHAR2 : 가변길이 문자열 저장(=VARCHAR) -- 데이터가 기억장소보다 초과할 경우 
	                                              -- 오류 발생 및 필수로 알아야함~!!!!
      가) 최대 4000BYTE까지 저장 가능
      나) 정의된 데이터가 확보된 기억공간보다 적으면 남는 공간은 시스템에 반납
      다) VARCHAR도 VARCHAR2와 동일
      라) NVARCHAR2, NCHAR은 다국어 지원 코드(유니코드)로 변환 ex) UTF-8
      
      사용형식)
        컬럼명 VARCHAR2 (n [BYTE | CHAR ]);
          - n : 기억공간의 크기
          - BYTE|CHAR : n이 BYTE인지 문자의 갯수를 나타내는지 설정. 기본값은 BYTE
            ex) ABC CHAR(4000 CHAR) -- 영어 기준 4000byte 들어가며, 
                                    -- 한글로 입력 시 1333글자까지 가능 초과 시 오류
            
      사용예)
        CREATE TABLE TEMP02(
          COL1 CHAR(20),
          COL2 VARCHAR2(20), -- 실제 사용한 만큼만 저장
          COL3 VARCHAR2(20 BYTE),
          COL4 VARCHAR2(20 CHAR)
        );
        
        INSERT INTO TEMP02
          VALUES('대전시 중구', '대전시 중구', '대전시 중구', '대전시 중구');
          
        SELECT * -- 컬럼(열)을 보여줌, WHERE : 행을 보여줌
        FROM TEMP02;
        
        SELECT LENGTHB(COL1),
               LENGTHB(COL2),
               LENGTHB(COL3),
               LENGTHB(COL4)
        FROM TEMP02;
        
    3) LONG : 2GB 자료를 저장할 수 있는 데이터 자료형
      가) 가변길이 문자열 저장
      나) 최대 2GB까지 저장
      다) LONG타입은 한 테이블에 하나만 사용 가능
      라) CLOB로 대체 -- LONG 자료형의 기능 개선 종료, CLOB로 대체
      마) SELECT문의 SELECT 절, UPDATE문의 SET 절, INSERT문의 VALUES 절에 사용 가능 
      
      사용형식)
        컬럼명 LONG;
      
      사용예) -- LONG 2개 이상 사용 할 경우 오류 발생
      -- 오류 : a table may contain only one column of type LONG (LONG은 1개만 사용 가능)
        CREATE TABLE TEMP03(
            COL1 LONG,
            COL2 VARCHAR2(4000),
            COL3 CHAR(2000)
        );
        
        INSERT INTO TEMP03 VALUES('대전시 중구 대흥동', '영민빌딩', 'BORI');
        SELECT * FROM TEMP03; -- WHERE 생략
    
    4) CLOB(Character Lrge Object) : 대용량 문자 자료형 4GB까지 사용 가능 -- 필수~~~!!!!!!!
      가) 대용량 자료를 저장하기 위한 가변 기억공간 
      나) 최대 4GB까지 저장 가능
      다) 한 테이블에 사용할 수 있는 CLOB타입의 컬럼 갯수는제한 없음
      라) 일부 기능은 DBMS_LOB  API의 지원을 받아야 함
      
      사용형식)
        컬럼명 CLOB;
      
      사용예)
        CREATE TABLE TEMP04(
            COL1 LONG,
            COL2 CLOB,
            COL3 CLOB
        );
        
        INSERT INTO TEMP04 VALUES('WOORIBORI', 'SOCUTE', '대전시 중구');
        
        -- 어떤 내용이 어떻게 저장되어 있는지 확인하기
        SELECT * FROM TEMP04;
        
--      SELECT LENGTHB(COL1), -- 오류 발생
-- 오류 발생 : inconsistent datatypes: expected NUMBER got LONG(이 명령어로 사용 불가능)
        SELECT -- LONG는 불가능
               DBMS_LOB.GETLENGTH(COL2),
               DBMS_LOB.GETLENGTH(COL3)
          FROM TEMP04; 
          
        SELECT SUBSTR(COL2, 2, 4), -- 함수는 괄호로 묶이는 값이 존재 
        -- PARAMITER | COL2에 있는 글자중에 2번째 글자에서 4번째까지의 글자 가져오기 
        -- 2: 시작위치, 4 : 마지막 위치 / ORACLE는 1번부터 셈
               DBMS_LOB.SUBSTR(COL2, 2, 4) -- COL2에 있는 글자중 4번째 글자부터 2글자 가져옴
          FROM TEMP04;
      
    - RAW : 대용량 컬럼을 정리함, 성능 개선X
2021-0611-02) 숫자 자료형
 - 오라클의 숫자자료는 NUMBER 타입으로 제공됨
   
   사용형식)
    컬럼명 NUMBER [ (정밀도 | * [스케일] ) ] -- * : 표현되는 허용범위에서 값이 저장될 수 있는
                                                -- 자리수를 알아서 계산하게 함 
      - 표현 범위(1.0E-130 ~ 9.999..99E125) -> 1.0 * 10^-130 ~ 0.1 * 2^7 * 10^126 
      - 정밀도 : 전체 자리수(1 ~ 38) -- 
      - 스케일 : 소수점 이하의 자리수
      
      ex) NUMBER(5, 2) => 전체 5자리 중 소수점 이하가 2자리이고 이곳에는 
													소수점 3자리에서 반올리된 값이 저장. 정수부분의 자리는 3자리임
        ex1) 정밀도 > 스케일
            - 스케일이 양의 정수 일 경우 : 스케일 + 1번째 자리에서 반올림하여 
																				  스케일 자리수까지 표현
            - 스케일이 음의 정수 일 경우 : 정수부분의 스케일 위치에서 자리올림 발생
            ---------------------------------------------------
              입력 값             선언             저장되는 값
            ---------------------------------------------------
             1234.5678        NUMBER              1234.5678
             1234.5678        NUMBER(5, 2)          오류  -- 소수점 자리수는 부족하더라도 반올림 통해 저장 가능, 정수자리의 자릿수가 부족하면 오류 발생
             1234.5678        NUMBER(6, 2)        1234.57
             1234.5678        NUMBER(*, 2)        1234.57
             1234.5678        NUMBER(6, -1)       1230 -- 소수점 이하자리는 없음
            ---------------------------------------------------
             
        ex2) 정밀도 < 스케일
            - 매우 희귀한 경우
            - 정밀도 : 0이 아닌 유효숫자의 수
            - 스케일 :소수점 이하 데이터의 수
            - 스케일 - 정밀도 : 소수점 이하에 존재해야할 '0'의 개수
             ---------------------------------------------------
              입력 값             선언             저장되는 값
            ---------------------------------------------------
              0.2345          NUMBER(4, 5)          오류
              0.02345         NUMBER(4, 5)        0.02345
              0.2345          NUMBER(3, 5)          오류
              0.002345        NUMBER(3, 5)        0.00235
              0.002345        NUMBER(4, 6)        0.002345
            ---------------------------------------------------
2021-0611-03) 날짜형
  - 년월일시분초 자료를 저장하기 위한 자료형 -- 년월일(생략 불가능) / 시분초(생략 가능) 사용시 하나라도 빠지면 안됨
  - DATE, TIMESTAMP 제공 -- TIMESTAMP : 정교한 시간까지 가능
  1. DATE 타입
   - 기본 날짜형(년, 월, 일, 시, 분, 초)
   - +와 -연산의 대상이 됨
   ** SYSDATE : 시스템에서 제동하는 날짜 정보
   
   사용형식)
     컬럼명 DATE;
     
   사용예)
     CREATE TABLE TEMP05(
        COL1 DATE,
        COL2 DATE,
        COL3 DATE
     );
     
     INSERT INTO TEMP05 VALUES(SYSDATE, SYSDATE-15, SYSDATE+15); -- 현재 날짜, 현재 날짜 - 15, 현재 날짜 + 15
     
     SELECT * FROM TEMP05; -- 시, 분, 초 안보임
     
     SELECT TO_CHAR(COL1, 'YYYY-MM-DD HH24:MI:SS'),
            TO_CHAR(COL2, 'YYYY-MM-DD HH24:MI:SS'),
            TO_CHAR(COL3, 'YYYY-MM-DD HH24:MI:SS')
      FROM TEMP05;
      
      -- 요일 알기
      SELECT CASE WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 0 THEN '일요일'
                  WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 1 THEN '월요일'
                  WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 2 THEN '화요일'
                  WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 3 THEN '수요일'
                  WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 4 THEN '목요일'
                  WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 5 THEN '금요일'
                  WHEN MOD( (TRUNC(SYSDATE) -TO_DATE('00010101') ) -1, 7) = 6 THEN '토요일'
                  ELSE
                    '일요일' END AS 요일
     FROM DUAL;
     
     SELECT TRUNC(SYSDATE)-TO_DATE('00010101') FROM DUAL;
     
  2. TIMESTAMP 타입
    가. 시간대역(TIME ZONE) 정보를 포함한 날짜 정보 저장
    나. TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE 타입 제공
    다. 10억분의 1초 단위 사용
    라. TIMESTAMP : 시간대 정보 없음
    마. TIMESTAMP WITH TIME ZONE : 시간대 정보(대륙명/도시명) 제공
    바. TIMESTAMP WITH LOCAL TIME ZONE : 서버가 설치된 시간대 정보로 보통 TIMESTAMP와 동일 
    
    사용예)
        CREATE TABLE TEMP06(
            COL1 DATE,
            COL2 TIMESTAMP, -- 시분초 자리수 부족해서 YY-MM-DD
            COL3 TIMESTAMP WITH TIME ZONE, -- 
            COL4 TIMESTAMP WITH LOCAL TIME ZONE -- 지역 제외 출력
        );
        
        INSERT INTO TEMP06
            VALUES(SYSDATE, SYSDATE, SYSDATE, SYSDATE);
        
        SELECT * FROM TEMP06;
2021-0611-04) 기타 자료형(2진 자료형)
    - 2진 데이터를 저장하기 위한 자료형
    - BLOB, BFILE, RAW, LONG RAW 등이 제공

  1. RAW
    가. 상대적으로 작은 2진 자료 저장
    나. 인덱스 처리 가능
    다. 오라클에서는 변환 또는 해석작업을 수행하지 않음 -- 중요 // 입력된 그대로 화면에 출력
    라. 최대 2000BYTE 까지 저장 가능
    마. 16진수와 2진수 저장 가능
    
    사용형식)
        컬럼명 RAW(크기);
    
    사용예)
    
   BLOB - 데이터베이스에 직접 2진 자료 저장
   BFILE - 데이터베이스 밖에서 2진 자료 경로
728x90
반응형

'IT > SQL' 카테고리의 다른 글

SQL 정리6  (0) 2021.11.30
SQL 정리5  (0) 2021.11.30
SQL 정리3  (0) 2021.11.30
SQL 정리2  (0) 2021.11.30
SQL 정리1  (0) 2021.11.30

댓글