다운로드


- Oracle 11g Express

- Oracle SQL Developer(jdk포함)





DQL(Data Query Lenguage)


1. SELECT 구문에 의해서 테이블의 자료를 검색하는 명령

2.

SELECT 컬럼리스트

FROM 테이블

WHERE 조건식

GROUP BY 기준컬럼

HAVING 조건식

ORDER BY 기준컬럼;


-- 특정 테이블의 자료 확인

select * from employees;



--특정 테이블의 자료 일부 출력.  행(column) 제한

select first_name, last_name, phone_number

from employees;


-- 특정 테이블의 자료 일부 출력. 열(Row) 제한.

select *

from employees

where job_id = 'IT_PROG';


-- 특정 테이블의 자료 일부 출력. 행(column), 열(Row) 제한.


select first_name, last_name, phone_number

from employees

where job_id = 'IT_PROG';






조건식(행 제한)


1. 

select 컬럼리스트

from 테이블

[where 조건식]



2. 연산자 종류

연산자 종류

비교연산자 : =, >, <, >=, <=, <>

논리연산자 : and, or, not

SQL 연산자 : IN(값, ...), BETWEEN ~ AND , LIKE



3. 자료형

-문자형 : CHAR2, VARCHAR2

-날짜형 : DATE

-숫자형 : NUMBER



4. 리터럴(상수)

문자형 : 작은 따옴표로 표기된 문자열. EX) '테스트' 

날짜형 : 날짜 서식을 가진 문자열. '년-월-일', '월/일/년' 형식을 가진 문자열. ex)'2012-10-22'

숫자형 : 정수 또는 실수로 표기된 숫자. ex) 10


올바른 자료형 비교 예.

select *

from employees

where job_id='IT_PROG'; -- 성공


틀린 자료형 비교 예.

select *

from employees

here job_id="IT_PROG";" -- 실패






날짜 데이터 검색하는 방법

-> 날짜 데이터를 문자열 형식으로 변환하는 과정 필요.

-> to_char(날짜데이터, '서식') 함수 이용


--employees 테이블에서 입사년도(hire_date)가 '2003'년인 경우 출력.

select *

from employees

where to_char(hire_date, 'yyyy') = '2003';



--employees 테이블에서 입사월(hire_date)이 '1'월인 경우 출력.

select *

from employees

where to_char(hire_date, 'mm') = '01';


--employees 테이블에서 입사년도(hire_date)가 '2005'년이고, 입사월이 '1'월인 경우 출력.

select *

from employees

where to_char(hire_date, 'yyyy-mm') = '2005-01'; 


-- 혹은

select *

from employees

where to_char(hire_date, 'yyyy') = '2005' and to_char(hire_date, 'mm') = '01';


--employees 테이블에서 입사년도(hire_date)가 '2000'년대인 경우 출력.

-> substr(원본데이터, 출발위치, 길이)


select *

from employees

where to_char(hire_date, 'yyyy') = '2000' or to_char(hire_date, 'yyyy') = '2001' or to_char(hire_date, 'yyyy') = '2002'

      or to_char(hire_date, 'yyyy') = '2003' or to_char(hire_date, 'yyyy') = '2004' or to_char(hire_date, 'yyyy') = '2005'

      or to_char(hire_date, 'yyyy') = '2006' or to_char(hire_date, 'yyyy') = '2007' or to_char(hire_date, 'yyyy') = '2008'

      or to_char(hire_date, 'yyyy') = '2009';

      

-- 혹은

select *

from employees

where substr(to_char(hire_date, 'yyyy'), 1, 2) = '20';


-- 혹은 (문자열도 크기 비교가 됨.)

select *

from employees

where to_char (hire_date, 'yyyy') >= '2000' and

         to_char(hire_date, 'yyyy') <= '2009';






숫자 데이터 검색하는 방법



-- employees 테이블에서 salary(급여)가 20000달러 이상인 경우 출력

select *

from employees

where salary >= 20000;


--employees 테이블에서 salary(급여)가 5000~10000번위인 경우 출력


and연산자 사용.








SQL 연산자


1. IN(값, ...): or 연산 역할. 괄호 안의 나열된 값중 하나와 일치하면 true


2. BETWEEN 값1 AND 값2: and 연산 역할. 값1~값2 범위 지정시


3. LIKE: 피연산자가 패턴(_, %)과 일치하는 경우 true;



