[Oracle] 오라클(Oracle) 과 MFC 연동
오라클(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;