[SQLD/P] SQL 기본 - 참고사항

Hyo Kyun Lee·2023년 2월 27일
0

SQLD/P

목록 보기
73/82

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

  • Oracle
ALTER TABLE EMP
MODIFY
(
	ID VARCHAR2(100) NOT NULL
);
  • SQL
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

  • Oracle
SAVE POINT SVP1
ROLLBACK TO SVP1;
  • SQL Server
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을 비교대상으로 삼는다.

0개의 댓글