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

[데이터 필터링 & 서브쿼리] 서브쿼리 기반의 데이터 필터링 - 24 (오라클 SQL, R, Python, SAS)

by 기서무나구물 2021. 8. 6.

포스팅 목차

    24. Display the names of employees who are not working as SALESMAN or CLERK or ANALYST.

     

    * 판매직, 사무직 또는 분석직 이 외의 직원 이름을 출력하시오.


    • Oracle : not in 연산자
    • 파이썬 Pandas : not(~) 연산자, isin() 함수, 슬라이싱(Slicing), .query(), not in 연산자
    • R 프로그래밍 : not(!) 연산자, %in% 연산자, which() 함수, subset() 구문
    • R Dplyr Package : filter() 함수, %in%, %nin% 연산자
    • R sqldf Package : not in 연산자
    • Python pandasql Package : not in 연산자
    • R data.table Package : %in% 연산자
    • SAS Proc SQL : not in 연산자
    • SAS Data Step : not in 연산자
    • Python Dfply Package : filter_by(), mask() 함수, isin() 함수
    • 파이썬 Base 프로그래밍 :

     


    1. 오라클(Oracle)

    • emp테이블에서 not in 연산자를 사용하여서 판매직,사무직,분석직을 제외한 사원 정보를 추출한다.
    Oracle Programming
    select ename from emp 
    where  job not in ('CLERK','SALESMAN','ANALYST');

     


    2. 파이썬(Pandas)

    • 3개 직무에 해당하는 관측치를 제외("~")한 사원 정보를 추출한다.
    Python Programming
    emp[~emp['job'].isin(['CLERK','SALESMAN','ANALYST']) ]

     

    Results
      empno ename job mgr hiredate sal comm deptno
    3 7566 JONES MANAGER 7839.0 1981/04/02 2975 NaN 20
    5 7698 BLAKE MANAGER 7839.0 1981/03/01 2850 NaN 30
    6 7782 CLARK MANAGER 7839.0 1981/01/09 2450 NaN 10
    8 7839 KING PRESIDENT NaN 1981/11/17 5000 NaN 10

     


     

    Python Programming
    emp.loc[(~emp.job.isin(['CLERK','SALESMAN','ANALYST'])) , ["ename"]]

     

    Results
      ename
    3 JONES
    5 BLAKE
    6 CLARK
    8 KING

     


     

    Python Programming
    emp.query('job not in (["CLERK","SALESMAN","ANALYST"])', engine='python')[['ename']]

     

    Results
      ename
    3 JONES
    5 BLAKE
    6 CLARK
    8 KING

     


    3. R Programming (R Package)

    %in% 연산자를 사용하여서 3개 직무에 해당하는 관측치를 1차적으로 선택하고, NOT 연산자 "!"를 사용하여서 3개 직무 이외에 해당하는 관측치를 선택한다.

    R Programming
    %%R
    
    emp[!emp$job %in% c('CLERK','SALESMAN','ANALYST'),"ename"] 

     

    Results
    # A tibble: 4 x 1
      ename
      <chr>
    1 JONES
    2 BLAKE
    3 CLARK
    4 KING 

     


    R Programming
    %%R
    emp[which(!emp$job %in% c('CLERK','SALESMAN','ANALYST')), c("empno","ename") ]

     

    Results
    # A tibble: 4 x 2
      empno ename
      <dbl> <chr>
    1  7566 JONES
    2  7698 BLAKE
    3  7782 CLARK
    4  7839 KING 

     


    R Programming
    %%R
    subset(emp,subset= (!job %in% c('CLERK','SALESMAN','ANALYST')) , select=c(empno,ename) )

     

    Results
    # A tibble: 4 x 2
      empno ename
      <dbl> <chr>
    1  7566 JONES
    2  7698 BLAKE
    3  7782 CLARK
    4  7839 KING 

     


    4. R Dplyr Package

     

    R Programming
    %%R
    
    emp %>% filter( !job %in% c('CLERK','SALESMAN','ANALYST') ) %>% dplyr::select(ename)

     

    Results
    # A tibble: 4 x 1
      ename
      <chr>
    1 JONES
    2 BLAKE
    3 CLARK
    4 KING 

     


    • Hmisc 패키지의 Not In 연산자("%nin%")를 사용하여서 3개 직무를 제외한 사원 정보를 추출한다.
    R Programming
    %%R
    library(Hmisc)
    
    emp %>% filter( job %nin% c('CLERK','SALESMAN','ANALYST') ) %>% dplyr::select(ename)

     

    Results
    # A tibble: 4 x 1
      ename
      <chr>
    1 JONES
    2 BLAKE
    3 CLARK
    4 KING 

     


    5. R sqldf Package

    • not in 연산자를 사용하여서 3개 직무를 제외한 사원 정보를 추출한다.
    R Programming
    %%R
    
    require(sqldf)
    sqldf("select ename from emp where job not in ('CLERK','SALESMAN','ANALYST')")

     

    Results
      ename
    1 JONES
    2 BLAKE
    3 CLARK
    4  KING

     


    6. Python pandasql Package

    • not in 연산자를 사용하여서 3개 직무를 제외한 사원 정보를 추출한다.
    Python Programming
    ps.sqldf("select ename from emp where job not in ('CLERK','SALESMAN','ANALYST')")

     

    Results
      ename
    0 JONES
    1 BLAKE
    2 CLARK
    3 KING

     


    7. R data.table Package

    %in% 연산자를 사용하여서 3개 직무에 해당하는 관측치를 1차적으로 선택하고, NOT 연산자 "!"를 사용하여서 3개 직무를 제외한 관측치를 선택한다.

    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    DT[!(job %in% c("CLERK", "SALESMAN", "ANALYST")), .(ename)]

     

    Results
       ename
    1: JONES
    2: BLAKE
    3: CLARK
    4:  KING

     


    8. SAS Proc SQL

     

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        SELECT A.*
        FROM   EMP A
        where job not in ('CLERK','SALESMAN','ANALYST');
    QUIT;
    PROC PRINT DATA=STATSAS_1;RUN;

     

    Results
    OBS empno ename job mgr hiredate sal comm deptno
    1 7566 JONES MANAGER 7839 1981-04-02 2975 . 20
    2 7698 BLAKE MANAGER 7839 1981-03-01 2850 . 30
    3 7782 CLARK MANAGER 7839 1981-01-09 2450 . 10
    4 7839 KING PRESIDEN . 1981-11-17 5000 . 10

     


    9. SAS Data Step

     

    SAS Programming
    %%SAS sas
    
    DATA STATSAS_2;
     SET EMP;
         where job not in ('CLERK','SALESMAN','ANALYST');
    RUN;
    
    PROC PRINT;RUN;

     

    Results
    OBS empno ename job mgr hiredate sal comm deptno
    1 7566 JONES MANAGER 7839 1981-04-02 2975 . 20
    2 7698 BLAKE MANAGER 7839 1981-03-01 2850 . 30
    3 7782 CLARK MANAGER 7839 1981-01-09 2450 . 10
    4 7839 KING PRESIDEN . 1981-11-17 5000 . 10

     


    10. Python Dfply Package

     

    Python Programming
    emp >> filter_by( ~ X.job.isin(['CLERK','SALESMAN','ANALYST']) )

     

    Results
      empno ename job mgr hiredate sal comm deptno
    3 7566 JONES MANAGER 7839.0 1981/04/02 2975 NaN 20
    5 7698 BLAKE MANAGER 7839.0 1981/03/01 2850 NaN 30
    6 7782 CLARK MANAGER 7839.0 1981/01/09 2450 NaN 10
    8 7839 KING PRESIDENT NaN 1981/11/17 5000 NaN 10

     


     

    Python Programming
    emp >> mask( ~ X.job.isin(['CLERK','SALESMAN','ANALYST']) )

     

    Results
      empno ename job mgr hiredate sal comm deptno
    3 7566 JONES MANAGER 7839.0 1981/04/02 2975 NaN 20
    5 7698 BLAKE MANAGER 7839.0 1981/03/01 2850 NaN 30
    6 7782 CLARK MANAGER 7839.0 1981/01/09 2450 NaN 10
    8 7839 KING PRESIDENT NaN 1981/11/17 5000 NaN 10

     


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

     

    반응형

    댓글