쌍용 강북 교육센터 국비학원 Day 29일차
SET Operator (SET 연산자, 집합연산자)
1. UNION
UNION 은 테이블과 테이블을 합쳐서 보여주는 것으로써, 이것은 행과 행을 합친 결과를 보여주는 것이다.
이처럼 UNION은 집합의 합집합과 같은 의미이며 자동적으로 첫번째 컬럼을 기준으로 오름차순 정렬이된다. 특정 컬럼으로 나누어 볼떄 행의 결과물이 동일하게 나오는 것은 중복이 제거되기 때문에 select 문이나 혹은 연산할 때 유의해야 한다. 또한 컬럼명, 컬럼위치, 컬럼 수가 동일해야 한다.
JOIN 과 UNION의 차이점
JOIN은 테이블과 테이블의 컬럼과 컬럼을 합치는 것을 말하고 UNION은 테이블과 테이블의 행과 행을 합치는 것은 말한다.
2. UNION ALL
UNION ALL은 중복은 제거되어 나오는 UNION과 달리 중복을 그대로 나타내고 순서는 붙여진 그대로 사용된다.
3. INTERSECT
INTERSECT 는 집합의 교집합과 같은 의미이다.
4. MINUS
MINUS 는 집합의 차집합과 같은 의미이다. 예를들어 데이터를 실수로 잘못지웠을때 백업데이터와 기존데이터를 비교해 (차집합을 이용해서) 복구할때 쓰인다.
PSEUDO Column
(의사, 유사, 모조) 가상의 컬럼이라고 불리며 ROWID 와 ROWNUM 이 있다.
ROWID - 테이블에서 행의 위치를 지정하는 주소값으로 오라클이 내부적으로 사용하기 위해 만든 ID 값으로써 행에 대한 ID값인데, 오라클 전체내에서 고유한 값을 가진다. (테이블에서 새로운 행이 삽입되면 테이블 내부에서 자동적으로 생성)
AAAArs AAD AAAAUa AAA
- - - - - - - - - - - - - - - - - -
1 2 3 4
1. 6자리 - 데이터 오브젝트 번호 (data object number) - 오브젝트의 고유 번호
2. 3자리 - 상대적 파일 번호 (relative file number) - 각각의 데이터파일에 할당되는 번호
3. 6자리 - 블록 번호 (block number) - 데이터 블로그이 위치를 알려주는 번호
4. 3자리 - 블록내의 행 번호 (row number) - 오라클 블록의 헤더에 저장된 row directory slot 위치를 알려주는 고유 번호
ROWNUM - SELECT 순서대로 행 번호를 부여해주는 가상 컬럼. 해당 테이블에 insert 되어진 순서라고 볼수도 있으며 게시판 등 웹에서 많이 사용된다. (또는 rownum을 사용하지 않고 row_number() 함수를 사용해서 페이징 처리를 할 수 있다)
rownum의 작동방식 - 테이블 where 절이 실행될 때 조건에 맞으면 1을 부여하고 맞지않으면 번호를 부여하지 않고 버리는 방식으로 진행된다. 이러한 점으로 order by와 같이 사용했을 경우 where 절이 실행되었을 때 정렬을 먼저 하기 때문에 처리순서에 유의해야 한다. ( inline view나 서브쿼리 안에 사용할 것)
※ 페이징 처리 공식
where (서브쿼리 rownum의 alias) between (조회하고자하는 페이지번호 * 한 페이지당 보여줄 행의 개수) - (한 페이지당 보여줄 행의개수 - 1 ) and (조회하고자하는 페이지번호 * 한 페이지당 보여줄 행의 개수)
계층형 쿼리
한 테이블에 레코드들이 계층관계(상위,하위) 를 이루며 존재할 때, 이 관계에 따라 레코드를 계층관계(상위,하위) 한 구조로 데이터를 가져올 때 사용되는 SQL문을 의미한다.
START WITH
- 계층 구조 전개의 시작 위치를 지정. 상위의 값을 NULL이면 그 값이 최상위레벨이 된다.
CONNECT BY 절
이 절을 이용하여 상위계층과 하위계층의 관계를 규정할 수 있다. PRIOR 연산자와 함께 사용해서 계층구조를 표현한다. - 순방향 전개 : 상위 = PRIOR 하위
- 역 방향 전개: 하위 = PRIOR 상위
PRIOR 값을 반대로 하면 하위계층 구조로 표현된다.
명령어 분류 · 주요 명령어 정리
분류
|
명령어
|
기능
|
|
DQL
|
Data Query Language 데이터 질의어 |
SELECT
|
선택
|
DML
|
Data Manipulation Language
(데이터 조작어 - 테이블 데이터(레코드) 편집) (수동 commit 으로 rollback 가능) |
INSERT
|
데이터 입력
|
UPDATE
|
데이터 업데이트
|
||
DELETE
|
데이터 삭제
|
||
MERGE
|
데이터 병합
|
||
DDL
|
Data Definition Language
(데이터 정의어 - 테이블 설정 편집) (자동 commit 으로 rollback 불가) |
CREATE
|
테이블 생성
|
DROP
|
테이블 일체 삭제
|
||
ALTER
|
테이블 수정
|
||
TRUNCATE
|
테이블 데이터 삭제
|
||
COMMENT
|
테이블 데이터 삭제
|
||
DCL
|
Data Control Language
데이터 제어어 (rollback 불가) |
GRANT
|
권한 부여
|
REVOKE
|
권한 박탈
|
||
TCL
|
Transaction Control Language
트랜잭션 제어 |
COMMIT
|
변경사항 확정
|
ROLLBACK
|
변경사항 취소
(이전 커밋까지) |
||
SAVEPOINT
|
ROLLBACK TO
SAVEPOINT는 현재 트랜잭션을 지정된 저장점으로 롤백 |
데이터 조작어 (Data Manuplation Language - DML)
DML 문은 기본적으로 수동 commit 이다. 즉, DML 문을 수행한 다음에는 바로 디스크 (파일)에 적용되지 않고 commit 해야만 적용된다. 그래서 DML 문을 수행한 다음에 디스크 (파일)에 적용치 않고자 한다라면 rollback 하면 된다.
1. insert -> 데이터 입력
2. update -> 데이터 수정
3. delete -> 데이터 삭제
4. merge -> 데이터 병합
insert 기본 문법
insert into 테이블명 ( 컬럼명1, 컬럼명2, ...) values ( 값1, 값2, ...) ;
Conditional insert all - 조건이 있는 insert 문법
insert all
when ( 조건절 ) then into 테이블명1 ( 컬럼명1, 컬럼명2, ....) values ( 값1, 값2, .....)
when ( 조건절 ) then into 테이블명2 ( 컬럼명3, 컬럼명4, ....) values ( 값3, 값4, .....)
※ Unconditional insert all - 조건이 없는 (무조건적인) insert 문법
insert all
into 테이블명1 ( 컬럼명1, 컬럼명2, ....) values ( 값1, 값2, .....)
into 테이블명2 ( 컬럼명3, 컬럼명4, ....) values ( 값3, 값4, .....)
(SUB Query문) ;
참고 출처 : https://blog.naver.com/regenesis90/222191970738
'DB > Oracle' 카테고리의 다른 글
쌍용강북교육센터 국비 학원 Day 31일차 Oracle (ALTER, Foreign key 옵션) (0) | 2023.02.15 |
---|---|
쌍용강북교육센터 국비 학원 Day 30일차 Oracle (Merge, DDL, Constraint, 제약조건) (0) | 2023.02.14 |
쌍용강북교육센터 국비 학원 Day 28일차 Oracle (JOIN, INNER, OUTER, EQUI, SELF) (0) | 2023.02.10 |
쌍용강북교육센터 국비 학원 Day 27일차 Oracle (Sub Query, JOIN) (0) | 2023.02.09 |
쌍용강북교육센터 국비 학원 Day 26일차 Oracle (GROUP BY, HAVING, GROUPING, ROLLUP) (0) | 2023.02.08 |