반응형

 

 이진값

팔진값

십진값 

십육진값 

 0000

0

 0

 0 

 0001

1

 1

1

 0010

2

 2

 2

 0011

3

 3

 3

 0100

4

 4

 4

 0101

5

 5

 5

 0110

6

 6

 6

 0111

7

 7

 7

 1000

 10

 8

 8

 1001

 11

 9

 9

 1010

 12

 10

 A

 1011

 13

 11

 B

 1100

 14

 12

 C

 1101

 15

 13

 D

 1110

 16

 14

 E

 1111

 17

 15

F

 

반응형
반응형
  • 정보 시스템으로의 통합된 접근을 가능하게 하는 데이터베이스 관리 시스템
  • Oracle Instance와 Oracle Database로 구성된다.

Oracle Server=DBMS(=Program)
- Instance
- Database

Oracle 구동 방법
SQL> startup (=오라클 서버 기동)

■ 구동 순서
no mount 단계 => Parameter File Check (물리적인 Disk에서 확인한다.)
(Instance 생성)
(1). SGA_MAX_SIZE=1G일 때 오라클이 구동하면서 SGA(System Global Area)에 할당된다.
  (1.1) SGA는 거대한 공간이다.
  (1.2) SGA 내부에는 Shared pool, Database Buffer Cache, Log Buffer이 기본적으로 생성된다.
  (1.3) Shared pool은 library Cache, Data Dictionary Cache로 구분된다.

(2). SGA_TARGET (동적개념)
(3). SHARED_POOL_SIZE
(4). DB_CACHE_SIZE
(5). LOG_BUFFER
(6). No mount 상태에서 Control File을 재 생성할 수 있다

mount 단계 => Control_files 확인
(1). Data File, Redo log 상태 확인
(2). 오라클 디스크와 데이터의 정합성을 유지하기 위한 정보를 Control File에 담는다.
(3) Mount 상태는 Control File은 읽었지만 Data File, Redo log에 문제가 생겨서 Open이 안되는 경우도 있다.

open 단계 => File 간의 동기화 체크
(1). Control File, Data File, Redo log 파일들의 동기화 시점을 Check
(2). File 간의 동기화를 Check하고 정상이면 메모리를 통해서 데이터 파일을 Access를 할 수 있다.
  -> 데이터의 동기화는 SCN(System Change Number)을 통해서 확인한다.
  -> commit을 할 때마다 일률적으로 증가하게 된다.
  -> Control File의 SCN, Data File Header에도 SCN값이 있고 Redo log도 commit을 할 때마다 SCN값이 증가한다.

■ select문의 처리 순서
(1). Parse
  (1.1) 동일한 문장이 Library Cache에 존재하는지 확인한다.
  (1.2) 동일한 문장이 존재하면 기존 공간을 사용, 존재하지 않으면 새롭게 공간을 확보한다.
  (1.3) 문법 검사, Schma검사, 권한 검사
  (1.4) 실행 계획 생성 (Optimizer)

(2). Bind
  (2.1) Bind Variable을 사용하는 경우

(3). Execute
  (3.1) 찾고자 하는 Block이 Database Buffer Cache에 존재하는지 확인
  (3.2) 존재하면 그냥 사용, 존재하지 않으면 Data File로부터 메모리로 Load
  (3.3) 서버 프로세스에 의한 데이터 처리

(4). Fetch
  (4.1) 실행단계에서 가져온 Disk Block에서 필요한 데이터만 추출하는 작업

반응형
반응형

select문의 기본 문법은 select, from, where, order 순서로 나열된다.

where절은 SQL문 처리의 대상이 되는 행을 selection 하는 조건이다.

이때, Fetch는 원하는 정보를 뽑아서 올려내는 과정이며, 서버나 디비를 패치한다는 (Patch)는 아니다.

우리는 SQL문을 작성할 때 몇 가지를 알아둬야 한다.

1. 대소문자를 구분 안함.

