SQLD 학습을 진행하며 기억할 내용을 간략히 기록합니다.
용어로 Entity(엔티티)를 엔터티라고 발음하지만 엔티티로 정리합니다.

SQL 기본

SQL 문장

  • DDL(데이터 정의어): CREATE, ALTER, DROP, RENAME
  • DML(데이터 조작어): INSERT, UPDATE, DELETE, MERGE
    • DQL: SELECT
  • DCL(데이터 제어어): GRANT, REVOKE
  • TCL(트랜잭션 제어어): COMMIT, ROLEBACK, SAVEPOINT

기본 상식

SQL 작성 시 SELECT, FROM은 필수이다.
WHERE 절에는 집계함수를 사용할 수 없다.
SELECT 절에서 SUM으로 합계를 구할 때 WHERE절의 조건에 속하는 행이 NULL인 경우 연산이 제외되어 NULL을 반환한다.
오라클에서 날짜의 연산은 숫자 연산과 같다. 특정 날짜에 1을 더하면 하루를 더한 값이다.
1/24/60 = 1분, 1/24/(60/10) = 10분

NULL

ANSI 표준 기준 NULL을 찾아내는 경우는 IS NULL, IS NOT NULL이다.
INSERT INTO 서비스 VALUES('999', '', '2015-11-11');를 입력했을 경우 서비스명 칼럼에 공백이 아닌 NULL이 입력된다.(오라클)
위의 데이터를 조회하려면 IS NULL 조건을 걸어줘서 조회해야한다. WHERE 서비스명 = '';으로 조회 불가능(오라클)
SQL Server에서는 위에처럼 데이터를 입력하였을 때 IS NULL로 해도 조회되지 않는다. WHERE 서비스명 = '';로 조회 가능

NULLIF 함수는 EXPR1이 EXPR2와 같으면 NULL을, 같지 않으면 EXPR1을 리턴한다.
NVL/ISNULL 함수는 EXPR1이 NULL이면 EXPR2를 리턴한다.

오라클에서는 NULL을 최대값으로 취급
SQL Server에서는 NULL을 최소값으로 취급

SQL Server는 null 값을 인덱스 맨 앞에 저장하고, Oracle은 맨 뒤에 저장한다.

GROUP BY, HAVING

GROUP BY 절에서는 SELECT절과 같이 ALIAS를 사용할 수 없다.
HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.
HAVING절에서는 그룹함수가 없는 일반 조건을 사용할 수 있다.
NULL을 가진 행을 제외하고 수행한다.
HAVING 절은 집계함수를 이용하여 조건 표시를 할 수 있다.
GROUP BY절에 없는 컬럼은 ORDER BY에서 사용할 수 없다.

CASE WHEN

CASE WHEN LOC = 'a' THEN 'b'
CASE LOC WHEN 'a' THEN 'b'
위의 두 표현식은 같다.
첫 번째는 Boolean 형식을 사용하며 두 번째는 단순한 표현식을 사용한다.

CASE문에 ELSE가 생략되었을 경우 NULL을 반환한다.

트랜잭션

ACID
원자성: 모두 성공하던가 아니면 전혀 실행하지 말던가
일관성: DB 내용이 제대로 알맞게 들어가야함, 실행 전과 후의 값이 달라지면 안됨
고립성: 트랜잭션 도중 다른 트랜잭션의 영향을 받으면 안됨 (고립)
지속성: 트랜잭션이 성공적으로 수행되면 DB의 내용은 영속성 보장 (영구적으로 저장)

함수

ASCII: 아스키 코드 값 반환
CHR/CHAR 아스키 코드 값에 해당하는 문자 반환
CONCAT: 문자열 연결
SUBSTR/SUBSTRING: 문자열 m 위치에서 n개 문자 반환
-> SUBSTR('SQL_EXPERT_HELLO__', 5, 3) -> EXP (첫 문자는 0이 아니라 1부터 시작, m 위치에서 또 1로 시작)
TRIM: 공백 제거할 때 많이 사용해봤을 것, 특정 문자 제거, LTRIM, RTRIM으로 왼쪽, 오른쪽 지정 가능
SYSDATE/GETDATE(): 현재 날짜, 시각 출력
EXTRACT/DATEPART: 날짜에서 데이터 출력

profile
지극히 평범한 공대생

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN