DataBase

[Oracle] 오라클(Oracle) 과 MFC 연동

izen8 2011. 4. 25. 14:06
반응형

오라클(Oracle) 과 MFC 연동

Oracle 설치 및 접속

 

1. Oracle 10g 설치하기

 

http://www.oracle.com/technology/global/kr/software/index.html

 

에 접속해서 자신의 플랫폼에 맞는 버전을 다운로드 받아 설치

 

 

 

2. oracle 서버에 접속하기

 

1) sqlplus를 이용해서 접속

 

[시작] - [프로그램] - [Oracle 10g] - [응용 프로그램 개발] - sql plus

 

 

 

2) isqlplus 접속

 

웹브라우저의 주소란에 입력

 

http://localhost:5560/isqlplus

 

 

 

3) sql gate나 instant client, sql developer를 이용해서 접속

 

sql developer 다운로드

 

http://www.oracle.com/technology/global/kr/products/database/sql_developer/index.html

 

 

 

4) 관리자 패스워드를 잃어버렸을 때 접속 방법

 

콘솔 창에 아래와 같이 입력

 

sqlplus "/as sysdba"

 

 

 

한글 깨질 때

 

SELECT NAME,VALUE$ FROM PROPS$

 

 WHERE NAME ='NLS_LANGUAGE' OR

 

 NAME ='NLS_TERRITORY' OR

 

 NAME ='NLS_CHARACTERSET';

 

 

 

update props$ set value$='ko16MSWIN949' where name = 'NLS_CHARACTERSET';

 

 

 

3. 계정 풀기

 

1) System 계정으로 로그인

 

 

 

2) 기본적으로 system 계정을 제외한 모든 계정이 막혀있으므로 10g에서 샘플로 사용하는 hr계정 풀기

 

 

 

alter user hr identified by hr account unlock

 

 

 

4. user가 가진 테이블 보기

 

1) select * from user_objects

 

//user가 가진 오브젝트 보기

 

2) select object_name

 

from user_objects

 

where object_type = 'TABLE'

 

//user가 가진 테이블만 보기

 

3) select * from tab //테이블의 형태만 보기

 

4) select * from user_tables //테이블의 구조까지 보기

스크립트 파일

-명령문을 미리 파일로 작성해서 배치파일처럼 한번에 실행하게 만든 파일을 의미합니다.

확장자는 sql입니다.

 

- 오라클에서 스크립트 파일 실행

isqlplus: 파일만 열어서 실행하면 됩니다.

sqlplus: 파일의 위치를 오라클 홈 디렉토리의 bin 폴더에 복사한 후 start 스크립트 파일명을 입력하면 됩니다.

 

SQLPLUS의 간단한 사용법

 

1)List

이전에 실행한 문장을 출력하는 명령

 

2)EDIT

버퍼의 내용을 기본 문서 편집기(메모장)으로 열기

 

3)run

버퍼 내용 실행

 

4)start 스크립트파일명

스크립트 파일 실행

 

5) save 파일명

현재 버퍼 내용을 스크립트 파일로 저장 – 기본 확장자는 .sql

기본 폴더에 생성될 것입니다.

 

6) get 파일명

파일명에 해당하는 스크립트 파일을 버퍼로 로드

 

7) set linesize 숫자

질의결과를 숫자만큼의 너비로 출력

 

8) set pagesize 숫자

질의결과를 숫자만큼의 높이로 출력

 

 

실습 환경을 위해 3개의 스크립트 파일을 수행

DML

1. 필드(select 절) 출력하기

1) 테이블 구조 보기

desc 테이블명;

ex)emp 테이블의 구조를 확인

desc emp;

 

2) 테이블의 모든 데이터 보기

select *

from 테이블명

ex) emp테이블의 모든 데이터보기

select *

from emp;

 

3) 테이블의 특정 필드만 추출하기

select 필드명, 필드명.....

from 테이블명

ex) emp 테이블에서 duty와 sal 만 추출해서 보기

select duty, sal

