basic/sql

SQL[09] - 트랜젝션, 서브쿼리, 시퀀스

못지(Motji) 2021. 6. 1. 22:01

*오라클 oracle 기준


트랜젝션 Transaction

데이터 처리의 한 단위

데이터의 일관성을 보증

  • COMMIT : 변경사항 저장
  • ROLLBACK : 변경사항 취소
  • SAVEPOINT 백업

서브쿼리

쿼리문 안에 다시 쿼리문을 작성하는 형태

* 주의 사항

**반드시 괄호로 묶고, WHERE 절 에서는 연산자 오른쪽에 위치해야 한다

SELECT 컬럼명 FROM (서브쿼리문);
SELECT 컬럼명 FROM (서브쿼리문) WHERE 조건;
SELECT 컬럼명 FROM 테이블명 WHERE 조건컬럼 (서브쿼리문);

⌨ FROM절에 서브쿼리문이 오는 경우

∙ EMP 테이블에서 EMPNO, ENAME, JOB, SAL 컬럼중 SAL이 3000이상일 경우 전부 출력하기

▸EMPNO, ENAME, JOB, SAL만 EMP에서 가져와서 조건을 걸고 출력하고 싶은 것

SELECT * FROM (SELECT EMPNO, ENAME, JOB, SAL FROM EMP) WHERE SAL > 3000;

∙ 사원번호 7900의 직무를 꺼내 같은 직무인 사람의 이름과 직업을 찾는 명령

SELECT ENAME, JOB FROM EMP WHERE JOB = (SELECT JOB FROM EMP WHERE EMPNO = 7900);

 


시퀀스 SEQUENCE

유일(UNIQUE)한 값을 생성해주는 오라클 객체

시퀀스를 생성하면 기본키(PK)와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있다.

시퀀스 생성

이름 지을때 일반적으로 '테이블명_seq'

CREATE SEQUENCE 시퀀스이름;

옵션 (생략가능)

  •  START WHITH n : 시퀀스 시작값 지정
  • INCREAMENT BY n : 시퀀스 증가값 지정
  • MAXVALUE n or NOMAXVALUE : 최대값 지정
  • MINVALUE n or NOMINVALUE : 최소값 지정
  • CYCLE or NOCYCLE : 최대값 도달시 순환여부
  • CACHE or NOCACHE : 메모리에 시퀀스 값을 미리 할당할지 여부

시퀀스 조회

일반조회는 DUAL 테이블 사용

시퀀스 삭제

DROP SEQUENCE 시퀀스명;

 

 

⌨ 시퀀스 생성하여 사용해보기

생략한 옵션은 기본값으로 설정 된다.

-- 전체 시퀀스 조회
SELECT * FROM USER_SEQUENCES;
-- 시퀀스 생성
CREATE SEQUENCE TEST_SEQ NOCACHE;
-- 시퀀스의 다음값
SELECT TEST_SEQ.NEXTVAL FROM DUAL;
-- 현재 시퀀스가 가지고 있는 값
SELECT TEST_SEQ.CURRVAL FROM DUAL;
-- 시퀀스 사용
INSERT INTO TEST VALUeS('java11','0000', TEST_SEQ.NEXTVAL, sysdate);

집합

• 합집합  : UNION / UNINO ALL

• 교집합 : INTERSECT

• 차집합 : MINUS

 

⌨ 합집합

∙ 선택한 테이블의 데이터 전부 합하여 조회

SELECT DEPTNO FROM EMP
UNION ALL
SELECT DEPTNO FROM DEPT;

 

⌨ 교집합

∙ 선택한 테이블 데이터들의 공통값만 조회

SELECT DEPTNO FROM EMP
INTERSECT 
SELECT DEPTNO FROM DEPT;

 

⌨ 차집합

∙ 선택한 테이블 데이터들의 공통값을 제외하고 조회

SELECT DEPTNO FROM DEPT
MINUS
SELECT DEPTNO FROM EMP;