관리 메뉴

I LOVE EJ

표준 Sql 구문정리 1부 본문

Data Base/ANSI Sql

표준 Sql 구문정리 1부

BeOne 2007. 10. 15. 17:15

SQL SQL*PLUS

SQL

ŸSQL tool또는 application Oracle Server 통신하기위한 언어이다.

ŸANSI(American National Standards Institute) 관계형 DBMS SQL 채택하고 있다.

ŸSQL문장들은 SQL buffer 한번에 개의 명령만 저장되고 SQL*PLUS 명령을 사용해서 편집 있다.

ŸSQL buffer SQL*PLUS 관리하며 새로운 SQL 명령이 들어오기까지 SQL문장은 남아있다.

 
SQL*PLUS

ŸSQL*PLUS SQL 문장을 인식하고 실행시키기 위한 Oracle Server tool 이다.

ŸSQL*PLUS SQL 확장은 아니다.

ŸSQL*PLUS 문장은 SQL buffer 들어가지 않는다.

 

SQL구문분류

Retrieval

Manipulation

Definition

Control

Miscellaneous

SELECT

 

INSERT

UPDATE

DELETE

COMMIT

ROLLBACK

CREATE

ALTER

DROP

RENAME

GRANT

REVOKE

AUDIT

NO AUDIT

LOCK

 

COMMENT

 

 

SQL*PLUS 명령어들

Execution

Edit

Environment

Report Format

/

RUN

EXECUTE

 

LIST

APPEND

CHANGE

DEL

INPUT

EDIT

SET

SHOW

PAUSE

 

COLUMN

CLEAR

BREAK

COMPUTE

TTITLE

BTITLE

File Manipulation

Interactive

Database Access

Miscellaneous

SAVE

GET

START

@

@@

SPOOL

DEFINE

UNDEFINE

PROMPT

ACCEPT

VARIABLE

PRINT

 

CONNECT

COPY

DISCONNECT

 

SQLPLUS

EXIT

HELP

DESCRIBE

HOST

REMARK

RUNFORM

TIMING

WHENEVER

 

4 RETRIEVE DATA

THE SELECT STATEMENT

데이터베이스 테이블로부터 데이터를 검색한다.

 

Syntax

 

SELECT [DISTINCT]  column_information

FROM  table(s)

WHERE  condition

ORDER BY  expression or keyword

 

   · SELECT          :  검색하고자 하는 column, express, constant 등을 나열한다.

   · DISTINCT    :  중복된 데이터를 나타내지 않음 없으면 나타냄

   · FROM             :  데이터를 얻고자 하는 테이블() 나열한다.

   · WHERE          :  특정 row(s) 검색하기위한 조건들을 나열한다.[option]

   · ORDER BY    :  검색된 row(s) 나타내는 우선순위를 나열한다.[option]

 

테이블의 모든 데이터 보기

 

SELECT { *  |  column_name [ , column_name …] }

FROM table_name

 

 

중복을 없앤 데이터 보기

 

SELECT DISTINCT column_name

FROM table_name

 

 

이름을 바꿔서 데이터 보기

 

SELECT [DISTINCT] column_name ALIAS_NAME [“alias_name”]

FROM table_name

 

   · ALIAS_NAME : 대문자만 쓰면 바로 rename 된다.

   ·alias_name  : 만약 alias_name 공백,특수문자,대소문자를 같이

      혼용해서 쓰면 “ ” 안에 쓴다.

   · column name alias 콤마로 구분한다.

   · Oracle Server Version 7.1에서는 AS keyword column name alias

    구별한다.

 

특정 레코드 데이터 보기

 

SELECT { *  |  column_name [ , column_name …] }

FROM table_name

WHERE condition

 

   · condition :  column 이름(), 표현식(), 상수() 비교 연산자들로

                       구성되어진다.

 

비교 연산자들

=

같다.

<>

다르다.

>

크다.

>=

크거나 같다.

<

작다.

<=

작거나 같다.

BETWEEN…AND…

두개의 사이

NOT BETWEEN…

AND…

두개의 사이가 아님

IN (List)

List 안의 값들과 같은

NOT IN (List)

List 안의 값들과 같지 않은

LIKE

문자열의 형태가 같은

IS NULL

Null

IS NOT NULL

Null 아닌

 

     Example1 : BETWEEN … AND …

 

SELECT  first_name, last_name, salary

FROM s_emp

WHERE salary BETWEEN 1500 AND 3000;

 

 

     Example2 : IN (List)

 

SELECT last_name, title, dept_id

FROM s_emp

WHERE title IN ( ‘Warehouse  Manager’,‘Stock Clerk’);

 

 

     Example3 : LIKE

 

