본문 바로가기

SQL

[SQL] 동의어, SYNONYM! 다들 영어를 배우다 보면 한단어에 같은 영단어를 엮어서 많이 외웠을텐데요, 이를 동의어(Synonym)라고 합니다. 철자와 발음은 비록 다르지만 동일한 의미에서 쓰이죠. 데이터베이스에서도 동의어(보통 '시노님'이라고 부릅니다. 이하 시노님)가 쓰이는데요, 객체(Object)에게 Alias 기능을 부여합니다. 보통 테이블 명이 스키마명과 합쳐져서 길어지는 경우에, 원하는 문자열로 시노님이 구성이 가능한데요. 가령 예를 들면, hr.employees 를 emp 로 시노님을 등록해놓으면 다음에 hr.employees를 사용할때 간단히 emp로 불러들일 수 있습니다. 시노님을 만들기 전에 체크해야할 권한은 해당테이블에 대한 SELECT권한과, 시노님 생성 권한이 있어야 합니다. 권한 부여와 관련해서는 다음 링크.. 더보기
[SQL] 뷰를 사용합시다, VIEW! 지금까지 많은 객체(Object)들을 보아왔는데요, 최근에는 시퀀스였습니다. 사실 뷰를 먼저 봤어야 하는데, 흥미위주로 복습을 하는지라 글 순서가 이리 되었네요. 뷰는 '보안'에 의미에 무게를 둔 '돋보기' 기능이라 비유해도 될까요? 뷰(View)를 통해서 데이터를 조회해 볼 수 있는데요. SELECT처럼 보고싶은 내용을 선택해서 볼 수 있는게 아니라, 제한적으로 보여지게 됩니다. 무슨말이냐 하면 뷰는, 실제 데이터를 담고 있는 테이블을 간접적으로 볼 수 있게 합니다. 만일에 인사직원 중에 월급을 관리하는 직원들이 있다고 합시다. 그런데 그 담당직원에 대해서 SELECT 권한을 주게 되어버리면 그 사원에게는 필요없는 정보까지 모두 보여질 수 있습니다. 보안상으로도 문제가 있구요. 여기에서, 등장하는 것이.. 더보기
[SQL] 객체(Object) 권한 부여/삭제 이번글은 시스템 권한에 이은 객체(Object) 권한입니다. 객체권한은 주로 SQL 수행 작업과 관련된 것으로 DDL, DML 작업을 할 수 있도록 하는 권한입니다. 관련 있는 권한으로는 다음과 같습니다. SELECT | ALTER | INSERT | DELETE | UPDATE | INDEX | REFERENCES 잠시 알고 지나가야 할 부분은 뷰(VIEW)에서는 인덱스 생성과 ALTER 작업이 안된다는 것입니다. 권한을 부여하는 방법은 시스템 권한 부여 방식과 같습니다. GRANT 권한 ON 스키마.테이블명 TO 계정; 다음과 같이 가능합니다. [실행화면] 역시나 같은 방식으로 권한 삭제가 가능합니다. REVOKE 권한 ON 스키마.테이블명 FROM 계정; 기타 권한으로는 다음 세가지가 있습니다. W.. 더보기
[SQL] 계정 생성 및 시스템 권한 부여/삭제 여태껏 실습을 하시면서 보통 사용해온 계정은 hr 계정아니면 scott 계정 등등 있을텐데요. 이와 같은 계정은 오라클에서 제공하는 샘플 스키마로서 계정에 대한 권한들과 모든 테이블, 데이터들이 미리 구축 되어 있습니다. 이번 글에서는 계정 생성과 시스템 권한에 대해서 알아볼까 합니다. 우선 기존에 존재하던 스키마 계정을 사용할때는 관리자 계정으로 접속후 다음과 같이 해주어야 합니다. SQL> alter user hr identified by hr account unlock; SQL> alter user scott identified by oracle accoun unlock; 기존의 샘플 스키마들은 락(lock)이 걸려 있기 때문에 위와 같이 바꿔줘야 하는데, identified by 뒤에 나오는것은 .. 더보기
[SQL] B-Tree 인덱스 인덱스 종류 중에서 가장 흔히 쓰이는 B-Tree 인덱스 입니다. 프로그래밍 해보신분들 중에 자료구조 들으신분들은 조금 친숙하실텐데요. B-Tree(이하 비트리) 를 구성할 당시에는 각 데이터가 저장되어 있는 데이터 블록으로 부터 해당 컬럼을 이용해서 인덱스를 만듭니다. 그리고 위에 보시는 Root 블록으로 부터 Branch 블록, Leaf 블록으로 구성합니다. 데이터 블록에서 Leaf 블록을 구성할 때에는 해당 컬럼을 정렬해서 만들어 집니다. 이중 Leaf 블록이 데이터 블록의 해당 로우(ROW)에 접근할 수 있는 ROW ID를 가지고 있구요. 그 상위 단계인 Branch와 Root 에서는 각 하위 단계에 접근 할 수 있는 키값 즉 블록의 주소를 가지고 있습니다. 그리고 각 Branch 블록과 Root.. 더보기
[SQL] 색인기능, INDEX! 여러분은 보통 책에서 원하는 정보를 찾을때 어떻게 찾으세요? 단순히 책을 처음부터 한장한장 찾으시면서 찾으시진 않으시겠죠? 다들 앞부분에 있는 목차를 찾거나 뒤의 색인 또는 INDEX를 찾아서 원하는 키워드를 찾아 해당 페이지를 펼칠 겁니다. 이렇게 데이터베이스에서도 해당 정보를 찾을때 책의 뒷편에서 볼수 있는 인덱스(INDEX)를 이용합니다. 보통 데이터베이스는 엄청난 자료를 저장하고 있기때문에 하나의 자료를 찾기 위해서는 사람이 책에서 정보를 찾듯, 두가지 방법을 쓸 수 있는데요. 데이터베이스에서 원하는 정보(데이터)를 담고 있는 테이블 전체를 메모리에 저장시켜서 찾는 방법, 그러니까 저장되어 있는 데이터를 처음부터 이잡듯 뒤져서 정보를 찾는 겁니다. 이를 'FULL-TABLE SCAN' 방식이라고 .. 더보기
[SQL] 연속되는 숫자, SEQUENCE(시퀀스)! 우리가 학급에서 학생들에게 번호를 부여할때 1번부터 차례대로 최대 학생수까지 번호가 배정됩니다. 이 번호는 각 학생들을 구별할 수 있는 하나의 체계로서 데이터베이스에서는 기본키로 설정이 되는데요, 문자나 어떤 특정한 값이 아닌 이렇게 숫자로 각 데이터들을 구분한다고 할때, 사용되는 것이 SEQUENCE(시퀀스) 입니다. 시퀀스를 설정하게 되면 자료입력시에 순서대로 번호가 입력이 되는데, 한가지 예로 우리가 잘 알고 있는 hr 스키마의 employees 테이블을 살펴볼 수 있습니다. 어느 회사에서는 각 사원들이 입사를 할때 사원번호를 부여한다라고 할때, 이 사원번호는 그 사원을 인식할 수 있는 유일무일한 체계입니다. 다른 사원이 그 사원번호를 가질 수 없다는 말입니다. 이렇게 사원들을 관리하는 employ.. 더보기
[SQL] 제약조건, Constraint(NOT NULL, UNIQUE, PRIMARY KEY(기본키), FOREIGN KEY(외래키))! 테이블 작성시에 Constraint를 사용해서 입력하는 자료에 대해서 제약, 즉 규칙을 정해줄 수 있는데요. 이때 정해진 제약에 따라서 데이터가 입력이 됩니다. 제약에 배반된다면 자료 입력이 거부되면서 오류가 납니다. 즉, 데이터 무결성(Data Integrity)을 지키기 위한 데이터 무결성 제약조건(Integrity Constraint)에 대해서 알아볼까 합니다. 참고로, 네이버 지식백과에서는 데이터 무결성에 대해서 다음과 같이 밝히고 있는데요. "데이터를 인가되지 않은 방법으로 변경할 수 없도록 보호하는 성질" 쉽게 말하면, 권한이 부여된 계정이나 사람만이 접근 가능하고, 정확하고 완전한 데이터들이 저장되어 있는 상태라고 생각하시면 되겠습니다. 여기서 제약조건은 이러한 데이터 무결성을 보장함으로써 .. 더보기
[SQL] 추가된 데이터 타입, TIMESTAMP! TIMESTAMP는 오라클 9I 부터 추가된 확장형 데이터 타입으로 밀리초까지를 지원함으로써 DATE 타입보다는 정밀하게 시간을 나타냅니다. 초를 최대 9자리 지정해서 나타냄이 가능한데 보다 정밀하게 시간 정보를 알 수 있습니다. 디폴트(Default) 값은 6자리로 지정됩니다. 우선 TIMESTAMP는 3가지 종류로 나누어 볼 수 있는데요, 다음을 참조하시길 바랍니다. 1. TIMESTAMP(자리수) - '자리수'에 밀리초의 자리수를 지정해줍니다.(디폴트 6자리) 2. TIMESTAMP(자리수) WITH TIME ZONE - '자리수'에 밀리초의 자리수를 지정해줍니다.(디폴트 6자리) - TIMESTAMP + GMT 즉, 그리니치 표준시와의 차이를 함께 나타냅니다. 3. TIMESTAMP(자리수) WI.. 더보기
[SQL] 기본 데이터 타입(숫자, 문자, 날짜) CREATE를 이용한 테이블 생성시에 표기해주는 것이 데이터 타입인데요. 이번 글에서는 추가된 DATE타입을 제외한 기본 데이터 타입에 대해서 알아볼까해요. 우선 다루게 될 내용은 숫자, 문자, 날짜 데이터 타입 3가지입니다. 사실 각 타입에 더 많은 종류가 있으나 많이 쓰이는 것만 다루겠습니다. 1. 숫자 데이터 타입 · NUMBER(①, ②) - 가변 숫자 타입 - ① 전체 자리수 ② 소수점 이하 자리수 ※ 정수부의 자리수 = (전체자리수 - 소수점 이하 자리수) 먼저, 숫자 데이터 타입입니다. 만일에 숫자데이터 타입을 NUMBER(7,4) 로 지정한다면 , 소수자리수를 포함한 전체자리수가 7자리이고 그중에서 소수자리수는 4자리가 됩니다. 그러면 나머지 정수부분은 3자리가 되는군요. 자료 입력을 해보.. 더보기