from emp;

 

4) 필드의 계산식 출력하기

select 계산식

from 테이블명

ex)sal의 1/12 출력하기

select sal/12

from emp;

 

select 1+2*3

from dual;

 

NULL 과의 연산은 모두 NULL이 됩니다.

 

5) 속성 명에 별명을 붙여서 출력하기

select 필드명 as 별명

from 테이블명

주의 사항: 별명이 대소문자를 구분하거나 공백이 있을 때는 " "안에 입력해야 합니다.

ex)예제를 급여라고 별명을 붙여서 출력하기

select sal/12 as 급여

from emp;

 

6) 2개 이상의 필드를 결합해서 출력

|| 연산자 이용

ex)empname과 duty를 합쳐서 출력하기

select empname||duty

from emp;

7) 필드 명 사이에 문자 삽입하기

|| 와 '문자열'을 이용

ex) empname은 duty입니다로 출력하기

select empname||'은' || duty || '입니다.'

from emp;

8) 중복을 제거해서 출력하기

distinct 이용

ex) duty의 중복을 제거해서 출력

select distinct duty

from emp;

 

2. 조건 절(where 절) 사용하기

1) where에는 기본적으로 조건이 들어가게 됩니다.

ex) duty가 과장인 데이터의 empname과 duty 출력하기

select empname, duty

from emp

where duty = '과장';

 

2) and 와 or 사용 가능

ex1) duty가 과장 또는 대리인 데이터의 empname과 duty 출력하기

select empname, duty

from emp

where duty = '과장' or duty = '대리';

 

ex2) sal이 2000에서 3000 사이 인 데이터의 empname과 duty 출력하기

select empname, duty

from emp

where sal >= 2000 and sal <= 3000;

 

3)in

하나의 필드에서 여러 개의 값 중 하나인 조건

ex) duty가 과장 또는 대리인

데이터의 empname과 duty 출력하기

select empname, duty

from emp

where duty in('과장', '대리');

 

not in은 ( )안의 값을 제외하고 출력

 

4) between

between A and B: A와 B사이

반드시 B의 값이 A의 값보다 커야 합니다.

ex) sal이 2000에서 3000 사이 인 데이터의 empname과 duty 출력하기

select empname, duty

from emp

where sal between 2000 and 3000;

5) like

부분 일치하는 데이터 추출할 때 사용

_: 반드시 한 글자

%: 모든 글자를 대신(글자수 제한 없음)

ex) empname이 '최'로 시작하는 모든 데이터의 empname출력하기

select empname

from emp

where empname like '최%';

 

% 나 _를 검색하고자 한다면 escape 문자를 이용

Select * from 테이블명

Where 컬럼명 like ‘a/_%’ escape ‘/’;

 

6) null 값 출력

is null: 널 값을 출력

is not null: 널이 아닌 값을 출력

 

3. JOIN

2개 이상의 테이블을 조합해서 하나의 테이블을 생성하는 것

1) 카티션 프러덕트

from절에 테이블명이 2개 이상인데 죠인 조건이 없는 경우

양쪽 테이블의 모든 조합이 추출

속도가 느리고 효율이 나쁘므로 배제해야 하지만

특별한 경우 테이블 생성을 위해 하는 경우도 있습니다.

ex) gg, pp 테이블에서 죠인 조건을 설정하지 않은 경우

select *

from gg, pp;

 

2) join

2개의 테이블에 공통필드가 있는 경우에만 가능

① 기본 형식

select 필드명

from 테이블명1, 테이블명2

where 테이블명1.필드명 = 테이블명2.필드명

ex)gg, pp 테이블에서 g_id가 동일한 경우만 추출

select *

from gg,pp

where gg.g_id = pp.g_id;

 

= 대신에 join 이라는 예약어를 사용해도 됩니다.

이 때 where절이 아니고 On 절을 사용합니다.

또한 2개의 테이블의 죠인 필드이름이 일치하는 경우 JOIN 대신에 Natural Join이라고 쓰고 On을 생략해도 됩니다.

