샘플 스키마 : HR

설명하는 과정에서 예제로 주어진 문장은 눈으로 보지만 말고 직접 실행시켜 보길 권한다.




No. 01

 

 

단일 행 함수란?


단일 행 함수는 모든 행에 대하여 각각 적용되어 행의 개수와 동일한 결과를 제공한다.


단일 행 함수의 종류




단일 행 함수의 기능

  • 함수의 중첩이 가능하다.
  • 함수의 결과 값은 입력 값마다 하나씩 리턴 된다.
  • 함수의 인자는 컬럼명, 수식, 변수 등을 사용할 수 있다.
  • 데이터를 조작한다.




No. 02

 

 

문자 함수


문자 함수는 문자를 인자로 사용하고 결과 값도 문자를 반환하는 함수이다.

대소문자 조작 함수

함수명

기 능 

사 용 

LOWER

 문자열을 소문자로 변환한다.

 LOWER(문자열)

 LOSER('SQL Course') → sql course

 

UPPER

 문자열을 대문자로 변환한다.

 UPPER(문자열)

 UPPER('SQL Course') → SQL COURSE

 

INITCAP

 첫 문자만 대문자로 변환하고,

 나머지는 소문자로 변환한다.

 INITCAP(문자열)

 INITCAP('SQL Course') → Sql Course


◈ 예제

select first_name, lower(first_name), upper(first_name), initcap(first_name)

from employees;


▶ 이름이 'Amit'인 사원의 정보를 검색할 때

select employee_id, first_name, department_id, salary

from employees

where first_name = 'amit';

no rows selected


select employee_id, first_name, department_id, salary

from employees

where lower(first_name) = 'amit';


HR 스카마의 테이블에는 입력 원칙을 가지고 문자 데이터가 입력되어 있지만, 실제 현장에서는 입력 원칙이 정해지지 않아 데이터를 입력하는 사람 마음대로 입력된 데이터가 있을 가능성이 있다.

입력된 데이터에 대·소문자가 섞여 있는 경우 문자열을 검색하기 위하여 대·소문자 조작 함수를 사용한다. 하지만, 가장 좋은 방법은 입력 작업을 할 때 원칙을 정해서 대·소문자를 구별하여 함수를 사용하지 않도록 하는 것이 좋다.



▣ 문자 조작 함수

 함수명

기능 & 사용 

CONCAT

 두 개의 문자열을 연결한다. (연결 연산자와 비슷한 기능)

 CONCAT(문자열1, 문자열2)

 CONCAT('Hello', 'World') → HelloWorld

 

SUBSTR

 문자열 내에서 지정된 위치의 문자열을 반환한다.

 SUBSTR(문자열, 시작위치, 출력문자 개수)

 SUBSTR('HelloWrold',2,5) → elloW

  

LENGTH

 문자열의 길이를 반환한다.

 LENGTH(문자열)

 LENGTH('HelloWorld') → 10

 

INSTR

 지정된 문자의 위치를 리턴한다.

 INSTR(문자열, 검색문자, [시작위치, [횟수]])

 INSTR('HelloWorld','o') → 5

 

TRIM

 접두어나 접미어를 잘라낸다.

 TRIM([leading | trailing | both] 제외 문자 FROM 문자열)

 TRIM('H' FROM 'HelloWorld') → elloWorld

  

LPAD, RPAD

 지정된 문자열의 길이만큼 빈부분에 문자를 채운다.

 LPAD(문자열, 출력길이, 채울문자), RPAD(문자열, 출력길이, 채울문자)

 LPAD('World', 10, '*') → *****World,  RPAD('World', 10, '*') → World*****


◈ 예제

▶ CONCAT

select first_name, last_name, concat(first_name, last_name)

from employees;


 TIP  동일한 작업을 할 경우 함수보다 연결 연산자(||)의 성능이 더 좋다.


▶ SUBSTR

select first_name, substr(first_name,3), substr(first_name,-3), substr(first_name,2,5), substr(first_name,-5,3)

from employees;


시작위치가 '-'인 경우는 문자열의 끝에서부터 위치를 정한다.

예) -5 : 끝에서 다섯 번째


▶ LENGTH

select first_name, length(first_name)

from employees;


▶ INSTR

select instr('database', 'a'), instr('database', 'a', 3), instr('database', 'a', 1, 3)

from dual;


시작위치, 횟수를 쓰지 않을 경우 기본값은 시작위치=1, 횟수=1

instr('database', 'a') : 'database'라는 문자열에서 첫 번째 'a'의 위치

instr('database', 'a', 3) : 'database'라는 문자열에서 세 번째부터 검색한 'a'의 위치

