트랜잭션이란 업무 실행 단위/논리 명령 단위를 말한다. 계좌이체를 예로 들면 업무적인 단위라면 update를 하는 것을 물리적인 명령 단위라고 한다. 하지만 쿼리문 중 하나의 문제가 없음을 확인하고 DB에 반영을 해야 한다. 반대로 문제가 있다면 해당 트랜잭션을 취소해야 한다. 그리고 해당 트랜잭션이 진행되는 동안에는 다른 접근을 막기 위해 LOCK 걸고 종료된 이후에 UNLOCK을 시행한다.

COMMIT은 해당 세션에서 수행한 DML을 DB에 반영시킨다는 명령으로 다음과 같이 사용한다.
COMMIT;
ROLLBACK은 해당 세션에서 수행한 DML을 DB에 반영시키지 않고 이전 상태로 되돌리는 것을 말한다.
ROLLBACK;
아래와 같이 같은 DB에 다른 세션 2개가 연결되어 있는 상황에서 왼쪽 세션이 다음과 같은 명령을 수행한다.
UPDATE MEMBER SET PWD='111', name='오공' WHERE ID='dragon';
그 순간 다른 세션에서 수정/삭제하지 못하도록 LOCK이 걸리며 SELECT를 통해 해당 테이블을 보더라도 명령 수행 전 값들을 보게 된다. 이 상태에서 오른쪽 세션이 다음과 같이 쿼리를 날린다.
UPDATE MEMBER SET PWD='222', name='손오공' WHERE ID='dragon';
그럼 오른쪽 세션에서는 LOCK이 풀릴 때까지 대기하며 왼쪽 세션에서 COMMIT 혹은 ROLLBACK을 통해 UNLOCK을 시켜줘야 진행된다. COMMIT을 수행하면 그 즉시 오른쪽 세션의 쿼리도 실행된다.
COMMIT;
하지만 오른쪽 세션 역시 COMMIT / ROLLBACK은 안되어 LOCK이 걸려있는 상태라 오른쪽 세션에서만 UPDATE 된 상태를 볼 수 있으며 왼쪽 세션에서는 알 수 없다.

데이터 조회를 위해서 특정 조건을 걸 떄에는 산술연산자가 사용된다. 원하는 필드만 혹은 조건에 맞는 데이터만 혹은 둘다를 만족하는 테이블을 반환하고자 할 때 사용할 수 있다.

산술 연산자 중 더하기 연산은 해당 필드의 값에 원하는 값을 미리 더해 반환할 때 쓰인다. 만약 NOTICE 테이블에서 HIT 필드를 조회하는데 1씩 더하여 조회하고자 한다면 다음과 같이 작성할 수 있다.
SELECT HIT+1 HIT FROM NOTICE;
만약 숫자와 문자를 더하기 연산자로 사용한다면?
SELECT 1+'3' FROM DUAL;
결과는 4가 나오며 그 이유는 오라클에서 + 연산자는 기본적으로 숫자만 더할 때 쓰인다. 문자열끼리 합치는 연산자는 ||이다.
DUAL은 dummy table을 의미하며 임시로 쓰는 테이블이다
SELECT '3'||10 FROM DUAL;
NOTICE 테이블의 모든 회원의 이름을 조회하되 이름과 ID를 함께 나타내도록 하고자 한다.
ex) 홍길동(1)
SELECT writer_id||'('||id||')' name FROM NOTICE;
| 기호 | 설명 |
|---|---|
| =, !=, ^=, <> | 같거나 다른 지 비교 |
| >, <, >=, <= | 초과, 미만, 이상, 이하 |
| IS NULL, IS NOT NULL | 비어있는지 아닌지 비교 |
다름을 확인하는 연산자 오라클 표준은
<>이나 다른 DBMS나 표준들에 의해!=^=도 사용
게시글 중 작성자가 'newlec'인 게시글만 조회
SELECT * FROM NOTICE WHERE WRITER_ID = 'newlec';
게시글 중 조회수가 3이 넘는 글만 조회
SELECT * FROM NOTICE WHERE HIT > 3;
게시글 중 내용을 입력하지 않은 게시글을 조회
SELECT * FROM NOTICE WHERE CONTENT IS NULL
이 때 다음과 같이 작성하면 내용에 'NULL'이 들어간 것을 조회하게 되므로 주의
SELECT * FROM NOTICE WHERE CONTENT = 'NULL'
NOT, AND, OR, BETWEEN, IN
조회수가 0, 1, 2인 게시글을 조회
SELECT * FROM NOTICE WHERE HIT=0 OR HIT=1 OR HIT=2;
SELECT * FROM NOTICE WHERE 0 <= HIT AND HIT <=2;
SELECT * FROM NOTICE WHERE HIT BETWEEN 0 AND 2;
조회수가 0, 2, 7인 게시글을 조회
SELECT * FROM NOTICE WHERE HIT=0 OR HIT=2 OR HIT=7;
SELECT * FROM NOTICE WHERE HIT IN (0, 2, 7);
조회수가 0, 2, 7이 아닌 게시글 조회
SELECT * FROM NOTICE WHERE HIT NOT IN (0, 2, 7);
LIKE, %, _
회원 중에 '박'씨 성을 조회
SELECT * FROM MEMBER WHERE NAME LIKE '박%';
%는 0개 이상의 문자를 의미
아래는 '박%'문자열인 멤버를 찾는 쿼리
SELECT * FROM MEMBER WHERE NAME = '박%';
회원 중 이름에 '도'가 들어간 회원을 조회
SELECT * FROM MEMBER WHERE NAME LIKE '%도%';
변칙) 회원 중 '박'씨 성을 제외한 회원 조회
SELECT * FROM MEMBER WHERE NAME NOT LIKE '박%';
회원 중에 '박'씨이고 이름이 외자인 회원을 조회
SELECT * FROM MEMBER WHERE NAME LIKE '박_';
_는 자릿수 하나를 의미