05/11 Oracle 조인(SELF/CROSS/ORACLE JOIN), VIEW
JOIN
- INNER JOIN
- OUTER JOIN
- SELF JOIN
- CROSS JOIN
VIEW
풍경을 볼때 창문을 통해서 보는 것처럼 한정된 부분만 볼 수 있다
-> 더 큰 영역 더 작은 영역도 볼 수 있다
일반적으로 지금까지 테이블 하나만 바라보고 테이블 하나만 조회하고 했는데
필요에 따라 넓게 보기도 좁게 보기도 한다
조인했는지 모르게끔 했으면 좋겠다 -> VIEW
내가 보고싶은대로만 묶어놓은 테이블 단위
데이터의 결함을 줄이기 위한 목적으로 중복을 제거하다 보니 데이터를 나눠졌었는데..
나눠진 모델을 그대로 사용하는 것이 아니라 실제로는 여러개를 합쳐서 사용하게 됨
-> 합쳐놓은 형태의 쿼리를 만드는 작업이 불편 -> 합쳐진 테이블이 있으면 좋지 않을까
간단하게 구현할 수 있다
JOIN문장과 GROUP BY 까지만 VIEW로 묶자
CREATE VIEW AS 로 만들어주고 WHERE절과 ORDER BY 붙여줌
결과집합을 다른 이름으로 정해준 것 - VIEW
VIEW 가 왜 사용되는가?
- 복잡하게 만들어져야 하는 결과집합을 단순하게 사용하기 위해서
- 테이블을 공개할 수 없는(모든 컬럼을 공개하고 싶지 않을때) 상황에 VIEW로 컬럼을 가리기 위해서
조회목적으로 사용되기 때문에 수정, 삭제, 업데이트 안됨 -> 읽기 전용의 테이블 형태가 된다
데이터 딕셔너리
Oracle DBMS는 사용자 정보, 권한, 등등의 데이터들을 저장할 수 있는 데이터 베이스가 있어야 하는데
그 공간이 데이터 딕셔너리
테이블에는 사용자 정보, 사용자가 만들라고 했던 VIEW에 대한 내용들이 담겨있는데
-> 데이터를 관리하기 위한 데이터/ 테이블 -> 오라클에서는 데이터 딕셔너리라고 한다
오라클에서는 테이블을 직접 제공하지 않고 조회용의 테이블로 VIEW를 제공
과거에는 왼쪽사진처럼 윈도우에서 제공해주는 VIEW가 없었기 때문에
오른쪽사진처럼 조작하고 나면 목록을 조회하고 확인하는 경우가 많았다
-> 최근들어서는 중요한 내용이 아니지만
VIEW를 통해서 검색한 내용을 가지고 내가 신청한 내용이 잘 보여지는지 확인
데이터 딕셔너리, 뷰
원래 JOIN은 두 개 이상의 테이블을 합치는 것인데
SELF JOIN은 자기가 자기테이블과 합치는 경우이다
홍길동이 강호동 유재석 이휘재를 데리고 있고
그아래 계속 사원들을 두고 있는데
사원테이블인데 사원끼리의 관계가 있다
-> 참조되고 있는 자기의 상사를 JOIN하는 경우 -> SELF JOIN
댓글이나 사원 , 카테고리 등 -> 하나로 구성하게 하는 경우(자신의 상위분류에 대해)
부하직원이 상사를 참조하는 경우가 맞다
뉴렉이 BOSS / 유재석 강호동은 NEWLEC의 부하 / 정형돈의 보스는 유재석
-> 유재석의 상사가 누군지 자세한 정보를 보스이름을 뽑고 싶다면
자기가 스스로를 JOIN해서 부모의 이름을 뽑아야 함
새로운 컬럼 만들기 -> BOSS_NICNAME
보스닉네임 업데이트 해줬다
직속 상사에 대한 이름 출력하고 싶으면 SELF JOIN
내가 가지고 있는데이터에서 찾아서 붙여주는 것 -> SELF JOIN
보스의 보스이름도 조인해주기
: 곱하기 데이터를 만들때 사용
곱하기 개수의 데이터가 나오게 됨
-> ORACLE CROSS JOIN
-> ORACLE INNER JOIN
-> ORACLE LEFT OUTER JOIN
-> ORACLE RIGHT OUTER JOIN
ORACLE FULL OUTER JOIN
->오라클은 지원하지 않는다
NOTICE를 출력하는데
NOTICE의 자식의 레코드 수를 포함 시키고 싶을때
JOIN하고 GROUP BY해서 집계를 하는 복잡한 쿼리문을 작성해야 했다
-> JOIN하지 않고 가능하다
예를들어
여기에 작성자 아이디는 있는데 그 작성자의 이름을 추가 하고 싶을때
부모 멤버데이터를 JOIN해야 함
-> 서브쿼리를 이용하면 꼭 JOIN을 안써도 됨