SELECT last_name

FROM s_emp

WHERE last_name LIKE ‘_a%’;

 

   · %    :  여러 개의 문자와 대치된다.

   · _     :  개의 문자와 대치된다.

 

     Example4 : IS NULL

 

SELECT  id, name, credit_rating

FROM s_customer

WHERE sales_rep_id IS NULL;

 

 

복잡한 조건식으로 특정 레코드 데이터 보기

 

SELECT { *  |  column_name [ , column_name …] }

FROM table_name

WHERE condition {AND | OR} condition

 

 

연산우선순위

우선 순위

연산자

1

모든 비교 연산자

2

AND

3

OR

 

     Example1 : AND 연산 OR 연산 

 

SELECT last_name, salary, dept_id

FROM s_emp

WHERE salary >= 1000 AND dept_id == 44 OR dept_id = 42;

 

 

     Example2 : OR 연산 AND 연산

 

SELECT last_name, salary, dept_id

FROM s_emp

WHERE salary >= 1000 AND (dept_id ==44 OR dept_id = 42);

 

 

데이터를 순서대로 보기

 

SELECT { *  |  column_name [ , column_name …] }

FROM table_name

WHERE condition

ORDER BY column_name [ASC | DESC]

 

   · ASC  : 내림차순 정렬[default]

   · DESC : 오름차순 정렬

 

     Example1 :

 

SELECT last_name, salary, dept_id

FROM s_emp

WHERE title = ‘Stock Clerk’

ORDER BY dept_id, salary DECS;

 

   · dept_id  : 내림차순 정렬[default]

   · salary   : 오름차순 정렬

 

EDIT SQL STATEMENTS

SQL문장을 작성한 다양한 SQL*PLUS 명령으로 SQL 편집한다.

 

SQL*PLUS Edit Commands

  

      

L[IST] n

n line SQL 문장을 list 출력

SQL> L

A[PPEND] text

Current line 끝에 text 추가한다.

SQL> A , dept_id

C[HANGE]/old_text/new_text

old_text new_text 교체한다.

SQL> C/ENAME , JOB/MANAGER , SALARY

DEL

Current line 삭제

SQL> DEL

I[NPUT]

현재 line 뒤에 하나이상의 줄을 삽입한다.

입력한 [Return] 치면 나간다.

SQL> I ORDER BY last_name

      [Return]

n text

n번째 줄을 text 완전히 교체한다.

SQL> 2 FROM S_EMP

   · SQL*PLUS 명령어는 대소문자를 구분하지 않는다.

   · List 에는 ; 넣지 않는다.

   · * Current line 번호 뒤에 나타난다.

 

     Example :

 

SQL> SELECT name

  2   FROM s_region;

 

SQL> L 1

  1 * SELECT name

 

SQL> A “Region”

  1 * SELECT name “Region”

 

SQL> L 1

  1 * SELECT name “Region”

 

SQL> C/name/id

  1 * SELECT id “Region”

 

SQL> L

1          SELECT id “Region”

2 *  FROM s_region

 

SQL> I

3   WHERE name = ‘Asia’

4   [Return]

 

 

SQL*PLUS Commands to Execute SQL

 

    

/

SQL buffer 문장을 실행시킨다.

RUN

SQL buffer 문장을 실행시키고 화면 출력한다.

 

     Example :

 

SQL> RUN

  1   SELECT id “Region”

2         FROM s_region

3 * WHERE name = ‘Asia’

 

 

      Region

- - - - - - - - - -

             4

 

 

SQL> /

 

 

      Region

- - - - - - - - - -

             4

 

SQL*PLUS Commands to Save SQL commands

버퍼에 있는 SQL 명령을 파일에 저장한다.

Syntax

 

SQL> SAVE filename [REPLACE]

 

   · REPLACE      : 존재하는 파일의 내용을 저장하고 ,존재하지 않으면 파일을 생성시킨다.

   · 파일명은 *.sql 된다.

 

SQL*PLUS Commands to Retrieve a Command File

파일의 내용을 SQL 버퍼에 가져온다.

Syntax

 

SQL> GET filename

 

 

SQL*PLUS Commands to Execute a File

저장된 파일을 실행시킨다.

Syntax

 

SQL> START filename

 

   · SQL 문장의 내용과 실행결과를 출력한다.

 

5. BUILD REPORTS WITH SQL*PLUS

REPORT 만들기 위한 SQL*PLUS Commands

 

     

Environment Commands

SQL 문장의 일반적 행동과 효과에 영향을 미치는 명령어들

Format Commands

Report 표현 양식을 제어하는 명령어들

File Commands

Text 파일로 정보를 처리하는 명령어들

 

Control The Session Environment

