본문 바로가기

SQL/MySql

1부 3장. SQL 소개


SQL은 크게 DML과 DDL 두 가지로 구분된다.
DML(데이터 조작어, Data Manipulation Language) - 데이터 추출, 저장, 삭제 등 데이터를 조작
DDL(데이터 정의어, Data Definition Language) - 데이터가 저장되는 테이블이나 각종 객체들을 생성

그렇다면 DML은...

SELECT, INSERT, UPDATE, DELETE, COMMIT, ROLBACK 
이 있다.

SELECT[구문형식] 
 
SELECT 컬럼, 컬럼2, ...
FROM    테이블1, 테이블2, ...
WHERE 조건들;
머 이부분은 다 아는부분이라고 치고 넘어가도록 한다.

INSERT1[구문형식] 
INSERT INTO 테이블명 (컬럼1, 컬럼2,...)
VALUES (컬럼1 값, 컬럼2값,...)
이 구문도 말이 필요없이 많이 사용하는거지만 한가지 주의할 사항은 컬럼 리스트와 그 컬럼에 들어갈 값의 순서는 정확히 맞아야 한다.

INSERT2[구문형식] 
INSERT INTO 테이블명 (컬럼1, 컬럼2,...)
SELECT 컬럼2_1, 컬럼2_2, ...
FORM 테이블 2
WHERE ...;
이런 구문도 있다. 이것은 INSERT구문은 한문장이지만 INSERT 되는 VALUE는 SELECT 해오는 값이 된다.
이것도 마찮가지로 컬럼에 들어갈 값의 순서가 맞아야 한다.

UPDATE [구문형식] 
UPDATE 테이블명 
SET       변경컬럼 1 = 변경하고자 하는값,
             변경컬럼 2 = 변경하고자 하는값,
            ...
WHERE 조건절..;
UPDATE 구문에서 변경하고자 하는 값은 말그래도 값이 올수도 있고, INSERT 문에서 처럼 SELECT 문이 올수도 있다. WHERE 절을 명시해 조건이 일치하는 데이터들만 갱신할 수 있지만 WHERE 절을 생략할 경우 테이블 전체가 변경된다.

DELETE[구문형식] 
DELETE [FROM] 테이블
WHERE  조건..;
여기서 특이한건 FROM절이 없어도 된다. WHERE 절을 생략하면 테이블 전체가 삭제된다. 사실 난 이건 몰랐었다. 

COMMINT[구문형식] 
COMMIT [WORK] [TO SAVEPOINT savepoint_name];
[]로 표시된 부분은 생략이 가능하다. SAVEPOINT는 특정 시점까지 작업한 내용을 반영한다. 

ROLLBAK[구문형식]
ROLLBACK [WORK] [TO SAVEPOINT savepoint_name];
롤백은 취소의 개념이다. COMMINT 과 ROLLBCK의 개념을 잘 이해시켜주는 예제이다.

SELECT 문의 의해 선택된 이름의 답은 1. 홍길동, 2. 홍인영 3. 홍인영 이다.

1번의 경우 COMMIT이 실행되기전 시점이라 데이터 파일이 아닌 메모리 상에서 홍길동이란 이름을 가져온다.
2번의 경우는 ID 1인사람의 이름을 변경하고 COMMIT을 수행한 뒤 조회 했으므로 홍인영이다.
3.의 경우 DELETE로 삭제하였지만 ROLLBACK을 실행해서 e 번 이후의 작업을 모두 취소 하므로 홍인영을 가져온다. 즉 ROOLBACK을 하면 이전 COMMIT 이후의 모든작업을 취소한다.

그렇다면 DDL은...

CREATE, DROP, ALTER, TRUNCATE 
가 있다.

여기서 중요한점은 TRUNCATE이다 왜냐하면 내가 모르기 때문이다. TRUNCATE는 테이블에 있는 데이터들을 삭제할 때 사용된다. DELETE와 차이점은 TRUNCATE가 실행되면서 자동 COMMIT이 된다 그래서 ROLLBACK을 할수 없다. 
  1.  DELETE보다 빠르고 수행비용이 적음
  2. 인덱스 트리거 영향을 주지 않고 데이터만 삭제
  3. DROP은 테이블 데이터 구조 까지 모두 소멸, DELETE는 메모리상 존재하는 데이터만 삭제 TRUNCATE는 테이
     블은 그대로 두고 메모리 및 파일의 데이터까지 삭제하지만 테이블 구조는 보존한다.

예약어
 예약어 확인 방법
 1. SQL Developer나 토드 같은 툴을 써라 그럼 지가 알아서 잡는다.
 2. SELECT keyword FROM V$RESERVED_WORDS ORDER BY keywords; 

의사컬럼
 - 의사 컬럼의 값으로 select는 가능하지만 insert, update, delete는 할수 없다.
 
    ROWNUM
 - 쿼리의 결과로 나오게 되는 각각의 로우들에 대한 순서값을 가리키는 의사컬럼.
   ROWID
- 테이블에 저장된 각각의 로우들이 저장된 주소값을 가진 의사 컬럼.
   특징은 단일 로우에 접근이 빠르고 로우들이 어떻게 저장되는지 보여주고 
   한테이블의 유일한 값은 ROWID다.


※용어 정리
 CLUSTER - 하나 이상의 컬럼을 공유하여 동일한 값을 가진 하나이상의 테이블을 인접한 장소의 함께 저장하는 객체 그러니까 똑같은 놈들을 인접한 장소에 함께 저장하는거다.
의사컬럼  - 테이블에 있는 일반적인 컬럼처럼 행동하기는 하지만 실제로 테이블에 저장되어 있지 않은 컬럼.
                 즉 사기치는 컬럼






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

Mysql Lock  (0) 2017.11.20
쿼리 실행 절차 및 옵티마이저 종류  (0) 2017.11.15
실행계획 ID 컬럼과 select_type  (0) 2017.11.15
실행계획  (0) 2017.11.15
mysql 정렬  (0) 2017.11.15