instr('database', 'a', 1, 3) : 'database'라는 문자열에서 첫 번째부터 검색한 세 번째 'a'의 위치


▶ TRIM

select trim('r' from 'register'), trim(leading 'r' from 'register'), trim(trailing 'r' from 'register')

from dual;


기본값 : both

trim('r' from 'register') : 'register'라는 문자열의 'r'이라는 접두어와 접미어를 잘라낸다.

trim(leading 'r' from 'register') : 'register'라는 문자열에서 'r'이라는 접두어를 잘라낸다.

trim(tailing 'r' from 'register') : 'register'라는 문자열에서 'r'이라는 접미어를 잘라낸다.

문자열의 접두어와 접미어에 제외 문자가 없으면 문자열 그대로를 출력한다.

제외 문자는 한 글자만 가능하다. 잘못된 예) trim('re' from 'register')


▶ LPAD, RPAD

select first_name, rpad(first_name, 10, '#'), lpad(first_name, 10, '#')

from employees;



문자 치환 함수


함수명

기능 & 사용 

TRANSLATE

 문자 단위 치환된 값을 리턴한다.

 TRANSLATE(문자열, 검색문자, 치환문자)

 TRANSLATE('hello', 'e', '*') → h*llo

 

REPLACE

 문자열 단위 치환된 값을 리턴한다.

 REPLACE(문자열, 시작위치, 출력문자 개수)

 REPLACE('hello', 'el', '**')  → h**lo


◈ 예제

select translate('hello world', 'lo', '**') translate, replace('hello world', 'lo', '**') replace

from dual;


TRANSLATE는 'l'과 'o' 각각의 문자를 '*'로 치환하고,

REPLACE는 'lo'라는 문자열을 '**'문자열로 치환한다.


select translate('hello world', 'lo', '$*') translate

from dual;


문자 'l'은 '$'로 치환되고, 문자 'o'는 '*'로 치환



 TIP 

DUAL 테이블이란?

SELECT문에는 반드시 FROM절을 기술해야 한다.

예를 들어 10*20은 어느 테이블에서도 데이터를 가져오는 것이 아니기 때문에 FROM절에 기술할 테이블이 없다.

이런 경우 사용할 수 있는 DUMMY 테이블이 DUAL이다.


select 10*20

from dual;




'SQL' 카테고리의 다른 글

[SQL 08] 단일 행 함수 - 변환 함수  (0) 2017.12.03
[SQL 07] 단일 행 함수 - 숫자, 날짜 함수  (0) 2017.12.03
[SQL 05] ORDER BY 절  (0) 2017.12.03
[SQL 04] WHERE 절  (0) 2017.12.03
[SQL 03] SELECT 문  (0) 2017.11.30

샘플 스키마 : HR

설명하는 과정에서 예제로 주어진 문장은 눈으로 보지만 말고 직접 실행시켜 보길 권한다.


지정된 컬럼을 대상으로 정렬을 수행하는 ORDER BY 절에 대해서 배워본다.



No. 01

 

 

ORDER BY 절을 이용한 정렬된 데이터 검색


기본 구조

SELECT * | {[DISTINCT] 컬럼명 or 표현식 [별명], …}

FROM 테이블명

[WHERE 조건]

ORDER BY 컬럼 [ASC/DESC], 컬럼 [ASC/DESC] …;

  • ORDER BY 절은 SELECT 문의 마지막에 사용해야 한다.
  • ASC : 오름차순 정렬, DESC : 내림차순 정렬, (지정하지 않으면 ASC가 기본 값)
  • 정렬하는 컬럼이 여러 개인 경우 앞쪽 컬럼의 정렬이 깨지지 않는 범위 내에서 두 번째 컬럼의 정렬을 수행한다.
  • 정렬 대상은 컬럼이 아니더라도 사용 가능하다.
    1. 별명
    2. 검색 항목의 순서
    3. 수식


◈ 예제

▶ 사원의 정보를 급여 순으로 검색한다.(오름차순)

select employee_id, first_name, salary

from employees

order by salary asc;


▶ 사원의 정보를 급여 순으로 검색한다.(내림차순)

select employee_id, first_name, salary

from employees

order by salary desc;


▶ 사원의 정보를 연봉 순으로 검색한다.(오름차순, 별명사용)

select employee_id, first_name, salary*12 annsal

from employees

order by annsal;


select 절에서 지정한 별명을 사용할 수 있으며, 오름차순일 경우 asc를 생략해도 무방하다.


▶ 사원의 정보를 연봉 순으로 검색한다.(오름차순, 검색 항목의 순서사용)

select employee_id, first_name, salary*12

from employees

order by 3;


select 절에 기술된 순서를 지정해도 된다.