2. 하나 이상의 여러 라인에 걸쳐 (절단위로) 작성가능하지만, 단어가 나눠질 수는 없다.

3. 들여쓰기를 활용하면 문장 읽기가 수월해 진다.

4. SQL*Plus, iSQL*Plus에서 문장을 끝낼 때는 ; (세미콜론)을 적는것을 권장한다.

 

반응형

'SQL plus와 기본적인 쿼리' 카테고리의 다른 글

SQL* Plus 소개  (0) 2011.06.25
반응형


5. select column(s) -> 모든 칼럼의 정보를 메모리에 가져온다.

1. from table(s) -> 관련된 테이블의 딕셔너리하고 칼럼 정보를 가져온다.

2. [where condition(s)] -> 필료한 레코드를 정리한다.

3. [group by column(s)] -> 소그룹 정보를 집계할 때 사용한다.

4. [having condition(s)] -> 소그룹 정보를 집계할 때 사용한다.

6. [order by column(s)] -> 끝.

반응형
반응형

Oracle 사용자의 환경설정 파일에 ORACLE_SID 변수가 지정이 안되어 있는 경우이다.

Bash Shell을 사용한다면 .bash_profile

Korn Shell을 사용한다면 .profile
반응형
반응형

오라클을 포함한 모든 관계 데이터베이스에서는 order by 절을 이용하지 않는 한, 쿼리 결과를 자동적으로 정렬하지 않는다.

즉 결과를 정렬하기 위해서는 반드시 order by 절을 사용해야만 한다.

이제부터는 HR 사용자를 이용해 알아보자.



여기서는 직원들의 월급을 오름차순으로 정렬하였다. 오른차순 정렬은 Default 값이고, ASC 키워드를 이용해 직접 지정하는 것도

가능하다. 내림차순으로 정리하려면 다음과 같은 형식을 이용하면 된다.



[Try it Out] 여러 열을 사용한 정렬



▒ 결과분석

이 예에서는 다수 열 정렬 순서를 적용하여 먼저 직원의 JOB_ID로 정렬한 후, 직원의 SALARY로 정렬하도록 했다.

Default 오름차순 정렬이 이용되므로 낮은 월급이 먼저 리스트 되고 높은 월급 순으로 진행된다. 이것은 같은 JOB_ID를 갖는

직원이 두 명 이상일 때만 적용된다. 예를 들어, SALARY를 첫번째 정렬 기준으로 지정했다면 Kochhar가 King 위쪽에 위치해

있을 것이다. 하지만 JOB_ID로 정렬했으므로, King이 Kochhar보다는 위쪽에 위치해 있다.

order by 절을 이용할 때는 다음과 같은 두 가지 사항을 기억하자.

1. 정렬의 기준이 될 열을 반드시 select 절에 포함될 필요는 없다. 정렬의 기준이 될 열을 보여줄 필요가 없는 경우 유용하다.

2. select 절 내에서 열 위치를 참조하는 숫자를 지정해 쿼리를 정렬할 수 있다.

▒ Group by 와 Having

group by 절은 쿼리 결과셋 내의 레코드들을 그룹으로 지정하여, 데이터의 집합을 얻거나 전체 그룹에 대한 요약 정보를 한 행으로

표시할 수 있게 해준다.

다음 쿼리는 HR의 EMPLOYEES 테이블에서 JOB_ID 열을 선택하여 SALARY 정보를 분석하는 용도로 사용된다.



이와 같이 각각의 JOB_ID에는 너무 많은 SALARY 값이 포함되어 있다. Group by 절이 유용하게 쓰일 수 있는 경우인 것이다.

이제부터 월급의 평균/합/최고금액 그리고 각 그룹 당 행의 수를 세는 몇 가지 SQL 함수와 함께 Group by 절을 사용해보자.



EMPLOYEES 테이블에서 모든 주식 관리자 (JOB_ID = ST_MAN)의 월급을 얻는 쿼리를 실행해 보면 앞의 Group by 쿼리 결과가

