본문 바로가기
IT/SQL

SQL 정리3

by 김보리 2021. 11. 30.
728x90
반응형
2021-0610-01)
  사업장 테이블과 근무테이블을 생성하시오
  ** 사업장테이블
  테이블명 : SITE
  ------------------------------------------------------
  컬럼명       데이터타입   크기   NULLABLE    PK or FK
  ------------------------------------------------------
  SITE_ID       CHAR      10      N.N          PK
  SITE_NAME   VARCHAR2    30
  SITE_ADDR   VARCHAR2   100
  SITE_TEL    VARCHAR2    20
  REMARKS     VARCHAR2   100
  ------------------------------------------------------
  CREATE TABLE SITE( -- SITE 테이블 생성
    -- 컬럼 생성 및 데이터타입(크기) 지정
    SITE_ID CHAR(10), -- PK : 중복X, NULL값이 있으면 안됨 NOT NULL 안적어도 자동으로 생성 CHAR : 고정길이
    SITE_NAME VARCHAR2(30), -- VARCHAR2 : 사용자가 사용한 만큼만 사용, 나머지는 자원 활용 4000byte까지 가능
    SITE_ADDR VARCHAR2(100),
    SITE_TEL VARCHAR2(20), -- DATA가 크기보다 클경우 저장X
    REMARKS VARCHAR2(100),
    
    -- 기본키(PRIMARY KEY), 외래키(FOREIGN KEY) 사용
    CONSTRAINT pk_site PRIMARY KEY(SITE_ID)
  );
  
  테이블명 : WORK
  ------------------------------------------------------
  컬럼명       데이터타입   크기   NULLABLE    PK or FK
  ------------------------------------------------------
  SITE_ID       CHAR      10      N.N        PK / FK
  EMP_ID        CHAR       4      N.N        PK / FK
  IN_DATE       DATE     
  ------------------------------------------------------
  CREATE TABLE WORK( -- WORK 테이블 생성
    -- 컬럼 생성 및 데이터타입(크기) 지정
    SITE_ID CHAR(10),
    EMP_ID CHAR(4),
    IN_DATE DATE,
    
    -- 제약사항 : 기본키(PRIMARY KEY), 외래키(FOREIGN KEY) 설정
    CONSTRAINT pk_work PRIMARY KEY(SITE_ID, EMP_ID), -- 기본키 설정
    CONSTRAINT fk_work_site FOREIGN KEY(SITE_ID) -- 외래키 설정
        REFERENCES SITE(SITE_ID), -- SITE 테이블에 있는 SITE_ID
    CONSTRAINT fk_work_emp FOREIGN KEY(EMP_ID) -- 외래키 설정
        REFERENCES EMP(EMP_ID) -- EMP 테이블에 있는 EMP_ID
  );
2021-0610-02)
1) INSERT 문 -- UPDATE, DELETE 사용 시 데이터가 있어야함
  - 테이블에 자료를 추가 저장하는 명령
  - MERGE
  (사용형식)
  INSERT INTO 테이블명[(컬럼명1, [컬럼명2, ..., 컬럼명n])] -- 컬럼 리스트 생략 가능 사용자가 기술하지 않을 시 NULL 값이 들어감
    VALUES(값1[, 값2, ..., 값n]) -- 컬럼의 순서, 개수, 타입에 맞춰야 함(컬럼명을 안 쓸 때 규칙)
   - 테이블명 : 데이터를 저장하는 테이블명
   - '(컬럼명1, [컬럼명2, ..., 컬럼명n])' : 생략 가능, 생략하면 테이블 생성시 기술한 순서대로 모든 값을 VALUES절에 기술
   - '컬럼명1' 등을 기술하는 경우 : 필요한 자료만 입력, 단 컬럼제약사항이 NOT NULL인 경우 컬럼명을 생략할 수 없음
   
