ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle(2022.02.08)-DML(SELECT,데이터타입)
    카테고리 없음 2022. 2. 8. 19:42
    728x90

    데이터 검색명령(select 문)
    -자료 조회를 위한명령
    -관계형데이터베이스에서 가장 많이 사용하는 명령
    (사용형식)
     

     SELECT [[DISTINCT] 컬럼명 [AS 별칭][,]
                           :
               컬럼명 [AS 별칭]|*]
         FROM 테이블명
        [WHERE 조건]
        [GROUP BY 컬럼명[,컬럼명,...]]
      [HAVING 조건]
         [ORDER BY 컬럼명|컬럼인덱스 [ASC|DESC][,컬럼명|컬럼인덱스,...];


         
         -'DISTINCT': 중복값 배제 후 자료 출력
         -'AS 별칭': 컬럼에 부여하는 또 다른 이름으로 별칭은 컬럼출력의 제목으로 사용되며
                     영문자, 한글,숫자,특수문자(' ', _등)등이 사용될 수 있음.
                     특수문자가 사용될 때 반드시 " "로 묶어주어야함
         - '*': 컬럼 전부를 의미
         -'WHERE 조건': 출력할 행을 선택하기위한 일반조건
         -'HAVING 조건': 집계함수(SUM,AVG,COUNT,MAX,MIN)에 조건이 부여된 경우 사용
         -'ORDER BY 컬럼명|컬럼인덱스': 정렬에 기준이되는 컬럼명 또는 SELECT절에 사용된 순번(1번부터 카운트 됨)
         -'ASC|DESC' :오름차순(ASC:작은값->큰값 순, 생략 가능(default 값)),
                      내림차순(DESC:큰값->작은값 순)
                      

    사용예)회원테이블(MEMBER)의 모든 회원의 모든 컬럼을 조회하시오.
        SELECT *
        FROM MEMBER;

    사용예)거래처테이블(BUYER)에서 모든 거래처의 거래처코드,거래처명,주소를 출력하시오.

    SELECT BUYER_ID AS 거래처코드,
               BUYER_NAME AS 거래처명,
               BUYER_ADD1||' '||BUYER_ADD2 AS 주소
        FROM BUYER;
        #|| || : 합성연산자 ' '는 둘사이의 공백을 준다는 것

    사용예)회원테이블에서 거주지가 '충남'인 회원의 회원번호,이름,직업,마일리지를 출력하되 마일리지가 많은 순으로 출력하시오.

     SELECT MEM_ID AS 회원번호, 
               MEM_NAME AS 이름, 
               MEM_JOB AS 직업, 
               MEM_MILEAGE AS 마일리지
          FROM MEMBER
        WHERE SUBSTR(MEM_ADD1,1,2)='충남'
        ORDER BY 4 DESC; 
        
         MEM_MILEAGE AS 마일리지->  ORDER BY 4 DESC; 가능 why? 4번째 줄이기 때문이다.


    1. 데이터 타입
      -오라클에서 사용하는 자료형태
      -문자열, 숫자, 날짜, 2진수로 구분(문자 자료는 없음)


      1) 문자열 자료
      - ' '로 묶인 자료
      - 가변길이 고정길이 타입으로 구분
      - ' '안의 자료는 대소문자 구별
      - CHAR,VARCHAR,VARCHAR2,LONG,CLOB,NVARCHAR,NVARCHAR2,NCLOB
      CHAR빼고 다 가변길이,오라클에서는 저장장소가 입력값보다 작으면 오류, 절대 잘려서 저장되는 경우는 없다.
      (1)CHAR
      -고정길이 데이터 타입
      -최대 2000BYTE 까지 처리 가능
      -기억공간이 남으면 오른쪽에 공백이 삽입
      -기억공간이 부족하면 오류
      -주로 기본키 설정등에 사용
      -한글은 한글자가 3BYTE로 저장


      (사용형식)
      컬렴명 CHAR(n [BYTE|CHAR])
      -n:확보된 기억공간의 크기
      -BYTE|CHAR: default는 BYTE이며 CHAR은 n이 글자수임
       한글을 저장하는 경우 CHAR(2000CHAR)로 선언되어도 2000BYTE를 초과할 수 없어
       666글자만 저장 가능

    사용예)
      CREATE TABLE TEMP01(
       COL1 CHAR(20),
       COL2 CHAR(20 BYTE),
       COL3 CHAR(20 CHAR));
       
      INSERT INTO TEMP01 VALUES('중구 오류동 846','중구 오류동 846', '중구 오류동 846');
      SELECT *FROM TEMP01;
      
      SELECT LENGTHB (COL1) AS 길이1,
                LENGTHB (COL2) AS 길이2,
                LENGTHB (COL3) AS 길이3
        FROM TEMP01;
        /*CHAR부분: 남은 공간은 영어기준으로 20(글자계산한 수)+10(남은공간)=30 */

     COL3는 20자의 글자수 입력가능하다. '중구 오류동 846' 한글:15+빈칸:2+숫자:3=20

    20byte차지, 그런데 글자수로만 따지면 10이고 CHAR는 고정길이 데이터 타입으로 나머지 10자는 공백이다.

    즉 20-10해서 20byte와 공백10 더해줘서 30이 나온다.



        (2)VARCHAR2
        -가변길이 문자 데이터를 저장
        -확보된 기억공간에 데이터를 저장하고 남는 기억공간(오른쪽)은 시스템에게 반환
        -최대 4000BYTE 까지 저장 가능
        -VARCHAR와 VARCHAR2는 내부적으로 동일하게 처리(VARCHAR2 사용을 권고함)
        ->쓴 만큼만 사용하고 반납
       (사용형식)
        컬럼명 VARCHAR2(n [BYTE|CHAR])
        -사용은 CHAR에 준함

    사용예)

    CREATE TABLE TEMP02(
      COL1 VARCHAR2(2000),
      COL2 VARCHAR2(2000 BYTE),
      COL3 VARCHAR2(2000 CHAR));
      
      INSERT INTO TEMP02 VALUES('APPALE BANNA PERSIMMON','APPALE BANNA PERSIMMON','APPALE BANNA PERSIMMON');
      INSERT INTO TEMP02 VALUES('IL POSTINO','대전시 중구 오류동846','대전시 중구 오류동846');
      
      SELECT *FROM TEMP02;
      
      SELECT LENGTHB(COL1),
                LENGTHB(COL2),
                LENGTHB(COL3)
        FROM TEMP02;

        

    INSERT INTO TEMP02
    INSERT INTO TEMP02
    SELECT LENGTHB



        (3)LONG
        -가변길이 자료 저장
        -최대 2GB까지 저장 가능
        -한 테이블에 하나의 LONG타입만 사용 가능
        -기능 개선 중단(Deprecated))=>clob로 대체
        -select문의 select절, update문의 set절, insert문의 values절에서 사용 가능
        -특정 함수는 사용할 수 없음(순번을 가지고 있는것들에는 사용X 너무길기 때문)
        
        (사용형식)
        컬럼명 LONG 

       사용예)

     

     CREATE TABLE TEMP03(
         COL1 CHAR(2000),
         COL2 VARCHAR2(2000),
         COL3 LONG);
        
     INSERT INTO TEMP03 VALUES('대전시 중구 오류동 846','대전시 중구 오류동 846','대전시 중구 오류동 846');
     
     SELECT*FROM TEMP03;
     
     SELECT LENGTHB(COL1),
               LENGTHB(COL2)
            -- LENGTHB(COL3)  =>오류발생 Why? LONG타입 데이터수 파악 불가
        FROM TEMP03;

       

    LONG타입 데이터수 파악 불가

     

    COL1과 COL2부분의 결과
    COL1은 CHAR타입으로 고정길이이다.



      (4) CLOB(Character Large OBjects)
      -최대 4GB까지 저장가능
      -한 테이블에 복수개의 CLOB타입의 컬럼 사용 가능
      -큰 크기 때문에 일부기능은 DBMS_LOB Api(Application Programming Interface)지원을 받아야 사용가능
      (사용형식)
       컬럼명 CLOB

     


    사용예)
      CREATE TABLE TEMP04(
      COL1 CLOB,
      COL2 CLOB,
      COL3 VARCHAR2(4000));
      
      INSERT INTO TEMP04 VALUES(' IL POSTINO', '대전시 중구 오류동 846','APPLE BANNA PERSIMMON');
      
      SELECT*FROM TEMP04;
      
      SELECT SUBSTR(COL1,4,3),   IL POSTINO
                SUBSTR(COL2,4,3),   대전시 중구 오류동 846
                SUBSTR(COL3,4,3)    APPLE  BANNA PERSIMMON
         FROM TEMP04;
         
        SELECT LENGTHB(COL1,4,3),
                  LENGTHB(COL2,4,3),
                  LENGTHB(COL3,4,3)
         FROM TEMP04;
         ->사용 불가
         만약에 사용하려면 DBMS.LOB.GETLENFTH 
         LENGHTH는 그냥 길이 ,B붙은건 바이트로 환산
         
      SELECT DBMS_LOB.GETLENGTH(COL1),
                DBMS_LOB.GETLENGTH(COL2),
                DBMS_LOB.GETLENGTH(COL3)
         FROM TEMP04;
         
       SELECT SUBSTR(COL1,2,6), /*(COL1,순번,글자수)*/
              DBMS_LOB.GETLENGTH(COL1), /*(COL2, 글자수,순번)*/
              SUBSTR(COL2,4,3),
              SUBSTR(COL3,4,3)
         FROM TEMP04;
         

    SELECT SUBSTR(COL1,4,3) ...결과



         (5)NVARCHAR(National VARCHAR,NVARCHAR2, NCLOB)
         -국제 표준 문자코드인 UTF-8이나 UTF-16방식으로 ENCODING 할때 사용
         -나머지는 VARCHAR,VARCHAR2,CLOB 와 동일  
      

     

     

     

    728x90
Designed by Tistory.