맞는지 확인할 수 있다.


결과를 계산해보면 ST_MAN인 직원의 SALARY 합은 36400이고, 이를 JOB_ID 직함을 가진 직원의 수로 나누면 7280을 얻게 된다.

Group by 절과 함께 Group by 쿼리에 의해 리턴된 행 그룹을 필터링할 수 있게 해주는 부가적인 절이 Having 절이다.

Having 절은 Group by 절을 이용하는 쿼리에서만 이용가능하며, 항상 AVG, SUM, MAX 등과 같은 집합 SQL 함수를 포함한다.
 

반응형
반응형

구조적 쿼리 언어(SQL: Structured Query Language)라는 이름은 데이터베이스에게 무엇인가를 묻는 방법을 의미하지만

이는 정확한 명명법이라 볼 수 없다. 그 이유인 즉 사용자는 SQL을 이용해 단순한 쿼리 뿐만이 아니라 데이터베이스 객체를

만들거나 제고하고, 데이터베이스 내의 데이터를 삽입, 갱신, 삭제하거나 다양한 운영 작업을 할 수 있기 때문이다.

SQL은 오라클 사유 기술은 아니며, 관계 데이터베이스 관리 시스템의 표준 언어이다.

SQL의 역사는 잠시 접어두고 개인이 별도로 알아보고 여러분이 가장 먼저 알아두어야 할 것은 SQL에도 몇 가지 분류가

있다는 것이다.

▒ 데이터 처리 언어 (DML : Data Manipulation Language)

▒ 데이터 정의 언어 (DDL : Data Definition Language)

▒ 트랜잭션 제어문

▒ 세션 제어문

▒ 시스템 제어문


SQL이 중요한 이유는?

간단히 말해서 SQL은 데이터베이스와 상호 작용을 통해 객체를 만들고, 테이블에 데이터를 삽입하고, 데이터베이스에서 데이터를

얻는 등의 다양한 작업을 할 수 있도록 해준다.


테이블에는 무엇이 있는가?

테이블은 관계 데이터베이스에 데이터 저장을 위해 이용되는 객체로서, 행과 열을 통해 스프레듯트와 비슷한 방식으로 데이터를

표시한다. 열은 테이블 내 데이터의 속성을 저장하는 데 이용되며, 테이블 내의 각 열은 열 이름과 데이터 타입을 포함한다.

데이터 타입에는 길이(Length)를 가지는 것과 스케일(Scale)과 정확도(Preision)를 가지는 것이 있다.

예를 들자면 VARCHAR2 데이터 타입은 열이 얼마나 많은 바이트 수를 가질 수 있는가를 지정하는 길이를 가지며, 10 바이트를

가질 수 있는 VARCHAR2 열은 VARCHAR2(10) 형식으로 지정될 수 있다.

반면에 NUMBER 데이터 타입은 한 행의 열이 얼마나 많은 자릿수를 가질 수 있는지를 지정하는 정확도와 소수점 아래에 포함될

숫자의 수를 지정하는 스케일을 가진다.

통화 값을 위한 NUMBER 열은 NUMBER(11,2) 형식으로 쓰여질 수 있는데, 이는 전체 11개의 숫자를 포함할 수 있으며, 소수점

아래에 2개의 숫자가 포함된다는 의미이다.


데이터 관리 언어(DML)

이제 테이블의 일반적인 측면을 살펴보았으므로, 데이터 관리 언어(DML)을 통한 좀더 세부적인 테이블 이용 방법을 알아보자.

DML은 데이터베이스에서 데이터를 쿼리하거나 데이터를 관리하는 SQL 구문들로 구성된다.


쿼리

SELECT 구문, 또는 쿼리는 데이터베이스에게 정보를 요청하는 데 이용된다. SQL 구문은 절이라 불리는 몇 개의 섹션으로