Syntax

 

SET system_variable  value

 

 

SQL*PLUS System Variables

System Variable 설정

      

FEEDBACK n

Query 의해 얻어질 있는 레코드 출력할 있는 레코드 수를 결정한다. ( default : 6 )

FEEDBACK ON | OFF

FEEDBACK 상태를 결정 ( default : ON )

PAUSE message

화면출력을 잠시 멈추고 message 출력한다.

[Return] 치면 다시 작동한다.

PAUSE ON | OFF

PAUSE 상태를 결정 ( default : ON )

HEADING ON | OFF

Report Heading 넣을 것인지 결정한다.

( default : ON )

PAGESIZE n

Report 대한 페이지당 수를 결정한다.

( default : 14 )

LINESIZE n

글자의 수를 결정한다.

( default : 80 )

SPACE n

출력할 간격을 결정한다. 최대값은 10

( default : 1 )

ECHO ON | OFF

명령어가 Report 표현되는지를 결정

( default : OFF )

· SHOW 명령어를 이용해서 시스템 변수의 상태를 있다.

 

Display Headers and Footers

SQL*PLUS 명령 TTITLE, BTITLE 리포트의 위와 아래에 Header(머리글)

Footer(바닥글) 만든다.

Syntax

 

TTITLE  [message]

 

   · BTITLE 동일하다.

   · TTITLE, TTITLE OFF 등으로 상태를 결정한다.

 

     Example :

 

SQL> TTITLE  Salary | Report

 

   · |   : 구분

 

Control The Display of Columns

SQL*PLUS 명령 COLUMN명령으로 리포트의 열의 속성을 제어한다.

Syntax

COLUMN column HEADING heading FORMAT format_mask

   · column : 열의 이름

   · heading : 리포트의 열의 머리글

   ·format_mask : 데이터를 표현하는 방법을 나열한다.

Format mask

 

    

9

한자리 0 포함한 정수

,

콤마의 위치 표현

.

소수점의 위치 표현

$

Dollar 표시

An

n 자리의 문자 표현

 

Column Setting

  

    

COLUMN column

지정된 열의 상태 표시

COLUMN

모든 열의 상태 표시

COLUMN column CLEAR

지정된 열의 상태를 지운다.

CLEAR COLUMNS

모든 열의 상태를 지운다.

 

     Example :

 

SQL> COLUMN title HEADING ‘Last’ FORMAT A22

SQL> COLUMN salary HEADING ‘Salary’ FORMAT $99,999.99

 

 

Build a Break Report

Syntax

 

BREAK ON column [ON column] | SKIP n | PAGE

 

   · column  : 지정된 열에서 중복된 출력을 억제한다.

   · SKIP n  : 주어진 열의 변수 값이 변할   line 건너뛴다.

   · PAGE   :  break 발생하면 다음 페이지로 지나간다.

   · SELECT 문자의 ORDER BY 절에 의해 break 제어한다.

 

     Example :

 

SQL> BREAK ON title SKIP 1

SQL> SELECT title, last_name, salary

  2  FROM s_emp

  3  WHERE title NOT LIKE ‘VP%’ AND title <> ‘Warehouse Manager’

  4  ORDER BY title, last_name, salary

 

   · title 값의 중복을 없애고 값이 변할 마다 줄씩 건너 뛴다.

 

Break Setting

  

  

BREAK

Break 상태를 나타낸다.

CLEAR BREAKS

현재 Break setting 없앤다.

 

Add Summary Computations

Syntax

 

COMPUTE function OF compute_column ON break_column

 

   · compute_column : 계산에 사용될 또는 표현식

   · break_column   :  break 사용될

 

Compute Function

  

     

COUNT

NULL 값을 제외한 레코드 계산

NUM

ROW 계산

MAX

최대값

MIN

최소값

SUM

NULL값을 제외한 합계

AVG

NULL값을 제외한 평균 계산

STD

NULL값을 제외한 표준편차

VAR

NULL값을 제외한 분산

 

Compute Setting

   

    

COMPUTE

현재 compute 상태를 나타낸다.

CLEAR COMPUTE

현재 compute setting 없앤다.

 

Syntax

 

BREAK ON column | REPORT SKIP n | PAGE

COMPUTE function OF compute_column ON break_column … REPORT

 

   · REPORT  : 전체 합을 출력하기위해 BREAK COMPUTE양쪽에 사용된다.

 

Save Commands and Output

Operating System 텍스트파일 안에 출력뿐 아니라 Reports 만들어내는 명령들을 저장한다.

Syntax

 

SPOOL filename

 

   · filename 확장자가 없으면 .lst 또는 .lis 된다.

 

Handle Spooling

   

   

SPOOL

