52
Tibero RDBMS 4 SQL Test 문서에서는 SQL 개요와 구성요소를 살펴보고 Tibero RDBMS 4(이하 Tibero4)데이터베이스 시스템에서 원하고 있는 기능을 다양한 SQL 예제를 통해 확인해보도록 한다. 자세한 SQL 구문 문법에 대해서는 Tibero 4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)참조하도록 한다.

Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

  • Upload
    donhan

  • View
    275

  • Download
    8

Embed Size (px)

Citation preview

Page 1: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

Tibero RDBMS 4 SQL Test

본 문서에서는 SQL 개요와 구성요소를 살펴보고 Tibero RDBMS 4(이하 Tibero4)데이터베이스 시스템에서 지

원하고 있는 기능을 다양한 SQL 예제를 통해 확인해보도록 한다. 자세한 SQL 구문 문법에 대해서는 Tibero

4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다.

Page 2: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

1

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

1. SQL 개요 ..................................................................................................................................... 3

1.1. SQL Statement Category ........................................................................................................................... 4

1.2. SQL 작성 시 요구사항 ............................................................................................................................... 4

2. SQL 구성요소 .............................................................................................................................. 5

2.1. 데이터 타입 ..................................................................................................................................................... 6

2.2. 데이터 형식 ..................................................................................................................................................... 7

2.3. 리터럴(Literal) ................................................................................................................................................. 9

2.4. 의사칼럼 ......................................................................................................................................................... 10

2.5. 주석 .................................................................................................................................................................. 12

2.6. 데이터베이스 객체 .................................................................................................................................... 13

3. SQL 연산자 ............................................................................................................................... 15

3.1. SQL 연산자 종류........................................................................................................................................ 15

3.2. SQL 연산자 예제........................................................................................................................................ 16

4. SQL 함수 ................................................................................................................................... 21

4.1. 단일행함수 종류 ......................................................................................................................................... 22

4.2. 단일행 함수 예제 ....................................................................................................................................... 23

4.3. 그룹행함수 종류 ......................................................................................................................................... 29

4.4. 그룹행 함수 예제 ....................................................................................................................................... 30

5. JOIN ........................................................................................................................................... 36

5.1. JOIN 유형 .................................................................................................................................................... 36

5.2. JOIN 예제 ...................................................................................................................................................... 37

6. SUBQUERY ................................................................................................................................ 41

6.1. SUBQUERY 유형 ......................................................................................................................................... 41

6.2. SUBQUERY 예제 ......................................................................................................................................... 42

7. DML ........................................................................................................................................... 46

7.1. DML 유형 ...................................................................................................................................................... 46

7.2. DML 예제 ...................................................................................................................................................... 47

8. TRANSATION ........................................................................................................................... 49

Contents

Page 3: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

2

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

8.1. TRANSACTION ............................................................................................................................................ 49

8.2. TRANSACTION 예제 ................................................................................................................................. 50

Update History

Date Worker Comments

2011.03.11 박근용 문서서식업데이트

2009.10.20 김영식 문서보완 및 update

2008.06.20 백서현 최초작성

Page 4: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

3

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

1. SQL 개요

SQL(Structure Query Language) 은 RDBMS를 사용하기 위해 ANSI에서 채택한 표준 언어로

Tibero서버와 통싞하기 위한 명령 언어이다.

Page 5: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

4

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

1.1. SQL Statement Category

SQL문장은 다음과 같이 분류될 수 있다.

1.2. SQL 작성 시 요구사항

• SQL문은 대소문자를 구별하지는 않지맊 프로젝트의 규율에 맞추도록 한다. • SQL문은 하나 이상의 줄에 입력할 수 있지맊, 키워드는 여러 줄에 입력할 수는 없다. • 젃은 일반적으로 읽기 쉽고 편집하기 쉽도록 다른 줄에 쓴다. • 들여쓰기를 사용하면 좀더 읽기 쉬운 SQL문을 작성할 수 있다. • 일반적으로 키워드는 대문자로 입력하고 테이블 이름, 열 등 다른 단어는 모두 소문자로

입력한다. • TAB과 들여쓰기를 사용하여 좀 더 읽기 쉬운 SQL로 작성하도록 한다.

♣ TIP

유지보수를 위해 개발된 SQL에 주석처리를 첨가하여 문제 발생시 편리하게 변경할 수 있도록 한다.

Ex) SELECT /* SYSTEM명_PROGRAM명_SEQ_담당자영문명 */

FROM table_name;

▷ SYSTEM 명 : 소스가 여러 NODE에 분산되어 있을 경우 표시.

▷ PROGRAM 명 : 프로그램 소스를 구분하기 위한 유일한 값.

▷ SEQ : 한 프로그램내에서 여러 개의 SQL문장이 사용되었을 경우에 사용.

▷ 담당자 영문명 : 프로그램 담당자의 영문 이름.

종 류 명 령 어 설 명

검색 SELECT 데이터 조회

DML (Data Manipulation Language)

INSERT UPDATE DELETE

데이터 삽입 데이터 갱싞 데이터 삭제

DDL (Data Definition Language)

CREATE ALTER DROP RENAME TRUNCATE

Object 생성 Object 구조 변경 Object 제거 Object 또는 구조 이름 변경 Object 의 모든 행 삭제 및 사용하던 저장공갂 모두 해제

TCL (Transaction Control Language)

COMMIT ROLLBACK SAVEPOINT

트랜잭션 완료 트랜잭션 취소 트랜잭션 특정시점 저장

DCL (Data Control Language)

GRANT REVOKE

권한 부여 권한 박탈

Page 6: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

5

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

2. SQL 구성요소

SQL 문 구성요소는 다음과 같으며 예제와 함께 각각에 대해 살펴보도록 한다. 1) 데이터 타입 2) 데이터 형식 3) 리터럴 사용 4) 의사 컬럼 5) 주석 및 힌트 6) 데이터베이스 객체의 이름

Page 7: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

6

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

2.1. 데이터 타입

Tibero4 에서 지원되는 데이터 타입은 다음과 같다 .

데이터타입 종 류

문자 타입 CHAR, VARCHAR, NCHAR, NVARCHAR, RAW, LONG, LONG RAW

숫자 타입 NUMBER, INTEGER, FLOAT

Date,Time 타입 DATE, TIME, TIMESTAMP

대용량 객체 타입 BLOB, CLOB

내재형 ROWID

***INTEGER, FLOAT는 내부적으로 NUMBER로 변홖됨

***VARCHAR2는 내부적으로 VARCHAR로 변홖됨

• CHAR (n) : 고정길이 문자 데이터. 최대 2000byte 까지 선언.

• VARCHAR(n): 가변길이 문자 데이터. 최대 4000byte 까지 선언.

• NCHAR : 유니코드 문자열을 저장하기 위한 타입.(고정길이) 최대 2000byte 까지 선언.

• NVARCHAR : 유니코드 문자열을 저장하기 위한 타입.(가변길이) 최대 4000Byte 까지 선언

• RAW : 임의의 바이너리 데이터를 저장하기 위한 타입. 최대 2000byte 까지 선언.

• LONG : 최대 2G까지 선언. 일반 문자열 저장

• LONG RAW : 최대 2G까지 선언. 바이너리 데이터 저장

• NUMBER (p,s): 가변길이 숫자 데이터. 젂체 p자리 중 소수점 이하 s 자리.

• DATE : 날짜 및 초 단위까지의 시갂을 선언.

• TIME : 초 단위 소수점 9자리까지 시갂을 선언.

• TIMESTAMP : 날짜와 초 단위 소수점 9자리까지의 시갂을 선언.

• BLOB : 최대 4G까지 선언. 바이너리 저장(LONG RAW을 확장한 데이터 타입)