--jobs 테이블에서 job_title이 'President' 이거나, 'Sales Manager'인 경우 출력.

select *

from jobs

where job_title='President' or job_title = 'Sales Manager';


-- 혹은

select *

from jobs

where job_title in ('President', 'Sales Manager');



--employees 테이블에서 salary(급여)가 5000~10000번위인 경우 출력


select *

from employees

where salary between 5000 and 10000;




--employees 테이블에서 전화번호가 4567로 끝나는 경우 출력

-> substr은 길이가 서로 다른 문자열에서는 일부 문자열을 얻기가 힘듬.

-> like 연산자 사용


select *

from employees

where phone_number like



--employees 테이블에서 전화번호가 국번이 123로 끝나는 경우 출력


select *

from employees

where phone_number like '%123_____';


select *

from employees

where phone_number like '___.123.____';








null 확인


1. 데이터베이스 내의 데이터 저장 공간을 확보한 후 데이터를 채우지 않으면

자동으로 NULL값이 저장된다.


2. is 로 확인.


-- employees 테이블에서 commission_pct 정보가 null인 경우 출력


select *

from employees

where commission_pct is null;









내장 함수


- 함수는 데이터를 입력시 , 단일 결과를 리턴하는 프로그램의 집합


1. 입력데이터가 없는 경우

select sysdate from dual; -- 시스템의 현재 날짜


select to_char(sysdate,'yyyy-mm-dd') from dual;


select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;






2. 입력 데이터가 있는 경우

TO_DATE('날짜문자열') : 문자열을 날짜 형식으로 변환


select sysdate - to_date('특정날짜') from dual;

-- 특정 날짜부터 특정 날짜 사이의 날짜수 계산



TO_CHAR(날짜자료형, '서식')


select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual;

--서식에 맞게 날짜, 시간 출력


ROUND(값)


select round (10.123) from dual; --10

select round (10.567) from dual; --11

select round (10.567, 2) from dual; --10.57

select round (10.567, 1) from dual; --10.6

-- 반올림 함수



TRUNC(값)


select trunc (10.123) from dual; --10

select trunc (10.567) from dual; --10

-- 절삭함수

ex) employees 테이블에서 salary가 10000이상이면서, 20000 미만인 경우 출력

select *

from employees

where trunc (salary/10000) = 1;



MOD(값1, 값2)


-- 나머지 연산 함수


LOWER('대문자') : 입력된 문자를 소문자로 변경


UPPER('소문자') : 입력된 문자를 대문자로 변경


ex)

select *

from employees

where first_name = 'ellen'; --X


select *

from employees

where first_name = 'Ellen'; --O


select *

from employees

where first_name = 'ELLEN'; --X


select *

from employees

where LOWER(first_name) = LOWER('ellen'); --O


select *

from employees

where UPPER(first_name) = UPPER('ellen'); --O



CONCAT(문자열1, 문자열2) : 입력된 문자열1과 문자열2를 하나의 컬럼으로 합쳐 출력


LENGTH(원본문자열) : 문자열 길이


SUBSTR(원본문자열, 위치, 길이) : 부분 문자열 리턴


INSTR(원본문자열, 검색문자열) : 문자열 검색.


REPLACE(원본문자열, 검색문자열, 대체문자열) : 문자열 대체


LPAD(식,길이,표시문자열) : 문자열 대체. 특정 문자열로 채워짐. (LIFT)

EX) 

select '801010-1234567' from dual;

select lpad((substr('801010-1234567', 7, 8), 14, '*') from dual;



RPAD(식,길이,표시문자열) : 문자열 대체. 특정 문자열로 채워짐. (RIGHT)

EX) 

select rpad(substr('801010-1234567', 1, 7), 14, '*') from dual;


NVL(식, 값) : 식의 결과값이 null 이면 값 리턴 (if구문만 있는 상태)


NVL2(식, 값1, 값2) : 식의 결과값이 null이면 값1 리턴 아니면 값2 리턴 (if~else 구문 상태)


DECODE(식, 조건, 값1, 조건2, 값2, ...) : 식의 조건이 참이면 값1을 리턴하고 조건2를 만족하면 값2를 리턴.. (if ~ else if~ else 인 상태)

ex)

select first_name, last_name, decode(department_id, 90, 'Excutive', 60, 'IT', 50, 'Shipping')

from employees;