현재 Spool 상태를 나타낸다.

SPOOL OFF

Spool 파일을 닫는다.

 

     Example :

 

SQL> SET PAGESIZE 37

SQL> SET LINESIZE 60

SQL> SET FEEDBACK OFF

SQL> TTITLE ‘Employee | Report’

SQL> BTITLE ‘Confidential’

SQL> COLUMN title HEADING ‘Job | Category’ FORMAT A22

SQL> COLUMN last_name HEADING ‘Employee’ FORMAT A22

SQL> COLUMN salary HEADING ‘Salary’ FORMAT $99,999.99

SQL> BREAK ON title SKIP 1 ON REPORT

SQL> COMPUTE SUM OF SALARY ON TITLE REPORT

SQL> SPOOL salary

SQL> SELECT title, last_name, salary

  2   FROM s_emp

  3   WHERE title NOT LIKE ‘VP%’ AND title <> ‘Warehouse Manager’

  4   ORDER BY title, last_name, salary;

 

출력…..

 

Save Multiple SQL and SQL*PLUS Commands

SQL*PLUS EDIT 명령으로 이상의 SQL 문장과 SQL*PLUS 명령을 편집한 STRART 명령으로 실행시킬 있다.

Syntax

 

EDIT filename[.ext]

 

 

6. MANIPULATE DATA

INSERT DATA

 새로운 레코드를 테이블 안에다 추가한다.

Syntax

 

INSERT INTO  table [ (column[, column…] ) ] VALUES (value [, value…])

 

 

     Example1 :

 

SQL> INSERT INTO s_dept

  2   VALUES (11, ‘Finance’, 2);

1 row created.

 

 

     Example2 :

 

SQL> INSERT INTO s_emp (id, last_name, first_name, userid, start_date)

  2   VALUES (26, ‘Hering’, ‘Elizabeth’, ‘ehering’, SYSDATE);

1 row created.

 

   · SYSDATE  : 시스템의 현재의 날짜 시간

 

Insert NULL

명시적 또는 암시적 방법으로 새로운 레코드에 NULL값을 넣을 있다.

명시적 방법

   · NULL keyword 이용해서 값을 입력한다.

   · String 이나 날짜 대해 empty string 이력한다.

 

     Example1 :

 

SQL> INSERT INTO s_customer

  2   VALUES (216, ‘Sports on Wheels’, NULL, NULL, NULL);

 1 row created.

 

    

     Example2 :

 

SQL> INSERT INTO s_customer

  2   VALUES (216, ‘Sports on Wheels’, ‘’,’’,’’);

 1 row created.

 

   · String Date에만 가능하다.

 

암시적 방법

   ·입력 list에서 생략한다.

     Example :

 

SQL> INSERT INTO s_customer (id, name, credit_rating )

  2   VALUES (216, ‘Sports on Wheels’, ‘EXCELLENT’);

 1 row created.

 

   · 입력하지 않은 column NULL 들어간다.

 

Insert USER NAME

사용자 id USER 함수를 이용해서 입력할 있다.

 

SQL> INSERT INTO s_emp (id, first_name, last_name,

  2   userid, start_date, salary)

  3   VALUES (27, ‘’, ‘Student’, USER, SYSDATE, NULL);

 

 

Generate Primary Key Values

Sequence Expression으로 Primary key 새로운 값을 자동으로 생성시킨다.

Sequence Oracle Server 자료구조와 독립적이다.

Sequence Expression

  

  

Sequence.NEXTVAL

sequence에서 사용한 다음

Sequence.CURRVAL

Sequence에서 가장 최근 사용된 값을 참조

 

     Example :

 

SQL> INSERT INTO s_dept (id, name, region_id)

  2  VALUES (s_dept_id.NEXTVAL, ‘Education’,1);

1 row created.

 

   · id 다음 값을 자동으로 넣어준다.

 

UPDATE DATA

기존의 레코드를 갱신한다.

Syntax

 

UPDATE table

SET column = value [, column = value….]

WHERE condition

 

 

     Example :

 

SQL> UPDATE s_emp

  2   SET manager_id = 1

  3   WHERE dept_id = 41;

 

   · WHERE 절을 생략하면 테이블의 모든 row 갱신한다.

 

DELETE DATA

기존의 레코드를 삭제한다.

Syntax

 

DELETE FROM table

WHERE condition

 

 

     Example :

 

SQL> DELETE FROM s_emp

  2   WHERE dept_id = 41;

 

   · WHERE 절을 생략하면 테이블의 모든 row 삭제한다.

     (테이블을 삭제하는 것이 아님)

 

CONTROL TRANSACTION

 

Control Transaction Logic

  

    

COMMIT