구분되며, SELECT 구문의 경우 다음과 같은 절을 사용할 수 있다.

▒ WITH

▒ SELECT

▒ FROM

▒ WHERE

▒ GROUP BY

▒ HAVING

▒ ORDER BY

SELECT 절은 사용자가 보고자 하는 열을 지정하고, FROM 절은 이열을 찾을 데이터 원본을 오라클에게 알려준다.

다음과 같은 간단한 쿼리를 실행해보자.

이 쿼리에서 JOBS 테이블에서 모든 직업의 JOB_ID와 JOB_TITLE을 요청하고 있다. SELECT 절은 다음과 같다.

SQL> select job_id, job_title

그리고 FROM 절은 다음과 같다.

SQL> from jobs

이 두개의 절은 오라클의 쿼리에서 반드시 필요하다. 만약 FROM 절을 제외하면 다음과 같은 오류가 발생한다.



FROM 키워드가 있어야 할 곳에 없다는 에러 메시지이다.

테이블 내의 모든 열을 요청하는 쿼리르 작성할 때에는 "테이블의 모든 열"을 의미하는 별표(*) 기호를 이용하면 된다.



WHERE 절

사용자가 오라클에게 "EMP" 테이블의 모든 직원 데이터를 보여달라 라고 요청하면, 오라클은 문자 그대로 사용자가 요청한 모든

데이터를 돌려준다. 하지만, 특정 직원의 데이터와 같은 일부 데이터만을 얻고자 한다면 방법은 "WHERE" 절을 통해 특정 조건을

넣어주어야 한다. WHERE 절은 다음과 같이 쿼리의 FROM 절 뒤에 위치한다.

SELECT <열>
FROM <데이터 원본>
WHERE <조건 표현식>;

반응형
반응형



SQL Plus를 실행하는데 방법에 익숙해진 다음에는 이를 이용해 SQL을 실행하는 방법을 배울 차례이다.

데이터베이스에 접속할 때는 특정한 사용자 계정으로 접속하는 것이며, 여러분의 계정에 할당된 권한에 따라 데이터베이스에

보관된 데이터에 대한 접근이 가능한자의 여부가 결정 된다는 것을 먼저 기억해두자.

오라클은 데이터베이스 이용을 배우는 데 이용할 수 있는 몇 가지 예제 스키마를 제공한다. 우리가 이용할 첫번째 사용자 계정은

오라클 예제 스키마 (HR)으로 이 사용자 계정은 SQL Plus이용에 익숙해지는 데 이용할 수 있는 몇 가지 테이블들을 소유하고

있으므로, 유용하게 활용할 수 있다.

[Try it Out]




다음과 같은 결과를 볼 수 있다. 위 두개는 같은 결과를 출력하고 있지만 가독성을 위해서 두 번째 형식을 따르는게 좋다.

이는 HR사용자가 소유하고 있는 모든 테이블 목록이다.

[결과 분석]
USER_TABLE은 올라클 데이터 딕셔너리 포함된 뷰이며, 현재 사용자에게 속한 테이블에 대한 정보를 얻는데 이용한다.

앞의 예에서 우리는 사용자 HR으로 데이터베이스에 연결하였으므로, 다음과 같은 테이블이 사용자에게 속해 있다는 결과가

나타난 것이다. 이제 현재 사용자에게 속한 테이블이 무엇인지를 알 수 있으므로 JOBS 테이블에 저장된 데이터가 무엇인지를

알아내는 쿼리를 실행해보자.


결과를 보면 자동으로 줄바꿈이 되어있고 상당히 읽기가 힘들다. 이것은 SQL Plus 세션에 라인 당 데이터로 80 문자의 공간밖에

할당되어 있지 않으며, SQL Plus가 자동으로 모든 출력에 열 제목을 반복하기 때문이다.


SQL Plus에서 이런 문제를 해결하는 데는 3가지 방법이 있다.

1. 익숙해진다.