'salary*12'는 3번째 항이므로 'ORDER BY 3'이라고 써도 별명을 사용한 결과와 같다.


▶ 정렬하는 컬럼의 수가 여러개인 경우

select first_name, department_id, salary

from employees

order by department_id, salary desc;


두 개의 항목으로 정렬을 수행했다.

부서번호 컬럼은 정렬 방법을 생략했으므로 오름 차순(ASC) 정렬을 수행하고, 정렬된 부서번호 안에서 급여에 대해서 내림 차순(DESC)를 수행한 결과이다.



'SQL' 카테고리의 다른 글

[SQL 07] 단일 행 함수 - 숫자, 날짜 함수  (0) 2017.12.03
[SQL 06] 단일 행 함수 - 문자 함수  (0) 2017.12.03
[SQL 04] WHERE 절  (0) 2017.12.03
[SQL 03] SELECT 문  (0) 2017.11.30
[SQL 02] SQL Developer 간단 사용법 & SQL 언어  (0) 2017.11.29

샘플 스키마 : HR

설명하는 과정에서 예제로 주어진 문장은 눈으로 보지만 말고 직접 실행시켜 보길 권한다.


행의 조건을 기술함으로써 테이블 내의 원하는 결과만 검색하는 WHERE 절에 대해 배워본다.



No. 01

 

 

WHERE 절을 이용한 검색 조건


기본 구조

SELECT * | {[DISTINCT] 컬럼명 or 표현식 [별명], …}

FROM 테이블명

WHERE 조건;

  • WHERE 절은 FROM 절 바로 뒤에 쓴다.
  • 조건을 통해 컬럼 내에 데이터를 제한한다.
  • 검색 조건이 문자이거나 날짜인 경우 반드시 단일 인용 부호를 사용해야 한다.
  • 조건에 사용되는 비교 연산자

연산자

의 미

 

=

같다

 

>

크다

 

<

작다

 

>=

크거나 같다

 

<=

작거나 같다

 

<>, !=, ^=

같지 않다

 



◈ 예제

▶ 이름이 'Ellen'인 사원의 사원번호, 메일, 직업, 급여 정보

select first_name, employee_id, email, job_id, salary

from employees

where first_name = 'Ellen';


※ 조건의 내용이 영문일 경우 대소문자를 구별해야 한다.


▶ 100번 부서에 속한 사원들의 사원번호, 이름 정보

select employee_id, first_name

from employees

where department_id = 100;



널 값의 비교 연산

널 값을 검색하는 경우 널 값은 일반 연산, 비교 연산이 불가능하기 때문에 다음의 연산자를 사용한다.

IS NULL : 널 값을 검색

IS NOT NULL :  널이 아닌 값을 검색


◈ 예제

▶ 보너스를 받지 못하는 사원의 이름, 월급, 전화번호를 검색

select first_name, salary, phone_number

from employees

where commission_pct is null;




No. 02

 

 

논리 연산자


기본 구조

SELECT * | {DISTINCT] 컬럼명 or 표현식 [별명], …}

FROM 테이블명

WHERE 조건 [논리연산자 조건 …];

  • 논리 연산자는 여러 개의 조건을 사용할 때 쓰인다.
  • AND, OR, NOT의 논리 연산자를 이용한다.
  • 두 개 이상의 논리연산을 할 때는 반드시 괄호로 연산의 우선순위를 결정하는 것이 좋다.
  • AND 연산자가 OR 연산자보다 우선순위가 높다.

연산자

설 명

 

AND

 조건을 모두 만족해야만 검색

 

OR

 조건 중 하나만 만족해도 검색

 

NOT

 조건을 만족하지 않아야 검색

 사용 NOT IN, NOT BETWEEN, NOT LIKE, NOT NULL



◈ 예제

▶ 60번 부서원들 중 급여가 5000 이상인 사원의 이름, 사원번호, 메일, 직업, 상사번호 정보

select first_name, employee_id, email, job_id, manager_id

from employees

where department_id = 60

and salary >= 5000;


▶ 부서 번호가 60이거나 급여가 5000 이상인 사원의 이름, 사원번호, 메일, 직업, 상사번호 정보

select first_name, employee_id, email, job_id, manager_id

from employees

where department_id = 60

or salary >= 5000;


60번 부서원들과 급여가 5000 이상인 사원이 모두 검색 되었다.


▶ 부서 번호가 60이 아닌 사원의 이름, 사원번호, 메일, 직업, 상사번호 정보

select first_name, employee_id, email, job_id, manager_id

from employees

where not department_id = 60;


NOT 연산자는 보통 위의 예제처럼 단일로 쓰이지 않는다.

NOT 연산자를 사용할 경우 아직 배우지 않았지만 위에 명시한 연산자들과 자주 쓰인다.