모든 변환되지 않은 작업을 영구적으로 DB 반영하고 작업을 마친다.

ROLLBACK

모든 변환되지 않은 작업을 반영하지 않고 작업을 마친다.

 

COMMIT 이나 ROLLBACK 전의 데이터의 상태

   · 데이터를 조작하는 연산자들은 작업을 데이터베이스 buffer 우선 반영하고 나중에

     이전 상태로 회복시킬 있다.

   · 사용자는 SELECT구문으로 연산 결과를 미리 있다.

   · 다른 사용자는 연산결과가  데이터베이스에 반영되기 전에는 연산결과를 없다.

   · 사용중인 레코드는 locked 상태가 되고 다른 사용자는 데이터를 변경

     시킬 없다. 

 

COMMIT 후의 데이터의 상태

   · 데이터의 변환이 데이터베이스에 반영되고 이전상태는 회복 되지 않는다..

   · 모든 사용자가 작업의 결과를 있다.

   · lock 풀리고 다른 사용자는 데이터를 변환 시킬 있다.

 

ROLLBACK 후의 데이터의 상태

   · 데이터의 변환이 취소 되고 데이터를 이전 상태로 만든다.

   · lock 풀리고 다른 사용자는 데이터를 변환 시킬 있다.

 

Alter Transaction Logic

  

  

SAVEPOINT

하고있는 작업의 저장시점을 Marking

ROLLBACK TO

SAVEPOINT

Marking 후의 작업은 무시한다.

 

     Example :

 

SQL> INSERT INTO s_dept (id, name, region_id)

  2   VALUES (s_dept_id.NEXTVAL, ‘Education’,3);

1 row createc.

 

SQL> SAVEPOINT a;

Savepoint created/

 

SQL> INSERT INTO s_dept (id, name, region_id)

  2   VALUES (s_dept_id.NEXTVAL, ‘Education’,4);

1 row createc.

 

SQL> SAVEPOINT b;

Savepoint created.

 

SQL> INSERT INTO s_dept (id, name, region_id)

  2   VALUES (s_dept_id.NEXTVAL, ‘Education’,5);

1 row createc.

 

// 이때 데이터베이스 buffer 3개의 레코드가 삽입되어 있다.

 

SQL> ROLLBACK TO SAVEPOINT a;

Rollback complete.

 

SQL> COMMIT;

Commit complete.

 

// 이때 처음의 1 레코드만 데이터베이스에 삽입된다.

 

암시적Transaction Processing

     

  

DDL 명령

자동 commit

Commit 이나 Rollback 없이 SQL*PLUS 나감

자동 commit

시스템 고장에 의한 종료

자동 rollback

 

PRODUCE SCRIPTS TO MANIPULATE DATA

많은 양의 데이터를 Load batch 파일을 생산한 START 실행시킨다.

     Example :

 

SET ECHO OFF

INSERT INTO s_region (id, name)

VALUES (1, ‘North America’)

/

 

INSERT INTO s_region (id, name)

VALUES (2, ‘South America’)

/

    

 

COMMIT

/

 

   · SET ECHO OFF 명령이 실행 되는 동안 명령어를 출력하지 않게 한다.

   · batch 파일 위에 SET FEEDBACK OFF 추가하면 feedback 메시지를 출력하지 않는다.

 

변수를 사용해서 테이블에 데이터 추가하기

Syntax

 

ACCEPT substitution_parameter PROMPT message

 

   · substitution_parameter : 입력받을 변수

   · message            : 사용자가 입력할 line 나타나는 메시지

 

     Example :

 

SET ECHO OFF

ACCEPT region_id PROMPT ‘Please give me the region ID: ’

ACCEPT region_name PROMPT ‘Please give me the region name: ’

 

INSERT INTO s_region (id, name)

VALUES (&region_id, ‘&region_name’)

/

 

 

 

SQL> START add_region2

Please give me the region ID: 7

Please give me the region ID: Texas

 

1 row created.

 

   · 7 region_id Texas region_name 들어간다.

 

7.CREATE TABLES AND DATA STRUCTURE

#Create Tables

   · SQL CREATE TABLE 명령을 이용해 무결성 제약을 포함한 데이터베이스

     테이블을 생성한다.

   · SQL*PLUS DESCRIBE명령을 이용해 테이블 구조를 미리 본다.

   · SQL ALTER TABLE 명령을 이용해 테이블의 내용을 변경하거나 추가한다.

   · 데이터 사전의 USER_CONSTRANITS USER_CONS_COLUMNS 무결성

     제약을 확인한다.

   · SQL CREATE TABLE이나ALTER TABLE 이용해 무결성 제약을 추가하거나

     삭제한다.

   · SQL DROP TABLE명령을 이용해 데이터베이스에서 테이블을 삭제한다.

 

