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

[데이터 선택 - OR 연산자] Null 데이터 선택과 Or 연산자 - 10 (오라클 SQL, R, Python, SAS)

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

포스팅 목차

    10. Display names of employees who do not earn any commission.

     

    - 커미션을 받지 않는 직원의 이름을 출력하시오.


    • Oracle : where 구문, is null, Or 연산자
    • 파이썬 Pandas : 슬라이싱(Slicing), .loc, isnull(), Or 연산자(|)
    • R 프로그래밍 : query() 구문, isnull(), Or 연산자(|)
    • R Dplyr Package : 슬라이싱(Slicing), which 구문, Or 연산자(|), is.na
    • R sqldf Package : where 구문, is null, Or 연산자
    • Python pandasql Package : where 구문, is null, Or 연산자
    • R data.table Package : 슬라이싱(Slicing), is.na, Or 연산자
    • SAS Proc SQL : where 구문, Or 연산자
    • SAS Data Step : where 구문, IF 조건문, Or 연산자
    • Python Dfply Package : filter_by, mask 구문, isnull()
    • 파이썬 Base 프로그래밍 :

     


    1. 오라클(Oracle)

    Oracle Programming
    Select empno, ename 
    from   emp 
    where  comm is null or comm=0;

     


    2. 파이썬(Pandas)

    Emp테이블에서 comm 값이 존재하지 않거나(Null) 0인 직원을 선택하고, 해당 사원의 사원번호와 사원명을 출력.

    Python Programming
    emp[ (emp['comm'].isnull()) | (emp['comm'] == 0 )][["empno","ename"]]

     

    Results
      empno ename
    0 7369 SMITH
    3 7566 JONES
    5 7698 BLAKE
    6 7782 CLARK
    7 7788 SCOTT
    8 7839 KING
    9 7844 TURNER
    10 7876 ADAMS
    11 7900 JAMES
    12 7902 FORD
    13 7934 MILLER

     


     

    Python Programming
    emp.loc[(emp.comm.isnull()) | (emp.comm == 0) , ["empno","ename"]]

     

    Results
      empno ename
    0 7369 SMITH
    3 7566 JONES
    5 7698 BLAKE
    6 7782 CLARK
    7 7788 SCOTT
    8 7839 KING
    9 7844 TURNER
    10 7876 ADAMS
    11 7900 JAMES
    12 7902 FORD
    13 7934 MILLER

     


    Emp테이블에서 query구문을 사용하여서 comm 값이 존재하지 않거나(Null) 0인 직원을 선택하고, 해당 사원의 사원번호와 사원명을 출력.

    Python Programming
    # query 구문에서 isnull() / notnull() 구문 사용 : python engine instead of numexpr engin
    
    emp.query('comm.isnull() | comm == 0', engine='python')[["empno","ename"]]

     

    Results
      empno ename
    0 7369 SMITH
    3 7566 JONES
    5 7698 BLAKE
    6 7782 CLARK
    7 7788 SCOTT
    8 7839 KING
    9 7844 TURNER
    10 7876 ADAMS
    11 7900 JAMES
    12 7902 FORD
    13 7934 MILLER

     


    3. R Programming (R Package)

    Emp테이블에서 comm 값이 존재하지 않거나(Null) 0인 직원을 선택하고, 해당 사원의 사원번호와 사원명을 출력.

    R Programming
    %%R
    emp[is.na(emp$comm) | emp$comm == 0 , c("empno","ename") ]

     

    Results
    # A tibble: 11 x 2
       empno ename 
       <dbl> <chr> 
     1  7369 SMITH 
     2  7566 JONES 
     3  7698 BLAKE 
     4  7782 CLARK 
     5  7788 SCOTT 
     6  7839 KING  
     7  7844 TURNER
     8  7876 ADAMS 
     9  7900 JAMES 
    10  7902 FORD  
    11  7934 MILLER

     


    Emp테이블에서 which구문을 사용하여서 comm 값이 존재하지 않거나(Null) 0인 직원을 선택하고, 해당 사원의 사원번호와 사원명을 출력.

    R Programming
    %%R
    emp[which(is.na(emp$comm) | emp$comm == 0), c("empno","ename") ]

     

    Results
    # A tibble: 11 x 2
       empno ename 
       <dbl> <chr> 
     1  7369 SMITH 
     2  7566 JONES 
     3  7698 BLAKE 
     4  7782 CLARK 
     5  7788 SCOTT 
     6  7839 KING  
     7  7844 TURNER
     8  7876 ADAMS 
     9  7900 JAMES 
    10  7902 FORD  
    11  7934 MILLER

     


    4. R Dplyr Package

    Emp테이블에서 filter 구문을 사용하여서 comm 값이 존재하지 않거나(Null) 0인 직원을 선택하고, 해당 사원의 사원번호와 사원명을 출력.

    R Programming
    %%R
    emp %>% filter(is.na(comm) | comm == 0 ) %>% dplyr::select(empno,ename)

     

    Results
    # A tibble: 11 x 2
       empno ename 
       <dbl> <chr> 
     1  7369 SMITH 
     2  7566 JONES 
     3  7698 BLAKE 
     4  7782 CLARK 
     5  7788 SCOTT 
     6  7839 KING  
     7  7844 TURNER
     8  7876 ADAMS 
     9  7900 JAMES 
    10  7902 FORD  
    11  7934 MILLER

     


    5. R sqldf Package

    Emp테이블에서 comm 값이 존재하지 않거나(Null) 0인 직원을 선택하고, 해당 사원의 사원번호와 사원명을 출력.

    R Programming
    %%R
    
    require(sqldf)
    sqldf("Select empno, ename from emp where comm is null or comm=0")

     

    Results
       empno  ename
    1   7369  SMITH
    2   7566  JONES
    3   7698  BLAKE
    4   7782  CLARK
    5   7788  SCOTT
    6   7839   KING
    7   7844 TURNER
    8   7876  ADAMS
    9   7900  JAMES
    10  7902   FORD
    11  7934 MILLER

     


    6. Python pandasql Package

    Emp테이블에서 comm 값이 존재하지 않거나(Null) 0인 직원을 선택하고, 해당 사원의 사원번호와 사원명을 출력.

    Python Programming
    ps.sqldf("Select empno, ename from emp where comm is null or comm=0")

     

    Results
      empno ename
    0 7369 SMITH
    1 7566 JONES
    2 7698 BLAKE
    3 7782 CLARK
    4 7788 SCOTT
    5 7839 KING
    6 7844 TURNER
    7 7876 ADAMS
    8 7900 JAMES
    9 7902 FORD
    10 7934 MILLER

     


    7. R data.table Package

    Emp테이블(DT)에서 comm 값이 존재하지 않거나(Null) 0인 직원을 선택하고, 해당 사원의 사원번호와 사원명을 출력.

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    DT[ is.na(comm) | comm >0 , .( empno, ename )]

     

    Results
        empno  ename
     1:  7369  SMITH
     2:  7499  ALLEN
     3:  7521   WARD
     4:  7566  JONES
     5:  7654 MARTIN
     6:  7698  BLAKE
     7:  7782  CLARK
     8:  7788  SCOTT
     9:  7839   KING
    10:  7876  ADAMS
    11:  7900  JAMES
    12:  7902   FORD
    13:  7934 MILLER

     


    8. SAS Proc SQL

     

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        SELECT EMPNO,ENAME,COMM
        FROM   EMP
        WHERE COMM = . OR COMM=0;
    QUIT;
    PROC PRINT;RUN;

     

    Results
    OBS empno ename comm
    1 7369 SMITH .
    2 7566 JONES .
    3 7698 BLAKE .
    4 7782 CLARK .
    5 7788 SCOTT .
    6 7839 KING .
    7 7844 TURNER 0
    8 7876 ADAMS .
    9 7900 JAMES .
    10 7902 FORD .
    11 7934 MILLER .

     


    9. SAS Data Step

     

    SAS Programming
    %%SAS sas
    
    DATA STATSAS_2;
     SET EMP;
         KEEP EMPNO ENAME COMM;
         WHERE COMM = . OR COMM=0;
    RUN;
    PROC PRINT;RUN;

     

    Results
    OBS empno ename comm
    1 7369 SMITH .
    2 7566 JONES .
    3 7698 BLAKE .
    4 7782 CLARK .
    5 7788 SCOTT .
    6 7839 KING .
    7 7844 TURNER 0
    8 7876 ADAMS .
    9 7900 JAMES .
    10 7902 FORD .
    11 7934 MILLER .

     


    10. Python Dfply Package

    Or 연산자 좌우조건에 괄호()로 넣어줘야 에러 발생 안 함.

    Python Programming
    emp >> filter_by( (X.comm.isnull()) | (X.comm == 0) ) >> select(X.empno, X.ename) >> head(5)

     

    Results
      empno ename
    0 7369 SMITH
    3 7566 JONES
    5 7698 BLAKE
    6 7782 CLARK
    7 7788 SCOTT

     


     

    Python Programming
    emp >> mask( (X.comm.isnull()) | (X.comm == 0) ) >> select(X.empno, X.ename) >> head(5)

     

    Results
      empno ename
    0 7369 SMITH
    3 7566 JONES
    5 7698 BLAKE
    6 7782 CLARK
    7 7788 SCOTT

     


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

     

    반응형

    댓글