42

SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

  • Upload
    dolien

  • View
    244

  • Download
    11

Embed Size (px)

Citation preview

Page 1: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기
Page 2: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

다양한 예제로 쉽게 배우는

오라클 SQL과 PL/SQL + 데이터 모델링 입문 <개정판>

초판발행 2012년 10월 26일

제2판1쇄 2015년 16월 22일

지은이 서진수, 주시현

펴낸이 김승기

펴낸곳 (주)생능출판사 / 주소 경기도 파주시 광인사길 143출판사 등록일 2005년 1월 21일 / 신고번호 제406-2005-000002호

대표전화 (031)955-0761 / 팩스 (031)955-0768홈페이지 www.booksr.co.kr

책임편집 김민보 / 편집 최일연, 신성민, 손정희 / 디자인 유준범

마케팅 백승욱, 최복락, 김민수, 심수경, 최권혁, 백수정, 이재원, 최태웅, 김민정

인쇄 성광인쇄(주) / 제본 은정문화사

ISBN 978-89-7050-840-5 93000

정가 27,000원

● 이 도서의 국립중앙도서관 출판예정도서목록(CIP)은 서지정보유통지원시스템 홈페이지(http://seoji.nl.go.kr)와

국가자료공동목록시스템(http://www.nl.go.kr/kolisnet)에서 이용하실 수 있습니다.

(CIP제어번호: CIP2015014948)

● 이 책의 저작권은 (주)생능출판사와 지은이에게 있습니다. 무단 복제 및 전재를 금합니다.

● 잘못된 책은 구입한 서점에서 교환해 드립니다.

Page 3: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

머리말 ❖ 3

안녕하세요. 독자님.

이 책의 저자 데이터쟁이 서진수입니다. 먼저 이 책을 선택해 주셔서 진심으로 감사의

말씀을 드립니다.

이 책에 대해서 간략하게 소개 드립니다.

이 책은 오라클 SQL과 PL/SQL에 대한 내용을 담고 있습니다. SQL은 컴퓨터와 사용자 사

이에 주고받는 말이기 때문에 어렵게 하려면 한없이 어려울 수 있습니다. 그렇지만 이

책에서는 어려운 문법이나 내용보다는 독자들이 더욱 쉽게 이해할 수 있도록 안내하는

것을 목표로 집필되었습니다. 그래서 너무 어려운 내용이나 기법보다는 개념을 확실하

게 잡을 수 있는 내용으로 구성되어 있습니다. 이 책 한 권이 SQL과 PL/SQL에 대한 모든

내용을 담고 있다고는 말할 수 없지만 처음 입문하시는 분께는 정말 좋은 안내서가 될 것

이라고 확신합니다.

1장에서는 실습을 위해서 Oracle 서버에 접속하는 방법을 그림과 함께 친절하고 자세

하게 설명하고 있습니다. 이 책에서는 쿼리 작업을 위해서 오라클 사에서 제공하는 SQL

Developer라는 무료 프로그램을 사용하는데 이 프로그램을 설치하고 사용하는 방법을

자세하게 안내하고 있습니다. 그리고 SELECT 명령어와 다양한 연산자나 기호 등을 사용

해서 데이터를 조회하는 기본적인 방법들을 그림과 함께 상세하게 안내하고 있습니다.

2장에서는 조회를 위한 고급 기법들을 살펴봅니다. 많은 데이터를 모아서 작업하는 집합

연산자들의 사용 방법과 쿼리를 더 고급스럽고 쉽게 만들어 주는 다양한 일반 함수들과

그룹(집계) 함수들을 배우게 됩니다. 이 장은 조금 어려울 수 있는데 반드시 알아야 하

머리말

Page 4: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

4 ❖ 머리말

는 중요한 내용입니다.

3장에서는 데이터를 생성하고 변경하는 다양한 방법들을 살펴봅니다. 2장까지는 입력되

어 있는 데이터를 조회하는 방법들을 배웠지만, 이 장에서는 데이터를 관리하기 위해서

다양한 오브젝트(테이블 등)들을 만들고 관리하는 방법을 배우고, 데이터를 입력하고,

수정, 삭제하는 여러 가지 방법들을 배우게 됩니다.

또 이 장에서 제약 조건에 대한 개념과 설정 및 관리 방법들을 자세히 배우게 되며 대용

량의 데이터를 저장할 때 필수적인 기술인 테이블 파티셔닝 기법도 자세히 배웁니다.

4장에서는 관계형 데이터베이스의 핵심인 조인(Join) 기술을 다양한 예제로 배웁니다.

조인을 못 하는 것은 쿼리를 못 짜는 것과 같은 말이지요. 그리고 성능 향상을 위해 많이

사용하는 다양한 서브쿼리 기법들도 이 장에서 배웁니다.

5장에서는 더 편리하게 데이터를 조회하고 관리하기 위해서 오라클에서 제공하는 다양

한 기능들을 배웁니다. 뷰, 시퀀스, 시노뉨 등 현업에서 정말 많이 사용하는 기능들이니

까 잘 배워두세요.

6장에서는 어렵기로 소문난 오라클 PL/SQL에 대해서 배웁니다. 정말 어렵게 배우면 어

려운 분야지만 이 책을 본다면 약간(?)만 어렵고 나머지는 쉬울 겁니다.

7장에서는 데이터 모델링에 대한 기본 이론들과 다양한 정규화 기법들을 배우게 됩니다

앞에서 잠시 언급한 대로 이 책 한 권에 방대한 SQL과 PL/SQL에 대한 모든 것을 다 담을

수는 없었지만, 기초가 되는 원리와 내용들은 확실하게 배울 수 있도록 구성했습니다.

그리고 이 책에서 자세하게 언급하지는 못했지만, 오라클 관련 일을 할 때 반드시 필요한

지식인 오라클 구조와 운영 관련 내용 및 Linux와 Shell Script, Oracle 네트워크 등

에 대한 내용을 더 자세하게 공부할 독자들께 제 다른 책도 권해드립니다. 이 책보다 먼

저 출간되어 실무자들에게 검증되고 인정받고 있는 최고의 입문서이자 운영 가이드북인

《오라클 관리 실무》를 보세요. 또한, 오라클 백업 및 장애 처리와 관련된 자세한 내용은

오라클 장애 처리의 바이블로 평가 받는 《오라클 백업과 복구》와 관련 책들을 꼭 보기를

권해 드립니다.

Page 5: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

머리말 ❖ 5

혹시 지식과 지혜의 차이를 아세요? 갑자기 무슨 뜬금없는 말이냐고 생각되겠지만 요즘

저 자신에게 계속 던지는 질문입니다.

예식장에서 주례가 신랑에게 "1 더하기 1은 뭔가?"라고 물었을 때 "2입니다!"라고 대답

하는 것은 지식이며, 주례가 왜 그런 질문을 내게 했을까를 고민해 보다가 "남자+여자=

새 가정"이라는 것을 이해하고 "하나입니다!"라고 대답하는 것은 지혜라고 합니다. 우

리는 많은 데이터를 늘 보고 함께하고 있는데 눈에 보이는 것만 생각하는 것은 지식에 멈

추지만, 그 이면에 숨겨져 있는 다른 가치를 보는 것은 지혜가 되겠지요.

오라클은 데이터를 저장하고 관리하는 프로그램입니다. 그 데이터를 활용하는 또 하나

의 분야가 데이터 분석 분야입니다. 미래에 아주 많이 사용되고 발전 가능성이 큰 재미

있는 분야입니다. 그래서 저는 요즘 데이터 분석에 아주 큰 관심을 가지고 공부하고 있

습니다. 저처럼 데이터 분석에 관심 있는 분들은 저의 데이터 분석 책 《R라뷰》를 보면 그

어떤 책들보다 데이터 분석과 활용에 대해서 쉽고 빠르게 배울 수 있을 것입니다.

제가 쓴 책과 관련한 내용이나 빅데이터 분석(R)등에 관한 의견, 문의 사항, 오라클이나

빅데이터 분석(R) 관련 강의요청 등은 언제든지 제가 운영하는 카페인 www.db-expert.

net나 저의 메일([email protected])로 연락을 주시면 최대한 빠르게 답장을 드리

도록 하겠습니다.

다시 한번 더 제 책을 읽는 독자께 진심으로 감사의 인사 드립니다.

2015년 5월, 서진수

Page 6: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

6 ❖ 머리말

사과나무

- 서진수 -

사과나무를 심었다

맛있는 사과를 기대하며

내 생각대로 지금쯤 물을 주고

내 생각대로 지금쯤 거름도 주고

내 생각엔 참 열심히 사랑도 주었다.

지금쯤이면 맛있는 사과가 열려야 하는데

사과나무야

너는 왜 나를 실망시키느냐

화가 나서 사과 나무를 잘라 버리고

이번에는 배나무를 심었다.

그리고 다시 물을 주고 있다.

감사드립니다

Page 7: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

머리말 ❖ 7

우리 인생도 한 그루의 사과 나무를 키우는 과정이 아닐까요?

내 생각대로 물도 주고 거름도 주고 사랑도 주지만 내가 원하는 열매가 열리지 않을 때가

많지요. 내 뜻대로 일이나 계획들이 잘 되지 않을 때 대부분은 다른 사람이나 환경 탓을

하지만 진짜 이유는 자기 자신에게 있는 경우가 많습니다. 내가 원하는 때가 아니라 사

과 나무가 원하는 때가 되어야 하는 거죠.

이 책을 보는 독자께서도 지금 어떤 계획을 하고 있을텐데 혹시라도 잘 안 된다면 내가

원하는 방식이 아니라 사과나무가 원하는 대로 해주고 기다리는 것인지 살펴보세요. 모

든 문제의 원인은 내가 가지고 있습니다.

이 책을 쓰기 위해 많은 시간과 노력이 들어갔습니다. 먼저 부족한 원고를 받아서 열심

히 예쁜 책으로 만들어 주신 생능출판사 관계자 분들께 정말 진심으로 감사 드립니다.

그리고 무엇보다 이 책을 위해 수많은 테스트를 하고 기획부터 원고 집필 작업까지 함께

해 준 이 책의 공동 저자인 주시현님께 정말 진심으로 감사와 사랑의 마음을 전합니다.

새로운 것을 배우고 삶을 위해 노력하는 그 열정과 도전에 큰 격려와 박수를 함께 보내고

끝까지 응원하겠습니다.

그리고 부족한 저에게 이 책을 쓰게 하신 하나님께 모든 영광과 감사를 올려 드립니다.

Page 8: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

8 ❖ 차례

Chapter 00 실습용 오라클 데이터베이스에 접속하는 방법입니다 14

Chapter 01 저도 데이터를 조회하고 싶어요 22

1/ DESCribe 명령어로 구조부터 파악하기 23

2/ SELECT 명령어로 데이터를 조회하기 23

1) 모든 컬럼들 조회하기 24

2) 원하는 컬럼만 조회하기 24