#Create Logical Views

   · SQL CREATE VIEW 명령을 이용해 논리적 VIEW 테이블을 생성한다.

   · Column Aliases 사용해서 VIEW Column Heading 제어한다.

   · WITH CHECK 사용해서 INSERT UPDATE 사용이 VIEW 영향을

     미치지 않도록 보장한다.

   · 데이터 사전의 USER_VIEWS 사용해서 존재하는 VIEW 테이블들을 확인한다.

   · SQL DROP VIEW명령을 이용해 VIEW테이블을 삭제한다.

 

#Generate Primary Key Values

   · SQL CREATE SEQUENCE 명령을 이용해 PRIMARY KEY 값을 자동 생성한다.

   · sequence_name.NEXTVAL sequence.CURRVAL 사용해 INSERT 다음 생성될

     값을 참조한다.

   · 데이터 사전의 USER_SEQUENCES 참조하여 존재하는 sequences 확인한다.

   · SQL DROP SEQUENCE명령을 이용해 데이터베이스에서 sequences 삭제한다.

 

#Improve Query Performance

   · SQL CREATE INDEX명령으로 인덱스를 만든다.

   · 데이터 사전의 USER_INDEXES로부터 인덱스를 확인한다.

   · SQL DROP INDEX명령을 이용해 인덱스를 삭제한다.

 

Data Structure

  

  

Table

데이터를 저장

View

하나 이상의 테이블로부터 얻은 논리적 집합

Sequence

Primary key값을 자동 생성

Index

Query 성능을 향상시킴

 

Create Tables to Store Data

Syntax

 

CREATE TABLE [user.] table_name

       ([ column_name datatype | table_constraint]

       [, {column_name datatype | table_constraint}] . . . )

 

   · table_name     : 테이블의 이름

   · column_name : 속성() 이름

   · datatype        : 속성() 데이터 타입

   · table_constraint: 소성() 제약조건

 

명명법

   · 테이블과 열의 이름은 자는 알파벳으로 시작하고 문자길이는 30까지

   ·  A-Z,a-z,0-9만을 사용한다.

   · 예약어나 키워드는 사용할 없다.

   · 이미 생성된 테이블과 테이블 이름이 같아서는 된다.

 

Oracle Version 6.0 데이터 타입

데이터 타입

   

CHAR(size)

,소문자와 특수문자(+,-,%,$,&) 구성되어지고 길이는 255까지 된다.

DATE

BC 1,4712 1월부터 AD 31,4712 12월까지의 날짜와 시간

LONG

CHAR 유사하지만 테이블 하나이상 정의 없고 LONG형을 가지고 JOIN 없다. (64K)

NUMBER

0~9까지의 자리 숫자

 

Oracle 7 데이터 타입

데이터 타입

    

CHAR(s)

1~255까지의 고정길이 문자

VARCHAR2(s)

1~200까지의 가변길이 문자

VARCHAR(s)

VARCHAR2(s) 같다.

DATE

BC 1,4712 1월부터 AD 31,4712 12월까지의 날짜와 시간

LONG

2 gigabytes

NUMBER(p,s)

p 크기만큼의 전체자리와 소수점 아래 s만큼의 숫자

 

데이터 무결성 제약 조건

    

    

NOT NULL

NULL값을 가질 없다.

UNIQUE

테이블 안의 모든 레코드 유일해야 한다.

PRIMARY KEY

테이블의 레코드를 유일하게 지시

REFERENCES

참조되는 테이블의 PRIMARY KEY 레코드의 FOREIGN KEY 관계를 형성

CHECK

이후 조건이 항상 TRUE이여야 한다.

 

     Example : CREATE TABLE

 

SQL> CREATE TABLE s_emp

  2   ( id                NUMBER (7),

  3    last_name         VARCHAR(25)

  4      CONSTRAINT s_emp_last_name_nn NOT NULL,

  5    first_name         VARCHAR(25),

  6    userid            VARCHAR2(8),

  7    start_date         DATE,

  8    comments         VARCHAR2(255),

  9    manager_id        NUMBER(7),

 10    title              VARCHAR2(25),

 11    dept_id           NUMBER(7),

 12    salary            NUMBER(11,2),

 13    commission_pct    NUMBER(4,2),

 14      CONSTRAINT s_emp_id_pk PRIMARY KEY (id),

 15      CONSTRAINT s_emp_userid_uk UNIQUE (userid),

 16      CONSTRAINT s_emp_commission_pct_ck

 17             CHECK ( commission_pct IN (10, 12.5, 15, 17.5,

 18             20 ) ) );

 

   · 테이블 생성 테이블 구조 확인

      SQL> DESCRIBE s_emp

 

