본문 바로가기

문법

[SQL] DISTINCT & ALL, 중복 제거! DISTINCT 우선, SELECT문을 다음과 같이 작성, 실행시켜 봅니다. SELECT emp.department_id, dep.department_name FROM hr.employees emp INNER JOIN hr.departments dep ON emp.department_id=dep.department_id; 제가 이 쿼리에서 알고 싶은것은 employees 테이블에서 사원들이 속해있는 모든 부서아이디와 부서명 입니다. [실행화면] -전체 결과의 일부입니다. 쿼리를 실행했더니 위와 같은걸 확인해 볼 수 있는데요, 문제는 중복된 데이터가 여러개 존재한다는 것입니다. 쉽게 얘기하면 사원들 각각의 데이터를 조회했다고 할 수 있겠네요. 우리는 그저 부서 아이디와 부서명을 알고 싶은데 말이죠. 그럼 .. 더보기
[SQL] 그룹 함수(Group Functions) 에 대해서 알아보자! Group Functions 개요 그룹 함수-집계 함수-는 무엇일까요? 간단히 정의 하자면, 여러 로우(ROW)들이 한데 모여있는 집합에 대해 하나의 결과를 가져다 주는 것이라 말할 수 있습니다. 이를 테면, 전체값의 평균이라던지, 전체값의 합이라던지, 전체의 수(갯수)라던지. 이런게 그룹 전체에 대해서 조회하는 것입니다. 그럼, 어떤 그룹 함수들이 있는지 살펴보도록 할까요? 다음과 같이 7개의 함수가 존재합니다. 1. AVG - 평균을 반환합니다. 2. COUNT - Row의 갯수를 반환합니다. 3. MAX l - 최상위 값을 반환합니다. 4. MIN l - 최하위 값을 반환합니다. 5. STDDEV - 표준편차를 반환합니다. 6. SUM - 총 합을 반환합니다. 7. VARIANCE - 분산을 반환합.. 더보기
[SQL] SELECT, 데이터를 조회하자! 데이터 베이스 안에 있는 데이터를 조회하기 위해서는 이번시간에 알아볼 SELECT문이 필수 입니다. 기본이기도 하구요. 사실 SELECT문만 잘 사용할 줄 안다면, 프로그래밍 할때도 많은 도움이 됩니다. 일단, 우선 SELECT문의 형식부터 알아보겠습니다. SELECT 컬럼명1, 컬럼명2, .... FROM 테이블명 WHERE 조건 ORDER BY 컬럼명; SELECT는 단독으로 쓰여질 수 없습니다. 필수로 따라가야 할 것이 FROM이구요. 그외 조건(WHERE)이나 기타 다른 키워드를 사용할 수 있습니다. SELECT에서는 우선 조회할려는 데이터가 담겨있는 컬럼을 조회합니다. 한 컬럼내에서는 동일한 타입과 성격의 데이터가 저장이 되는데요. 하나의 테이블이 하나 이상의 컬럼을 담고 있을때 SELECT 를.. 더보기
[SQL] DB안의 사전, 데이터 딕셔너리(Data Dictionary)! 제가 SQL을 처음 배우면서 desc라는 명령을 알게 되었는데요, 그때 선생님께 물었습니다. "테이블에 존재하는 컬럼들에 대해서는 이 명령어를 써서 알 수 있는데, 제가 만든 테이블들의 전체 정보를 알 수 없을까요? 무엇을 만들었는지, 알고 싶습니다." 그랬더니 11장 예습하라고 하시던 선생님 생각이 납니다. 당시는 1,2장 배우고 있었던 때였죠. 아마, 얘기를 하시려던 부분이 데이터 딕셔너리(Data Dictionary) 파트 였을 겁니다. 데이터 딕셔너리는 스키마 · 사용자 · 객체 · 권한 · 롤 · 데이터베이스의 정보 등등, 오라클 데이터베이스를 운영하는데 필요한 정보를 관리하는 별도의 객체들을 일컫습니다. 시스템 정보를 가지고 있기 때문에 (건드리면 위험) 보통, 뷰를 통해서 조회만 할 수 있습.. 더보기
[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' 방식이라고 .. 더보기