oracleDB_ join

song·2023년 10월 4일

oracle

목록 보기
8/10

join

  • 테이블 결합
  • ★보통 inner join이랑 left join 많이 씀()
    right로 하면 null이 나올수도 있음 (join한 테이블에는 값이 있고 from 테이블에는 값이 없을 때 null이 나옴.)
    right join은 join한 테이블이 기준이다.

inner 타입 : null값이면 안나옴

  • equi join
    • 오라클에서 가장 많이 사용되는 방법
    • inner join과의 차이 : from절에 콤마 대신 inner
  • inner join
    select S.s_seqno, S.s_name, T.* 
      from student S join teacher T
      on S.t_seqno=T.t_seqno;
    • s_seqno, s_name이 teacher테이블엔 없고 student테이블에만 있다면 S.을 생략해도 된다.
    • 만약 둘 다 있다면 해당 테이블.컬럼 해야한다.
    • 오류:: ambiguously (테이블 둘 다 해당 컬럼이 있을 때 나오는 오류)
    • join을 여러번 걸기
    select s.s_seqno, s.s_name, t.t_name, c.*
      from student S right join teacher T 
      on s.t_seqno=t.t_seqno
        join classes C
        on C.c_seqno = s.c_seqno
        order by t.T_SEQNO;

outer 타입 : null값이어도 나옴

  • left outer join
  • right outer join
  • 기준이 되는 테이블에 (+) 붙이기 (oracle에서만 사용 가능)
    select e.empno, e.ename, e.job, e.mgr,
         em.empno, em.ename, em.job
       from emp e
         join emp em
       on e.mgr = em.empno(+)
       order by e.empno;

2중 join

  • select e.empno, e.ename, e.job, e.mgr, d.dname, d.loc
      from emp e join dept d
      on e.deptno = d.deptno
      order by e.empno;
      
      ↓
      
    select e.empno, e.ename, e.job, e.mgr, d.dname, d.loc
      from emp e, dept d
      where e.deptno = d.deptno
      order by e.empno;
    이렇게 join을 , 로 구분하고 on대신 where을 써서 사용할 수 있다. (oracle에서만 사용 가능)
  • select e.empno, e.ename, e.job, e.mgr,
          em.empno, em.ename, em.job
      from emp e
          join emp em
      on e.mgr = em.empno
      order by e.empno;
    이렇게 같은 테이블을 가져와서 join으로 묶고 select할 수 있다.
profile
계속 나아가기

0개의 댓글