테이블에 (column) 추가

Syntax

 

ALTER TABLE table_name

ADD (column_name datatype

 [, column_name datatype] . . . )

 

   · table_name  : 존재하는 테이블

   · column_name : 추가 하려는 column이름

   · datatype     : 추가 하려는 column 데이터 타입

 

     Example :

 

SQL> ALTER TABLE s_region

  2   ADD ( comments VARCHAR2(255));

 

 

(column) 정의 변경

Syntax

 

ALTER TABLE table_name

MODIFY (column_name datatype

 [, column_name datatype] . . . )

 

 

     Example :

 

SQL> ALTER TABLE s_emp

  2   MODIFY ( last_name VARCHAR2(30));

 

   · 데이터가 존재하면 크기를 줄일 없다.

 

데이터에 대한 제약의 추가 삭제

     Example1 : 제약 추가 (ADD CONSTRAINT)

 

SQL> ALTER TABLE s_emp

  2   ADD CONSTRAINT s_emp_manager_id_fk

  3   FOREIGN KEY (manager_id) REFERENCES s_emp (id);

 

 

     Example2 : 제약 삭제 (DROP CONSTRAINT)

 

SQL> ALTER TABLE s_emp

  2   DROP CONSTRAINT s_emp_manager_id_fk ;

 

 

제약 조건들 확인

     Example1 : 테이블 제약 조건의 확인

 

SQL> SELECT *

  2   FROM user_constraints

  3   WHERE table_name = ‘S_EMP’;

 

   · 데이터 사전의 USER_CONSTRAINTS 테이블을 이용해서 S_EMP테이블의

     제약 조건들을 검색한다.

    

     Example2 : (column)제약 조건의 확인

 

SQL> SELECT constraint_name, column_name

  2   FROM user_cons_columns

  3   WHERE table_name = ‘S_EMP’;

 

   · 데이터 사전의 USER_CONS_COLUMNS 테이블을 이용해서 S_EMP테이블의

     각각의 (column)들의 제약 조건들을 검색한다.

 

테이블 삭제

Syntax

 

DROP TABLE table_name

 

 

CREATE VIEWS

VIEW 이용하면 보안성, 편리성 ,예측성이 좋다.

 

Syntax

 

CREATE VIEW view_name [(alias, [alias] . . . )]

 AS query

WITH CHECK OPTION [CONSTRAINT constraint]

 

   · alias  : Query 의해 검색되는 column 별칭이다.이것의 수는 column

            수와 일치 해야 한다

   · WITH CHECK OPTION : 삽입과 변경이 이루어지지 않도록 한다.

   · constraint : CHECK OPTION 제약

 

     Example1 :

 

SQL> CREATE VIEW empvu41 (id_number, employee, job)

  2   AS SELECT id, last_name, title

  3   FROM s_emp

  4   WHERE dept_id = 41;

View created.

 

SQL> SELECT *

  2   FROM empvu41;

 

   · VIEW 실제 테이블을 생성되는 것이 아니다 SELECT문에 기술된 정보들이

    데이터 사전에 들어가 있다.

 

     Example2 : CHECK OPTION 사용

 

SQL> CREATE VIEW empvu41

  2   AS SELECT *

  3   FROM s_emp

  4   WHERE dept_id = 20

  5   WITH CHECK OPTION;

View created.

 

SQL> UPDATE empvu20

  2   SET dept_id = 42

  3   WHERE id = 16;

 

0  rows updated.

 

   · 위의 내용은 바뀌지 않는다. 위의 view 오직 dept_id 20 레코드만

     있기 때문에 만약 바뀐다면 테이블 잃게 된다.

 

VIEW 이름과 구조 확인

     Example :

 

SQL> SELECT *

  2   FROM user_views;

 

   · 데이터 사전의 USER_VIEWS테이블을 이용해서 VIEW 이름과 구조를

     확인한다.

   

VIEW 삭제

Syntax

 

DROP VIEW view_name

 

 

Generate PRIMARY KEY values

CREATE SEQUENCE명령을 이용해서 PRIMARY KEY값을 자동 생성시킨다.

Syntax

 

CREATE SEQUENCE sequence_name

  [INCREMENT by n]

  [START WITH n]

  [ {MAXVALUE n | NOMAXVALUE} ]

  [ {CYCLE | NOCYCLE} ]

  [ {CACHE n | NOCACHE} ]

  [ {ORDER | NOORDER}]

 

   · INCREMENT by n : 다음 생성될 증가치 [정의 되지 않으면 1 증가]

   · START WITH n  : 최초 시작될 번호 [정의 되지 않으면 1부터]

   · MAXVALUE n  : 증가 있는 최대치

   · NOMAXVALUE : 최대치는 10**27 된다.

   · CYCLE        : 최대나 최소값이 되면 다시 시작

   · CACHE n       : Oracle Server 관리하는 sequence [기본 20]

   · ORDER        : 요구순서로 생성되는 것을 보장

 

     Example : CREATE SEQUENCE

 

