BEGIN TRANSACTION (= BEGIN TRAN)
- BEGIN TRANSACTION으로 트랜잭션을 시작하고, COMMIT TRANSACTION 또는 ROLLBACK TRANSACTION으로 종료한다.
- ROLLBACK을 수행하면 가장 처음 BEGIN TRANSACTION을 실행한 시점까지 모든 작업이 취소된다.
- ROLLBACK은 아직 COMMIT되지 않은 상위 트랜잭션 전체에 영향을 준다.
SAVEPOINT(저장점)
- 트랜잭션 전체를 롤백하지 않고, 특정 지점까지만 되돌리고 싶을 때 사용한다.
- SAVEPOINT를 지정해두면 해당 시점 이후의 작업만 부분적으로 롤백할 수 있다.
Oracle
SAVEPOINT save_name;
...
ROLLBACK TO save_name;
SQL Server
SAVE TRANSACTION save_name;
...
ROLLBACK TRANSACTION save_name;
WHERE절
WHERE절은 특정 조건에 맞는 데이터만 조회할 때 사용한다.
조건식 구성 요소
- 컬럼명
- 비교 연산자
- 문자 / 숫자 / 표현식
- 비교 대상 컬럼
연산자 우선순위
- 괄호 ()
- 부정 연산자 NOT
- 비교 연산자
- =, >, >=, <, <=
- BETWEEN a AND b
- IN (list)
- LIKE
- IS NULL
- 논리 연산자
- AND
- OR
AND가 OR보다 우선순위가 높다.
자주 사용하는 비교 연산자
연산자의미
| != | 같지 않다 |
| ^= | 같지 않다(SQL Server) |
| <> | 같지 않다 |
| NOT 컬럼명 = 값 | 값과 같지 않다 |
| NOT 컬럼명 > 값 | 값보다 크지 않다 |
| BETWEEN a AND b | a 이상 b 이하 |
| IN (list) | 리스트 중 하나와 일치 |
| LIKE | 패턴 검색 |
| IS NULL | NULL 여부 확인 |
NULL의 연산
- NULL과의 연산 결과는 NULL이다.
- NULL과의 비교 연산 결과는 FALSE이다.
- NULL은 값이 존재하지 않는 상태이므로 크고 작음을 비교할 수 없다.
예시
SELECT NULL + 10; -- 결과: NULL
SELECT *
FROM MEMBER
WHERE NAME = NULL; -- 조회되지 않음
NULL 비교는 반드시 IS NULL 또는 IS NOT NULL을 사용해야 한다.
WHERE NAME IS NULL
빈 문자열 처리 (Oracle vs SQL Server)
다음과 같이 빈 문자열을 저장했다고 가정하자.
INSERT INTO 테이블명
VALUES ('999', '', '2015-11-11');
Oracle과 SQL Server는 빈 문자열('')을 다르게 처리한다.
구분OracleSQL Server
| '' 저장 | 자동으로 NULL 처리 | 실제 빈 문자열로 저장 |
| WHERE 컬럼 = '' | IS NULL과 동일하게 동작 | 그대로 빈 문자열 비교 |
| NOT NULL 컬럼에 '' 저장 | 오류 발생 (NULL 처리됨) | 저장 가능 |
Oracle
Oracle에서는 빈 문자열 ''을 NULL로 처리한다.
WHERE 컬럼 IS NULL
와 동일한 의미로 동작한다.
SQL Server
SQL Server에서는 빈 문자열이 실제 데이터로 저장된다.
WHERE 컬럼 = ''
처럼 조회해야 한다.
'SQL' 카테고리의 다른 글
| [프로그래머스] 조건에 맞는 사원 정보 조회하기 (0) | 2026.05.15 |
|---|---|
| SQL CASE문 정리 (0) | 2026.05.14 |
| SQLD 공부 1일차 (0) | 2025.05.29 |