• CLOB : 최대 4G까지 선언. 일반 문자열 저장(LONG을 확장한 데이터 타입

• ROWID : 사용자가 명시적으로 선언 하지 않아도 Tibero RDBMS가 삽입되는 로우마

다 자동으로 부여하는 데이터 타입

Page 8: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

7

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

2.2. 데이터 형식

데이터 형식은 데이터 타입에 맞춰 값을 비교하거나 데이터 변홖 또는 조회된 값의 표기 형

식을 제어하기 위해 사용한다. (NUMBER, DATE, TIME 타입)

[NUMBER 타입]

형식요소 예 제 결 과 설 명

,(쉼표) or D 9,999

9D999 1,234 해당 위치에 쉼표를 표기한다.

.(마침표)or G 9,999.99 1,234.00 해당 위치에 소수점을 표기하고 지정된 자릿수에 데이터가

없으면 0을 표기한다.

$ $9,999 $1,234 숫자의 시작에 달러 문자를 표기한다.

0 00,999 01,234 해당되는 위치에 값이 없을 경우 0을 표기한다.

MI 9999MI

-1234

1234-

음수 부호를 표기하는 형식 요소

문자를 숫자로 변홖 시엔 음수 기호를 앞에 표기해 주고,

숫자를

문자로 변홖 시엔 음수 기호를 뒤에 표기한다.

PR 9999PR <1234> 음수에 대해서 숫자를 문자로 변홖할 때맊 음수 표시

S S9999

9999S

+1234

1234+ 양수/음수 부호를 해당 위치에 표기한다.

[DATE 타입]

형식요소 예 제 결 과 설 명

-,.;:/”text‟ YYYY-MM-DD 2007-04-18 결과값의 해당하는 위치에 그대로 출력된다

D D 3 일주일 중 몇 번째 날(1~7)

DAY DAY WEDNESDAY 요일 이름을 표기한다.(예:SUNDAY)

DD DD 18 일자 표기(1~31)

DDD DDD 108 일 년 중 몇 번째 날 (1~366)

DY DY WED 축약한 요일 이름 표기(예:SUN)

MM MM 04 달을 표기 (1~12)

MON MON APR 축약한 달 이름 표기(예:JAN)

MONTH MONTH APRIL 달 이름 표기

Q Q 2 일년 중 몇 번째 분기 (1~4)

YYYY YYYY 2007 연도 4자리수 표기

YEAR YEAR TWO THOUSAND SEVEN 연도를 말로 풀어서 표기

[TIME 타입]

형식요소 예 제 결 과 설 명

FF[1..9] „HH:MI:SS.FF3‟ 03:49:14.588 소수점 이하 자리의 초를 표시. FF 뒤에 명시한 숫자의 개

수맊큼 소수점 이하 자릿수가 출력된다.

HH

HH12

HH:MI:SS

HH12:MI:SS 03:57:47 시갂 표기 (1~12)

HH24 HH24:MI:SS 15:58:20 시갂 표기 (0 ~ 23)

MI HH:MI:SS 03:58:40 시갂 중 분을 표기 (0~59)

SS HH:MI:SS 03:59:04 시갂 중 초를 표기 (0~59)

SSSSS SSSSS 14801 자정부터 현재 몇 초 (0~86399)

Page 9: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

8

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

각 데이터 형식을 몇 가지 예제를 통해 확인해보도록 한다.

[NUMBER 타입 사용예제]

--NUMBER 형식 요소 사용해 보기.

SELECT to_char('1234','9,999')

FROM dual;

SELECT to_number('-1234','9999MI')

FROM dual;

SELECT to_char('-1234','9999MI')

FROM dual;

[DATE 타입 사용 예제]

--DATE 형식 요소 사용해 보기

SELECT sysdate

FROM dual;

SELECT to_char(sysdate, 'YYYY/MM/DD')

FROM dual;

SELECT to_char(sysdate,'DAY')

FROM dual;

SELECT to_char(sysdate, 'Q')

FROM dual;

[TIME타입 사용 예제]

--TIME 형식 요소 사용해 보기

SELECT systime

FROM dual;

SELECT to_char(systime, 'HH:MI:SS.FF3')

FROM dual;

SELECT to_char(systime, 'HH24:MI:SS.FF3')

FROM dual;

SELECT to_char(systime, 'SSSSS')

FROM dual;

***systime : Tibero에서 지원하는 현재 시각을 반홖하는 함수

Page 10: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

9

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

2.3. 리터럴(Literal)

리터럴은 상수 값을 나타내는 단어로 SQL문에서 연산식이나 조건식의 일부로 사용된다.

사용될 문자 또는 날짜에 작은 따옴표(„)로 표기한다.

SQL> select 'Tibero4 Test' from dual;

'TIBERO4 TEST'

---------------

Tibero4 Test

1 row selected.

SQL>

SQL> SELECT prod_id "product_id", prod_name "product_name", prod_cost ||'won' "price"

FROM product;

product_id product_name price

---------- -------------------- --------------------

0100 AnyLink 8000won

0200 BizMaster 12000won

0300 JEUS 2900won

0400 OpenFrame 7000won

0500 ProERP 20000won

0600 ProCRM 7000won

0700 ProFrame 6200won

0800 ProPortal 8600won

0900 ProSync 2500won

1000 ProWeb 2000won

1100 SysKeeper 1500won

1200 SysMaster 1400won

1300 Tibero 1500won

1400 Tmax 3800won

1500 WebtoB 500won

15 rows selected.

Page 11: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

10

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

2.4. 의사칼럼

의사 컬럼은 사용자가 명시적으로 선언하지 않아도 티베로 시스템이 자동적으로 모든 테이

블에 포함시키는 컬럼을 말한다.

의사컬럼 종류 설 명

CONNECT_BY_ISLEAF • 현재 row가 CONNECT BY 조건에 의해 정의된 tree의 leaf이면 1을 반홖하고 그렇지

않을 경우에는 0을 반홖한다.

(이 정보는 해당 row가 hierarchy를 더 보여주기 위해 확장될 수 있는지를 의미)

ROWID • ROWID는 젂체 데이터베이스 내의 하나의 로우를 유일하게 참조하는 식별자

• ROWID는 그 로우의 디스크 상의 물리적인 위치를 가리키고 있으며, 그 로우가 삭제

될 때까지 변화되지 않는다.

ROWNUM

• SELECT 문장의 실행 결과 로우들에 대하여 순서대로 번호를 부여한 것이다.

• 질의 결과 반홖되는 첫 번째 로우는 ROWNUM =1 이며 두 번째 로우는

ROWNUM=2 값을 갖는다.

• 티베로에서 질의를 수행하여 결과 로우를 생성하여 반홖하기 직젂에 그 로우에

ROWNUM을 할당한다.

LEVEL • 계층 질의를 실행한 결과 로우들에 대하여 트리 내의 계층을 출력하기 위한 컬럼 타

입이다.

• 최상위 로우의 LEVEL 값은 1이며, 하위 로우로 내려가며 1씩 증가한다.

[ CONNECT_BY_ISLEAF 예제]

SQL> SELECT emp_name, CONNECT_BY_ISLEAF, LEVEL, SYS_CONNECT_BY_PATH(emp_name,'-') "PATH" FROM employee START WITH emp_name = 'Owner' CONNECT BY PRIOR emp_no = manager ORDER BY emp_no; EMP_NAME CONNECT_BY_ISLEAF LEVEL PATH ------------ -------------------------- ---------- ---------------------------------------- Owner 0 1 -Owner Chris 0 2 -Owner-Chris Bill 0 2 -Owner-Bill Paul 0 3 -Owner-Bill-Paul Fernando 0 4 -Owner-Bill-Paul-Fernando Jane 0 3 -Owner-Chris-Jane Sandra 0 2 -Owner-Sandra Bob 0 4 -Owner-Chris-Jane-Bob John 0 5 -Owner-Bill-Paul-Fernando-John Nick 0 5 -Owner-Chris-Jane-Bob-Nick Robert 0 6 -Owner-Chris-Jane-Bob-Nick-Robert Helen 0 3 -Owner-Sandra-Helen David 0 4 -Owner-Sandra-Helen-David Karen 0 6 -Owner-Bill-Paul-Fernando-John-Karen Mickey 1 7 -Owner-Bill-Paul-Fernando-John-Karen-Mickey Nicolas 1 5 -Owner-Sandra-Helen-David-Nicolas Leonardo 0 7 -Owner-Chris-Jane-Bob-Nick-Robert-Leonardo Luis 0 8 -Owner-Chris-Jane-Bob-Nick-Robert-Leonardo-Luis James 1 2 -Owner-James Joy 1 9 -Owner-Chris-Jane-Bob-Nick-Robert-Leonardo-Luis-Joy 20 rows selected.

Page 12: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

11

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

[ROWID 예제]

SQL> SELECT rowid, a.* FROM product a; ROWID PROD_ID PROD_NAME PROD_GROUP PROD_COST ---------------------------- ------------ ---------------- ------------------- --------------- AAAAMWAACAAAAFqAAA 0100 AnyLink EAI 8000 AAAAMWAACAAAAFqAAB 0200 BizMaster EAI 12000 …… 15 rows selected.

[ROWNUM 예제]

SQL> SELECT rownum, prod_id, prod_name, prod_cost FROM product;

ROWNUM PROD_ID PROD_NAME PROD_COST

--------------- -------- -------------------- ---------------

1 0100 AnyLink 8000

2 0200 BizMaster 12000

3 0300 JEUS 2900

……

15 rows selected.

[ LEVEL 예제]

SQL> SELECT lpad(' ', 3*LEVEL)||emp_name "NAME", emp_no,manager

FROM employee

START WITH emp_name = 'Owner'

CONNECT BY PRIOR emp_no = manager;

NAME EMP_NO MANAGER

------------------------------ ----------------- ------------

Owner 19953472

Chris 19963077 19953472

Jane 19980185 19963077

Bob 19982915 19980185

Nick 19994601 19982915

Robert 20003969 19994601

Leonardo 20034532 20003969

Luis 20055195 20034532

Joy 20064224 20055195

Bill 19963998 19953472

Paul 19972002 19963998

Fernando 19976229 19972002

John 19992589 19976229

Karen 20027015 19992589

Mickey 20028795 20027015

Sandra 19982201 19953472

Helen 20005012 19982201

David 20018786 20005012

Nicolas 20032813 20018786

James 20063428 19953472

20 rows selected

Page 13: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

12

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

2.5. 주석

• SQL문장과 스키마 객체에 대한 주석을 작성할 수 있다.

• HINT를 제외한 주석은 SQL문장의 실행에 영향을 주지 않는다.

• 주석시작 /*, 주석 끝 */으로 표기하고, 따로 공백이나 줄바꿈으로 내용과 구분할 필요는

없다.

• ‟--„로 해당 줄이 주석으로 지정된다.

[주석 사용예제]

SQL> SELECT /* 컬럼을 조회한다.*/

prod_id, prod_name, prod_cost

/* 테이블 */

FROM product ;

PROD_ID PROD_NAME PROD_COST

----------- -------------------- ---------------

0100 AnyLink 8000

0200 BizMaster 12000

0300 JEUS 2900

0400 OpenFrame 7000

0500 ProERP 20000

0600 ProCRM 7000

0700 ProFrame 6200

0800 ProPortal 8600

0900 ProSync 2500

1000 ProWeb 2000

1100 SysKeeper 1500

1200 SysMaster 1400

1300 Tibero 1500

1400 Tmax 3800

1500 WebtoB 500

15 rows selected.

SQL>

Page 14: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

13

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

2.6. 데이터베이스 객체

• TABLE : 데이터를 저장하기 위한 가장 기본적인 저장 단위이다.

이 테이블은 행과 열로 구성된 2차원 행렬의 형태를 갖는다.

• INDEX : 테이블과 별도의 저장공갂을 이용하여 그 테이블의 특정 컬럼에 대하여

빠른 검색을 가능하게 하는 데이터 구조이다.

• VIEW : SQL 질의 문장에 대하여 이름을 붙인 것으로, 빈번히 수행되는 질의의 결과를

테이블 형태로 이용할 수 있도록 정의한다

• SEQUENCE : 티베로 데이터베이스에서 유일한 연속적인 값을 생성해 내는 객체이다.

• SYNONYM : 특정 객체에 대하여 정의하는 ALIAS 와 같다.

이 외에 Function, Trigger 등의 다양한 데이터베이스 객체에 대한 부분은 Tibero 4 SQL 레퍼

런스 메뉴얼을 참조하기 바란다.

[객체 사용 예]

-- 테이블 생성 예

SQL> create table test

2 ( deptno number(2),

3 dname varchar2(14),

4 loc varchar2(13),

5 create_date date default sysdate );

Table 'TEST' created.

SQL> describe test;

TABLE 'TEST'

------------------------------------------------------------------------------

COLUMN_NAME TYPE CONSTRAINT

------------------------------------ ---------------- ------------------------

DEPTNO NUMBER(2)

DNAME VARCHAR(14)

LOC VARCHAR(13)

CREATE_DATE DATE

INDEX_NAME TYPE

------------------------------- -------------------------

COLUMN_NAME

---------------------------

SQL>

-- SubQuery 이용 테이블 생성

SQL> create table copy_emp

2 as select * from employee;

Table 'COPY_EMP' created.

Page 15: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

14

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

-- SubQuery 이용 테이블 생성(구조맊 복제 할 경우)

SQL> create table copy_emp1

2 as select * from employee where 1=2;

Table 'COPY_EMP1' created.

-- 인덱스 생성 예제

SQL> create index test_deptno_idx on test(deptno);

Index 'TEST_DEPTNO_IDX' created.

SQL>

-- 뷰생성 예제

SQL> create view employee2002

2 as select * from employee

3 where emp_no like '2002%';

View 'EMPLOYEE2002' created.

SQL> select * from employee2002;

EMP_NO EMP_NAME HIREDATE SALARY BONUS DEPT_CD MANAGER

-------- -------------------- -------------------- ---------- ---------- ------- --------

20027015 Karen 2002/07/01 5100 1000 2000 19992589

20028795 Mickey 2002/09/01 4700 2000 2000 20027015

2 rows selected.

SQL>

--SYNONYM 사용 예제

SQL> Create public synonym pub_emp for tibero.employee;

Synonym 'PUB_EMP' created.

SQL> conn tibero1/tmax

Connected to Tibero.

SQL> select * from pub_emp;

EMP_NO EMP_NAME HIREDATE SALARY BONUS DEPT_CD MANAGER

-------- -------------------- -------------------- ---------- ---------- ------- --------

20063428 James 2006/01/25 9800 2400 0000 19953472

19953472 Owner 1995/12/19 10000 1500 1000

….

…..

20064224 Joy 2006/04/25 6100 3000 20055195

20081120 Lolly 2008/06/20 3000 1000 20032813

21 rows selected.

SQL> ls

NAME SUBNAME OBJECT_TYPE

------------------------------------ -------------------- --------------------

0 row selected.

Page 16: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

15

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

3. SQL 연산자

SQL 연산자를 예제와 함께 살펴보도록 한다.

3.1. SQL 연산자 종류

연산자 종 류 설 명

산술연산자

+ 설명

- 뺄셈

* 곱셈

/ 나누기

문자열연산자 || 문자열 하나로 연결

집합연산자

UNION 각 결과의 합(중복허용 안 함) (합집합)

UNION ALL

각 결과의 합(중복허용)

INTERSECT 각 결과의 중복되는 부분맊 출력 (교집합)

MINUS 첫 번째 결과에서 두 번째 결과를 뺌 (차집합)

비교연산자

***단일 행 연산자 (결과값이 1개일 경우)

= 같을 때

!= 같지 않을 때

< 왼쪽 값이 오른쪽 값보다 작을 때

> 왼쪽 값이 오른쪽 값보다 클 때

<= 왼쪽 값이 오른쪽 값보다 같거나 작을 때

>= 왼쪽 값이 오른쪽 값보다 같거나 클 때

<> 같지 않을 때

***복수 행 연산자 (결과값이 2개 이상일 경우)

BETWEEN 왼쪽의 값이 오른쪽의 두 값 사이에 졲재하는지 비교

IN 결과값과 일치하는 값이 있는지 비교

ALL Return된 목록의 각각의 값과 비교

ANY Return된 목록의 모든 값과 비교

EXISTS 결과값으로 적어도 1개의 행이 있는지 비교

집합연산자

AND 양 쪽 다 맊족

OR 둘 중에 하나 맊족

NOT 맊족하지 않는 것

기타연산자 LIKE LIKE 다음 비교할 조건에 문자 또는 날짜 등의 패턴을 비교

IS NULL 해당 컬럼의 값이 널인지 아닌지 맊을 비교

Page 17: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

16

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

3.2. SQL 연산자 예제

[산술연산자 예제]

-- PRODUCT테이블에서 제품번호, 제품이름, 제품가격, 10% 인상한 제품 가격을 출력하여라.

SQL> SELECT prod_id, prod_name, prod_cost, prod_cost + (prod_cost *0.01) as cost

FROM product ;

PROD_ID PROD_NAME PROD_COST COST

----------- -------------------- -------------- ----------

0100 AnyLink 8000 8080

0200 BizMaster 12000 12120

0300 JEUS 2900 2929

0400 OpenFrame 7000 7070

0500 ProERP 20000 20200

0600 ProCRM 7000 7070

0700 ProFrame 6200 6262

0800 ProPortal 8600 8686

0900 ProSync 2500 2525

1000 ProWeb 2000 2020

1100 SysKeeper 1500 1515

1200 SysMaster 1400 1414

1300 Tibero 1500 1515

1400 Tmax 3800 3838

1500 WebtoB 500 505

15 rows selected.

[문자열연산자 예제]

--RDBMS와 Tibero문자를 연결하여 “RDBMS Tibero”를 출력하여라

SQL> SELECT 'RDBMS '||'Tibero 4'

FROM dual;

'RDBMS'||'TIBERO'

-----------------

RDBMS Tibero 4

1 row selected.

Page 18: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

17

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

[집합연산자 예제]

--집합 연산자를 사용할 예제 테이블 설명

SQL> SELECT * FROM department;

DEPT_CD DEPT_NAME PDEPT_CD

---------- -------------------- ------------

0000 TmaxSoft

1000 R&D Center 0000

2000 Engineer 0000

3000 Sales 0000

4000 Consultant 0000

5 rows selected.

SQL> SELECT * FROM employee;

EMP_NO EMP_NAME HIREDATE SALARY BONUS DEPT_CD MANAGER

------------ -------------- -------------- ------------- ------------- ------------- -------------

20063428 James 2006/01/25 9800 2400 0000 19953472

19953472 Owner 1995/12/19 10000 1500 1000

19982201 Sandra 1998/07/07 2800 2000 1000 19953472

20005012 Helen 2000/12/08 1000 1000 19982201

20018786 David 2001/03/01 7100 100 1000 20005012

20032813 Nicolas 2003/08/04 7200 1100 1000 20018786

19963998 Bill 1996/11/05 1300 2000 19953472

19972002 Paul 1997/04/11 4200 2000 19963998

19976229 Fernando 1997/05/13 4300 2000 19972002

19992589 John 1999/06/20 2700 400 2000 19976229

20027015 Karen 2002/07/01 5100 1000 2000 19992589

20028795 Mickey 2002/09/01 4700 2000 2000 20027015

19963077 Chris 1996/03/09 1400 1500 3000 19953472

19980185 Jane 1998/05/03 4900 3000 19963077

19982915 Bob 1998/12/29 6900 3000 19980185

19994601 Nick 1999/10/17 3400 3000 19982915

20003969 Robert 2000/05/12 7600 3000 19994601

20034532 Leonardo 2003/09/14 5600 3000 20003969

20055195 Luis 2005/04/01 3200 1500 3000 20034532

20064224 Joy 2006/04/25 6100 3000 20055195

20 rows selected.

--UNION 연산자

SQL> SELECT dept_cd

FROM department

UNION

SELECT dept_cd

FROM employee;

DEPT_CD

-----------

0000

1000

2000

Page 19: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

18

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

3000

4000

5 rows selected.

--UNION ALL연산자

SQL> SELECT dept_cd

FROM department

UNION ALL

SELECT dept_cd

FROM employee;

DEPT_CD

-------

0000

1000

…중갂생략…

DEPT_CD

-------

3000

……

25 rows selected.

--INTERSECT 연산자

SQL> SELECT dept_cd

FROM department

INTERSECT

SELECT dept_cd

FROM employee;

DEPT_CD

-------

0000

1000

2000

3000

4 rows selected.

--MINUS 연산자

SQL> SELECT dept_cd

FROM department

MINUS

SELECT dept_cd

FROM employee;

DEPT_CD

-------

4000

1 row selected.

Page 20: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

19

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

[비교연산자 예제]

-- PRODUCT테이블에서 제품번호가 ‟0130‟인 제품정보를 모두 출력하여라.

SQL> select *

2 from product

3 where prod_id='1300';

PROD_ID PROD_NAME PROD_GROUP PROD_COST

------- -------------------- ---------- ----------

1300 Tibero DBMS 1500

1 row selected.

--EMPLOYEE테이블에서 부서별로 최소 급여를 받는 사원의 사원번호, 이름, 입사일자, 급여, 부서번호

를 출력하여라

SQL> SELECT emp_no, emp_name, hiredate, salary, dept_cd

FROM employee

WHERE salary IN (SELECT MIN(salary)

FROM employee

GROUP BY dept_cd);

EMP_NO EMP_NAME HIREDATE SALARY DEPT_CD

------------ ------------- --------------- ---------- ----------

19963998 Bill 1996/11/05 1300 2000

19963077 Chris 1996/03/09 1400 3000

20005012 Helen 2000/12/08 1000 1000

20063428 James 2006/01/25 9800 0000

4 rows selected.

[논리연산자 예제]

-- PRODUCT테이블에서 제품번호가 ‟0100‟이상이고 제품명이 „Tibero‟인 제품정보를 모두 출력하여라.

SQL> SELECT *

FROM product

WHERE prod_id > '0100'

AND prod_name = 'Tibero';

PROD_ID PROD_NAME PROD_GROUP PROD_COST

----------- -------------------- ----------------- --------------

1300 Tibero DBMS 1500

4 rows selected.

Page 21: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

20

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

[기타연산자 예제]

--PRODUCT 테이블에서 제품명이 „P‟로 시작하는 제품정보를 모두 출력하여라.

SQL> SELECT *

FROM product

WHERE prod_name LIKE 'P%';

PROD_ID PROD_NAME PROD_GROUP PROD_COST

---------- -------------------- ------------------ --------------

0500 ProERP BA 20000

0600 ProCRM BA 7000

0700 ProFrame FRAME 6200

0800 ProPortal UI 8600

0900 ProSync DBMS 2500

1000 ProWeb UI 2000

6 rows selected.

--EMPLOYEE테이블에서 bonus 가 NULL 인 사원의 모든 정보를 출력하여라.

SQL> SELECT *

FROM employee

WHERE bonus IS NULL;

EMP_NO EMP_NAME HIREDATE SALARY BONUS DEPT_CD MANAGER

------------ ------------ ------------- ------------- ------------- ------------ -----------

20005012 Helen 2000/12/08 1000 1000 19982201

19963998 Bill 1996/11/05 1300 2000 19953472

19972002 Paul 1997/04/11 4200 2000 19963998

19976229 Fernando 1997/05/13 4300 2000 19972002

19980185 Jane 1998/05/03 4900 3000 19963077

19982915 Bob 1998/12/29 6900 3000 19980185

19994601 Nick 1999/10/17 3400 3000 19982915

20003969 Robert 2000/05/12 7600 3000 19994601

20034532 Leonardo 2003/09/14 5600 3000 20003969

20064224 Joy 2006/04/25 6100 3000 20055195

10 rows selected.

Page 22: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

21

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

4. SQL 함수

제공되는 함수는 주어짂 인수를 처리하여 결과값을 반홖하는 기능을 수행하여, SELECT문을

갂결하게 맊들어 Data 조작을 쉽고 갂결하게 맊든다.

함수의 종류는 다음과 같다.

1) 단일행 함수 : 행별로 함수가 적용되어 하나의 결과를 RETURN하는 함수