SQL> CREATE SEQUENCE s_dept_id

  2   MINVALUE 1

  3   MAXVALUE 9999999

  4   INCREMENT BY 1

  5   START WITH 51

  6   NOCACHE

  7   NOORDER

  8   NOCYCLE;

 

Sequence created.

 

 

SEQUENCE 확인

     Example :

 

SQL> SELECT sequence_name, min_value, max_value,

  2     increment_by, last_number

  3   FROM user_sequences;

 

   · 데이터 사전의 USER_SEQUENCES테이블을 이용해서 sequences 확인한다.

    

 

Primary Key 참조

  

   

Sequence_name.NEXTVAL

자동으로 다음의 연속 값을 return

Sequence_name.CURRVAL

최근 사용된 sequence return

 

     Example :

SQL> INSERT INTO s_dept

  2   VALUES (s_dept_id.NEXTVAL, ‘Finance’, 2);

1 row created.

   · s_dept_id 최근 값이 50 이였다면 s_dept 추가되는 id값으 51 갖게 된다.

 

SEQUENCE 삭제

Syntax

 

DROP SEQUENCE sequence_name

 

 

Improve Query Performance

데이터베이스 테이블에 하나 이상의 인덱스를 만들어 query 수행을 향상시킬 있다.

 

Indexes

   · 인덱스는 명시적으로 생성된 객체이다.

   · 인덱스는 독립적이다.

   · 인덱스는 자동적으로 사용되어지고 Oracle Server 의해 관리된다.

   · 인덱스의 entry 테이블의 레코드에 직접 연결 되어 있다.

   · 인덱스를 사용함으로써 디스크 I/O 줄인다.

 

Oracle Server 데이터 ACCESS 방법

Access 방법

  

By ROWID

데이터 정확인 위치를 가리키고 직접 제어한다. 가장 빠른 방법이다.

Full-table scan

순차적으로 전체 데이터를 검색한다.

By index

열들의 값을 정렬된 Tree구조로 사용해서 이진 검색을 한다.

 

     Example1 : By ROWID

 

SQL> SELECT last_name

  2   FROM s_emp

  3   WHERE rowid = ‘0000100A.0010.0003’;

 

   · 0000100A : 데이터 블록 위치

   · 0010     : 레코드 위치

   · 0003     : 파일의 위치

 

     Example1 : Full or Index

 

SQL> SELECT last_name

  2   FROM s_emp

  3   WHERE last_name = ‘Smith’;

 

   · 만약 인덱스가 있으면 인덱스로 검색되고 없으면 Full Scan 한다.

 

인덱스 생성의 Trade-Off

#인덱스를  생성해야 경우

   · WHERE절이나 JOIN조건에 의해 자주 사용될

   · Column안의 모든 값들이 유일한 값을 가지고 있을

   · Column 광범위한 값을 포함할

   · NULL값을 많이 가지고 있을

   · 테이블이 크고 대부분의 Query 10~15%만을 검색할

 

#인덱스를  생성하지 말아야 경우

   · 테이블이 작을

   · 대부분의 Query 10~15%이상을 검색할

   · 테이블이 자주 바뀔

 

CREATE INDEXS

Syntax

 

CREATE [UNIQUE] INDEX index_name

ON table_name ( column_name [, column_name ])

 

   · UNIQUE  : 같은 데이터가 중복되게 들어 가지 못한다.

   · 만약 만들어 지는 인덱스가 PRIMARY KEY UNIQUE 제약을 가지고

     있다면 UNIQUE 명시 하지 않아도 자동으로 중복을 못하게 한다.

 

     Example :

 

SQL> CREATE INDEX s_emp_last_name_I

  2   ON s_emp ( last_name ) ;

Index created.

 

 

INDEXS 확인

     Example :

 

SQL> SELECT index_name, uniqueness

  2   FROM user_indexes

  3   WHERE table_name = ‘S_EMP’;

 

   · 데이터 사전의 USER_INDEXES테이블을 이용해서 index 확인한다.

 

INDEX 삭제

Syntax

 

DROP INDEX index_name

 

'Data Base > ANSI Sql' 카테고리의 다른 글

오라클 vs MS SQL 함수 비교  (0) 2007.10.15
표준 Sql 구문정리 2부  (0) 2007.10.15