1. DDL/DML/DCL/TCL
DDL - CREATE, ALTER, DROP, RENAME
DML - SELECT, INSERT, UPDATE, DELETE
DCL - GRANT, REVOKE
TCL - COMMIT, ROLLBACK
2. 데이터 언어와 SQL
- 절차적 데이터 언어는 무슨 데이터를 어떠한 과정으로 접근하는지(WHAT/HOW)에 대해 정의(PL/SQL, T-SQL)
- 비절차적 데이터 언어는 무슨 데이터를 원하는지에 대해 정의(WHAT)
3. Oracle CREATE
CREATE TABLE PRODUCT
(
ID VARCHAR2(100) NOT NULL
, CONSTRANIT PRODUCT_PK PRIMARY KEY(ID)
)
4. ALTER
ALTER TABLE EMP
MODIFY
(
ID VARCHAR2(100) NOT NULL
);
ALTER TABLE EMP
ALTER
(
COLUMN ID VARCHAR2(100) NOT NULL
);
5. DDL 시 유의사항
- CREATE -> CREATE TABLE EMP (EMPNO ~~ NOT NULL or NULL)
→ NULL에 대한 조건을 명기한다.
- INDEX 생성시
→ CREATE INDEX EMP ON EMP (JOIN_DATE);
6. index 생성
CREATE INDEX IDX_EMP ON EMP (DATE)
7. DROP
ALTER TABLE EMP
DROP ID;
8. RENAME
RENAME EMP TO EMP_RENAME
위 sql문은 ASNI 표준과 oracle 구문이 동일한 구문이다.
9. 테이블 참조동작(Referential Action)
-
DELETE
→ cascade : master 데이터 삭제시 연결된 데이터 삭제
→ set null : master 데이터 삭제시 연결 데이터는 null로 세팅
→ set default : master 데이터 삭제시 연결 데이터는 default 값으로 세팅
→ restrict : child table에 pk값이 없는 경우에만 master 삭제를 허용
-
INSERT
→ automatic : master table에 pk가 없을 경우 master pk 생성후 child에 입력
→ set null : master table에 pk가 없을 경우 child join시 null로 처리
→ set default : master table에 pk가 없을 경우 child join시 default값으로 처리
→ dependent : master table에 pk가 없을 경우 child data 입력을 허용하지 않음
10. INSERT 유의사항
- insert시 column명기 안할 경우 모든 column의 값을 명시해주어야 정상 insert 가능하다.
INSERT INTO EMP(ID) VALUES(1);
11. UPDATE
UPDATE EMP
SET ID = 1;
12. 로그
- DML(DELETE) 등은 로그가 남고, DDL(ALTER, CREATE, TRUNCATE, DROP 등)은 로그가 남지 않는다.
DELETE FROM EMP
13. TRUNCATE / DELETE / DROP
- TRUNCATE TABLE EMP : data 제거, 디스크 초기화, 스키마 유지
- DROP TABLE EMP : data 제거, 디스크 초기화, 스키마 제거
- DELETE FROM EMP : data 제거, 디스크 초기화하지는 않음
- DROP, TRUNCATE(DDL)은 auto commit, DELETE(DML)은 user commit
14. 트랜잭션 격리성 등급
- Dirty Read : commit되지 않은 데이터 읽기
- Non-Repeatable Read : 한 트랜잭션 내 두번의 쿼리 중, 하나의 쿼리를 수행한 후 수정하여 두 쿼리 결과가 다르게 나타나는 현상
- Phantom Read : 한 트랜잭션 내 두번의 쿼리를 실행하면서, 첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상
15. SAVE POINT
SAVE POINT SVP1
ROLLBACK TO SVP1;
SAVE TRANSACTION ST1
ROLL BACK TRANSACTION ST1;
16. WHERE절 연산 우선 순위
- 증(논비)산시관비논대
- 논리연산자는 AND -> OR 순으로 처리
17. NULL값의 사칙연산
- NULL값과의 연산은 NULL을 return
- NULL값과의 비교는 FALSE를 return
18. 조회시 Oracle / SQL Server
- SELECT * FROM 서비스 WHERE 서비스번호 = 1; -> 해당 data type이 문자열일 경우, 반드시 형태가 일치하고 모든 data가 동일한 형태로 입력되어야 수치오류가 발생하지 않는다.
- NULL값 입력시 Oracle은 WHERE data is NULL, SQL Server는 WHERE data = ''로 조건절 입력해야 조회 가능
19. 내장함수
- 함수 입력 행수에 따라 단일행, 다중행 함수로 분류
- 단일행 함수는 SELECT, WHERE, ORDER BY, UPDATE SET 등의 절에 사용 가능
- 1:M 관계의 두 테이블을 조인할 경우, M쪽에 다중행이 출력되고 이는 여러 단일행 함수의 결과일 수 있다.
- 다중행 함수도 단일 값만 반환할 수 있다.
20. LENGTH, REPLACE
- LENGTH : 길이, 줄바꿈 포함
- REPLACE : 문자열을 치환하되 문자만 문자열 길이로 치환(줄바꿈은 대상 아님)
21. CASE 문
SELCT LOC
CASE Loc WHEN 'NEW YORK' THEN 'EAST'
ELSE 'ETC'
END as AREA
22. 'X'
Query에서 'X'는 derived, 즉 이전에 생성된 하나의 혹은 임시의 테이블을 일컫는다.
23. NULL 관련 단일행 함수
- NVL(a, b) : a의 값이 null이면 b의 값으로 출력한다.
- ISNULL(a, b) = NVL(a, b)
- NULLIF(a, b) : a값과 b의 값이 같으면 null을 출력, 아니면 a를 출력한다.
- COALESCE(a, b) : 임의의 개수 표현식에서 null이 아닌 최초의 표현식을 나타내고, 모든 표현식이 null이라면 null을 출력한다.
24. 집계함수에서 NULL값의 처리
- 집계함수를 하는데 해당 행이 NULL일 경우, NULL인 행을 제외한 나머지 행에 대해서만 집계함수로 처리한다.
25. GROUP BY 유의사항(?)
- HAVING 절은 해당 컬럼의 집계조건으로 설정 가능(집계함수없어도)
- GROUP BY에서 두가지 이상의 기준을 중첩할 경우, 반드시 1개의 결과만 나온다. GROUP BY의 중첩 기준은 SELECT 절에서 명기할 수 없다.
26. ORDER BY 유의사항
- 집계함수는 WHERE절에서 사용 불가..GROUP BY나 ORDER BY 절에 집계 함수 사용 가능
- ORDER BY 절에 alias 사용 가능, 혼용 가능
27. ORDER BY에 CASE 사용시
- ORDER BY CASE WHEN ID = 'A' THEN 1 ELSE 2 END
→ ID가 A인 항목들에 대해서 먼저 정렬을 한다는 의미이고, 정렬 기준은 order by desc와 같이 후에 붙여진 정렬 순서를 따른다.
28. TOP
SELECT TOP(3) WITH TIES 팀명, 승리건수
-> 승리건수를 기준으로 상위 3 항목을 출력하고, 승리건수가 동률이라면 같이 출력한다.
29. join 유의사항
- 일반적으로 join은 PK, FK값의 연관성에 의해 성립된다.
- DBMS 옵티마이저는 FROM절에 나열된 테이블들을 임의로 2개 정도로 묶어서 join처리한다.
- EQUI join은 join에 관여하는 테이블간 칼럼 값들이 정확하게 일치하는 경우에 사용한다.
- EQUI join은 '='연산자에 의해서만 수행되며, 그 이외의 비교 연산자를 사용한다면 Non-EQUI join이다.
- 대부분 Non Equi Join을 수행할 수 있지만, 때로는 설계상의 이유로 수행이 불가능할 수 있다.
30. FROM에 두개의 table이 있고, SELECT 조회할때
- 첫번째 명기된 table을 기준으로 WHERE 조건에 따라 선별되면서 차례대로 출력한다.
- WHERE 조건에 따라 선별되면서, 두번째 명기된 table을 비교대상으로 삼는다.