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

[데이터 추출] 비상관 서브쿼리(Uncorrelated Subqueyr) 를 만족하는 데이터 추출 - 비교 연산자(=) - 92

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

포스팅 목차

     

    92. Display ename who are working in sales dept.

     

    * 영업부서(‘SALES’) 부서에서 근무하고 있는 직원의 이름을 출력하시오.


    • Oracle : 비상관 서브쿼리
    • 파이썬 Pandas : iloc[]
    • R 프로그래밍 : 비교 구문
    • R Dplyr Package : dplyr::filter(), pull()
    • R sqldf Package : 비상관 서브쿼리
    • Python pandasql Package : 비상관 서브쿼리
    • R data.table Package : 비교 구문
    • SAS Proc SQL : 비상관 서브쿼리
    • SAS Data Step : Merge 구문, IF 조건문
    • Python Dfply Package : filter_by(), @pipe & Def 사용자 정의 함수
    • 파이썬 Base 프로그래밍 :

     


    1. Oracle(오라클)

    서브쿼리를 사용하여서 dept 테이블에서 영업부서(“SALES”)의 부서 번호를 선택 후 emp 테이블에서 영업부서에서 근무하는 직원의 정보를 출력한다.

     

    Oracle Programming
    select empno, ename 
    from   emp 
    where  deptno=(select deptno from dept where dname='SALES');

     


    2. Python Pandas(파이썬)

    dept 테이블에서 영업 부서(dname = “SALES”)의 부서 코드(“deptno”)를 검색 후 emp 테이블에서 영업 부서(‘10’)에서 근무하는 직원의 정보를 출력한다.

     

    Python Programming
    emp[emp['deptno']== (dept[dept['dname'] == 'SALES']['deptno'].iloc[0]) ][['empno', 'ename']]

     


    Results
    empno ename
    7499 ALLEN
    7521 WARD
    7654 MARTIN
    7698 BLAKE
    7844 TURNER
    7900 JAMES

     


    3. R Programming (R Package)

    dept 테이블에서 영업 부서(dname = “SALES”)의 부서 코드(“deptno”)를 검색 후 emp 테이블에서 영업 부서(‘10’)에서 근무하는 직원의 정보를 출력한다.

     

    R Programming
    %%R
    
    emp[emp$deptno == dept[dept$dname == 'SALES', c("deptno") ]$deptno, c("empno","ename")]

     

    Results
    # A tibble: 6 x 2
      empno ename 
      <dbl> <chr> 
    1  7499 ALLEN 
    2  7521 WARD  
    3  7654 MARTIN
    4  7698 BLAKE 
    5  7844 TURNER
    6  7900 JAMES 

     


    4. R Dplyr Package

    dept 테이블에서 영업 부서(dname = “SALES”)의 부서 코드(“deptno”)를 검색 후 emp 테이블에서 영업 부서(‘10’)에서 근무하는 직원의 정보를 출력한다.

    filter 함수를 사용하여서 emp 테이블의 부서번호(deptno)가 dept 테이블에서 선택된 부서코드에 존재하는지 검색하여 조건에 만족하는 관측치를 선택한다.

     

    R Programming
    %%R
    
    emp %>% dplyr::filter( deptno == ( dept %>%
                                         dplyr::filter(dname == "SALES") %>%
                                         dplyr::select(deptno) %>%
                                         pull(deptno)) ) %>%
      dplyr::select(empno,ename)

     

    Results
    # A tibble: 6 x 2
      empno ename 
      <dbl> <chr> 
    1  7499 ALLEN 
    2  7521 WARD  
    3  7654 MARTIN
    4  7698 BLAKE 
    5  7844 TURNER
    6  7900 JAMES 

     


    5. R sqldf Package

    서브쿼리로 dept 테이블에서 영업부서(“SALES”)의 부서 번호를 선택 후 emp 테이블에서 영업부서에서 근무하는 직원의 정보를 출력한다.

     

    R Programming
    %%R
    
    sqldf("select empno, ename 
           from   emp 
           where  deptno=(select deptno from dept where dname='SALES');")

     

    Results
      empno  ename
    1  7499  ALLEN
    2  7521   WARD
    3  7654 MARTIN
    4  7698  BLAKE
    5  7844 TURNER
    6  7900  JAMES

     


    6. Python pandasql Package

     

    Python Programming
    ps.sqldf("select empno, ename \
              from emp \
              where  deptno=(select deptno from dept where dname='SALES');")

     


    Results
    empno ename
    7499 ALLEN
    7521 WARD
    7654 MARTIN
    7698 BLAKE
    7844 TURNER
    7900 JAMES

     


    7. R data.table Package

    dept 테이블에서 영업 부서(dname = “SALES”)의 부서 코드(“deptno”)를 검색 후 emp 테이블에서 영업 부서(‘10’)에서 근무하는 직원의 정보를 출력한다.

     

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    salgrade_DT <- data.table(salgrade)
    
    # setkey(DT, deptno)
    # setkey(dept_DT, deptno)
    
    DT[DT[,deptno == ( dept_DT[dname == "SALES", .(deptno)]$deptno )], .(empno, ename)]

     

    Results
       empno  ename
    1:  7499  ALLEN
    2:  7521   WARD
    3:  7654 MARTIN
    4:  7698  BLAKE
    5:  7844 TURNER
    6:  7900  JAMES

     


    8. SAS Proc SQL

    서브쿼리를 사용하여서 dept 테이블에서 영업부서(“SALES”)의 부서 번호를 선택 후 emp 테이블에서 영업부서에서 근무하는 직원의 정보를 출력한다.

     

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select empno, ename 
        from   emp 
        where  deptno=(select deptno from dept where dname='SALES');
    QUIT;
    PROC PRINT;RUN;

     


    Results
    empno ename
    7499 ALLEN
    7521 WARD
    7654 MARTIN
    7698 BLAKE
    7844 TURNER
    7900 JAMES

     


    9. SAS Data Step

     

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

     


    Results
    empno ename
    7499 ALLEN
    7521 WARD
    7654 MARTIN
    7698 BLAKE
    7844 TURNER
    7900 JAMES

     


    10. Python Dfply Package

     

    Python Programming
    # [참고] 함수 사용. (52번 예제 참고)
    @pipe
    def pull_fun(df, column=-1):
        return df.loc[:, column].item()
    
    emp >> filter_by (X.deptno == ( dept >> filter_by(X.dname == "SALES") >> \
                                      select(X.deptno)                    >> \
                                      pull_fun("deptno") ) ) >> \
      select(X.empno, X.ename)

     


    Results
    empno ename
    7499 ALLEN
    7521 WARD
    7654 MARTIN
    7698 BLAKE
    7844 TURNER
    7900 JAMES

     

     


     

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

    반응형

    댓글