포스팅 목차
58. Display the employee names who are working in accountings dept
* 회계부서에서 근무하고 있는 직원들의 이름을 출력하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- [데이터 추출] 비상관 서브쿼리(Uncorrelated Subqueyr) 를 만족하는 데이터 추출 - 비교연산자
|
1. Oracle(오라클)
서브쿼리로 dept 테이블에서 회계부서("ACCOUNTING")의 부서 번호를 선택 후 emp 테이블에서 회계부서에서 근무하는 직원의 정보를 출력한다.
Oracle Programming |
select *
from emp
where deptno = (select deptno from dept where dname='ACCOUNTING');
- IN 구문과 비상관 서브쿼리
Oracle Programming |
select *
from emp
where deptno in (select deptno from dept where dname='ACCOUNTING')
2. Python Pandas(파이썬)
- dept 테이블에서 회계 부서(dname = "ACCOUNTING")의 부서 코드("deptno")를 검색 후 emp 테이블에서 회계 부서('10')에서 근무하는 직원의 정보를 출력한다.
- isin 함수를 사용하여서 emp 테이블의 부서번호(deptno)가 dept 테이블에서 선택된 부서코드에 존재하는지 검색한다.
Python Programming |
emp[emp['deptno'].isin(dept[dept['dname'] == 'ACCOUNTING']['deptno']) ]
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
6 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 |
8 | 7839 | KING | PRESIDENT | NaN | 1981/11/17 | 5000 | NaN | 10 |
13 | 7934 | MILLER | CLERK | 7782.0 | 1982/01/23 | 1300 | NaN | 10 |
Python Programming |
emp[emp['deptno'].isin(dept.query('dname == "ACCOUNTING"')["deptno"]) ]
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
6 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 |
8 | 7839 | KING | PRESIDENT | NaN | 1981/11/17 | 5000 | NaN | 10 |
13 | 7934 | MILLER | CLERK | 7782.0 | 1982/01/23 | 1300 | NaN | 10 |
3. R Programming (R Package)
- dept 테이블에서 회계 부서(dname = "ACCOUNTING")의 부서 코드("deptno")를 검색 후 emp 테이블에서 회계 부서('10')에서 근무하는 직원의 정보를 출력한다.
- %in% 함수를 사용하여서 emp 테이블의 부서번호(deptno)가 dept 테이블에서 선택된 부서코드에 존재하는지 검색한다.
R Programming |
%%R
emp[emp$deptno %in% dept[dept$dname == 'ACCOUNTING', c("deptno") ],"ename"]
Results |
# A tibble: 3 x 1
ename
<chr>
1 CLARK
2 KING
3 MILLER
4. R Dplyr Package
- dept 테이블에서 회계 부서(dname = "ACCOUNTING")의 부서 코드("deptno")를 검색 후 emp 테이블에서 회계 부서('10')에서 근무하는 직원의 정보를 출력한다.
- filter 함수를 사용하여서 emp 테이블의 부서번호(deptno)가 dept 테이블에서 선택된 부서코드에 존재하는지 검색한다.
R Programming |
%%R
emp %>% dplyr::filter( deptno %in% ( dept %>% dplyr::filter(dname == "ACCOUNTING") %>%
dplyr::select(deptno) ) )
Results |
# A tibble: 3 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
2 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10
3 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
5. R sqldf Package
서브쿼리로 dept 테이블에서 회계부서("ACCOUNTING")의 부서 번호를 선택 후 emp 테이블에서 회계부서에서 근무하는 직원의 정보를 출력한다.
R Programming |
%%R
sqldf("select ename from emp
where deptno = (select deptno from dept where dname='ACCOUNTING');")
Results |
ename
1 CLARK
2 KING
3 MILLER
- IN 구문과 비상관 서브쿼리
R Programming |
%%R
sqldf(" select ename from emp
where deptno in (select deptno from dept where dname='ACCOUNTING')")
Results |
ename
1 CLARK
2 KING
3 MILLER
6. Python pandasql Package
- 비상관 서브쿼리
Python Programming |
ps.sqldf(" select ename from emp \
where deptno = (select deptno from dept where dname='ACCOUNTING')")
Results |
ename | |
0 | CLARK |
1 | KING |
2 | MILLER |
- IN 구문과 비상관 서브쿼리
Python Programming |
ps.sqldf(" select ename from emp \
where deptno in (select deptno from dept where dname='ACCOUNTING')")
Results |
ename | |
0 | CLARK |
1 | KING |
2 | MILLER |
7. R data.table Package
- 데이터 추출(Subset)
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
DT[ deptno %in% dept_DT[dname == "ACCOUNTING", .(deptno)]]
Results |
empno ename job mgr hiredate sal comm deptno
1: 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
2: 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10
3: 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
dept 테이블에서 회계부서("ACCOUNTING")의 부서 번호를 테이블로 선택 후 emp 테이블과 내부조인(DT syntax)을 수행하여서 회계부서에서 근무하는 직원의 정보를 출력한다.
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
DT[ dept_DT[dname == "ACCOUNTING", .(deptno)] , on=c("deptno")]
Results |
empno ename job mgr hiredate sal comm deptno
1: 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
2: 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10
3: 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
8. SAS Proc SQL
- 비상관 서브쿼리
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select ename
from emp
where deptno = (select deptno from dept where dname='ACCOUNTING');
QUIT;
PROC PRINT;RUN;
Results |
OBS | ename |
1 | CLARK |
2 | KING |
3 | MILLER |
- IN 구문과 비상관 서브쿼리
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select ename
from emp
where deptno in (select deptno from dept where dname='ACCOUNTING');
QUIT;
PROC PRINT;RUN;
Results |
OBS | ename |
1 | CLARK |
2 | KING |
3 | MILLER |
9. SAS Data Step
- 데이터 Merge
SAS Programming |
%%SAS sas
PROC SORT DATA=EMP OUT=EMP_1;
BY deptno;
RUN;
DATA STATSAS_3;
MERGE EMP_1(IN=A) dept(where=(dname='ACCOUNTING') IN=B);
BY deptno;
IF A AND B;
RUN;
PROC PRINT;RUN;
Results |
OBS | empno | ename | job | mgr | hiredate | sal | comm | deptno | dname | loc |
1 | 7782 | CLARK | MANAGER | 7839 | 1981-01-09 | 2450 | . | 10 | ACCOUNTING | NEW YORK |
2 | 7839 | KING | PRESIDEN | . | 1981-11-17 | 5000 | . | 10 | ACCOUNTING | NEW YORK |
3 | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300 | . | 10 | ACCOUNTING | NEW YORK |
10. Python Dfply Package
- FIlter_by() 함수
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 == "ACCOUNTING") >> select(X.deptno) >> pull_fun("deptno") ) )
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
6 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 |
8 | 7839 | KING | PRESIDENT | NaN | 1981/11/17 | 5000 | NaN | 10 |
13 | 7934 | MILLER | CLERK | 7782.0 | 1982/01/23 | 1300 | NaN | 10 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트
반응형
댓글