3) 컬럼 이름 대신 리터럴 문자를 사용하여 출력하기 25

4) 출력할 때 컬럼에 별명 사용하기 26

5) 연결 연산자로 컬럼들 붙이기 26

6) 중복된 값을 제거하고 출력하기 28

7) 원하는 데이터만 골라서 보기 29

8) SQL에서 다양한 연산자 사용하기 32

Chapter 02 조회를 위한 고급 기법들을 배웁니다 44

1/ 여러 건의 결과들을 모아서 연산하기(집합 연산자) 44

1) 결과를 모아서 출력하기(UNION과 UNION ALL) 44

2) 공통으로 있는 데이터 찾기(INTERSECT 연산자) 46

3) 특정 결과만 제외한 결과 만들기(MINUS 연산자) 47

2/ 함수를 배워서 쿼리에 날개 달기 48

1) 함수의 종류 48

2) 단일 행 함수 48

3/ 여러 건의 데이터를 한꺼번에 처리하는 그룹 함수 배우기 71

1) 기본적인 그룹 함수들 72

차례

Page 9: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

차례 ❖ 9

2) 특정 조건으로 세부적인 결과 출력하기(GROUP BY 절) 74

3) 그룹 함수 결과를 조건으로 사용하기(HAVING 절) 76

4) 데이터들을 모아서 합계(집계)를 해주는 함수들 78

Chapter 03 데이터를 변경하고 관리하고 싶어요 86

1/ CREATE 명령(생성하기) 87

1) 일반 테이블 생성하기 87

2) 한글 이름으로 테이블과 컬럼 생성하기 87

3) 테이블 복사하기(CTAS) 88

