본문 바로가기
통계프로그램 비교 시리즈/프로그래밍비교(Oracle,Python,R,SAS)

[데이터 추출] 내부 조인(Inner Join)을 만족하는 데이터 추출 - 91

by 기서무나구물 2022. 9. 27.

포스팅 목차

     

    91. Display all employees with there dept name.

     

    * 부서명과 해당 부서에서 근무하는 직원의 이름을 출력하시오.


    • Oracle : 내부조인
    • 파이썬 Pandas : pd.merge()
    • R 프로그래밍 : base::merge()
    • R Dplyr Package : dplyr::inner_join()
    • R sqldf Package : 내부조인
    • Python pandasql Package : 내부조인
    • R data.table Package : DT syntax 방식, data.table::merge() 방식
    • SAS Proc SQL : 내부조인
    • SAS Data Step : Merge 구문, IF 조건문
    • Python Dfply Package : inner_join()
    • 파이썬 Base 프로그래밍 :

     


    1. Oracle(오라클)

    사원정보가 포함된 emp테이블과 부서 정보를 관리하는 dept 테이블을 내부조인(Inner Join)하여서 부서명과 해당 부서의 사원이름을 함께 출력한다.

     

    Oracle Programming
    select ename, dname 
    from   emp e, dept d 
    where  e.deptno = d.deptno;

     


    2. Python Pandas(파이썬)

    사원정보가 포함된 emp테이블과 부서 정보를 관리하는 dept 테이블을 merge() 함수를 이용하여 내부조인(Inner Join)을 수행하여서 부서명과 해당 부서의 사원이름을 함께 출력한다.

     

    Python Programming
    pd.merge(emp, dept, how='inner', left_on=['deptno'], right_on=['deptno'])[['ename','dname']].head(7)

     


    Results
    ename dname
    SMITH RESEARCH
    JONES RESEARCH
    SCOTT RESEARCH
    ADAMS RESEARCH
    FORD RESEARCH
    ALLEN SALES
    WARD SALES

     


    3. R Programming (R Package)

    사원정보가 포함된 emp테이블과 부서 정보를 관리하는 dept 테이블을 merge() 함수를 이용하여서 내부조인(Inner Join)을 수행하여 부서명과 해당 부서의 사원이름을 함께 출력한다.

     

    R Programming
    %%R
    
    base::merge(emp,dept,by.x=c("deptno"),by.y=c("deptno"),all=F)[c('ename','dname')][1:10, ]

     

    Results
        ename      dname
    1   CLARK ACCOUNTING
    2    KING ACCOUNTING
    3  MILLER ACCOUNTING
    4   SMITH   RESEARCH
    5   ADAMS   RESEARCH
    6   JONES   RESEARCH
    7    FORD   RESEARCH
    8   SCOTT   RESEARCH
    9   ALLEN      SALES
    10  BLAKE      SALES

     


    4. R Dplyr Package

    사원정보가 포함된 emp테이블과 부서 정보를 관리하는 dept 테이블을 inner_join() 함수를 통하여 내부조인(Inner Join)을 수행하여 부서명과 해당 부서의 사원이름을 함께 출력한다.

     

    R Programming
    %%R
    
    emp %>%
      dplyr::inner_join(dept, by = "deptno") %>%
      dplyr::select(ename,dname) %>%
      head(10)

     

    Results
    # A tibble: 10 x 2
       ename  dname     
       <chr>  <chr>     
     1 SMITH  RESEARCH  
     2 ALLEN  SALES     
     3 WARD   SALES     
     4 JONES  RESEARCH  
     5 MARTIN SALES     
     6 BLAKE  SALES     
     7 CLARK  ACCOUNTING
     8 SCOTT  RESEARCH  
     9 KING   ACCOUNTING
    10 TURNER SALES     

     


    5. R sqldf Package

    사원정보가 포함된 emp테이블과 부서 정보를 관리하는 dept 테이블을 내부조인(Inner Join)하여서 부서명과 해당 부서의 사원이름을 함께 출력한다.

     

    R Programming
    %%R
    
    sqldf(" select ename, dname 
            from   emp e, dept d 
            where  e.deptno = d.deptno;") %>% head(10)

     

    Results
        ename      dname
    1   SMITH   RESEARCH
    2   ALLEN      SALES
    3    WARD      SALES
    4   JONES   RESEARCH
    5  MARTIN      SALES
    6   BLAKE      SALES
    7   CLARK ACCOUNTING
    8   SCOTT   RESEARCH
    9    KING ACCOUNTING
    10 TURNER      SALES

     


    6. Python pandasql Package

    사원정보가 포함된 emp테이블과 부서 정보를 관리하는 dept 테이블을 내부조인(Inner Join)하여서 부서명과 해당 부서의 사원이름을 함께 출력한다.

     

    Python Programming
    ps.sqldf("select emp.ename, dept.dname \
              from emp , dept \
              where emp.deptno = dept.deptno").head(7)

     


    Results
    ename dname
    SMITH RESEARCH
    ALLEN SALES
    WARD SALES
    JONES RESEARCH
    MARTIN SALES
    BLAKE SALES
    CLARK ACCOUNTING

     


    7. R data.table Package

    사원정보가 포함된 emp테이블과 부서 정보를 관리하는 dept 테이블을 DT syntax 를 통하여 내부조인(Inner Join)을 수행하여 부서명과 해당 부서의 사원이름을 함께 출력한다.

     

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    salgrade_DT <- data.table(salgrade)
    
    DT[dept_DT, nomatch=NULL, on = "deptno",.(ename,dname)][1:10, ]

     

    Results
         ename      dname
     1:  CLARK ACCOUNTING
     2:   KING ACCOUNTING
     3: MILLER ACCOUNTING
     4:  SMITH   RESEARCH
     5:  JONES   RESEARCH
     6:  SCOTT   RESEARCH
     7:  ADAMS   RESEARCH
     8:   FORD   RESEARCH
     9:  ALLEN      SALES
    10:   WARD      SALES

     


    사원정보가 포함된 emp테이블과 부서 정보를 관리하는 dept 테이블을 DT syntax 를 통하여 내부조인(Inner Join)을 수행하여 부서명과 해당 부서의 사원이름을 함께 출력한다. 조인 key 값(‘deptno’)을 사전에 설정하여서 별도의 Key(on=)을 지정하지 않고 조인 기능 수행.

     

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    setkey(DT, deptno)
    setkey(dept_DT, deptno)
    
    DT[dept_DT, nomatch=NULL,.(ename,dname)][1:10, ]

     

    Results
         ename      dname
     1:  CLARK ACCOUNTING
     2:   KING ACCOUNTING
     3: MILLER ACCOUNTING
     4:  SMITH   RESEARCH
     5:  JONES   RESEARCH
     6:  SCOTT   RESEARCH
     7:  ADAMS   RESEARCH
     8:   FORD   RESEARCH
     9:  ALLEN      SALES
    10:   WARD      SALES

     


    사원정보가 포함된 emp테이블과 부서 정보를 관리하는 dept 테이블을 data.table::merge() 를 통하여 내부조인(Inner Join)을 수행하여 부서명과 해당 부서의 사원이름을 함께 출력한다.

     

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    merge(DT, dept_DT,
          by.x=c("deptno"),
          by.y=c("deptno"),all=F)[,.(ename,dname)][1:10, ]

     

    Results
         ename      dname
     1:  CLARK ACCOUNTING
     2:   KING ACCOUNTING
     3: MILLER ACCOUNTING
     4:  SMITH   RESEARCH
     5:  JONES   RESEARCH
     6:  SCOTT   RESEARCH
     7:  ADAMS   RESEARCH
     8:   FORD   RESEARCH
     9:  ALLEN      SALES
    10:   WARD      SALES

     


    8. SAS Proc SQL

    사원정보가 포함된 emp테이블과 부서 정보를 관리하는 dept 테이블을 내부조인(Inner Join)하여서 부서명과 해당 부서의 사원이름을 함께 출력한다.

     

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select ename, dname 
        from   emp e, dept d 
        where e.deptno = d.deptno;;
    QUIT;
    PROC PRINT data=STATSAS_1(obs=3);RUN;

     


    Results
    ename dname
    SMITH RESEARCH
    ALLEN SALES
    WARD SALES

     


    9. SAS Data Step

    사원정보가 포함된 emp테이블과 부서 정보를 관리하는 dept 테이블을 좌우결합(Merge - Inner Join 방식)하여서 부서명과 해당 부서의 사원이름을 함께 출력한다.

     

    SAS Programming
    %%SAS sas
    
    PROC SORT DATA=emp OUT=EMP_1;
         BY deptno;
    RUN;
    
    PROC SORT DATA=dept OUT=dept_2 NODUPKEY;
         BY deptno;
    RUN;
    
    DATA STATSAS_2;
     MERGE EMP_1(IN=A) dept_2(IN=B);
         BY deptno;
         IF A AND B THEN OUTPUT;
         keep ename dname;
    RUN;
    PROC PRINT data=STATSAS_2(obs=3);RUN;
     

    Results
    ename dname
    CLARK ACCOUNTING
    KING ACCOUNTING
    MILLER ACCOUNTING

     


    10. Python Dfply Package

     

    Python Programming
    emp >> \
      inner_join(dept, by = "deptno") >> \
      select(X.ename,X.dname) >> \
      head()

     


    Results
    ename dname
    SMITH RESEARCH
    JONES RESEARCH
    SCOTT RESEARCH
    ADAMS RESEARCH
    FORD RESEARCH

     


    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE]   SQL EMP 예제로 만나는 테이블 데이터 전처리 방법 리스트

    반응형

    댓글