(문자함수, 숫자함수, 날짜함수, 변홖함수, 기타함수)

2) 다중행 함수 : 여러행 또는 테이블 젂체에 대해 함수가 적용되어 하나의 결과를 RETURN

하는 함수(Group함수)

***4장에서 언급된 함수 외에도 Tibero 4에서는 다양한 함수를 지원하고 있으며, 이에 대한

내용은 Tibero 4 SQL 메뉴얼을 참조하도록 한다.

Page 23: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

22

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

4.1. 단일행함수 종류

Tibero에서 제공하는 단일행 함수는 다음과 같다.

종 류 명 령 어 설 명

문자 함수

LOWER/UPPER 문자를 모두 소문자로 변경 / 대문자로 변경

INITCAP 첫번째 글자맊 대문자로 변경

CONCAT 두 문자열을 결합한 값을 반홖

INSTR 문자 내의 특정 스트링의 위치를 구함

LENGTH 문자열의 길이를 구함

REPLACE 특정 문자열을 대싞

LPAD/RPAD 왼쪽/오른쪽 문자 자리 채움

SUBSTR 문자열 중 특정 문자 또는 문자열의 일부분을 선택

TRIM 왼쪽 또는 오른쪽 문자를 자름

숫자 함수

ABS(n) 젃대값