2/ ALTER 명령(오브젝트 수정 명령) 92

1) 테이블에 새로운 컬럼 추가하기 92

2) 테이블의 컬럼 이름 변경하기 94

3) 컬럼의 데이터 크기를 변경하기 94

4) 컬럼 삭제하기 95

5) 읽기 전용 테이블로 변경하기(11g, 12c 가능) 95

3/ TRUNCATE 명령 97

4/ DROP 명령 97

5/ DELETE, TRUNCATE, DROP 명령어의 차이점 98

6/ 데이터 딕셔너리(Dictionary) 98

7/ DML을 사용하여 데이터 변경하기 100

1) 새로운 데이터를 입력하는 방법(INSERT 명령) 100

2) 데이터 변경하는 방법(UPDATE 명령) 103

3) 데이터를 삭제하는 방법(DELETE 명령) 104

4) 여러 테이블의 내용을 하나로 합치기(MERGE 명령) 104

5) 변경 내역을 저장하거나 취소하기 108

8/ 제약조건을 설정해서 틀린 데이터 막기 109

1) 제약조건의 종류와 특징 110

2) 각 제약조건의 설정 방법 112

3) 제약조건 관리하기 114

9/ 아주 많은 대량의 데이터 관리하기(파티션 테이블) 123

1) 파티션 테이블이란 124

2) Range Partition 기법(범위 파티셔닝) 127

3) Hash Partition 기법(해쉬 파티셔닝, 8i부터 지원) 142

4) List Partition 기법(목록 분할 파티션) 144

5) Composite Partition(복합 파티션, 결합 파티션) 149

Page 10: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

10 ❖ 차례

6) Interval Partition(11g, 12c) 155

7) SYSTEM PARTITION(11g, 12c) 162

Chapter 04 쿼리에 날개를 달자(성능 좋은 쿼리 만들기) 166

1/ Join을 사용하여 필요한 컬럼만 가져오기 166

1) Cartesian Product(카티션 곱) 167

2) EQUI Join(같은 조건을 찾아서 가져오기) 169

3) Non-Equi Join(= 조건이 아닌 조건을 사용할 경우) 172

4) OUTER Join(아우터 조인) 176

5) SELF Join(재귀 조인) 178

2/ Sub Query(서브 쿼리) 배우기 179

1) Sub Query란 179

2) Sub Query의 몇 가지 유형 181

3/ INDEX(인덱스) 배우기 190

1) 인덱스란 190

2) 인덱스의 생성 원리 192

3) 인덱스 구조와 작동 원리(B-TREE 인덱스 기준) 193

4) 인덱스의 종류 195

5) 인덱스의 주의사항 200

6) 인덱스 관리 방법 202

7) 파티션 테이블을 관리하는 인덱스 살펴보기 203

Chapter 05 편리하게 사용하는 각종 기능들을 배웁니다 208

1/ View(뷰) 208

1) 단순 View(Simple View) 210

2) 복합 View(Complex View) 211

3) 인라인 View(Inline View) 212

2/ SEQUENCE(시퀀스)와 SYNONYM(동의어) 214

1) SEQUENCE(시퀀스) 214

2) SYNONYM(동의어) 222

Page 11: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

차례 ❖ 11

Chapter 06 Oracle PL/SQL에 입문합니다 226

1/ PL/SQL이란 226

2/ PL/SQL의 런타임 구조 226

3/ PL/SQL 기본 구조 228

4/ PL/SQL BLOCK 기본 구성 228

5/ PL/SQL 블록 작성 시 기본 규칙과 권장 사항 229

6/ PL/SQL 문 내에서의 SQL 문장 사용하기 230

1) PL/SQL에서 SELECT 명령으로 데이터 조회하기 231

2) PL/SQL 내에서의 DML 문장 사용하기 232

7/ PL/SQL에서의 렉시칼 237

8/ PL/SQL에서의 블록 구문 작성 지침 239

9/ 중첩된 PL/SQL 블록 작성하기 239

10/ PL/SQL에서의 연산자 사용하기 241

11/ PL/SQL에서 변수의 의미와 사용법 242

1) 변수란 242

2) 주요 변수들의 종류 243

12/ PL/SQL 제어문 사용법 258

1) IF 조건문 259

2) CASE 조건문 263

3) 반복문 265

13/ PL/SQL Cursor(커서) 268

1) PL/SQL 커서란 268

2) 묵시적 커서(Implicit Cursor) 268

3) 명시적 커서(Explicit Cursor) 269

4) 명시적 커서(Explicit Cursor) 처리 단계 270

5) Cursor FOR Loop 문 활용하기 273

6) Parameter Explicit Cursor 276

7) Explicit Cursor와 FOR UPDATE 문장 277

14/ ORACLE EXCEPTION(예외처리) 278

1) PL/SQL 예외란 278

2) PL/SQL 블록내의 예외처리부 281

15/ ORACLE SUBPROGRAM 287

1) PROCEDURE(프로시저) 생성하기 287

2) FUNCTION(함수) 생성하기 291

Page 12: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

12 ❖ 차례

3) ORACLE PACKAGE(패키지) 294

4) TRIGGER(트리거) 299

Chapter 07 쉽게 배우는 데이터 모델링 입문 312

1/ 모델링이란 312

1) 모델링이란 312

2) 모델링의 종류 314

3) 데이터 모델링 315

2/ 개념 데이터 모델링 317

1) Entity(엔터티) 317

2) 속성(Attribute) 323

3) 식별자(Unique Identifier, UID) 결정하기 324

4) 관계(Relationship) 328

5) ERD(Entity Relationship Diagram) 작성하기 333

3/ 논리 데이터 모델링 335

1) 정규화(Normalization) 335

4/ 물리 데이터 모델링 345

1) ERD의 Entity를 테이블로 생성하기 345

2) 반정규화 대상이 발견된다면 반 정규화를 검토하기 345

부록 01 Oracle 11g R2 설치하기(windows) 350

부록 02 Oracle 11g R2 설치하기(Linux 5) 372

1/ Vmware 설정 372

2/ Linux 설치 383

3/ Oracle 11g R2 소프트웨어 설치하기 412

4/ Oracle 11g R2 Database 생성하기 440

■찾아보기 458

Page 13: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

실습용 오라클 데이터베이스에 접속하는 방법입니다

00C h a p t e r

Page 14: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

14 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