ex)employees 테이블에서 salary가 10000미만인 경우는 C등급, 10000이상 20000미만인 경우는 B등급, 20000이상인 경우는 A등급으로 출력

select first_name || ' ' || last_name AS 이름, 

decode(trunc(salary/10000), 0, 'C등급', 1, 'B등급' , 2, 'A등급') as 급여등급

from employees;


WRITTEN BY
빨강꼬마

,

오라클 설치

- http://www.oracle.com 에서 Oracle Database 11g Release 2 Express Edition 을 다운받아 설치

- 설치된 O/S 에 맞춰서 다운로드

- 설치도중 출력되는 내용중 설치폴더와 Home/Basic 경로 및 포트번호가 출력되는 부분은 복사하여 별도로 보관

- 오라클 설치 이후 컴퓨터 이름을 변경할 경우 정상적인 오라클 구동이 불가능함.

  컴퓨터 이름을 설치 이후 변경하였다면, 아래의 방법을 통해 몇가지를 수정하여야 함.

ⓐ 아래 경로의 두 파일을 메모장으로 열기(오라클을 Default 경로로 설치한 경우)

  - C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN\listener.ora

  - C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN\tnsnames.ora

ⓑ (HOST = ****)에서 **** 부분을 컴퓨터명을 최종적으로 변경한 컴퓨터 이름으로 변경

ⓒ c:\> 프롬프트를 띄운후 아래의 명령어를 순차적으로 입력

  - C:\>Lsnrctl stop

  - C:\>Lsnrctl start

ⓓ ⓒ에서의 명령어 입력 후 successfullty 가 출력되면 수정완료


SQL 프롬프트 구동 명령


- show user

  현재 접속중인 사용자의 ID를 확인


- exit

  SQL 프롬프트를 종료하는 명령어


- connect

  생성된 ID와 PW를 사용하여 접속하는 명령어.

  conn 명령어로 접속후 다른 사용자ID로 conn을 사용할때에는 시스템이 자동적으로 conn -> disconn -> conn 과정을 거침

  conn 으로 줄여서 사용하기도 하며, 아래 4가지 방법으로 SQL에 접속가능함





※ sys 계정은 system계정 및 일반 계정들과는 다르게 최종관리자 권한을 가진 계정으로 일반적인 접속방법과는

   조금 다르게 접속명령 가장 뒤에 as sysdba 가 반드시 붙는다





※※ conn /as sysdba 를 사용하면 즉시 sys계정으로 로그인되는데, 보안위험 제거를 위해 이를 막기 위해서는 

     내컴퓨터 -> 관리 -> 로컬 사용자 및 그룹 > 에 ORA_DBA 내 구성원에 administrator를 삭제해야함

- disconnect

  현재 접속한 사용자의 로그아웃을 위한 명령어




- /nolog

  SQL 프롬프트를 먼저 구동한 후 접속할때 C:\> 에서 SQLPLUS 명령어 사용시 사용하는 옵션




- SHUTDOWN IMMEDIATE

  sys 계정으로만 접속하였을때 사용가능한 명령어로써 오라클 DB를 중지시키는 명령어

  그 외 계정으로 실행하였을때는 실행이 불가능함



- STARTUP

  중지된 오라클DB를 구동시키는 명령어


- 사용자 비밀번호 변경 명령어

  alter user 사용자ID identified by 변경할패스워드

  패스워드는 숫자+영문(소)+영문(대)+특수문자 조합으로 8글자 이상이 되어야 함

  (express 버젼에서는 소문자와 대문자 구별을 별도로 하지 않음)


- host

  윈도우 커맨드를 실행할때 SQL 프롬프트상에서 사용하는 명령어

  기타 명령어 없으 SQL> host를 입력하면 잠시 C:\> 로 상태가 변경되며, exit를 입력하면 SQL 프롬프트로 돌아옴




- 사용자계정의 LOCK 상태와 EXPIRED 상태

  사용자계정중 LOCK과 EXPIRED 상태가 되어 있는 계정이 있을 수 있는데,

  LOCK은 사용이 잠긴 상태이고, EXPIRED는 비밀번호를 재설정하여야 해제할 수 있다.

  LOCK    해제: alter user 해제할사용자ID account unlock;

  EXPIRED 해제: alter user hr identified by 변경할 비밀번호



WRITTEN BY
빨강꼬마

,