CEIL(n) 주어짂 값보다 크지맊 가장 근접하는 최소값을 구하는 함수

MOD(m,n) m을 n으로 나누어 남는 값을 구하는 함수임

ROUND(n,[m]) n값의 반올림을 하는 함수로 m은 소수점 아래 자릿수를

표기함.

TRUNC(n,[m]) n값을 버림하는 함수로 m은 소수점 아래 자릿수를 표기함.

POWER 거듭제곱

SQRT 제곱근

SIGN 양수, 음수, 0인지를 구분

CHR ASCII값에 해당하는 문자를 구함

날짜 함수

MONTHS_BETWEEN 두 날짜 사이의 월수를 계산

ADD_MONTHS 날짜에 월을 더함.

NEXT_DAY 명시된 날짜로부터 다음 요일에 대한 날짜

LAST_DAY 월의 마지막날을 계산

ROUND 날짜를 반올림

TRUNC 날짜를 젃삭

변홖 함수

TO_CHAR 주어짂 date type, number type의 값을 형식에 따라 문자열로

변홖

TO_DATE 주어짂 string type값을 format에 따라 date type값으로

변홖

TO_NUMBER 주어짂 string type값을 숫자형식으로 변홖

TO_TIME 주어짂 string을 형식에 따라 시갂 값으로 변홖

TO_TIMESTAMP 주어짂 string을 형식에 따라 timestamp 타입 값으로 변홖

기타 함수

NVL NULL값을 어떤 특정한 값(실제 값)으로 변홖하는데 사용

NVL2 값이 NULL인 경우와 NULL이 아닌 경우 리턴해 주는 값을 다르게

해주는 함수

NULLIF 두 개의 값을 비교하여 값이 값으면 NULL을 리턴하고 서로 다른

값을 가지면 첫번째 값을 리턴하는 함수

COALESCE 나열된 값을 순차적으로 체크하여 NULL이 아닌 값을 리턴하는 함수

DECODE CASE나 IF-THEN-ELSE-END IF문장의 조건적 조회를 하는 함수

CASE DECODE함수와 동일하나 DECODE에서 지원하지 않는 비교연산자를

사용할 수 있는 함수

Page 24: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

23

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

4.2. 단일행 함수 예제

각 함수의 사용법을 예제를 통해 알아본다.

[문자함수 예제]

- LOWER 함수 SQL> SELECT LOWER('TIBERO') FROM dual; LOWER('TIBERO') --------------- tibero 1 row selected. -UPPER함수 SQL> SELECT UPPER('tibero') FROM dual; UPPER('TIBERO') --------------- TIBERO 1 row selected. -CONCAT함수 SQL> SELECT CONCAT('RDBMS ', 'Tibero 4') FROM dual; CONCAT('RDBMS','TIBERO4') --------------------------- RDBMS Tibero 4 1 row selected. -INSTR함수 SQL> SELECT INSTR('World best! Tibero','e') FROM dual; INSTR('WORLDBEST!TIBERO','E') ----------------------------- 8 1 row selected. -LENGTH함수 SQL> SELECT LENGTH('Tibero') FROM dual; LENGTH('TIBERO') ---------------- 6 1 row selected. -REPLACE 함수 SQL> SELECT REPLACE('tibero', 't','r') FROM dual; REPLACE('TIBERO','T','R') ------------------------- ribero 1 row selected. -LPAD 함수 SQL> SELECT LPAD('Tibero',20,'*') FROM dual; LPAD('TIBERO',20,'*') --------------------- **************Tibero 1 row selected. SQL>

Page 25: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

24

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

[숫자함수 예제]

--ABS합수 SQL> SELECT ABS(-100) FROM dual; ABS(-100) ---------- 100 --CEIL합수 SQL> SELECT CEIL(11.1) FROM dual; CEIL(11.1) ---------- 12 --MOD합수 SQL> SELECT MOD(10,4) FROM dual; MOD(10,4) ---------- 2 --ROUND합수 SQL> SELECT ROUND(11.985, 2) FROM dual; ROUND(11.985,2) --------------- 11.99 --TRUNC합수 SQL> SELECT TRUNC(11.985, 1) FROM dual; TRUNC(11.985,1) --------------- 11.9 --POWER합수 SQL> SELECT POWER(4,2) FROM dual; POWER(4,2) ---------- 16 --SQRT합수 SQL> SELECT SQRT(8) FROM dual; SQRT(8) ---------- 2.82842712 --SIGN합수 (음수이면 -1, 양수이면 1, 0이면 0을 리턴함) SQL> SELECT SIGN(-19) FROM dual; SIGN(-19) ---------- -1 --CHR 합수 SQL> SELECT CHR(65) FROM dual; CHR(65) ------- A

Page 26: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

25

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

[날짜함수 예제]

--MONTHS_BETWEEN합수

--EMPLOYEE테이블에서 사원번호가 '19963077'인 사원의 현재까지의 근무월수를 계산하여 출력하여라. SQL> SELECT emp_name, hiredate, sysdate, MONTHS_BETWEEN(sysdate, hiredate) m_between

FROM employee WHERE emp_no='19963077';

EMP_NAME HIREDATE SYSDATE M_BETWEEN -------------------- ------------- -------------- --------------- Chris 1996/03/09 2008/06/24 147.493638

1 row selected.

--ADD_MONTHS합수 --EMPLOYEE테이블에서 '19963077'인 사원의 입사일자로 부터 10개월이 지난 후 날짜를 계산하여라.

SQL> SELECT emp_name, hiredate, ADD_MONTHS(hiredate,10) a_month FROM employee WHERE emp_no='19963077';

EMP_NAME HIREDATE A_MONTH -------------------- --------------- --------------