실습용 오라클 데이터베이스에 접속하는 방법입니다

00C h a p t e r

오라클 데이터베이스에 접속하는 방법은 다양하지만, 이 책에서는 아주 편리하며 보편적

으로 많이 사용되는 SQL Developer 프로그램을 사용하여 설명하겠습니다.

Step 01 SQL Developer 프로그램을 다운로드 받습니다.

SQL Developer는 오라클에서 직접 배포하는 오라클 데이터베이스 전용 GUI 도구로서 아래의 사

이트에서 받을 수 있습니다. 단 이 프로그램을 다운로드 받으려면 www.oracle.com에 먼저 회원

가입이 되어 있어야 합니다. 지면 관계상 회원 가입하는 부분은 생략하겠습니다.

http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

위 링크에 접속하면 아래와 같이 SQL Developer 프로그램을 다운로드 할 수 있는 페이지가 열

립니다. 이 프로그램을 사용하기 위해서는 JDK 7 버전이 필요합니다. 만약 이 프로그램이 설치

되어 있지 않은 경우는 먼저 다음 그림의 아랫부분에서 다운로드 받아서 JDK를 설치한 후 SQL

Developer 프로그램을 설치하세요.

SQLDeveloper를설명합니다.

Page 15: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 00 실습용 오라클 데이터베이스에 접속하는 방법입니다 ❖ 15

CH

AP

TER

00

그림 0-1의 아랫부분을 보면 각 운영체제 버전별로 다운로드 할 수 있는 링크가 제공됩니다. 저자

의 경우 윈도7 64비트를 사용하고 있어 2번째 링크를 눌러서 하드디스크에 다운로드 받았습니다.

각각 독자 여러분의 OS에 맞는 프로그램을 다운로드 받으세요.

Step 02 다운로드 받은 프로그램의 압축을 풀어서 설치 프로그램을 실행합니다.

그림 0•1

그림 0•2

Page 16: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

16 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

Step 03 설치가 진행되면서 그림 0-3과 같이 JDK 프로그램이 설치된 경로를 입력하라는 안내가

나옵니다. 오른쪽 옆의 [Browse...] 버튼을 눌러서 JDK 프로그램이 설치된 경로를 선

택한 후 [OK]를 누릅니다.

Step 04 설치가 진행됩니다.

만약 지금 설치하고 있는 컴퓨터에 이전 버전이 설치되어 있다면 그림 0-5와 같은 안내 창이 열립

니다. 이때 [아니오]를 선택하고 진행하면 됩니다.

그림 0•3

그림 0•4

그림 0•5

Page 17: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 00 실습용 오라클 데이터베이스에 접속하는 방법입니다 ❖ 17

CH

AP

TER

00

Step 05 설치가 완료되면 아래와 같은 안내가 나오는데 체크 박스를 해제하고 안내 창을 닫습니다.

Step 06 설치가 완료된 화면입니다.

Step 07 이제 연습용 데이터베이스에 접속해야 합니다.

그림 0-8과 같이 왼쪽 상단의 초록색 + 표시를 누른 후 접속 창에서 접속에 필요한 정보를 입력하

고 아래의 테스트 버튼을 누르세요.

그림 0•6

그림 0•7

Page 18: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

18 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

그림 0-8에서 접속 이름은 각자 임의로 지정하고 사용자 이름은 연습용 계정인 hr, 비밀번호는

hr을 입력하세요. 그리고 아래쪽의 호스트 이름에는 오라클이 설치된 서버의 ip 주소를 입력하고

포트는 기본인 1521번, SID는 접속하고자 하는 데이터베이스 이름을 입력하면 됩니다. 이 책에서

는 SID를 testdb로 설정했습니다.

테스트 버튼을 눌러서 왼쪽 아래와 같이 성공이 나오면 접속 버튼을 누르세요. 간혹 윈도 방화벽

이 접속을 막을 수 있으니 윈도 방화벽을 사용안함으로 설정해 두세요.

만약 위 접속 과정 중에서 hr 계정이 잠겼다고(Locked 되었다고) 나오면 아래와 같이 오라클이

설치된 서버에서 직접 sqlplus를 사용하여 관리자 계정으로 접속한 후 hr 계정을 사용할 수 있도

록 설정한 후 다시 접속하세요.

[oracle@localhost ~]$ sqlplus sys/oracle as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Mon Dec 29 17:46:14 2014

Copyright (c) 1982, 2010, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SYS>ALTER USER hr IDENTIFIED BY hr ACCOUNT unlock ;

User altered.

Step 08 접속이 완료되면 아래와 같이 테스트용 쿼리를 실행한 후 결과를 확인합니다.

그림 0•8

Page 19: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 00 실습용 오라클 데이터베이스에 접속하는 방법입니다 ❖ 19

CH

AP

TER

00

이곳이 쿼리를 입력하는 곳입니다.

이곳이 결과가 나오는 곳입니다.

1

그림 0-9에서 쿼리를 입력하는 곳에 쿼리를 입력한 후 1번의 화살표를 누르면 실행이 됩니다. 그

리고 1번 화살표 중 큰 화살표는 전체 쿼리를 한꺼번에 실행하는 기능이고 오른쪽의 작은 화살표

는 선택된 문장만 실행하는 기능입니다. 실행하는 단축키는 F5입니다.

SQL Developer는 아주 다양한 기능을 가진 좋은 프로그램이지만 이 책에서 모든 기능을

다 살펴 볼 수는 없으니 주로 실습하는 내용을 기준으로 살펴보겠습니다. 접속을 무사히

마쳤으니 이제 본격적으로 실습을 시작하겠습니다.

그림 0•9

Page 20: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기
Page 21: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

저도 데이터를 조회하고 싶어요

01C h a p t e r

1/ DESCribe 명령어로 구조부터 파악하기

2/ SELECT 명령어로 데이터를 조회하기

Page 22: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

22 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

저도 데이터를 조회하고 싶어요01

C h a p t e r

Welcome to Oracle Database World~!!

오라클 세상에 오신 것을 환영합니다. 여러분~

Oracle이라는 프로그램은 아주 많은 데이터들을 잘 관리해 주고 특정 데이터를 찾거나

변경할 경우 해당 작업을 사람 대신 수행해 주는 프로그램입니다. 쉽게 말하면 많은 데

이터들과 사람 사이에서 비서 역할을 해 주는 프로그램이지요. 사람은 자신이 원하는 바

