이번 포스팅에서는 지난 포스팅에서 마무리하지 못한 DDL문 중 VIEW에 대해 공부하고,
DML문에 대해 공부하겠습니다. 실제 업무에서 SQL문을 통해 데이터를 조회, 추출할 경우
VIEW를 활용하는 경우가 많기 때문에 VIEW에 대해서는 보다 자세히 공부해보려고 합니다.
1. 뷰(View)
뷰(View) 란? 뷰는 테이블로부터 유도된 가상의 테이블로 실제 데이터를 가지고 있지 않고,
테이블을 참조해서 원하는 칼럼만을 조회할 수 있는 개념입니다.
뷰는 데이터 딕셔너리(Data Dictionary)에 SQL문 형태로 저장하되 실행 시에 참조됩니다.
※ 데이터딕셔너리 : 대부분 읽기 전용으로 제공되는 테이블 및 뷰들의 집합으로 DB 전반에 대한 정보를 제공하며,
오라클 데이터베이스는 명령어 실행될 때마다 데이터 딕셔너리를 접근합니다.작업 동안 Oracle은 데이터
딕셔너리를 읽어 객체의 존재여부와 사용자에게 적합한 접근 권한이 있는지를 확인하고,
Oracle은 데이터 딕셔너리를 계속 갱신하여 DataBase 구조, 감사, 사용자권한, 데이터등의 변경 사항을 반영합니다.
뷰 사용 시 장점
1) 뷰는 가상 테이블이기 때문에 물리적으로 구현되어 있지 않으며, 따라서 논리적 독립성을 제공합니다.
2) 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단합니다.
3) 뷰는 필요한 데이터만 공개되기 때문에 원천 테이블 정보를 알 수 없으며, 따라서 뷰를 통해서만
데이터에 접근하게 하면 뷰에 나타나지 않는 데이터를 보호할 수 있습니다.
뷰 사용 시 단점
1) 독립적인 인덱스를 가질 수 없습니다.
2) ALTER VIEW 문을 사용할 수 없기 때문에, 뷰의 정의를 변경할 수 없습니다.
3) 뷰로 구성된 데이터에 대해 삽입, 삭제, 갱신 연산에 제약이 따릅니다.
2. 뷰(View)의 생성/조회/삭제
① 뷰의 생성은 CREATE VIEW 문을 사용하며, 뷰로 만들 테이블을 AS 다음 SELECT ~ FROM 구문을 통해 지정해 줍니다.이때 나중에 배우겠지만, 조인 등 여러 가지 구문을 활용해 필요한 테이블을 뷰를 통해 구현할 수 있습니다.
② 뷰를 생성한 후 조회는 일반 테이블 조회와 동일하게 SELECT문을 통해 해 줍니다.
③ 원천 테이블에 데이터를 입력 후 VIEW 테이블을 조회 시, VIEW 테이블에도 동일하게 적용되는 것을
확인해 볼 수 있습니다.
④ DROP VIEW를 통해 VIEW 테이블을 삭제해 줍니다.
DML(Data Manipulation Language)
DML문은 앞선 포스팅에서 설명했듯, 테이블에서 데이터를 입력, 수정, 삭제, 조회할 수 있습니다.
1. INSERT문
INSERT문은 테이블에 데이터를 입력하는 DML문으로 Syntax는 아래와 같습니다.
INSERT INTO table (column1, column2, ……) VALUES (expression1, expression2, ….);
이미 테이블 생성 시, 활용한 SQL문이지만 아래와 같이 EMPLOYEE 테이블에 데이터를 삽입하기 위해서는
테이블명, 칼럼명, 데이터 순으로 입력하면 됩니다.
사용법 참고사항
1) 데이터를 입력할 때 문자열을 입력하는 경우에는 작은따옴표(‘ ‘)를 사용해야 합니다.
2) 입력 대상 테이블의 모든 칼럼에 대해 데이터를 입력할 경우 칼럼명을 생략할 수 있습니다.
※ 주의사항! INSERT문을 실행했다고 반드시 데이터 파일에 저장되는 것은 아니며,
데이터를 저장하기 위해 TCL문인 Commit을 실행해야 합니다.
만약 Auto Commit(Set auto commit on)으로 설정된 경우 Commit을 실행하지 않아도 저장됩니다.
다음으로, SELECT문을 이용해서 입력할 수 있습니다.
입력하고자 하는 데이터를 다른 테이블에서 가지고 있을 경우, SELECT문을 이용 해당 테이블을 조회 후 삽입하고자
하는 테이블에 지정하여 입력할 수 있습니다.
3) Nologging 사용
DDL 또는 DML 문장에 의해 데이터베이스에 저장된 값 또는 데이터베이스 구조가 변경될 경우 REDO 로그 파일에 해당
정보들을 기록하게 됩니다. REDO 로그 기록은 DB가 깨지거나 오류가 발생할 경우 남겨진 기록을 이용하여 원상태로
복구하기 위해 적재되는 기록입니다.
Nologging 옵션은 로그파일의 기록을 최소화함으로써 입력 성능을 향상시킬 수 있는 방법입니다.
아래와 같이 ALTER문을 이용해 옵션을 지정해 줄 수 있으며, Nologging 옵션은 Buffer Cache라는 메모리 영역을
생략하고 기록합니다.
- ALTER TABLE DEPARTMENT NOLOGGING;
2. UPDATE문
입력된 데이터를 수정하기 위해 사용합니다.
UPDATE문을 이용 원하는 조건으로 데이터를 검색 후 해당 조건의 데이터를 수정할 수 있습니다.
아래 예시에서 1201001번 사원번호를 가진 직원의 이름을 George2로 변경하였고
직원정보 테이블을 조회 시 변경되었음을 확인할 수 있습니다.
3. DELETE문
DELETE문은 원하는 조건을 검색해서 해당되는 행을 삭제합니다.
조건문을 입력하지 않으면 모든 데이터가 삭제되기 때문에 사용 시 주의해야 합니다.
아래 예시에서 DELETE문을 통해 사원번호가 1201001번인 직원의 데이터를 삭제했고,
직원정보 테이블 조회 시 삭제되었음을 확인할 수 있습니다.
참고) 테이블 용량
여기서 DELETE문을 사용하여 데이터를 삭제하더라도 테이블의 용량이 삭제되진 않습니다.
데이블의 용량이 삭제되지 않는다는 것이 어떤 의미인지 간략하게 알아보면 아래와 같습니다.
Oracle 데이터베이스는 저장공간을 할당할 때 Extent 단위로 할당하게 되며, 테이블에 데이터가 입력되면 Extent에 저장됩니다. 만약 Extent의 크기가 MAX_EXTENT를 넘어서게 되면 용량 초과 오류가 발생하게 됩니다.
DELETE문을 사용하더라도 Extent의 용량은 초기화되지 않습니다.
용량을 삭제하기 위해서는 “TRUNCATE TABLE”문을 통해 해당 테이블의 용량을 삭제해야 합니다.
다만, TRUNCATE문을 사용할 경우 테이블의 모든 데이터를 삭제하게 됩니다.
다음 포스팅에서는 DML문 중 가장 자주 사용되고 중요한 SELECT문과 WHERE문에 대해 공부하겠습니다.
이전 포스팅 DDL문
2023.09.18 - [분류 전체 보기] - [SQLD]003. SQL 기본 두 번째 공부. DDL, CREATE, ALTER, DROP
[SQLD]003. SQL 기본 두번째 공부. DDL, CREATE, ALTER, DROP
이번 포스팅에서는 SQL 기본 공부 중 DDL과 DML에 대해서 공부하는 과정을 포스팅하겠습니다. 앞선 포스팅에서 공부했지만 DDL은 관계형 데이터베이스의 구조를 정의하는 언어이고, DML은 테이블에
realisticguy.com