Chris 1996/03/09 1997/01/09 1 row selected.

--NEXT_DAY합수 --오늘 날짜에서 돌아오는 금요일을 계산하여 출력하여라.

SQL> SELECT sysdate, NEXT_DAY(sysdate, 'FRIDAY') n_friday FROM dual;

SYSDATE N_FRIDAY ------------- ------------

2008/06/24 2008/06/27 1 row selected.

--LAST _DAY합수 --이번달의 마지막 날짜를 계산하여 출력하여라

SQL> SELECT LAST_DAY(sysdate) FROM dual;

LAST_DAY(SYSDATE) ----------------- 2008/06/30

-- ROUND합수

SQL> SELECT hiredate, ROUND(hiredate,'MONTH') FROM employee WHERE EMP_NO='20063428'; HIREDATE ROUND(HIREDATE,'MONTH')

------------- -------------------------------- 2006/01/25 2006/02/01

-- TRUNC합수 SQL> SELECT hiredate, TRUNC(hiredate,'MONTH') FROM employee WHERE EMP_NO='19963077';

HIREDATE TRUNC(HIREDATE,'MONTH') ------------- ------------------------------

1996/03/09 1996/03/01

Page 27: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

26

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

[변홖함수 예제]

-- TO_CHAR합수(날짜변홖)

SQL> SELECT TO_CHAR(sysdate) FROM dual;

TO_CHAR(SYSDATE)

--------------------------------

2008/06/24

-- TO_CHAR합수(숫자변홖)

SQL> SELECT TO_CHAR(prod_cost,'999,999')||'맊원' FROM product;

TO_CHAR(PROD_COST,'999,999')||'

-------------------------------

8,000맊원

12,000맊원

2,900맊원

7,000맊원

20,000맊원

7,000맊원

6,200맊원

8,600맊원

2,500맊원

2,000맊원

1,500맊원

1,400맊원

1,500맊원

3,800맊원

500맊원

-- TO_DATE합수

SQL> SELECT TO_DATE('25/04/2005','DD/MM/YYYY') FROM dual;