를 오라클에게 전달하기만 하면 오라클이 해당 작업을 수행합니다. 이처럼 사람이 원하

는 바를 오라클에게 전달할 때 사용하는 언어를 SQL이라고 합니다.

사람이 사용하는 말들에는 많은 단어나 품사가 있는 것처럼 오라클 SQL도 말의 일종이기

때문에 많은 말들이 있습니다. 그 중에서 가장 기본적으로 저장되어 있는 데이터를 꺼내

오라는 명령어가 이번 장에서 배울 "SELECT" 명령입니다. 아주 빈번하게 사용하는 명령

이므로 이번 장에서는 SELECT의 기본적인 사용법을 마스터하는 것을 목표로 공부해보겠

습니다.

우리가 원하는 데이터를 조회할 때는 두 가지 방법이 있는데, 첫째는 컬럼 단위로 가져오

는 방법이 있고 둘째는 줄 단위(가로)로 가져오는 방법이 있습니다. 어떤 방법을 사용하

던지 먼저 해당 테이블에 어떤 컬럼이 있는지를 확인한 후 조회하기 때문에 테이블에 존

재하는 컬럼 종류부터 확인하는 명령을 보겠습니다.

오라클의 세계

환영합니다.

Page 23: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 01 저도 데이터를 조회하고 싶어요 ❖ 23

CH

AP

TER

01

1/ DESCribe 명령어로 구조부터 파악하기(DESC로 사용)

DESC 명령어는 특정 테이블에 어떤 컬럼이 있는지 조회하는 명령어입니다.

그림 1-1에서 이름 부분의 값이 테이블에 있는 컬럼 이름이고 유형 부분이 나중에 배울

해당 컬럼에 들어갈 데이터 유형입니다. 대부분의 DBMS에서는 데이터를 엑셀의 표와 같

은 공간에 저장하게 됩니다. 이 표를 DBMS에서는 테이블이라고 부릅니다. 위 명령어로

조회할 테이블의 컬럼 내역을 확인한 후 원하는 데이터를 조회하면 됩니다.

2/ SELECT 명령어로 데이터를 조회하기

위의 DESC 명령으로 테이블에 어떤 컬럼들이 있는지 확인했다면 이제 데이터를 꺼내 와

야겠죠? 데이터를 꺼내 올 때 사용하는 명령어가 SELECT 입니다. 아주 많이 사용하는 명

령이겠지요? 꼭 잘 배워서 써먹어야 합니다. 문법은 아래와 같습니다.

SELECT [ 컬럼명 또는 표현식 ] FROM [테이블명 또는 뷰 명] ;

이 책에서는 오라클에 기본적으로 있는 연습용 테이블인 employees 테이블을 사용해서

데이터를 조회하겠습니다. SELECT 명령을 수행하면 오라클이 데이터베이스에 저장된 데

이터를 가져와서 그림 1-2처럼 화면에 보여줍니다.

그림 1•1

Page 24: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

24 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

1) 모든 컬럼들 조회하기(컬럼 이름에 *(모든)을 사용)

SQL 명령어는 한 줄에 쓰거나 여러 줄에 나눠써도 되지만 오라클 키워드인 SELECT, FROM

과 테이블 이름과 컬럼 이름 등을 줄을 바꾸어서 입력하면 안됩니다. 그리고 SQL 문은

대소문자 구분을 하지 않고 입력해도 수행되지만 원래는 구분합니다. 이 책에서도 키워

드 부분은 대문자로 입력하겠습니다. 또한 문장의 마지막 부분에는 반드시 ;(세미콜론)

을 입력해 주어야 해당 문장이 실행된다는 점도 꼭 기억하세요.

2) 원하는 컬럼만 조회하기(원하는 컬럼 이름을 지정)

지면 관계상

이하 내용은

생략하겠습니다.

그림 1•2

지면 관계상

이하 내용은

생략하겠습니다.

그림 1•3

Page 25: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 01 저도 데이터를 조회하고 싶어요 ❖ 25

CH

AP

TER

01

왼쪽 예처럼 SELECT 뒤에 원하는 컬럼 이름만 넣고 조회하면 됩니다. 조회하기를 원하

는 컬럼이 여러 개일 경우 콤마(,)로 구분하고 이름을 모두 적어 주면 됩니다.

3) 컬럼 이름 대신 리터럴 문자를 사용하여 출력하기

SELECT로 데이터를 출력할 때 컬럼 이름 외에 다른 문자 등을 출력해야 할 경우가 많습

니다. 이때 표현식이라는 방법을 사용하는 데 표현식(Expression)이란 컬럼 이름 이외

에 출력하기를 원하는 내용을 의미합니다. SELECT 구문 뒤에 '(홑따옴표)로 묶어서 사

용하면 됩니다. 그림 1-4를 보세요.

위 SELECT 절에서 'Very Good~~' 부분을 '표현식'이라고도 하고 '리터럴(literal)

상수(문자)'라고 부르기도 합니다. 아주 많이 사용되는 방법이므로 꼭 기억하세요.

지면 관계상 이하 내용은 생략하겠습니다.

그림 1•4

Page 26: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

26 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

4) 출력할 때 컬럼에 별명 사용하기

그림 1-5에서처럼 출력 결과 화면에서 컬럼 이름을 변경하여 출력합니다. 그것은 원래

테이블의 컬럼 이름이 변경된 것이 아니라 출력될 때 임시로 그렇게 바꾸어서 보여 주는

것인데 이 기능을 컬럼 별칭(Column Alias)이라고 부릅니다.

이 기능을 쓰는 방법은 두 가지인데 한 가지는 컬럼 이름 뒤에 공백을 주고 별명을 쓰는

것이고, 또 한 가지는 컬럼 이름 뒤에 AS라는 키워드를 사용한 후 별명을 주는 것입니다.

기능상 차이는 없으므로 편한 것으로 사용하면 됩니다.

또한 별명을 줄 때 반드시 "(쌍 따옴표)로 감싸줘야 하는 경우도 있습니다. 별명에 공

백이나 특수 문자, 대소문자 구분이 필요할 경우에는 반드시 별명 부분을 "별명"과 같은

형태로 써야 합니다. 매우 많이 사용되는 기능이므로 꼭 기억해 주세요.

5) 연결 연산자로 컬럼들 붙이기