2. 적은 수의 열을 질의한다.

3. 결과를 변환한다.

[결과 변환하기]

▒ COLUMN
SQL Plus에서는 쿼리 실행의 결과가 데이터의 행과 열로 리턴되며, 쿼리 결과셋의 각 행에 대해 COLUMN 명령을 사용하면

출력 속성을 지정할 수 있다.

 


텍스트 문자열 $999,999,99는 본인이 선택하는 열의 숫자 값을 9로 대체할 것을 오라클에게 알려주는 포맷 매스크이다.

즉 출려값이 1600이고, 포맷 매스크 $999,999,99가 적용되면 결과는 $1,600,00가 된다. 또는 여웃자 데이터의 경우에는 다음과 같이

열의 너비를 지정할 수 있다.


이 쿼리에서  object_name열은 128문자이므로, 화면에 출력되면 전체 라인을 차지한다. 사실 열에 포함된 데이터는 이렇게 많은

공간을 차지하지는 않지만, SQL Plus가 이를 알지 못하기 때문에 열에서 리턴된 데이터를 포맷할 때는 데이터베이스 내의

열 정의에 포함된 길이에 맞도록 포맷틸할 필요가 있다.


a20의 a는 영숫자를 의미하며 20은 열의 너비를 의미한다. 이제 object_type열의 포맷옵션이 정의되었으므로 다시 쿼리를

실행해보자. SQL Plus내에서 코드를 다시 실행하려면 '/' 문자를 이용하면 된다.

포맷된 결과를 보면 object_type열이 이제 20 문자를 포함한다는 것과 각 행이 하나의 라인에 표시되고 있음을 알 수 있다.



▒ PAUSE
쿼리는 사용자의 SQL에 따라 수백만의 행을 리턴하거나 전혀 행을 리턴하지 않을 수도 있다.
(리터될 수 있는 행의 수는 무제한이다.)

SQL에서 데이터를 출력하는 속도는 매우 빠르기 때문에 이를 따라잡기는 쉽지 않다.

따라서 한 화면에 전부 볼 수 없는 데이터를 포함하는 쿼리나 보고서의 경우에느 화면에 스크롤된 데이터를 버퍼에 저장하고,

위나 아래로 스크롤 하여 쿼리의 결과를 모두 볼 수 있어야 한다.

PAUSE 명령은 바로 이런 경우를 위한 것이다.

 



이제 사용자가 실행한 쿼리의 결과가 페이지의 길이보다 길 경우에는 Enter키를 누를 때까지 출력이 정지된다.

PAUSE 명령이 작동중일 때 사용자가 쿼리를 실행하면, 오라클은 첫번째 페이지를 출력하기 전에 한 차례 정지한다.

즉 쿼리에 반응하지 않고 아무것도 하지 않고 있는 것으로 보일 수도 있다. 이 상태에서 Enter키를 누르면, 화면으로의

데이터 스풀링을 시작하며 첫번째 페이지를 보게 된다.

PAUSE 이용을 중지하려면 다음과 같은 명령을 이용하면 된다.


▒ PAGESIZE
쿼리를 실행하면 SQL는 먼저 사용자가 선택한 열 제목을 출력하고, 이어 해당하는 열 제목 아래 데이터를 스풀링하는데, 이 때

PAGESIZE 설정에 지정된 수 만큼의 행을 출력하고 다시 열 제목을 출력한다.

PAGESIZE의 디폴트 값은 14이지만 필요한 경우에는 원하는 값으로 변경할 수 있다.


▒ LINESIZE
LINESIZE를 이용하면 SQL에 설정된 Default LINESIZE(80)를 변경할 수 있다. SQL에서는 LINESIZE에 지정된 문자 만큼을

출력하면 다음 라인으로 넘겨 출력을 계속하므로, 충분히 넓은 창을 이용하고 있다면 줄바꿈을 피하도록 LINESIZE 값을

늘려도 된다.


반응형

+ Recent posts