본문 바로가기
Database/Oracle

Oracle [7] JOIN, VIEW

by 8Antony 2022. 6. 27.

 

조인 (JOIN)

 

 

두개 이상의 테이블에서 찾고자하는 데이터를 검색하기 위해 사용한다. 

 

JOIN 하는법

 

1. 내가 원하는 데이터를 찾는다

2. 원하는 데이터가 있는 테이블을 찾는다.

3. 여러개의 테이블에 있다면 각각의 테이블의 공통컬럼을 찾는다. 

 

 

 

1. 송강 교수가 강의하는 과목을 찾는다.

 

 

SELECT A.PNO
     , A.PNAME
     , B.CNO
     , B.CNAME
    FROM PROFESSOR A
       , COURSE B
    WHERE A.PNO = B.PNO
    AND A.PNAME = '송강';

 

 

2. 학점이 2학점린 과목과 이를 강의하는 교수를 검색한다.
 
 
 
SELECT A.PNO
     , A.PNAME
     , B.CNO
     , B.CNAME
     , B.ST_NUM
    FROM PROFESSOR A
       , COURSE B
    WHERE A.PNO = B.PNO
      AND B.ST_NUM = 2;

 

 

인덱스(INDEX)란? 

 

데이터베이스 테이블에 있는 데이터를 빨리 찾기 위한 기술

테이블에 index를 생성하게 되면 index Table을 생성해 관리 

 

 

1. 인덱스 생성

 

CREATE INDEX 인덱스 명 ON 테이블 명(컬럼|함수|수식);

//예제
CREATE INDEX STUDENT_SNAME_IDX ON STUDENT(SNAME);

 

 

2. 인덱스 조회

 

 

SELECT * FROM STUDENT_SNAME_IDX WHERE SNAME = 'STUDENT_COAVR_IDX';

 

 

3. 인덱스 삭제

 

 

DROP INDEX STUDENT_COVAR_IDX;

 

 

4. 인덱스명 수정

 

 

ALTER TABLE STUDENT ADD CONSTRAINT STUDENT_SNO_PK PRIMARY KEY(SNO);

 

뷰 (VIEW)

 

여러개의 테이블에서 필요한 정보를 뽑아 사용할때 쓴다. 

ex) 여러 테이블에서 JOIN과 GROUP BY같은 쿼리를 view로 저장시켜놓으면 다음부터는 저장한 view의 정보만 가져오게 된다.

 

 

1. 뷰의 생성

 

 

CREATE OR REPLACE VIEW ST_CH (
    SNO,
    SNAME,
    SYEAR,
    AVR
) AS (
    SELECT SNO
          , SNAME
          , SYEAR
          , AVR
        FROM STUDENT
        WHERE SYEAR = 1
);

SELECT * FROM ST_CH;

// VIEW에서 조회가능한 데이터는 1학년 정보이므로
VIEW에서 조회가 안되는 2, 3, 4학년의 데이터는 입력할 수 없다.

 

 

 

2. 뷰에 데이터 입력 

 

 

INSERT INTO ST_CH VALUES (
    '9001',
    '홍길동',
    2,
    4.0
);

SELECT * FROM ST_CH
WHERE SNAME = '조병조';

 

 

 

 

 

3. 뷰의 삭제

 

 

DROP VIEW ST_CH;

 

 

 

NATURAL JOIN (WHERE로 할 수 있는것)

 

 

두 테이블의 동일한 이름(컬럼명)을 갖는 컬럼은 모두 조인이 된다.

 

 

EMP와 DEPT 테이블

 

SELECT ENO
     , ENAME
     , DNO
     , DNAME
    FROM EMP
    NATURAL JOIN DEPT;

 

 

 

 

EXAMPLE

 

 

광주에서 근무하는 사원의 사원번호, 사원이름, 부서번호, 부서이름, 부서지역 조회

 

 

SELECT ENO
     , ENAME
     , DNO
     , DNAME
     , LOC
    FROM EMP
    NATURAL JOIN DEPT
    WHERE LOC = '광주';

 

 

Oracle 총정리

 

 

1. select 를 잘써야 한다.

 

2. 매번 테이블 JOIN을 하기는 힘드니 view를 잘 활용하자 

 

3. 떨어져 있는 데이터 연결을 위해 PK와 참조키를 잘 설정해주자

 

 

 

댓글