※ 주의



▶ JOB_ID가 'IT_PROG' 또는 'FI_ACCOUNT' 이면서 급여가 7000 이상인 사원을 검색하려 할 때


A

select first_name, job_id, salary

from employees

where job_id = 'IT_PROG'

or job_id = 'FI_ACCOUNT'

and salary >= 7000;


B

select first_name, job_id, salary

from employees

where (job_id = 'IT_PROG'

or job_id = 'FI_ACCOUNT')

and salary > = 7000;


두 문장은 괄호를 제외하고 완전히 같은 문장이지만 결과는 다르다.

결과가 다른 이유는 AND 연산자가 OR 연산자보다 우선순위가 높기 때문이다.

A 문장은 job_id가 'FI_ACCOUNT' 이면서 급여가 7000 이상인 사원들과 job_id가 'IT_PROG'인 사원들을 검색한 문장이고,

B 문장은 job_id가 'IT_PROG'와 'FI_ACCOUNT'인 사원들 중에서 급여가 7000 이상인 사원들을 검색한 문장이다.

한마디로 논리 연산자를 두 개 이상 사용할 경우 괄호를 사용하여 우선순위를 정해주어야 정확한 결과를 얻을 수 있다.





No. 03

 

 

기타 연산자 (BETWEEN, IN, LIKE)


BETWEEN 연산자 기본 구조

SELECT * | {[DISTINCT] 컬럼명 or 표현식 [별명], …}

FROM 테이블명

WHERE 컬럼 BETWEEN 값1 AND 값2;

  • 컬럼의 값이 값1 이상 값2 이하인 값을 검색한다.
  • 값1은 반드시 값2보다 작아야 한다.
  • AND 연산자를 사용하여 대체가능 하지만, 가독성을 위해 'BETWEEN ~ AND ~'를 사용


◈ 예제
▶ 급여가 5000에서 7000이내인 사원의 이름, 급여 정보

select first_name, salary

from employees

where salary between 5000 and 7000;



IN 연산자 기본 구조

SELECT * | {[DISTINCT] 컬럼명 or 표현식 [별명], …}

FROM 테이블명

WHERE 컬럼 IN (값1, 값2, …);

  • 지정한 값 중 일치하는 값이 하나라도 있으면 검색한다.
  • OR 연산자 = 연산자로 대체 가능하다.


◈ 예제
▶ 10, 60번 부서에 속한 사원의 이름, 사원번호, 급여 정보

select first_name, employee_id, salary

from employees

where department_id in (10, 60);



LIKE 연산자 기본 구조

SELECT * | {[DISTINCT] 컬럼명 or 표현식 [별명], …}

FROM 테이블명

WHERE 컬럼 LIKE '비교 문자열';

  • 문자 전용 비교 연산자이다.
  • 문자열의 일부만으로 검색 할 수 있다.
  • 와일드 문자를 사용한다.
    1. '_' : 반드시 한 개의 문자를 대체한다.
    2. '%' : 문자열을 대체하며, 문자가 없는 경우도 포함된다.
  • 와일드 문자 자체를 검색할 때는 ESCAPE 절(ESCAPE '지정할 문자')을 사용한다.

와일드 문자 사용 예

 예 문

설 명 

 

 '%s'

 's'로 끝나는 모든 문자열

 

's%'

 's'로 시작하는 모든 문자열

 

'%s%'

 's'를 포함하는 모든 문자열

 

'_s'

 's'로 끝나는 두 글자 단어

 

's__'

 's'로 시작하는 세 글자 단어

 

'%s!_%'

 ESCAPE '!'으로 지정한 경우, 's_'가 포함된 문자열

 

'__!%'

 ESCAPE '!'으로 지정한 경우, '%'로 끝나는 세 글자 단어

 


◈ 예제
▶ 이름이 'J'로 시작하는 사원의 이름, 사원번호, 부서번호 정보

select first_name, employee_id, department_id

from employees

where first_name like 'J%';


▶ 이름의 두 번째 알파벳이 'o'인 사원의 이름, 사원번호, 부서번호 정보

select first_name, employee_id, department_id

from employees

where first_name like '_o%';


▶ 이름에 '%'가 포함된 사원의 이름, 사원번호, 부서번호 정보

select first_name, employee_id, department_id

from employees

where first_name like '%!%%' escape '!';

이 예제에서는 결과는 나오지 않는다.

SQL문이 잘못된 것이 아니라 이름에 '%가 포함된 사원이 없기 때문이다.

escape 문자로 지정한 '!' 문자 뒤에 쓰여진 '%'나 '_'는 와일드 문자가 아니라 일반 문자로 인식된다.



'SQL' 카테고리의 다른 글