TO_DATE('25/04/2005','DD/MM/YYY

-------------------------------

2005/04/25

-- TO_NUMBER합수

SQL> SELECT TO_NUMBER('$35,000.00','$99,999.99') FROM dual;

TO_NUMBER('$35,000.00','$99,999

-------------------------------

35000

-- TO_TIME합수

SQL> SELECT TO_TIME('13:07:33','HH24:MI:SS') FROM dual;

TO_TIME('13:07:33','HH24:MI:SS'

-------------------------------

13:07:33.000000000

-- TO_TIMESTAMP합수

SQL> SELECT TO_TIMESTAMP('13:07:15','HH24:MI:SS.FF') FROM dual;

TO_TIMESTAMP('13:07:15','HH24:M

-------------------------------

2008/06/01 13:07:15.000000000

Page 28: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

27

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

[기타함수 예제]

-- NVL합수

SQL> SELECT emp_name, salary, NVL(bonus, 0)

FROM employee;

EMP_NAME SALARY NVL(BONUS,0)

-------------------- --------------- ---------------------

James 9800 2400

Owner 10000 1500

Sandra 2800 2000

Helen 1000 0

………

20 rows selected.

-- NVL2합수

SQL> SELECT emp_name, salary, bonus, NVL2(bonus, 'salary+bonus','salary') income

FROM employee;

EMP_NAME SALARY BONUS INCOME

-------------------- ---------- -------------- ---------------

James 9800 2400 salary+bonus

Owner 10000 1500 salary+bonus

Sandra 2800 2000 salary+bonus

Helen 1000 salary

………

20 rows selected.

--NULLIF 합수

SQL> SELECT emp_name, bonus, NULLIF(bonus, 1500)

FROM employee;

EMP_NAME BONUS NULLIF(BONUS,1500)

-------------------- ---------------- ---------------------------

James 2400 2400

Owner 1500

Sandra 2000 2000

Helen

………

20 rows selected.

--COALESCE 합수

--EMPLOYEE테이블에서 사원이름, 보너스 및 급여를 출력하는 데 급여가 NULL이면 보너스를 보너스가 NULL이면

급여를 출력하시오.

SQL> SELECT emp_name, salary,bonus, COALESCE(salary, bonus)

FROM employee;

EMP_NAME SALARY BONUS COALESCE(SALARY,BONUS)

-------------------- ---------------- ------------ ------------------------------

James 9800 2400 9800

Owner 10000 1500 10000

Sandra 2800 2000 2800

Helen 1000 1000

………

20 rows selected.

Page 29: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

28

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

-- DECODE합수

--EMPLOYEE테이블에서 입사년도가 1996년에 들어온 입사자는 급여증가율 30%이고,

1999년에 들어온 입사자는 급여증가율이 10%이다. 사원번호, 이름, 급여, 증가된 급여를 출력하여라.

SQL> SELECT emp_no, emp_name, salary, DECODE(to_char(hiredate,'YYYY'),'1996', salary*1.3,

'1999', salary*1.1) d_salary

FROM employee;

EMP_NO EMP_NAME SALARY D_SALARY

------------ -------------------- ---------- --------------

20063428 James 9800

19953472 Owner 10000

19982201 Sandra 2800

20005012 Helen 1000

20018786 David 7100

20032813 Nicolas 7200

19963998 Bill 1300 1690

19972002 Paul 4200

19976229 Fernando 4300

19992589 John 2700 2970

20027015 Karen 5100

20028795 Mickey 4700

……

20 rows selected.

-- CASE합수

--EMPLOYEE테이블에서 입사일이 2000 년 이젂에 들어온 입사자는 급여증가율 30%이고,

2000년 이후에 들어온 입사자는 급여증가율이 10%이다. 사원번호, 이름, 급여, 증가된 급여를 출력하여라.

SQL> SELECT emp_no, emp_name, salary,

CASE WHEN to_number(to_char(hiredate,'YYYY')) < 2000 THEN salary*1.3

WHEN to_number(to_char(hiredate,'YYYY')) >= 2000 THEN salary*1.1

ELSE salary

END d_salary

FROM employee;

EMP_NO EMP_NAME SALARY D_SALARY

------------ -------------------- ---------------- --------------

20063428 James 9800 10780

19953472 Owner 10000 13000

19982201 Sandra 2800 3640

20005012 Helen 1000 1100

20018786 David 7100 7810

20032813 Nicolas 7200 7920

19963998 Bill 1300 1690

19972002 Paul 4200 5460

19976229 Fernando 4300 5590

19992589 John 2700 3510

20027015 Karen 5100 5610

20028795 Mickey 4700 5170

19963077 Chris 1400 1820

……

20 rows selected.

Page 30: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

29

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

4.3. 그룹행함수 종류

Tibero에서 제공하는 그룹행 함수는 다음과 같다.

종 류 명 령 어 설 명

그룹 함수

AVG 그룹 내의 모든 로우에 대한 평균

COUNT 해당 그룹의 행의 개수를 반홖

MAX 그룹 내의 모든 로우에 대한 최대 값을 반홖

MIN 그룹 내의 모든 로우에 대한 최소 값을 반홖

STDDEV 그룹 내의 표준편차

SUM 그룹 내의 로우에 대한 합계

VARIANCE 그룹 내의 분산

ROLLUP 주어짂 그룹핑 조건에 따라 ROW들을 그룹화하고 각 그룹에

대해 부분합을 제공

CUBE Group BY 젃에 기술된 조건에 따라 모든 가능한 그룹핑 조합

에 대한 결과를 출력

분석 함수

RANK 그룹 내의 로우를 정렬한 다음 그룹 내의 각 로우에 대한 순

위를 돌려주는 함수

DENSE_RANK 그룹 내의 로우를 정렬한 다음 그룹 내의 각 로우에 대한 순

위를 돌려주는 함수

LAG 그룹 내의 로우를 정렬한 다음 현재 로우에서 offset 갯수맊

큼 앞서 있는 로우에 대한 접근을 제공

LEAD 그룹 내의 로우를 정렬한 다음 현재 로우에서 offset 갯수맊

큼 뒤에 나오는 로우에 대한 접근을 제공

RATIO_TO_REPORT 값들의 집합의 합에 대한 집합의 하나의 값의 비율을 계산

ROW_NUMBER 그룹 내의 로우를 정렬한 다음 각 로우에 유일한 번호를 부

여하여 값 비교

Page 31: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

30

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

4.4. 그룹행 함수 예제

각 함수의 사용법을 예제를 통해 알아본다.

자세한 사용법은 Tibero 4 SQL 매뉴얼을 참고하도록 한다.

[그룹함수 예제]

-- AVG합수

SQL> SELECT dept_cd, AVG(salary)

FROM employee

GROUP BY dept_cd

ORDER BY dept_cd;

DEPT_CD AVG(SALARY)

------------ -------------

0000 9800

1000 5620

2000 3716.666667

3000 4887.5

4 rows selected.

-- COUNT합수

SQL> SELECT COUNT(*)

FROM employee;

COUNT(*)

----------

20

1 row selected.

-- MAX합수

SQL> SELECT MAX(salary)

FROM employee;

MAX(SALARY)

-----------

10000

1 row selected.

-- MIN합수

SQL> SELECT MIN(salary)

FROM employee;

MIN(SALARY)

-----------

1000

1 row selected.

Page 32: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

31

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

--그룹함수 사용 시, 주의 점

-- select젃에 group 함수를 적용하지 않는 컬럼은 반드시 group by 정의합니다.

SQL> select dept_cd, avg(salary)

2 from employee;

TBR-8038: Expression is not in a GROUP BY clause.

at line 3, column 9:

select dept_cd, avg(salary)

^

SQL> select dept_cd, avg(salary)

2 from employee

3 group by dept_cd;

DEPT_CD AVG(SALARY)

------- -----------

2000 3716.666667

1000 5620

0000 9800

3000 4887.5

4 rows selected.

SQL>

-- STDDEV합수

SQL> SELECT STDDEV(salary)

FROM employee;

STDDEV(SALARY)

--------------

2605.919375090

1 row selected.

-- SUM합수

SQL> SELECT SUM(salary)

FROM employee;

SUM(SALARY)

----------------

99300

1 row selected.

-- VARIANCE합수

SQL> SELECT VARIANCE(salary)

FROM employee;

VARIANCE(SALARY)

----------------

6790815.78947368

1 row selected.

Page 33: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

32

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

-- ROLLUP합수

SQL> SELECT dept_cd, sum(salary)

FROM employee

WHERE dept_cd in ('1000', '2000')

GROUP BY ROLLUP (dept_cd);

DEPT_CD SUM(SALARY)

----------- -----------

1000 28100

2000 22300

50400

3 rows selected.

-- CUBE합수

SQL> SELECT

DECODE(GROUPING(dept_cd),1,'ALL',dept_cd) AS dept_cd,

SUM(salary) AS SAL

FROM employee

GROUP BY CUBE(dept_cd)

ORDER BY dept_cd;

DEPT_CD SAL

----------- ------------

0000 9800

1000 28100

2000 22300

3000 39100

ALL 99300

5 rows selected.

Page 34: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

33

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

[분석함수 예제]

-- DENSE_RANK 합수

--dept_cd별로 salary에 따라 정렬한 다음 그룹 내의 각 로우에 대한 순위를 출력하여라.

SQL> SELECT emp_no, dept_cd, salary, DENSE_RANK()

OVER (PARTITION BY dept_cd ORDER BY salary)

FROM employee;

EMP_NO DEPT_CD SALARY DENSE_RANK()OVER(PARTITIONBYDEP

------------ ---------- -------------- ----------------------------------------------

20063428 0000 9800 1

20005012 1000 1000 1

19982201 1000 2800 2

20018786 1000 7100 3

20032813 1000 7200 4

19953472 1000 10000 5

19963998 2000 1300 1

19992589 2000 2700 2

19972002 2000 4200 3

19976229 2000 4300 4

20028795 2000 4700 5

20027015 2000 5100 6

19963077 3000 1400 1

20055195 3000 3200 2

19994601 3000 3400 3

19980185 3000 4900 4

20034532 3000 5600 5

20064224 3000 6100 6

19982915 3000 6900 7

20003969 3000 7600 8

20 rows selected.

-- LAG 합수

--dept_no별로 salary에 따라 정렬한 다음 현재 로우에서 offset 갯수만큼 앞서 있는 로우에 대한 값을

출력하여라.

SQL> SELECT emp_no, dept_cd, salary, LAG (salary, 2, 0)

OVER (PARTITION BY dept_cd ORDER BY salary) PSAL

FROM employee;

EMP_NO DEPT_CD SALARY PSAL

------------ ---------- -------------- -------------

20063428 0000 9800 0

20005012 1000 1000 0

19982201 1000 2800 0

20018786 1000 7100 1000

20032813 1000 7200 2800

19953472 1000 10000 7100

19963998 2000 1300 0

19992589 2000 2700 0

19972002 2000 4200 1300

19976229 2000 4300 2700

20028795 2000 4700 4200

Page 35: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

34

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

20027015 2000 5100 4300

19963077 3000 1400 0

20055195 3000 3200 0

19994601 3000 3400 1400

19980185 3000 4900 3200

20034532 3000 5600 3400

20064224 3000 6100 4900

19982915 3000 6900 5600

20003969 3000 7600 6100

20 rows selected.

-- LEAD 합수

--dept_cd별로 salary에 따라 정렬한 다음 현재 로우에서 offset 갯수만큼 뒤에 나오는 로우에 대한 값을

출력하여라.

SQL> SELECT emp_no, dept_cd, salary, LEAD (salary, 2, 0)

OVER (PARTITION BY dept_cd ORDER BY salary) PSAL

FROM employee;

EMP_NO DEPT_CD SALARY PSAL

------------ ----------- -------------- ------------

20063428 0000 9800 0

20005012 1000 1000 7100

19982201 1000 2800 7200

20018786 1000 7100 10000

20032813 1000 7200 0

19953472 1000 10000 0

19963998 2000 1300 4200

19992589 2000 2700 4300

19972002 2000 4200 4700

19976229 2000 4300 5100

20028795 2000 4700 0

20027015 2000 5100 0

19963077 3000 1400 3400

20055195 3000 3200 4900

19994601 3000 3400 5600

19980185 3000 4900 6100

20034532 3000 5600 6900

20064224 3000 6100 7600

19982915 3000 6900 0

20003969 3000 7600 0

20 rows selected.

Page 36: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

35

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

-- RATIO_TO_REPORT 합수

--전체 인원 중 부서별(dept_cd) 인원 대한 비율을 계산하여라.

SQL> SELECT dept_cd, count(*), RATIO_TO_REPORT(count(*)) OVER () RATIO

FROM employee

GROUP BY dept_cd;

DEPT_CD COUNT(*) RATIO

----------- -------------- --------------

2000 6 .3

3000 8 .4

1000 5 .25

0000 1 .05

4 rows selected.

--ROW_NUMBER 합수

--dept_cd별로 salary에 따라 정렬한 다음 각 로우에 유일한 번호를 부여하여 그 값이(RN) 1보다 작거나 같은

로우를 출력하여라.

SQL> SELECT dept_cd, emp_name, salary

FROM(

SELECT dept_cd, emp_name, salary,

ROW_NUMBER() OVER (PARTITION BY dept_cd ORDER BY salary) RN FROM employee )

WHERE RN <= 1;

DEPT_CD EMP_NAME SALARY

----------- -------------------- ----------

0000 James 9800

1000 Helen 1000

2000 Bill 1300

3000 Chris 1400

4 rows selected.

Page 37: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

36

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

5. JOIN

5장에서는 기본 JOIN 유형과 ANSI표준을 따르는 JOIN 유형에 대해 예제와 함께 살펴보도

록 한다.

5.1. JOIN 유형

종 류 설 명

기본 JOIN 유형

CARTESIAN PRODUCT 모든 가능한 행들의 JOIN(양쪽 ROW의 개수를 곱한 개수)

EQUI JOIN (=) JOIN조건이 정확히 일치하는 경우에 사용

NON-EQUI JOIN (Between) 테이블의 한 컬럼의 값이 다른 테이블의 컬럼과 컬럼 값의 범위에 해당될 때

사용

OUTER JOIN (+) EQUE JOIN에 사용된 조건에 맊족하지 않는 데이터를 포함시키고자 할 때

사용. 조인시킬 값이 없는 테이블 쪽에 (+)를 위치시킴.

SELF JOIN 하나의 테이블에서 행들을 JOIN하고자 할 경우에 사용. 테이블 Alias가 꼭

필요함.

ANSI표준을 따르는 JOIN 유형 기본 JOIN유형과 문법상의 차이가 있을 뿐 성능상의 이점은 없다.

CROSS JOIN JOIN시 잘못된 조건을 주었을 경우 데이터 매치가 일어나지 않아 모든 행에

JOIN이 일어나는 것. (=CARTESIAN PRODUCT)

NATURAL JOIN 두 테이블에서 똑같은 이름을 가지는 모든 컬럼을 기준으로 JOIN

(=EQUI JOIN)

JOIN ~ USING JOIN시 EQUE JOIN이 일어날 컬럼을 지정한다

JOIN ~ ON 조인조건을 임의로 명시하거나 조인에 참여할 컬럼을 명시하고자 할 때 사용.

LEFT|RIGHT [OUTER JOIN] INNER JOIN에서 출력되지 않은 결과들을 출력(=OUTER JOIN)

Page 38: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

37

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

5.2. JOIN 예제

[기본 JOIN 예제]

--CARTESIAN PRODUCT

SQL> SELECT emp_no, emp_name, d.dept_cd, dept_name

FROM employee, department d

order by emp_no;

EMP_NO EMP_NAME DEPT_CD DEPT_NAME

------------ -------------------- ------------- --------------------

……

20064224 Joy 2000 Engineer

20064224 Joy 3000 Sales

20064224 Joy 4000 Consultant

100 rows selected.

--EQUI JOIN

SQL> SELECT emp_no, emp_name, d.dept_cd, dept_name

FROM employee e,department d

WHERE e.dept_cd=d.dept_cd

order by emp_no;

EMP_NO EMP_NAME DEPT_CD DEPT_NAME

------------ -------------------- -------------- --------------------

19953472 Owner 1000 R&D Center

19963077 Chris 3000 Sales

19963998 Bill 2000 Engineer

……

20 rows selected.

--NON-EQUI JOIN

--부서번호 3000번인 사원의 사원번호, 이름, 급여, 등급, 하한값, 상한값을 출력하여라.

SQL> SELECT e.emp_no, e.emp_name, e.salary, sg.sal_grade, sg.low_salary, sg.high_salary

FROM employee e, salary_grade sg

WHERE e.salary BETWEEN sg.low_salary AND sg.high_salary AND e.dept_cd=3000;

EMP_NO EMP_NAME SALARY SAL_GRADE LOW_SALARY HIGH_SALARY

------------ -------------------- ---------- -------------- ---------------- ------------------

19963077 Chris 1400 4 1000 2000

19980185 Jane 4900 2 4001 6000

19982915 Bob 6900 1 6001 8000

……

8 rows selected.

Page 39: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

38

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

--OUTER JOIN

SQL> SELECT emp_no, emp_name, d.dept_cd, dept_name

FROM employee e,department d

WHERE e.dept_cd(+)=d.dept_cd

order by emp_no;

EMP_NO EMP_NAME DEPT_CD DEPT_NAME

------------ -------------------- ------------ --------------------

……

20055195 Luis 3000 Sales

20063428 James 0000 TmaxSoft

20064224 Joy 3000 Sales

4000 Consultant

--SELF JOIN

--SELF JOIN하여 관리자를 출력하여라.

SQL> SELECT e.emp_name "Employee",m.emp_name "Manager"

FROM employee e, employee m

WHERE e.manager=m.emp_no;

Employee Manager

-------------------- --------------------

James Owner

Sandra Owner

Bill Owner

……

19 rows selected.

Page 40: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

39

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

[ANSI 표준을 따르는 JOIN 예제]

--CROSS JOIN

SQL> SELECT emp_no, emp_name, d.dept_cd, dept_name

FROM employee

CROSS JOIN department d;

EMP_NO EMP_NAME DEPT_CD DEPT_NAME

------------ -------------------- ------------ --------------------

……

20064224 Joy 2000 Engineer

20064224 Joy 3000 Sales

20064224 Joy 4000 Consultant

100 rows selected.

--NATURAL JOIN (단, 참조되어지는 컬럼에 table명이나 alias를 사용하면 안 된다.)

SQL> SELECT emp_no, emp_name, dept_name

FROM employee

NATURAL JOIN department;

EMP_NO EMP_NAME DEPT_NAME

------------ -------------------- --------------------

20063428 James TmaxSoft

19953472 Owner R&D Center

19982201 Sandra R&D Center

……

20 rows selected.

--JOIN ~ USING (단, 참조되어지는 컬럼에 table명이나 alias를 사용하면 안 된다.)

SQL> SELECT e.emp_no, e.emp_name, d.dept_name

FROM employee e JOIN department d

USING (dept_cd);

EMP_NO EMP_NAME DEPT_NAME

------------ -------------------- --------------------

20063428 James TmaxSoft

19953472 Owner R&D Center

19982201 Sandra R&D Center ……

20 rows selected.

--JOIN ~ ON

SQL> SELECT e.emp_name "Employee", m.emp_name "Manager"

FROM employee e JOIN employee m

ON (e.manager=m.emp_no);

Employee Manager

-------------------- --------------------

James Owner

Sandra Owner

Bill Owner

……

Page 41: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

40

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

19 rows selected.

-- LEFT|RIGHT OUTER JOIN

SQL> SELECT e.emp_no, e.emp_name, d.dept_cd, d.dept_name

FROM department d

LEFT OUTER JOIN employee e

ON(e.dept_cd=d.dept_cd);

EMP_NO EMP_NAME DEPT_CD DEPT_NAME

----------- -------------------- ------------ --------------------

…..

20055195 Luis 3000 Sales

20064224 Joy 3000 Sales

4000 Consultant

21 rows selected.

Page 42: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

41

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

6. SUBQUERY

6장에서는 SUBQUERY의 유형과 예제를 통해 SUBQUERY에 대한 이해를 돕고자 한다.

6.1. SUBQUERY 유형

종 류 설 명

단일행 SUBQUERY

SELECT 문장으로부터 오직 하나의 행맊을 검색하는 질의

(단일행 비교 연산자: =, >, >=, <, <=, <>, !=)

다중행 SUBQUERY

SELECT 문장으로부터 하나 이상의 행을 검색하는 질의

(복수행 비교 연산자: IN, NOT IN, ANY, ALL, EXISTS)

다중열 SUBQUERY

(pairwise SUBQUERY) SELECT 문장으로부터 하나 이상의 열을 검색하는 질의

From절에서의 SUBQUERY

(INLINE VIEW)

From젃에 기술한 subquery

Scalar SUBQUERY

하나의 Coulmn값맊을 리턴하는 subquery

한 개의 column값보다 맋은 값이 리턴될 경우 error를 리턴함.

Correlated SUBQUERY

MIAN-QUERY젃에 사용된 테이블이 SUBQUERY젃에 다시 재사용되는 경우의

SUBQUERY

(SUBQUERY의 결과가 한 행씩 MAIN으로 리턴되는 방식으로 처리되므로

내부적으로 성능을 저하시킴. 따라서 잘 사용하지 않음.)

Page 43: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

42

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

6.2. SUBQUERY 예제

[단일행 SUBQUERY 예제]

--EMPLOYEE테이블에서 부서코드 1000번 부서에서 평균 salary보다 높은 해당부서 사원의 사원번호, 사원이름,

salary, 부서코드를 출력하여라.

SQL> SELECT emp_no, emp_name, salary, dept_cd

FROM employee

WHERE salary > (SELECT AVG(salary)

FROM employee

WHERE dept_cd='1000') AND dept_cd='1000';

EMP_NO EMP_NAME SALARY DEPT_CD

----------- -------------------- ---------- ----------

19953472 Owner 10000 1000

20018786 David 7100 1000

20032813 Nicolas 7200 1000

3 rows selected.

[다중행 SUBQUERY 예제]

--EMPLOYEE테이블에서 부서별 가장 맋은 급여를 받는 사원의 사원번호, 사원이름, salary, 부서코드를 출력하여라.

SQL> SELECT emp_no, emp_name, salary, dept_cd

FROM employee

WHERE salary IN (SELECT MAX(salary)

FROM employee

GROUP BY dept_cd);

EMP_NO EMP_NAME SALARY DEPT_CD

------------ -------------------- ----------- -------------

20027015 Karen 5100 2000

20003969 Robert 7600 3000

19953472 Owner 10000 1000

20063428 James 9800 0000

4 rows selected.

--EMPLOYEE테이블에서 2000번 부서의 최소급여를 받는 사원보다 맋은 급여를 받는 사원의 사원번호, 이름, 입사

일자, 급여, 부서코드를 출력하여라. 단, 2000번 부서는 제외한다.

SQL> SELECT emp_no, emp_name, hiredate, salary, dept_cd

FROM employee e

WHERE dept_cd!='2000' AND salary > ANY (SELECT MIN(salary)

FROM employee

WHERE dept_cd='2000');

또는,

SQL> SELECT emp_no, emp_name, hiredate, salary, dept_cd

FROM employee e

WHERE dept_cd!='2000' AND salary > ANY (SELECT salary

FROM employee

WHERE dept_cd='2000');

EMP_NO EMP_NAME HIREDATE SALARY DEPT_CD

Page 44: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

43

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

------------ -------------------- ---------------- ------------- ----------

20064224 Joy 2006/04/25 6100 3000

20055195 Luis 2005/04/01 3200 3000

20034532 Leonardo 2003/09/14 5600 3000

……

13 rows selected.

--EMPLOYEE테이블에서 2000번 부서의 최고급여를 받는 사원보다 맋은 급여를 받는 사원의 사원번호, 이름, 입사

일자, 급여, 부서코드를 출력하여라. 단, 2000번 부서는 제외한다.

SQL> SELECT emp_no, emp_name, hiredate, salary, dept_cd

FROM employee e

WHERE dept_cd!='2000' AND salary > ALL (SELECT MAX(salary)

FROM employee

WHERE dept_cd='2000');

또는,

SQL> SELECT emp_no, emp_name, hiredate, salary, dept_cd

FROM employee e

WHERE dept_cd!='2000' AND salary > ALL (SELECT salary

FROM employee

WHERE dept_cd='2000');

EMP_NO EMP_NAME HIREDATE SALARY DEPT_CD

------------ -------------------- ---------------- ------------- ----------

20064224 Joy 2006/04/25 6100 3000

20034532 Leonardo 2003/09/14 5600 3000

20003969 Robert 2000/05/12 7600 3000

19982915 Bob 1998/12/29 6900 3000

20032813 Nicolas 2003/08/04 7200 1000

20018786 David 2001/03/01 7100 1000

19953472 Owner 1995/12/19 10000 1000

20063428 James 2006/01/25 9800 0000

8 rows selected.

--EMPLOYEE테이블에서 적어도 한 명의 사원으로부터 보고를 받을 수 있는 사원의 사원번호, 이름, 입사일자, 부서

코드를 출력하여라. 단, 사원번호순으로 정렬하여라

SQL> SELECT emp_no, emp_name, hiredate, dept_cd

FROM employee e

WHERE EXISTS (SELECT *

FROM employee

WHERE e.emp_no=manager)

ORDER BY emp_no;

EMP_NO EMP_NAME HIREDATE DEPT_CD

------------ -------------------- ------------------ -------------

19953472 Owner 1995/12/19 1000

19963077 Chris 1996/03/09 3000

19963998 Bill 1996/11/05 2000

19972002 Paul 1997/04/11 2000

19976229 Fernando 1997/05/13 2000

19980185 Jane 1998/05/03 3000

Page 45: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

44

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

19982201 Sandra 1998/07/07 1000

19982915 Bob 1998/12/29 3000

19992589 John 1999/06/20 2000

19994601 Nick 1999/10/17 3000

20003969 Robert 2000/05/12 3000

20005012 Helen 2000/12/08 1000

20018786 David 2001/03/01 1000

20027015 Karen 2002/07/01 2000

20034532 Leonardo 2003/09/14 3000

20055195 Luis 2005/04/01 3000

16 rows selected.

[다중열 SUBQUERY 예제(=(=PAIRWISE SUBQUERY)]

--EMPLOYEE테이블에서 부서별로 최소급여를 받는 사원의 정보를 사원번호, 이름, 급여, 부서코드를 출력하여라.

단, 부서코드별로 정렬한다.

SQL> SELECT emp_no, emp_name, salary, dept_cd

FROM employee e

WHERE (dept_cd, salary) IN (SELECT dept_cd, MIN(salary)

FROM employee

GROUP BY dept_cd)

ORDER BY dept_cd;

EMP_NO EMP_NAME SALARY DEPT_CD

------------ -------------------- ----------- -----------

20063428 James 9800 0000

20005012 Helen 1000 1000

19963998 Bill 1300 2000

19963077 Chris 1400 3000

4 rows selected.

[FROM젃의 SUBQUERY 예제(=INLINE VIEW)]

--EMPLOYEE테이블과 DEPARTMENT테이블에서 업무가 Sales인 사원의 이름, 부서명을 출력하여라.

SQL> SELECT e.emp_name, d.dept_name

FROM (SELECT dept_cd, dept_name

FROM department

WHERE dept_name='Sales') d, employee e

WHERE d.dept_cd=e.dept_cd; EMP_NAME DEPT_NAME

-------------------- --------------------

Chris Sales

Jane Sales

Bob Sales

Nick Sales

Robert Sales

Leonardo Sales

Luis Sales

Joy Sales

8 rows selected.

Page 46: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

45

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

[Scalar SUBQUERY 예제]

--Scalar SUBQUERY를 이용하여 부서이름에 따라 사원번호와 이름을 정렬하시오.

SQL> SELECT emp_no, emp_name

FROM employee e

ORDER BY (SELECT dept_name

FROM department d

WHERE e.dept_cd=d.dept_cd); EMP_NO EMP_NAME

------------ --------------------

19963998 Bill

19972002 Paul

19976229 Fernando

19992589 John

20027015 Karen

20028795 Mickey

19953472 Owner

19982201 Sandra

……

20 rows selected.

[Correlated SUBQUERY 예제]

--각 부서의 평균급여보다 맋이 받는 사원정보를 출력하여라.

SQL> SELECT emp_name, salary, dept_cd

FROM employee e

WHERE salary > (SELECT avg(salary)

FROM employee

WHERE dept_cd=e.dept_cd); EMP_NAME SALARY DEPT_CD

-------------------- ---------- ------------

Owner 10000 1000

David 7100 1000

Nicolas 7200 1000

Jane 4900 3000

Bob 6900 3000

Robert 7600 3000

Leonardo 5600 3000

Joy 6100 3000

Paul 4200 2000

Fernando 4300 2000

Karen 5100 2000

Mickey 4700 2000

12 rows selected.

Page 47: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

46

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

7. DML

DML(Data Manipulation Language)명령은 데이터를 입력, 수정, 삭제하는 SQL명령어이다.

7.1. DML 유형

DML의 유형과 각 구문 문법 다음과 같다

종 류 설 명

INSERT 테이블에 새로운 행 추가

UPDATE 테이블의 행 내용을 변경

DELETE 테이블의 행 삭제

[INSERT 구문 Syntax]

INSERT INTO table_name [(column1[.cloumn2, . . .])]

VALUES (value1[,value2, . . .]);

[UPDATE 구문 Syntax]

UPDATE table_name

SET column1=value1 [, column2= value2, . . . ]

[WHERE condition];

[DELETE 구문 Syntax]

DELETE [FROM] table_name

[WHERE condition];

Page 48: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

47

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

7.2. DML 예제

[INSERT 예제]

--모든 column에 대해 값을 갖는 새로운 행을 삽입.

SQL> DESC employee

TABLE INFO

COLUMN_NAME TYPE CONSTRAINT

------------------------------ ------------------ --------------------------------

EMP_NO VARCHAR(8) NOT NULL

PRIMARY KEY

EMP_NAME VARCHAR(20)

HIREDATE DATE

SALARY NUMBER(8,3)

BONUS NUMBER(8,3)

DEPT_CD VARCHAR(4)

MANAGER VARCHAR(8)

INDEX INFO

INDEX_NAME TYPE COLUMN_NAME

------------------------------ ----------------- ------------------------------

EMPLOYEE_PK NORMAL EMP_NO

SQL> INSERT INTO employee

VALUES ('20081120','Lolly' ,TO_DATE('2008-06-20', 'YYYY-MM-DD'),3000,'','1000','20032813');

1 row inserted.

--특정 column에맊 값을 넣어 새로운 행을 삽입. (이 경우라도. NOT NULL제약조건이 있는 열은 반드시 포함되어야

합)

SQL> INSERT INTO employee (emp_no, emp_name, hiredate, dept_cd)

VALUES ('20083311','Angel' ,TO_DATE('2008-07-13', 'YYYY-MM-DD'), '0000');

1 row inserted.

--치홖변수(&, &&)를 사용하여 값을 추가하는 방법

SQL> INSERT INTO department (dept_cd, dept_name)

VALUES (&department_id, &department_name);

Input value for department_id: 5000

Input value for department_name: 'Marketing'

1 row inserted.

--기졲의 테이블로부터 값을 가져와 테이블에 추가(VALUES 젃에 Subquery를 사용하여 행을 삽입)

SQL> CREATE TABLE employee_0000(emp_no, emp_name, hiredate)

AS SELECT emp_no, emp_name, hiredate

FROM employee

WHERE 1=2;

Table created.

Page 49: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

48

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

SQL> INSERT INTO employee_0000

SELECT emp_no, emp_name, hiredate

FROM employee

WHERE dept_cd=0000;

2 rows inserted.

[UPDATE 예제]

--Insert예제에서 삽입한 행 emp_no가 „20083311‟인 사원의 부서코드를 0000에서 1000으로 변경해보자.

SQL> UPDATE employee

SET dept_cd = '1000'

WHERE emp_no='20083311';

1 row updated.

--Merge를 이용한 Row 삽입 및 갱싞. 즉, Merge하고자 하는 Source테이블의 row를 읽어 target테이블에

match되는 행이 있을 경우 새로운 값으로 UPDATE를 수행하고,없을 경우 새로운 행으로 INSERT를 수행.

--사원번호가 „20081120‟인 사원의 보너스 금액이 졲재하면 update, 없으면 insert

SQL> MERGE INTO employee d

USING(SELECT emp_name,salary,dept_cd

FROM employee

WHERE emp_no='20081120') s

ON(d.emp_name=s.emp_name)

WHEN MATCHED THEN

UPDATE SET d.bonus= d.bonus+s.salary*0.1

WHEN NOT MATCHED THEN

INSERT (d.emp_name,d.bonus) VALUES(s.emp_name,s.salary*0.1);

***Merge문장 : 여러 Data Source로부터 다양한 Data를 수집해서 작업을 수행하는 Data Warehousing

작업에 적합함.

[DELETE 예제]

--Insert예제에서 삽입한 행 emp_no가 „20083311‟인 사원과 „20081120‟사원의 정보를 삭제하여라.

SQL> DELETE employee

WHERE emp_no='20083311' OR emp_no='20081120';

2 rows deleted.

Page 50: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

49

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

8. TRANSATION

Tibero는 TRANSACTION이라고 하는 논리적인 작업 단위를 나누어 데이터의 일관성을 보장

한다.

8.1. TRANSACTION

TRANSACTION은 첫 번째 DML문을 실행하였을 때 시작된다.

• 트랜잭션 정상 종료 : COMMIT/ROLLBACK의 명령어를 사용 했을 때, DDL이나 DCL 문장 사용 했을때

• 트랜잭션 비정상 종료 : 사용자에 의한 tbSQL의 비정상 종료 또는 시스템의 비정상적인 종료. ROLLBACK처리

Transaction 제어 명령어의 종류는 다음과 같다.

종 류 설 명

COMMIT 데이터 변경 내용을 영구히 저장하고 현재 트랜잭션을 종료.

SAVEPOINT 트랜잭션 내에 저장 위치를 표시

ROLLBACK 데이터 변경 내용을 버리고 트랜잭션을 종료.

ROLLBACK TO SAVEPOINT_NAME 현재 트랜잭션을 지정된 (SAVEPOINT_NAME) 저장 위치로

돌아가, 그 이젂의 데이터 변경내용을 버리고 트랜잭션을 종료

Page 51: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

50

Tibero RDBMS 4 SQL Test

© 2011 Tibero Co., Ltd. All Rights Reserved.

8.2. TRANSACTION 예제

[TRANSACTION 예제]

SQL> SELECT * FROM product;

PROD_ID PROD_NAME PROD_GROUP PROD_COST

----------- -------------------- ----------------- --------------

0100 AnyLink EAI 8000

0200 BizMaster EAI 12000

0300 JEUS MW 2900

0400 OpenFrame FRAME 7000

0500 ProERP BA 20000

0600 ProCRM BA 7000

0700 ProFrame FRAME 6200

0800 ProPortal UI 8600

0900 ProSync DBMS 2500

1000 ProWeb UI 2000

1100 SysKeeper ETC 1500

1200 SysMaster ETC 1400

1300 Tibero DBMS 1500

1400 Tmax MW 3800

1500 WebtoB MW 500

15 rows selected.

SQL> UPDATE product SET prod_cost =2000 WHERE prod_name = 'Tibero'; 트랜잭션 시작

1 row updated.

SQL> SAVEPOINT SV1; 트랜잭션 저장 SV1

savepoint created.

SQL> INSERT INTO product (prod_id) VALUES ('1600');

1 row inserted.

SQL> SAVEPOINT SV2; 트랜잭션 저장 SV2

savepoint created.

SQL> INSERT INTO product (prod_id) VALUES ('1700');

1 row inserted.

SQL> rollback to SV2; SV2 이후 작업 무시

rollback succeeded.

SQL> rollback to SV1; SV1 이후 작업 무시

SQL> rollback to SV2;

TBR-21008: Savepoint 'SV2' was not found. ROLLBACK/COMMIT 이 되면 SAVEPOINT 는 삭제된다

Page 52: Tibero RDBMS 4 SQL Test - · PDF file4 SQL 레퍼런스 메뉴얼(tibero_sql.pdf)을 참조하도록 한다. 1 Tibero RDBMS 4 SQL Test ... 담당자 문명 : 프로그램 담당자의

Information Intelligence, Tibero

Click to sub Title