Oracle

[Oracle] Join과 View

2025. 2. 11. 00:01

Join

여러 개의 테이블을 하나로 합쳐서 원하는 데이터를 조회할 때 사용하는 SQL 연산

inner join

두 테이블에서 일치하는 행만 반환

  • `on` 조건을 만족하는 경우만 결과로 출력
select A.*, B.*
from employees A
inner join departments B
on A.department_id = B.department_id;

 

left outer join

왼쪽 테이블의 모든 행을 가져오고, 오른쪽 테이블에서 일치하는 행이 있으면 가져오며, 없으면 `null`을 반환

select A.*, B.*
from employees A
left outer join departments B
on A.department_id = B.department_id;

 

right outer join

오른쪽 테이블의 모든 행을 가져오고, 왼쪽 테이블에서 일치하는 행이 있으면 가져오며, 없으면 `null`을 반환

select A.*, B.*
from employees A
right outer join departments B
on A.department_id = B.department_id;

 

full outer join

양쪽 테이블의 모든 행을 포함하고, 일치하는 행이 없으면 `null`을 반환

select A.*, B.*
from employees A
full outer join departments B
on A.department_id = B.department_id;

 

self join

같은 테이블을 조인하여 데이터를 비교하는 방식

  • 테이블에 별칭을 사용하여 두 개의 테이블처럼 다룸
select E1.employee_id, E1.name as Employee, E2.name as Manager
from employees E1
inner join employees E2
on E1.manager_id = E2.employee_id;

view

가상의 테이블

  • 실제 데이터를 저장하지 않지만, SQL 쿼리를 실행할 때 테이블처럼 사용 가능
  • 복잡한 SQL을 간단하게 만들거나, 특정 데이터만 접근할 수 있도록 제한하는 용도

view 생성 권한 부여

grant create view to kh15;

 

view 생성

create view employee_department as
select e.employee_id, e.name, d.department_name
from employees e
inner join departments d
on e.department_id = d.department_id;

 

view 수정

create or replace view employee_department as
select e.employee_id, e.name, e.salary, d.department_name
from employees e
inner join departments d
on e.department_id = d.department_id;

 

view 삭제

drop view employee_department;

 

view 조회

select * from employee_department where department_name = 'Sales';

 

view 장점

  • sql 단순화: 복잡한 쿼리를 한 번 정의하고, 쉽게 사용 가능
  • 보안성 향상: 특정 컬럼만 보이도록 설정 가능
  • 데이터 무결성 유지: 원본 테이블을 변경하지 않고도 특정 데이터를 가공하여 제공 가능

 

view vs dual 차이

구분 view dual
생성 방식 사용자가 직접 생성 오라클에서 기본 제공
데이터 저장 ❌ ❌
용도 테이블처럼 사용, 복잡한 쿼리 단순화 함수 실행, 연산 결과 조회
사용 예시 `select * from view_name;` `select sysdate from dual;`

join, view 사용 예시

게시글, 회원 테이블 조인

  • 게시글 목록을 조회하면서 회원 정보를 연결해서 조회
  • 상위 게시글 테이블과 `self join`
  • 둘 다 모두 `outer join`을 이용하여 조인조건이 부합하지 않으면 `null`값을 부여
  • 뷰를 생성하거나 수정
grant create view to kh15;

create or replace view board_list_view as
select 
T.board_no target_no, T.board_title target_title,
B.board_no, B.board_title, B.board_content,
B.board_writer, B.board_wtime, B.board_etime,
B.board_like, B.board_read, B.board_reply,
B.board_group, B.board_target, B.board_depth,
M.* 
from board B
left outer join member M
on B.board_writer = M.member_id
left outer join board T 
on T.board_no = B.board_target;

select * from board_list_view;

 

'Oracle' 카테고리의 다른 글

[Oracle] hierarchy query  (0) 2025.02.10
[Oracle] rownum과 top n query  (0) 2025.02.10
[Oracle] group query  (0) 2025.02.10
[Oracle] dual  (0) 2025.02.10
[Oracle] 외래키  (0) 2025.02.10
'Oracle' 카테고리의 다른 글
  • [Oracle] hierarchy query
  • [Oracle] rownum과 top n query
  • [Oracle] group query
  • [Oracle] dual
개발하는 벌꿀오소리
개발하는 벌꿀오소리
겁없는 벌꿀오소리처럼 끊임없이 도전하자!
  • 글쓰기 관리
  • 개발하는 벌꿀오소리
    벌꿀오소리의 개발 노트
    개발하는 벌꿀오소리
  • 전체
    오늘
    어제
    • 분류 전체보기 (74)
      • Java (60)
        • 기본 (23)
        • 모듈 (8)
        • 자료구조 (5)
        • 알고리즘 (0)
        • 파일 입출력 (5)
        • JDBC (5)
        • Spring Boot (14)
      • Oracle (13)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 공지사항

  • hELLO· Designed By정상우.v4.10.3
개발하는 벌꿀오소리
[Oracle] Join과 View
상단으로

티스토리툴바