데이터를 조회하다 보면 서로 다른 컬럼을 마치 하나의 컬럼인 것처럼 연결해서 출력해

야 할 경우가 종종 있습니다. 예를 들어 회원 가입을 받을 때 성과 이름을 다른 컬럼으로

입력 받았지만 출력할 때는 한꺼번에 출력하는 경우 등이 있습니다. 이때 아주 유용하게

사용할 수 있는 연산자가 지금부터 살펴볼 연결 연산자(Concatenation)입니다.

그림 1•5

Page 27: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 01 저도 데이터를 조회하고 싶어요 ❖ 27

CH

AP

TER

01

그림 1-6은 연결 연산자를 사용하지 않고 출력한 결과입니다. 당연히 FIRST_NAME과

LAST_NAME 컬럼이 따로 출력이 되죠? 반면 아래 그림은 연결 연산자를 사용하여 출력한

결과입니다. 연결 연산자는 다음과 같이 바 기호를 두 번 사용하면 됩니다. ( || )

그런데 그림 1-7의 결과를 보면 무슨 말인지 잘 모르겠죠? 그래서 연결 연산자 중간에

앞에서 배웠던 리터럴을 넣고 사용하는 경우가 많습니다. 그리고 연결 연산자로 연결한

컬럼은 오라클에서는 1개의 컬럼으로 인식한다는 것도 꼭 기억해야 합니다. 다음 결과를

보세요.

그림 1•6

그림 1•7

Page 28: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

28 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

그림 1-8 화면에서 중간에 리터럴 문자로 공백이 들어간 부분 보이죠? 현업에서는 공백

대신 다른 리터럴 문자를 넣어서 사용하는 경우가 아주 많습니다. 꼭 기억하세요.

6) 중복된 값을 제거하고 출력하기

데이터를 조회하다 보면 중복된 데이터가 나오는 경우가 종종 있는데 경우에 따라서는

중복된 데이터를 빼고 출력해야 할 경우가 있습니다. 이럴 때는 DISTINCT 키워드를 사

용하면 됩니다. 아래의 예로 살펴보겠습니다.

그림 1-9의 출력 결과에서 보이지는 않지만 중복된 값들이 반복되어 데이터가 출력됩니

다. 이제 DISTINCT 키워드를 사용하여 중복된 값을 제거해보겠습니다.

그림 1•8

중복된 DEPARTMENT_ID가 많이 보이죠? 지면 관계상 아래 내용은 생략하겠습 니다.

그림 1•9

Page 29: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 01 저도 데이터를 조회하고 싶어요 ❖ 29

CH

AP

TER

01

DISTINCT 키워드는 아주 주의해서 사용해야 합니다. 만약 SELECT 절에 여러 컬럼이 있

는 상황에서 DISTINCT를 1개의 컬럼에만 적어도 나머지 모든 컬럼에 적용된다는 특징이

있습니다. 이로 인해 뜻하지 않은 성능 저하가 발생할 수 있으므로 주의해서 사용하기

바랍니다.

참고로 어떤 책에 보면 DISTINCT의 결과가 정렬이 된다고 하는 경우도 있고 안 된다고

하는 경우도 있는데 이것은 오라클 버전의 차이입니다. 오라클 9i 버전까지는 DISTINCT

키워드를 만나면 정렬을 수행해서 심각한 속도 저하가 발생했으나 오라클 10g 버전부터

는 HASH 알고리즘을 사용하는 방식으로 변경되어서 정렬을 안 하게 되어 성능이 많이 향

상되었습니다. 대신 출력 결과가 정렬이 되어야 한다면 ORDER BY 절을 사용하여 수동으

로 정렬해 주어야 합니다.

7) 원하는 데이터만 골라서 보기

데이터를 조회할 때 원하는 데이터만 골라서 조회할 경우가 아주 많이 있습니다. 그때는

아래와 같이 WHERE라는 키워드를 사용하여 원하는 조건을 알려주면 됩니다.

SELECT [ Column or Expression ]

FROM [ Table or View ]

WHERE 원하는 조건 ;

위 문법에서 보듯이 FROM 절 아래에 조건을 지정하는 WHERE를 사용하면 됩니다. 아래의

중복된 데이터를 제거한 후

12개의 행만 출력됩니다.

그림 1•10

Page 30: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

30 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

여러 가지 예제를 통해서 WHERE절의 사용 방법을 익히도록 하겠습니다.

우선 그림 1-11은 employees 테이블에서 department_id가 10번인 사원의 first_

name을 출력하는 화면입니다.

그리고 그림 1-12는 salary 값이 15000 이상인 사원들의 first_name , salary 값을

출력하는 화면입니다.

그림 1-12처럼 간단하게 WHERE 절을 사용하여 원하는 조건을 적어 주면 됩니다. 일반적

으로 산수에서 사용하는 조건(산술연산, 비교연산 등)은 다 사용 가능합니다.

그런데 WHERE 절을 사용할 때 주의 사항이 한가지 있습니다. 숫자를 조회할 경우는 숫자

를 그대로 사용하면 되지만 문자와 날짜를 조회할 경우는 반드시 해당 문자나 날짜를 홑

따옴표로 감싸야 에러가 나지 않습니다. 그림 1-13을 보세요.

그림 1•11

그림 1•12

Page 31: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 01 저도 데이터를 조회하고 싶어요 ❖ 31

CH

AP

TER

01

그림 1-13은 문자를 홑따옴표로 감싸지 않고 조회해서 에러가 발생한 화면입니다. 꼭 문

자나 날짜를 조회할 때는 아래 그림처럼 해당 문자나 날짜를 홑따옴표로 감싸야 합니다.

그리고 문자의 경우는 홑따옴표 안에 들어가는 문자의 대문자와 소문자를 구분합니다.

즉 대문자와 소문자를 다른 글자로 인식하므로 꼭 대소문자 구분을 해야합니다.

그림 1•13

그림 1•14

Page 32: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

32 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

8) SQL에서 다양한 연산자 사용하기

(1) 산술 연산자 사용하기

산술 연산자는 우리가 알고 있는 +, -, *, /를 의미하며 SQL에서도 해당 연산자를 사용

하여 조회할 수 있습니다.

그림 1-15와 1-16에서 보듯이 일반적으로 사용하는 산술 연산도 오라클에서 잘 됩니다.

(2) BETWEEN 연산자로 특정 구간의 값 출력하기

