본문 바로가기

나 취준생/R

R로 SQL 조인하기

320x100

■  SQL 과  R  비교 (조인)


    Oracle         vs           R 

 

equi join

non equi join              merge 

outer  join

self  join


예제 : 이름(emp.csv)과 부서 위치(dept.csv)를 출력하시오 !


SQL>  select  e.ename,  d.loc

           from  emp  e, dept  d

           where  e.deptno = d.deptno;


R> x <- merge(  emp, dept,  by="deptno")

R> x[    ,  c("ename","loc") ] 


예제 : 부서 위치가 DALLAS인 사원들의 이름과 월급과 부서 위치를 출력


x <- merge(  emp, dept,  by="deptno")


x[ x$loc=="DALLAS"   ,  c("ename","loc") ] 


예제 : 커미션이 NA 인 사원들의 이름과 부서위치와 커미션을 출력하시오 !


x <- merge(  emp, dept,  by="deptno")


x[ is.na( x$comm) , c("ename", "loc", "comm") ]


예제 : outer join 으로 이름과 부서 위치를 출력하는데 사원 중 부서 위치가 없더라도 모든 부서 위치 출력


SQL>  select  e.ename,  d.loc

           from   emp  e,  dept   d

           where  e.deptno (+) = d.deptno ;


R>  x <-  merge( emp, dept,  by="deptno", all.y=T)

                         ↑     ↑

                          x      y 

all.x=T : emp 테이블 쪽에 데이터가 모두 나오게 해라

all.y=T : dept 테이블 쪽에 데이터가 모두 나오게 해라

all=T : 양쪽 테이블에 빠지는 데이터 없이 해라



15번째 행을 보면 부서 번호가 40인 사원은 없지만 출력되었다.


예제 : 사원의 이름을 출력하고 그 옆에 자기의 직속 상사의 이름을 출력하시오 !


SQL> select  사원.ename,  관리자.ename

          from    emp   사원,  emp  관리자

          where  사원.mgr = 관리자.empno; 


R> x <-  merge( emp,  emp,  by.x="mgr", by.y="empno")

                         ↑     ↑

                          x      y

emp를 x와 y 두 개로 만들고

x의 mgr과 y의 empno가 같으면 조인시키겠다.


  

R>  x[   ,  c("ename.x",  "ename.y") ] 


예제 : 위의 결과를 다시 출력하는데 자기의 월급이 자기의 직속상사의 월급보다 더 큰 사원들만 출력


x[ x$sal.x > x$sal.y  ,  c("ename.x",  "ename.y") ] 





반응형

'나 취준생 > R' 카테고리의 다른 글

R 막대 그래프  (0) 2021.01.23
R 순위 부여하기  (0) 2021.01.23
R 원형 그래프  (0) 2021.01.23
R 그룹 함수 + 막대 그래프  (0) 2021.01.23
R 함수 [문자 함수, 숫자 함수, 날짜 함수, 변환 함수, 일반 함수]  (0) 2021.01.23