본문 바로가기
DB

[DB / Oracle] Chapter 4. SQL 기초

by nyeoo 2023. 11. 28.

1. SESSION 설정

ALTER SESSION SET NLS_LANGUAGE = 'KOREAN';
ALTER SESSION SET NLS_DATE_LANGUAGE = 'KOREAN';
ALTER SESSION SET NLS_CURRENCY = '\';       -- ₩(원 표시) / $, ...
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';

※ SQU DEVELOPER를 통해 설정해놓은 것이므로 자바를 통해 오라클에서 DATE를 불러왔을 때 다른 형식으로 데이터를 가져올 수 있음을 주의

2. 기본 구문

▶ CREATE

테이블 생성

CREATE TABLE 테이블명
(컬럼명1    NUMBER(4)
,컬럼명2    VARCHAR2(30)
,컬럼명3    CHAR(13)
,컬럼명4    DATE    DEFAULT SYSDATE
,컬럼명5    NUMBER(10)
);

테이블을 복사하여 테이블 생성

CREATE TABLE 테이블1
AS
SELECT *
FROM 테이블2; 

뷰 생성

CREATE VIEW 뷰이름
AS
SELECT 테이블1 컬럼명1, 테이블1 컬럼명2, 테이블1 컬럼명3
FROM 테이블1;
CREATE OR REPLACE VIEW 뷰이름       -- 중복된 이름의 뷰가 존재한다면 덮어쓰기
AS
SELECT 테이블1 컬럼명1, 테이블1 컬럼명2, 테이블1 컬럼명3
FROM 테이블1;

시퀀스 생성

CREATE SEQUENCE 시퀀스명       -- 기본적인 시퀀스 생성 구문
START WITH 1                    -- 시작값 설정 옵션
INCREMENT BY 1                  -- 증가값 설정 옵션
NOMAXVALUE                      -- 최대값 설정 옵션
NOCACHE;                        -- 캐시 사용 안함 설정 옵션

---> 뭉탱이로 번호표 뽑아서 있는 손님들한테 한번에 나눠주기
-- 안쓰면 여러명이 동시에 접속해서 기다리는 사람들이 늘어날 수 있음
-- 쓰게되면 사이사이에 비는 영역들이 생길 수 있겠다.

▶ INSERT

생성된 테이블에 데이터 입력

INSERT INTO 테이블명 VALUES(컬럼1 데이터, 컬럼2 데이터, 컬럼3 데이터, 컬럼4 데이터, 컬럼5 데이터)

▶ DESCRIBE

테이블에 존재하는 컬럼의 구조 확인

DESC 테이블명;
--(널? : 널인상태를 수용하는 컬럼이니? )

▶ COMMENT

테이블의 커멘트 정보 확인

SELECT *
FROM USER_TAB_COMMENTS;

테이블 레벨의 커멘트 정보 입력

COMMENT ON TABLE 컬럼명 IS '커멘트';

테이블에 소속된 컬럼에 대한 커멘트 데이터 확인

SELECT *
FROM USER_COL_COMMENTS
WHERE TABLE_NAME = '테이블 커멘트';

테이블에 소속된(포함된) 컬럼에 대한 커멘트 데이터 입력

COMMENT ON COLUMN 테이블명.컬럼명 IS '커멘트';

▶ ADD

테이블에 데이터를 담을 수 있는 컬럼 추가

ALTER TABLE 테이블명
ADD 컬럼명 CHAR(13);
-- 테이블 내에서 컬럼의 순서는 구조적으로 의미 없음. 선택적으로 골라서 조회하게 할 수 있으므로..

▶ UPDATE

데이터 수정

UPDATE 테이블명
SET 바꿀컬럼명 = '바꿀 데이터'
WHERE 컬럼명 = '해당 데이터'

▶ DELETE

  • 테이블의 구조(뼈대, 틀)는 그대로 남아있는 상태에서 데이터만 모두 소실
    DELETE 테이블명;
    DELETE
    FROM 테이블명
    WHERE 컬럼명 = 해당 데이터;

▶ DROP

테이블 자체를 구조적으로 제거

DROP TABLE 테이블명;

테이블의 컬럼 제거

ALTER TABLE 테이블명
DROP COLUMN 컬럼명;

휴지통에 있는 테이블을 조회

SHOW RECYCLEBIN;

휴지통에 있는 테이블 완전 삭제

PURGE TABLE 테이블명;

삭제된 테이블을 복원

FLASHBACK TABLE 테이블명 TO BEFORE DROP;

휴지통에 남기지 않고 완전 삭제

DROP TABLE 테이블명 PURGE;

휴지통 비우기

PURGE RECYCLEBIN;

▶ COMMIT

  • 테이블이 물리적으로 하드디스크상, 논리적으로 테이블스페이스에 만들어져 있는데, 데이터를 INSERT 하는 쿼리문을 실행시켰을 때 하드디스크상에 물리적으로 저장된 것이 아니라 메모리(RAM)상에 저장된 것
  • 따라서 롤백은 메모리상에 저장되어있는 것을 저장하지 않고, 제거하는 것이며, 실제 하드디스크상에 물리적으로 저장된 상황을 확정하기 위해서는 COMMIT 을 수행해야 함
  • 커밋 전에는 메모리+하드디스크상의 결과를 보여주는 것
COMMIT;

▶ ROLLBACK

  • 마지막 COMMIT을 실행한 이후로 DML 구문(INSERT, UPDATE, DELETE, MERGE)을 통해 변경된 데이터를 취소할 수 있는 것일 뿐 DML 명령을 사용한 후 COMMIT 을 수행하고 나서 ROLLBACK 을 실행하면 그 전으로 절대 돌아갈 수 없음
  • ⚠️ CREATE, ALTER 는 AUTO COMMIT됨을 주의해야함
ROLLBACK;

3. 쿼리문 유형 분류

분류 기능 구문
데이터 정의어(DDL, Data Definition Language) 테이블, 관계 구조를 생성하는데 사용. 수행하고 나면 자동 COMMIT 되는 구문 CREATE, DROP, ALTER, (TRUNCATE)
데이터 조작어(DML, Data Manipulation Language) 데이터 삽입, 수정, 삭제하는데 사용. 수행하고 나면 COMMIT 이나 ROLLBACK을 수행해야 하는 구문 INSERT, DELETE, UPDATE, (MERGE)
데이터 제어어(DCL, Data Control Language) 데이터 사용 권한을 관리. 실행하면 자동으로 COMMIT 됨 GRANT, REVOKE
트랜잭션 제어어(TCL,Transaction Control Language) DML에 의해 변경된 내용을 관리 COMMIT, ROLLBACK