본문 바로가기

콩's EDUCATION/콩's DATABASE

오라클 데이터베이스 2강 SELECT문

2강을 시작하기 앞서서..

가상화 서버를 사용하시는 분들에게 권장하는 메모리는 최소 4G이며 64비트 OS 시스템입니다.

32비트의 경우 4G 메모리 인식을 하지 못하며 무엇보다 오라클 데이터베이스의 무거운 프로그램 활용에 제약이 많습니다.

 

SQL 문장 실습을 하실 때 기본적으로 오라클 데이터베이스 설치를 하시면 SQLPLUS라는 tool 프로그램이 있습니다.

커맨드 창의 실습이 불편하시면 Oracle Developer 를 설치하시면 됩니다. 11g R2내 Oracle Developer는 버전이 오래되었기에 되도록이면 3.22 Ver 혹은 4.00 Ver을 사용하시는게 좋습니다. 3.22는 1.6 35 이상 JDK, 4.00은 1.7 JDK 버전에 최적화 되어 있으니 잘 보시고 설치하시길 바랍니다. 처음부터 가상화 없이 리눅스 자체를 설치하셔서 사용하신다면 터미널 환경에서 데이터베이스 서버에 접속하여 사용하시면 됩니다.

 

저는 Oracle Developer 환경에서 구현하겠습니다.

물론 실무에서는 DBA 선배님들의 경우 보통 sqlplus 환경에서 모든 업무를 처리합니다.

그 외 데이터 베이스를 사용하는 직장인들은 대부분 오라클 프로그램 툴을 사용합니다.

 

대표적으로 Toad™ for Oracle, Orange for Oracle, Oracle Developer 등이 있습니다.

 

1) Toad™ for Oracle (유료, 30일 Trial Ver ; 실무에서 많이 사용하고 있습니다.)

http://www.quest.kr/toad-for-oracle/software-downloads.aspx

 

2) Orange for Oracle (유료, 국내에서 개발한 정말 유명한 프로그램 tool입니다)

http://www.warevalleydata.co.kr

 

3) Oracle Developer (무료)

http://www.oracle.com/kr/index.html

 

본인은 Oracle Developer 의 결과 화면을 통해 실습을 진행하겠습니다.


 

SQL 1. SELECT

 

우선 가장 먼저 해야할 것이 있습니다.

 

오라클 데이터베이스를 샘플로 설치하시면 SYS등의 관리계정을 제외한 나머지 샘플 계정이 잠겨있습니다. 이 계정을 풀어줘야 우리가 해당 계정의 샘플 테이블을 참고하여 실습을 진행할 수 있습니다. 가장 많이 사용하는 기본 샘플인 HR(Human Resource;인사) 계정을 풀도록 하겠습니다.

 

1) 사용하시는 OS에 따라 터미널 혹은 커맨드(cmd) 창을 띄웁니다.

2) sqlplus / AS SYSDBA (대소문자 구분 할 필요 없습니다만, SYS계정은 대문자로 적어줍니다. 띄어쓰기는 주의하세요)

3) ALTER USER hr    -- ALTER는 데이터 구조를 정의하는 SQL의 명령어(DDL)중 하나입니다.)

    IDENTIFIED BY 비밀번호  -- 설치시에 작성한 비밀번호를 적어주세요. 보통 oracle, orcl 이 많을 것입니다.

    ACCOUNT UNLOCK;    -- 계정을 다시 잠그고 싶다면 LOCK;

4) CONN hr/비밀번호     -- conn 혹은 connect 둘다 상관없습니다.

    or CONNECT hr/비밀번호

 

SQL문 작성에도 규칙이 있습니다?

 

- 키워드, 컬럼이름, 테이블이름은 대소문자 구별이 없습니다.

- 여러 라인에 걸쳐 작성하지만, 단어가 띄어지면 안됩니다.

- 반드시 문장을 종료할 때 세미콜론( ; )로 마칩니다.

- 출력된 결과값에서 SELECT 컬럼은 HEADING(헤딩)이라고 합니다.

 

SQL문 주석은 어떻게 할까?

 

다른 개발 언어를 보면 //, /* 등 다양합니다. 오라클 DB도 비슷합니다.

한줄 라인 : --

여러줄 라인 : /*    */

 

본격적으로 SELECT 문을 활용해 봅시다.

 