BETWEEN 연산자를 사용하여 employees 테이블에서 salary가 14000과 17000 사이인

사람들의 first_name, salary를 출력합니다.

그림 1•15

그림 1•16

Page 33: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 01 저도 데이터를 조회하고 싶어요 ❖ 33

CH

AP

TER

01

그림 1-17에서 보듯이 BETWEEN 연산자는 특정 구간에 속한 모든 값을 다 출력합니다.

그런데 두 가지 주의사항이 있습니다. 첫째는 작은 값을 앞에, 큰 값을 뒤에 쓴다는 점이

고 둘째는 두 값을 모두 포함하는 결과를 출력한다는 점입니다. 그래서 값을 쓰는 순서를

주의해야 하고 만약 두 값을 포함하지 않을 경우는 BETWEEN 연산자를 사용하면 안 됩니다.

참고로 BETWEEN 연산자는 속도가 많이 느린 연산자에 속하기 때문에 만약 특정 범위에

속하는 값을 출력할 경우는 비교연산자(>, <, >=, <=)를 사용하는 것이 좋습니다.

(3) IN 연산자로 여러 조건을 간편하게 검색하기

그림 1-18을 보면 FIRST_NAME이 'Neena', 'Lex', 'John'인 사람들의 정보가 한꺼번에

조회가 되죠? IN 연산자는 속도도 빠르기 때문에 현업에서 아주 많이 사용되는 연산자입

니다.

그림 1•17

그림 1•18

Page 34: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

34 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

(4) LIKE 연산자로 비슷한 것들 모두 찾기

LIKE와 함께 사용되는 기호가 '%'와 '_' 두 가지가 있으며 의미는 아래와 같습니다.

•% : 글자수는 제한이 없고(0개 포함) 글자 종류도 상관 없습니다.

•_(Underscore) : 글자수는 한 글자만 올 수 있고 글자 종류는 상관 없습니다.

그림 1-19를 보세요.

그림 1-19는 employees 테이블에서 first_name이 대문자 'L'로 시작하는 모든 사람을

출력한 것입니다. % 기호가 모든 것이라는 의미인 것을 알겠죠? 반면 _(underbar)는 한

글자의 의미가 있습니다. 그림 1-20을 보세요.

그림 1•19

그림 1•20

Page 35: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 01 저도 데이터를 조회하고 싶어요 ❖ 35

CH

AP

TER

01

그림 1-20은 first_name 값 중에서 대문자 L로 시작하고 가운데 무슨 글자든 한 글자가

오고 마지막이 소문자 x로 끝나는 값을 조회한 결과입니다. Like와 함께 사용되는 두 가

지 문자의 차이를 꼭 기억하세요.

(5) 어떤 값인지 모르겠다고요? IS NULL / IS NOT NULL 연산자

대부분의 DBMS에서 사용되는 독특한 값이 NULL인데 이 값은 어떤 값인지 모른다는 의미

입니다. 예를 들어 A라는 사람의 나이가 30살이고 B의 나이는 얼마인지 모른다면 B의 나

이를 Null이라고 말하는 것입니다. 쉽게 이해되죠?

이런 특징 때문에 Null에는 어떤 작업을 해도 결과값은 늘 Null이 나오게 됩니다. 당연

한 말이지만 B가 몇 살인지 모르는 상황에서 10살을 더해 줘 봐야 몇 살인지 모르는 즉,

NULL 값으로 된다는 의미입니다.

산술 연산뿐 아니라 비교 연산도 마찬가지로 결과는 "모른다"로 출력됩니다. 위의 예에

서 A와 B 중에 누가 더 나이가 많을까요?? 모르겠지요? 그래서 비교연산의 결과도 NULL

입니다.

그림 1-21에서 Michael의 commission_pct 값이 공백인 것 보이죠? 그값을 NULL이라

고 합니다. 즉 얼마인지 모르는 값이라는 의미입니다. Null 값을 조회하기 위해서 '='

조건을 주고 검색하면 no rows selected(또는 선택된 행 없습니다.)라고 나오면서 값

을 조회하지 못합니다. 그림 1-22를 보세요.

그림 1•21

Page 36: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

36 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

예상대로 선택된 행이 하나도 없죠? 그래서 Null 값을 찾고 싶을 땐 '=' 연산자를 사용

할 수 없어서 별도의 연산자가 만들어졌고 Null 값을 찾고 싶을 땐 IS NULL, Null 값이

아닌 모든 값을 찾고 싶을 땐 IS NOT NULL을 사용하게 됩니다.

그림 1-23은 IS NULL 연산자를 사용해서 NULL 값만 조회한 화면입니다.

그림 1-24는 IS NOT NULL 연산자를 사용하여 값이 있는 즉 NOT NULL 값을 조회한 화면

입니다.

그림 1•22

총 72건의 행이 출력됩니다.

지면 관계상 아래 내용은 생략합니다.

그림 1•23

Page 37: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 01 저도 데이터를 조회하고 싶어요 ❖ 37

CH

AP

TER

01

현업에서 Null 값 때문에 의도하지 않은 오류가 발생하는 경우가 많기 때문에 Null 값의

특징을 반드시 잘 알고 있어야 합니다.

(6) 검색 조건이 두 개 이상일 경우 한꺼번에 조회하기

그림 1-25는 salary가 13000보다 크면서 department_id가 10인 사람들을 출력하는

화면입니다. 위와 같이 두 개 이상의 조건을 모두 만족해야 하는 경우는 각 조건을 AND

로 연결해서 사용하면 됩니다. 그런데 만약 두 조건 중 한 가지만 만족해도 될 경우는

AND 대신 OR 조건을 사용하면 됩니다. 그림 1-26을 보세요.

그림 1•24

그림 1•25

Page 38: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

38 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

그림 1-26은 salary가 13000 이상이거나 또는 department_id가 80인 사원들을 조회

한 화면입니다. 두 조건의 차이점이 확실하게 구분되죠?

만약 조건에서 AND와 OR가 동시에 나올 경우에는 우선순위에 주의해야 합니다. SQL에서

AND는 곱하기로 취급되고 OR는 더하기로 취급 되기 때문입니다. 더하기 조건을 먼저 하

고 싶으면 괄호로 우선 순위 조정하는 거 아시죠?

(7) ORDER BY 절을 사용해 보기 좋게 정렬하기