[SQL 06] 단일 행 함수 - 문자 함수  (0) 2017.12.03
[SQL 05] ORDER BY 절  (0) 2017.12.03
[SQL 03] SELECT 문  (0) 2017.11.30
[SQL 02] SQL Developer 간단 사용법 & SQL 언어  (0) 2017.11.29
[SQL 01] HR schema 구조  (0) 2017.11.29

샘플 스키마 : HR

설명하는 과정에서 예제로 주어진 문장은 눈으로 보지만 말고 직접 실행시켜 보길 권한다.


문장의 구조를 표현할 때 기호의 의미

'|'  = 또는(=OR)

'[]' = 생략 가능한 문장(생략하게 되면 자동으로 기본값)


SELECT 구문은 테이블로부터 행을 검색하는데 이용하는 RDB의 가장 기본적인 문장이다.




No. 01

 

 

SELECT 문을 이용한 검색


기본 구조

SELECT * | {[DISTINCT] 컬럼명 or 표현식 [별명], …}

FROM 테이블명;

  • '*'는 모든 컬럼을 검색할 때 사용한다.
  • '*'는 컬럼명(or 표현식)과 같이 사용할 수 없고 반드시 단독으로 사용한다.
  • SELECT 절과 FROM 절은 생략할 수 없다.


◈ 예제

select * from departments;


select department_name from departments;


예제 외에도 다른 테이블과 다른 컬럼을 검색해 보도록 한다.



테이블의 구조를 검색

DESCRIBE 테이블명;    또는    DESC 테이블명;

  • 테이블의 구조(컬럼의 이름, 데이터 타입)을 확인할 수 있다.


◈ 예제

desc departments;


오라클이 지원하는 데이터 타입에 대해서는 나중에 설명하도록 하겠다.



모든 테이블 목록 검색

SELECT * FROM tab;

  • 현재 스키마의 모든 테이블 목록을 검색한다.





 TIP 

SQL Developer의 왼쪽 창을 보면 테이블, 뷰 등 여러가지 메뉴가 있다.

테이블을 클랙해보면 현재 스키마의 모든 테이블 목록을 보여준다.

테이블 목록에서 원하는 테이블을 클릭해보면 테이블의 구조를 확인 가능하다.

SQL Developer를 사용하지 않는 상황이라면 위의 명령어들로 스키마의 구조를 파악하는 것이 중요!




별명을 사용한 검색

SELECT 컬럼명 as 별명, 컬럼명 as "별명", 컬럼명 별명, 컬럼명 "별명", …

FROM 테이블명;

  • 별명은 결과를 출력할 때 컬럼의 이름을 별명으로 바꿔서 표현해준다.
  • 'as'는 생략 가능하다.
  • 위의 4가지 표현식 모두 사용 가능하다.
  • "(이중인용부호)를 사용하지 않으면 대문자로 표현된다.
  • "(이중인용부호)의 사용이 필요한 경우
    1. 대소문자를 구별하고 싶은 경우
    2. 특수 문자가 포함된 경우
    3. 공백이 포함된 경우

◈ 예제

select last_name as name, last_name as "Name", last_name Name, last_name "name"

from employees;


"(이중인용부호)를 사용할 때와 사용하지 않을 때의 차이점을 볼 수 있다.
세 번째 컬럼의 이름이 'NAME_1'인 이유는 같은 대문자 name표현이 되어야 하는데 다른 컬럼에 같은 컬럼명이 있기 때문에 구분해 주기 위해서 자동으로 이름이 바뀌어 출력된 것이다.


수식을 사용한 검색

SELECT 수식 [별명], …

FROM 테이블명;

  • 수식을 사용할 경우에는 컬럼명에 수식이 출력되므로 별명을 사용하는 것을 권장한다.
  • 수식을 사용할 때 컬럼에 NULL값이 존재할 경우 결과는 항상 NULL값이므로 주의한다.


◈ 예제

select last_name "Name", salary*12, salary*12 "Annual Salary"

from employees;


select last_name "Name", salary*12 + salary*12*commission_pct "annual Salary"

from employees;


보너스를 포함한 연봉을 수식을 이용하여 검색한 결과이다.

commission_pct는 보너스 비율을 나타낸 값으로 보너스를 받지 않는 사람은 null 값이다.

모든 직원은 월급이 있지만 결과는 null로 나타나고, 보너스를 포함한 연봉이 얼마인지 알 수 없다.

salary에는 null값이 없지만 null값을 가진 commission_pct와 계산할 경우 null값으로 되는 것을 볼 수 있다.


◆ NULL(널 값) 이란?

널 값은 0이나 공백과는 다른 값으로, 아직 정해지지 않은 특별한 값을 의미한다.