SELECT 문(쿼리)은 데이터베이스(이하 DB)에 저장된 데이터를 프로그램에서 사용하기 위해 가져올 때 사용하는 문장입니다. 단순 SELECT문은 하나의 테이블로부터 필요한 정보를 가져오는 것을 말합니다.

기본 문법은 아래와 같습니다.

 

SELECT employee_id, Last_name, Salary

FROM hr.employees

WHERE department_id = 90

ORDER BY 3 DESC;

 

순차적으로 문법을 해석해봅시다.

 

1) 직원 ID, 이름, 봉급이라는 정보를 가져오는 것을 말합니다. 즉, 처리할 레코드 단위를 구성합니다.

2) hr계정의 직원 테이블에 저장된 데이터로부터 가져옵니다. 즉, 컬럼이 정의된 테이블 행을 말합니다.

3) 부서 ID가 90인(조건) 데이터들로부터 가져옵니다. 즉, 처리되는 행을 선택할 조건을 기술합니다.

4) 3번째 SELECT 컬럼을 기준으로 내림차순(높은값부터 낮은값으로)으로 결과 레코드를 정렬합니다.

 

SELECT문에는 사칙 연산(+,-,*,/)을 사용할 수 있습니다.

 

SELECT last_name, salary, salary + 300
FROM hr.employees
WHERE department_id = 90 ;

 

결과는 헤딩이 3개가 나오며 마지막 헤딩에는 90번 부서의 사원 봉급이 300씩 추가된 것을 알 수 있습니다.

 

NULL상태의 결과는 어떻게?

 

SELECT employee_id, last_name, salary, commission_pct
FROM hr.employees
WHERE department_id = 90 ;

 

해당 쿼리를 실행하면 OConnell 이름을 가진 행(ROW)에서 인센티브(commission_pct)컬럼 데이터가 누락된 것을 알 수 있습니다. 참고로 NULL은 0과 같은 값이 아닙니다. NULL이라는 상태라고 이해하시면 좋습니다.

NULL 상태를 하나의 값으로 변환하고자 하면 나중에 나오는 NVL 를 사용하면 됩니다.

 

SELECT문에 별명(별칭)을 만들기?

 

SELECT last_name AS "Last Name", salary AS "SAL"
FROM hr.employees ;

 

컬럼명 AS "원하는 별명" 으로 사용하면 됩니다.

AS와 따옴표를 생략하고 '컬럼명 원하는 별명' 으로 하셔도 됩니다.

 

SELECT문 이어쓰기

 

SELECT last_name || salary AS "SAL"
FROM hr.employees ;

 

연산자 || 를 사용하시면 됩니다. 결과는 헤딩에 SAL로 표시되는것을 알 수 있습니다.

 

SELECT문에 리터럴 캐릭터 스트링(Literal Character Strings) 사용하기

 

SELECT last_name , ' is a ', 90 , job_id
FROM hr.employees
WHERE department_id = 90 ;

 

연산자 '' 를 사용하시면 됩니다. 헤딩 및 레코드 결과가 추가되는 것을 알 수 있습니다.

이때 주의할 점이 있습니다.

연산자 '' 사이에 또 작은 따옴표가 들어가 있으면 결과가 에러가 납니다.
ORA-01756: quoted string not properly terminated. (표기된 스트링이 적절하게 삭제되지 않았다.)

이때는 작은 따옴표 하나를 더 넣으면 됩니다.

 

SELECT department_name || ',it's assigned Manager id:' (X)

SELECT department_name || ',it''s assigned Manager id:' (O)

 

혹은 오라클 제품에서만 사용할 수 있는 기능으로는 아래가 있습니다.

 

SELECT department_name || q'[ , it's assigned Manager id: ]'

이 경우 [,] 대신 { }, ( ), < >, ! ! 이런것도 사용가능합니다.

 

SELECT문 실행시 중복 레코드 제외하기

 

SELECT DISTINCT department_id, job_id
FROM hr.employees
WHERE department_id = 30 ;

 

DISTINCT 키워드를 사용합니다. 중복된 레코드는 한번만 나옵니다.

참고로 조금이라도 문법을 통한 성능을 높일 때 DISTINCT 와 ORDER BY는 같이 쓰시면 안됩니다.

10g부터 DISTINCT는 정렬 방법을 HASH를 사용하나 ORDER를 사용하게 되면 SORT를 사용하게 됩니다.

 

기초 SELECT 문에 대해서 알아봤습니다.

다음으로는 WHERE, ORDER BY 에 대해서 알아보겠습니다.