select gg.name, gg.g_id, pp.g_id, pp.s_id, pp.qty

from gg natural join pp


 

using 사용한 join

select 필드명

from 테이블명1 Join 테이블명2

using (공통된 필드명);

ex)gg, pp 테이블에서 g_id 동일한 경우만 추출

select *

from gg join pp

using (gg.g_id);

 

3) join 시 주의 사항

join 한 후 검색을 할 때 중복된 필드명으로 검색하면 에러를 발생시키게 됩니다.

따라서 join을 한 후 select절이나 where절에 필드명을 사용할 때는 테이블 명을 입력하고.필드명으로 하는 것이 좋습니다.

 

4) 테이블 이름에 별명 사용

from 절에 테이블 명을 입력하고 공백을 주고 별명을 입력하면 됩니다.

그럼 SQL구문에서 테이블 명 대신에 별명을 사용할 수 있습니다.

ex)gg, pp 테이블을 조인 한 후 g_id가 2인 데이터의 g_id, s_id, name을 추출하시오.

select g.g_id, g.name, p.s_id

from gg g, pp p

where g.g_id=p.g_id and g.g_id=2;

 

5) Non -Equi Join

동일한 데이터만 조인하는 것이 아니라 조건을 주고 크거나 작은 데이터만 조인 할 수 있도록 한 것

= 대신에 다른 관계 연산자만 사용하면 됩니다.

 

Select empid, empname, sal, sal_grade

From s_emp e join s_salgrade s

On e.sal between s.low_sal and s.hi_sal;

 

6) Outer Join

일치하지 않는 데이터도 죠인하는 것

① left outer join

왼쪽 테이블에 있는 데이터는 모두 연결되고 오른쪽 테이블에 있는 데이터는 일치하는 경우만 연결

형식

from 테이블명1 left outer join 테이블명2

on 죠인 조건

(죠인은 Equi Join 만 가능합니다.)

ex)emp 테이블에 있는 deptid는 모두 연결되고 dept 테이블에 있는 deptid는 emp테이블에 있는 경우에만 연결되는 left outer join

 

select emp.deptid

from dept left outer join emp

on emp.deptid = dept.deptid;

right outer join

full outer join

한 쪽에 있는 데이터만 추출하고자 하는 경우 사용합니다.

 

7) Self Join

자기 자신과 죠인하는 것

S_emp 테이블에서 다른 사원의 상급자(mgr)인 사원의 empid, empname, empid, empname을 출력하시오.

Select e.empid, e.empname, m.empid, m.empname

From s_emp e, s_emp m

Where e.mgr = m.empid;

 

4. GRUOP BY

그룹화 하고자 할 때 사용하는 절

레코드 들을 특정 속성 단위로 묶을 때 사용하며

일반적으로 집단 함수와 같이 사용

1) 집단함수

SUM, MAX, MIN, AVG, COUNT, STDDEV(표준편차), 등

집단 함수 사용 시 GRUOP BY 절이 없으면 에러

 

2) GROUP BY

그룹화 할 필드명을 나열

ex) emp 테이블에서 DUTY 별로 SAL의 합계(EMP테이블)

select duty, sum(sal)

from emp

group by duty;

 

count는 ( )안에 필드명 보다는 *을 사용합니다.

 

3) Having

GROUP BY에서의 조건을 기술할 때 사용하는 절

ex) emp 테이블에서 DUTY 별로 3번이상 나온 DUTY의 SAL의 합계를 출력(EMP테이블)

select duty,sum(sal)

from emp

group by duty

having count(*)>=3;

 

5. ORDER BY

정렬해서 출력하고자 할 때 사용

형식

ORDER BY 정렬할 필드명(생략 또는 DESC)

Ex) emp 테이블에서 hire_date의 내림차순으로 empname, duty, bonus, deptid, hire_date를 출력하기

Select empname, duty, bonus, deptid, hire_date

From emp

Order by hire_date DESC;

 

 

반응형