널 값이 포함된 컬럼은 보통 연산을 사용하는 경우 정확한 결과를 볼 수 없기 때문에 주의한다.



널 값을 연산하기 위한 NVL 함수

NVL(컬럼명, 변환 값)

  • 컬럼에 널 값이 있을 경우 변환 값으로 변환한다.
  • 널 값이 아닌 경우 원래 값이 출력된다.
  • 변환 값의 타입은 반드시 컬럼의 타입과 일치해야 한다.


◈ 예제

select last_name "Name", commission_pct, nvl(commission_pct, 0)

from employees;


널 값이 0으로 변환된 것을 볼 수 있다.


select last_name "Name", salary*12 + salary*12*nvl(commission_pct,0) "Annual Salary"

from employees;


이전의 보너스를 포함한 연봉을 검색하는 식을 nvl함수를 사용하여 검색하였다.

수식의 결과가 null 값이었던 것과는 달리 보너스를 포함한 연봉의 결과를 정확하게 볼 수 있다.




No. 02

 

 

연결 연산자


기본 구조

SELECT 컬럼명 || '문자열' || …

FROM 테이블명;

  • 연결 연산자(||)는 문자열이나 컬럼을 하나의 문자열로 검색한다.
  • 숫자를 사용할 경우 단일 인용부호(')를 생략 가능하다.
  • 연결 연산자(||)는 사칙연산 중 '+','-'보다 우선순위가 높다.


◈ 예제

▶ 컬럼끼리의 연결

select last_name || job_id "Employees"

from employees;

 

 last_name 컬럼과 job_id의 컬럼이 하나의 문자열로 검색된다.


▶ 컬럼과 문자열의 연결

select last_name || ' is a ' || job_id "Employees"

from employees;

 

 문자열을 이용하여 보기 좋게 검색할 수 있다.




▶ 연산자의 우선순위

select last_name || ' ' || salary+120

from employees;

ORA-01722: invalid number

01722. 00000 -  "invalid number"

*Cause:    The specified number was invalid.

*Action:   Specify a valid number.


SQL문만 보면 맞는 문장 같지만 위와 같은 에러가 생긴다.

에러가 생긴 이유는 연결 연산자(||)가 +, -보다 우선순위가 높기 때문인데,

연결 연산자를 이용한 결과는 모두 문자로 취급되기 때문에 위의 SQL문은 문자+120이 된 것이다.

정상적으로 결과를 얻기 위해서는 괄호를 이용하여 (salary+120)을 계산하고 수행하면 된다.


select last_name || ' ' || (salary+120)

from employees;


원래의 월급보다 120이 많은 월급의 결과를 이름과 함께 하나의 문자열로 결과를 볼 수 있다.



단일 인용부호(')를 포함한 문자의 연결

SELECT 컬럼 || '''문자열''' || …

또는 SELECT 컬럼 || q' <'문자열'>' || 

  • 나타내고 싶은 단일 인용부호(')옆에 단일 인용부호(')를 하나 더 추가하면 된다.
  • 두번째, select 절의 <>대신 (),[],{} 다양한 괄호 사용이 가능하다.


◈ 예제

select department_name || ', it''s good department' evaluation

from departments;


select department_name || q'<, it's good department>' evaluation

from departments;


두 개의 방법 모두 같은 결과를 볼 수 있다.

개인적으로 문장열이 복잡해 질수록 두 번째 방법이 더 사용하기 편할 것 같다.




No. 03

 

 

중복 제거


기본 구조

SELECT [DISTINCT | ALL] 컬럼명, 컬럼명, …

FROM 테이블명;

  • DISTINCT : 중복된 출력 값은 한번만 출력한다.
  • ALL : 중복된 값을 모두 출력한다.
  • DISTINCT 나 ALL 아무것도 쓰지 않으면 기본값은 ALL로 인식된다.


◈ 예제

▶ ALL

select department_id

from employees;

 

  중복된 모든 정보를 출력한다.


▶ DISTINCT

select distinct department_id

from employees;

 

  중복된 결과를 한번만 출력한다.


 TIP  DISTINCT의 잘못된 예

select distinct department_id, last_name

from employees;


위의 예는 DISTINCT를 잘못 사용한 경우이다.

중복을 제거할 경우에는 레코드 단위로 중복을 검사하기 때문에 department_id와 last_name이 둘다 같은 행이 있어야 중복으로 처리된다.

last_name이 같은 경우가 없다면 결국, ALL을 한 경우와 같다. 필요없는 작업을 한 것이다.

지금같이 데이터의 수가 적은 경우에는 문제없지만 대용량의 데이터가 쌓여있는 데이터베이스에서 DISTINCT를 사용한다면 오라클의 성능을 떨어뜨릴 가능성이 있다. 즉, 결과의 출력이 늦을 수 있다. 그러므로 결과를 조금 더 빠르게 보기 위해서는 필요한 경우를 제외하고 DISTINCT를 사용하지 말자!




'SQL' 카테고리의 다른 글

[SQL 05] ORDER BY 절  (0) 2017.12.03
[SQL 04] WHERE 절  (0) 2017.12.03
[SQL 02] SQL Developer 간단 사용법 & SQL 언어  (0) 2017.11.29
[SQL 01] HR schema 구조  (0) 2017.11.29
[SQL 00] SQL실습을 위한 Oracle XE 11g 설치 및 준비  (0) 2017.11.29




No. 01

 

 

SQL 이란?


Structured Query language의 약자이다.

다양한 유연성을 가진 비절차적 언어이며, 자연어에 가까운 언어이므로 배우고 구사하는 것이 쉽다.

한마디로 데이터베이스에 정보를 요구하는 표준 질의어라고 할 수 있다.




No. 02

 

 

SQL 분류


분  류

기  능

명령어

 QUERY

 ◆ 데이터베이스에서 원하는 데이터의 검색 

 SELECT

 DDL

 (Data Definition Language)

 ◆ 데이터 구조를 정의, 변경, 삭제

 CREATE

 ALTER

 DROP

 TRUNCATE 

 DML

 (Data Manipulation Language)

 ◆ 사용자와 DBMS간의 인터페이스 제공

 ◆ 데이터의 삽입, 삭제, 수정

 ◆ 데이터 및 저장공간 회수

 INSERT

 DELETE

 UPDATE

 RENAME 

 DCL

 (Data Control Language)

 ◆ 데이터 제어를 정의하고 기술하는 언어

 ◆ 데이터의 보안 

 GRANT

 REVOKE 

 TCL

 (Transaction Control Language)

 ◆ DML 문에 의해서 변경된 사항을 관리 

 COMMIT

 ROLLBACK

 SAVEPOINT 




No. 03

 

 

SQL 문 작성법


  • SQL문은 반드시 ';'으로 끝나야 한다.
  • SQL문은 대소문자를 구별하지 않는다.
  • 하나의 절(SELECT, FROM, WHERE, …)은 line을 나누어 쓰는 것이 좋다. (가독성을 위해)
  • 주석은 '--'(한줄 주석) 이나 '/* comment */'(범위 주석)을 사용하여 쓸 수 있다.




'SQL' 카테고리의 다른 글

[SQL 05] ORDER BY 절  (0) 2017.12.03
[SQL 04] WHERE 절  (0) 2017.12.03
[SQL 03] SELECT 문  (0) 2017.11.30
[SQL 01] HR schema 구조  (0) 2017.11.29
[SQL 00] SQL실습을 위한 Oracle XE 11g 설치 및 준비  (0) 2017.11.29

 

 

Human Resource schema 구조


다음은 HR 스키마의 구조이다. SQL문을 작성 시 구조를 파악한 후 정확하게 작성하는 것은 매우 중요하다.

앞으로의 과정에서 자연스럽게 알 수 있다.





'SQL' 카테고리의 다른 글

[SQL 05] ORDER BY 절  (0) 2017.12.03
[SQL 04] WHERE 절  (0) 2017.12.03
[SQL 03] SELECT 문  (0) 2017.11.30
[SQL 02] SQL Developer 간단 사용법 & SQL 언어  (0) 2017.11.29
[SQL 00] SQL실습을 위한 Oracle XE 11g 설치 및 준비  (0) 2017.11.29

운영체제 : Windows 10 64bit를 기준으로 작성

다른 운영체제를 사용하시는 분들은 그에 맞게 다운로드 하시고 진행하시면 됩니다.

No. 01

 

 

Oracle Express Edition 11g 다운로드


SQL 실습만을 사용하기엔 XE 만으로도 충분합니다. 필요하신 분들은 상위 버전을 받으시고 설치하셔도 상관없습니다.


1. https://www.oracle.com 에 접속하여 상위 메뉴에서 로그인을 한다.



아이디가 없으신 분들은 sign in/create an account를 클릭하여 회원가입을 한다.

회원가입을 할 때 나머지 항목들은 대충 적어도 되지만 주의할 것은 이메일은 인증메일이 날라오기 때문에 메일을 받을 수 있도록 정확하게 적는다.

비밀번호 같은 경우 대문자, 소문자, 숫자가 모두 조합된 비밀번호여야 한다.

메일 인증까지 끝낸 후 다음 단계를 진행하도록 한다.



2. Menu에서 다음과 같은 순서로 클릭하고 Oracle Database를 클릭한다.




3. Download 창 밑에 보면 Oracle 11g Express Edition의 download 부분을 누른다.




4. 라이센스 동의를 체크하고 윈도우 64bit용 버전을 받는다.





No. 02

 

 

Oracle Express Edition 11g 설치


1. 다운로드한 파일의 압축을 풀고 Setup파일을 찾아 실행시킨다.




2. 다음 과정대로 설치를 진행한다.





저의 경우는 oracle로 비밀번호를 설정. 나중에 쓰이게 되니 기억해두세요.







3. 오라클 설치는 끝났지만 수월한 실습을 위해서 몇 가지 설정해 주어야 하는 것이 있다.

윈도우 시작메뉴 → 모든 프로그램 → Oracle Database 11g Express Edition 으로 들어가서

Run SQL Command Line을 실행시키면 다음과 같은 창이 뜬다.





4. 다음과 같은 순서로 명령어를 실행해주면 된다.
    • connect sys/oracle as sysdba

 TIP   sys 계정으로 로그인하는 명령어이며, 여기서 oracle은 데이터베이스를 설치할 때 설정해주었떤 비밀번호이다.

    • alter user hr identified by hr account unlock;

 TIP   hr 계정의 비밀번호를 hr로 설정하고 잠겨있던 hr계정의 잠금을 해제하는 명령어이다.

        sys계정으로 로그인해야만 위의 명령어를 사용할 수 있기 때문에 sys계정을 먼저 로그인한 것이다.


밑의 나머지 명령어 2개는 하지 않아도 되는 명령이지만, 계정의 잠금이 잘 풀렷는지 확인하기 위해 실행해보자.





No. 03

 

 

Oracle SQL Developer 다운로드 및 실행


위의 SQL 커맨드 창에서 SQL문장을 실습할 수 있지만 더 편하게 결과를 보기 위하여 SQL Developer를 설치하도록 한다.


1. https://www.oracle.com 에 접속하여 Menu에서 다음과 같은 순서로 클릭하고 Developer Tools를 클릭한다.




2. Developer Tools 화면에서 SQL Developer를 클릭한다.




3. JDK를 기존에 설치하신 분은 밑의 파일을 다운받으시면되고, 설치하지 않으신분은 바로 위의 JDK8 included 파일을 받으시면 됩니다.




4. 다운로드한 파일의 압축을 풀고 sqldeveloper 실행파일을 실행한다.



sqldeveloper의 설치가 필요하지 않고 실행파일로 실행시킨다.

sqldeveloper 실행파일의 바로가기를 만들어 바탕화면에 놓고 사용하면 편하다.



5. JDK미포함 버전을 받았을 경우 SQL Developer를 처음 실행시키면 JDK가 설치된 폴더위치를 설정해주는 창이 나타난다.

   설치한 폴더로 지정해주면 된다.







6. SQL Developer가 실행되고 왼쪽을 보면 다음과 같은 창이 보인다. '+'버튼을 누른다.




7. 접속 이름 : HR, 사용자 이름 : hr, 비밀번호 : hr 로 작성한 뒤 비밀번호 저장을 누르고, 테스트 버튼을 누른다.




8. 왼쪽 하단에 "상태: 성공"이라고 표시되면 접속 버튼을 누른다.




9. 왼쪽 창의 접속에 HR 계정이 띄어져 있다면 성공적으로 접속이 된 것이다.

비밀번호 저장을 해놨기 때문에 이제 Developer만 실행하면 곧바로 HR 계정을 사용할 수 있다.





No. 04

 

 

참고


사용자 ID

설  명

SYS

 오라클 Super 사용자 명이며, 데이터베이스에서 발생하는 모든 문제들을 처리할 수 있는 권한을 가지고 있다. 

SYSTEM

 오라클 데이터베이스를 유지보수 관리 할 때 사용하는 사용자 명이며, SYS 사용자와 차이점은 데이터베이스를 생성할 수 있는 권한이 없다.

SCOTT

 처음 오라클을 사용하는 사용자를 위해 만들어 놓은 sample 사용자 ID 

HR

  처음 오라클을 사용하는 사용자를 위해 만들어 놓은 sample 사용자 ID 


앞으로의 SQL 실습은 HR 스키마를 사용하여 실습하도록 하겠습니다.




'SQL' 카테고리의 다른 글

[SQL 05] ORDER BY 절  (0) 2017.12.03
[SQL 04] WHERE 절  (0) 2017.12.03
[SQL 03] SELECT 문  (0) 2017.11.30
[SQL 02] SQL Developer 간단 사용법 & SQL 언어  (0) 2017.11.29
[SQL 01] HR schema 구조  (0) 2017.11.29

+ Recent posts