사용예시) 부서테이블(DEPT)에 다음 자료를 입력하시오.
         ---------------------------------
           부서번호      부서명
         ---------------------------------
             10         총무부  
             20         회계부  
             30         영업부  
             40         배송부  
             50         자재부  
         ---------------------------------
          INSERT INTO DEPT
            VALUES(10, '총무부');
        
        INSERT INTO DEPT
            VALUES(20, '회계부');
            
        INSERT INTO DEPT
            VALUES(30, '영업부');
            
        INSERT INTO DEPT
            VALUES(40, '배송부');
            
        INSERT INTO DEPT
            VALUES(50, '자재부');
            
          SELECT * -- 모든 행 조회 
            FROM DEPT;
  
  사용예시) 사원테이블(EMP)에 다음 자료를 입력하시오.
         --------------------------------------------
           사원번호      사원명     직무명     부서코드
         --------------------------------------------
            E001        홍길동                  40
            E002        강감찬      구매        10
            E003        이성계      인사        70
         --------------------------------------------
          INSERT INTO EMP(EMP_ID, EMP_NAME, DEPT_ID) -- 값 삽입
            VALUES('E001', '홍길동', 40);
        
          INSERT INTO EMP(EMP_ID, EMP_NAME, EMP_JOB, DEPT_ID) -- 값 삽입
             VALUES('E002', '강감찬', '구매', 40);
          
          UPDATE EMP -- 값 내용 수정
            SET DEPT_ID = 10
          WHERE EMP_ID = 'E002';
          
          INSERT INTO EMP -- 값 삽입
             VALUES('E003', '', '구매', 10);
             
          DELETE EMP -- 값 삭제
          WHERE EMP_ID = 'E003';
          
          INSERT INTO EMP -- 값 삽입
             VALUES('E003', '이성계', '인사', 10);
  
          SELECT * -- 모든 행 조회 
             FROM EMP;  
             
사용예시) 다음과 같이 사업장 정보를 입력하시오.
         ---------------------------------------------------------------------------
           사업장번호         이름                주소             전화번호     비고
         ---------------------------------------------------------------------------
          A020201201    나라초등학교 신축    대전시 중구 대흥동     
          C120210607    S-CITY 신축        대구시 달성구         052-999-0001
         ---------------------------------------------------------------------------
         
         INSERT INTO SITE
         VALUES ('A020201201','나라초등학교 신축','대전시 중구 대흥동','',NULL);
  
        INSERT INTO SITE(SITE_ID, SITE_NAME, SITE_ADDR, SITE_TEL)
         VALUES ('C120210607','S-CITY 신축','대구시 달성구 ','052-999-0001');
         
        SELECT * -- 모든 행 조회 
          FROM SITE; 
  
  사용예시) 근무테이블에 다음 자료를 입력하시오.
    ---------------------------------------------
        사업장번호       사원번호        투입일
    ---------------------------------------------
       C120210607        E002        2020-12-10
       C120210607        E001        오늘
       A020201201        E003        2001-02-29
    ---------------------------------------------
    
    INSERT INTO WORK
      VALUES('C120210607','E002','20201210'); -- 날짜 자동 변환(AUTO CASTING)
    
    INSERT INTO WORK
      VALUES('C120210607','E001',SYSDATE); -- SYSDATE : 오늘 날짜
    
    INSERT INTO WORK
      VALUES('A020201201','E003','20010228');
    
    SELECT * FROM WORK;
  
예시) S-CITY에 근무하는 사원정보 조회(사원번호, 사원명, 투입일) : JOIN
  SELECT A.EMP_ID AS 사원번호,
         A.EMP_NAME AS 사원명,
         TO_CHAR(B.IN_DATE,'YYYY-MM-DD') AS 투입일
    FROM EMP A, WORK B, SITE C
  WHERE A.EMP_ID = B.EMP_ID
    AND B.SITE_ID = C.SITE_ID
    AND C.SITE_NAME LIKE 'S-CITY%'
  ORDER BY 1;
  
  -- DROP : TABLE 지우기
  DROP TABLE DEPT; -- 오류 보고 - ORA-02449: unique/primary keys in table referenced by foreign keys : 참조되어있는 외래키가 있어 어쩌구 웅앵
  DROP TABLE WORK;

  ALTER TABLE EMP
  DROP CONSTRAINT FK_EMP_DEPT; -- 오류 보고 - ORA-00950: invalid DROP option : ALTER문 써야됨~!!!!!!!!!!
  
  DROP TABLE EMP; -- DROP는 복구 불가능.

  DROP TABLE SITE;

  DROP TABLE DEPT;
2021-0610-03) 데이터 타입
 - 오라클에서 사용하는 자료형
  └ 문자, 숫자, 날짜, 2진자료형(binary)이 있음 -- ~ : 틸드, @ : at, & : 앤퍼센드 , * : 아스틱스, ^ : 거듭제곱시 사용
  
 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;
            
    - VARCHAR2 : 가변길이 문자 자료형(=VARCHAR) !!! -- 주로 사용
    - NVARCHAR2, NCHAR : 다국어 지원가능 하도록 변환하여 유니코드 형식으로 사용 가능 EX) UTF-8
    - LONG : 2GB 자료를 저장할 수 있는 데이터 자료형
    - RAW : 대용량 컬럼을 정리함, 성능 개선X
    - CLOB : 대용량 문자 자료형 4GB까지 사용 가능 !!! -- 주로 사용
728x90
반응형

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

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

댓글