SQL에서는 출력 결과에 정렬이 필요할 경우 ORDER BY라는 절을 사용합니다. 정렬은 크

게 오름차순과 내림차순 두 가지의 경우가 있으며 기본값은 오름차순입니다. 정렬할 데

이터가 문자나 숫자, 날짜일 경우 기준이 다른 데 아래와 같습니다.

•한글: 가, 나, 다, 라……

•영어: A , B , C , D……

•숫자: 1 , 2 , 3 , 4……

•날짜: 예전 날짜부터 시작해서 최근 날짜로 정렬됩니다.

아마도 기본적으로 다 알고 있는 내용이죠? 그런데 위에서 주의하실 부분은 날짜 부분입

니다. 날짜는 과거 날짜와 최근 날짜 중에서 최근 날짜가 더 크다는 것 꼭 기억해야 합니

다. 날짜를 기준으로 정렬할 때 오름차순과 내림차순을 꼭 주의하세요. 오름차순을 지정

할 때는 ASC, 내림차순은 DESC로 표시를 해 주어야 하며 기본값이 오름차순이기 때문에

정렬 방식을 생략하게 되면 자동으로 ASC 방식이 적용됩니다. 그리고 ORDER BY 절의 위

그림 1•26

Page 39: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 01 저도 데이터를 조회하고 싶어요 ❖ 39

CH

AP

TER

01

치는 SQL 문장에서 가장 마지막 부분입니다.

그림 1-27은 여러 가지 경우를 확인해 보겠습니다. 아래 그림은 employees 테이블에

서 90번 부서에 근무하면서 salary가 10000 이상인 사람들의 FIRST_NAME, SALARY,

DEPARTMENT_ID, HIR_DATE를 조회한 화면인데 정렬을 하지 않고 출력했습니다.

그림 1-28은 위의 결과에서 이름을 기준으로 오름차순(ASC)으로 정렬한 내용입니다.

그림 1-29는 날짜를 기준으로 오름차순으로 정렬한 그림입니다.

그림 1•27

그림 1•28

Page 40: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

40 ❖ 오라클 SQL과 PL/SQL+데이터 모델링 입문

그림 1-30은 salary 값을 기준으로 내림차순(DESC)으로 먼저 정렬한 후 동일한 salary

값이 있을 경우 hire_date 값으로 한번 더 오름차순(ASC)으로 정렬한 화면입니다.

그런데 정렬을 할 때 꼭 컬럼 이름만을 사용하는 것은 아닙니다. 그림 1-31과 같이 컬럼

의 위치 값을 사용하는 경우도 아주 많습니다.

그림 1•29

그림 1•30

Page 41: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

CHAPTER 01 저도 데이터를 조회하고 싶어요 ❖ 41

CH

AP

TER

01

그림 1-31에서 ORDER BY 2 DESC, 4 ASC에서 2는 SELECT 절에서 2번째 위치에 있는

salary 컬럼을 의미하고 4는 4번째 위치에 있는 hire_date 컬럼을 의미합니다. 이 방

법을 컬럼의 이름을 사용하는 것보다 훨씬 더 많이 사용합니다.

다양한 방법으로 정렬을 하는 방법을 찾아 보았습니다.

그런데 아주 중요한 사실 한 가지를 꼭 알아야 합니다. 정렬해서 결과를 출력하면 결과

물이 아주 깔끔하고 보기도 좋지만 정렬 작업은 오라클에서 아주 힘든 작업입니다. 이건

오라클 뿐만이 아닙니다. 우리가 사는 세상에서도 사람이 많을수록 줄 세우는 게 힘들잖

아요. 최대한 정렬하는 ORDER BY 절을 사용하지 않고 SQL을 작성해야 속도가 빨라집니

다. 즉 ORDER BY를 많이 쓸수록 SQL 수행 속도가 많이 늦어집니다. 그렇다고 정렬을 안

하고 출력할 수도 없죠.

그래서 정렬도 하고 SQL 속도도 매우 빠른, 실전에서 아주 많이 사용되는 방법이 인덱스

를 이용하는 방법이며 4장의 인덱스 부분에서 아주 자세히 비법을 알려 드리겠습니다.

이상으로 저장되어 있는 데이터를 조회하는 기본적인 방법들을 살펴 보았습니다. 이번

장에서 배운 내용을 잘 기억하세요. 다음 장에서는 한 단계 더 어렵고도 중요한 방법들

을 소개하겠습니다.

그림 1•31

Page 42: SQL - 라클SQL미리... · PDF file이 책은 오라클 sql과 pl/sql에 대한 내용을 담고 있습니다.sql 은 컴퓨터와 사용자 ... / dml을 사용하여 데이터 변경하기

< < < < 간식 시간입니다

간식먹고하세요~

Oh yeh~

아래 내용은 포르투갈 항공사에 실제 있었던 일이라고 합니다.

한 백인여성이 누가 봐도 불쾌한 표정으로 스튜어디스를 불렀습니다.

"옆자리에 흑인이 앉아 있어 도저히 앉을 수가 없네요! 자리를 바꿔 주세요!"

스튜어디스는 일단 그 말을 듣고 여성을 진정시킨 뒤,

"지금 이코노미석은 꽉 찼습니다. 하지만 제가 방법을 확인해 볼게요."

주위에 있는 승객들은 황당한 행동과 말에 어이없어 했지요.

"손님, 기장에게 전후 사정은 전달하였지만, 이코노미석에는 자리가 없고, 1등석에만 자리가 있

을 뿐입니다."

이 말을 들은 여성이 더 거칠게 따지면서 말하자 스튜어디스는

"저희 항공사에서는 이코노미승객을 1등석으로 바꾸는 전례는 없었지만, 옆 자리에 앉은 승객

때문에 불편한 여행을 하시게 될 수는 없지 않습니까? 그래서 자리를 바꾸어 드리도록 결정했습

니다."

이렇게 말한 뒤 스튜어디스는,

"실례지만 다시 짐 싸지 않도록 옆에 손님을 1등석으로 옮겨드리겠습니다."

이렇게 해서 옆자리에 앉은 흑인 남자는 얼떨결에 1등석에 앉게 되었다.

주위에 있는 모든 승객들은 재치 있는 스튜어디스의 행동(?)에 박수를 보냈고, 어떤 이는 기립

박수를 치기도 했답니다.

참 재치 있는 스튜어디스죠?