ch0nny_log

[빅데이터분석] R _ 30. 서브쿼리 본문

빅데이터 분석(with 아이티윌)/R

[빅데이터분석] R _ 30. 서브쿼리

chonny 2024. 7. 1. 12:02
※ 서브쿼리
1. SQL
1. single row subquery 서브쿼리에서 메인 쿼리로 하나의 값이 리턴되는 경우
2. multiple row subquery 서브쿼리에서 메인 쿼리로 여러의 값이 리턴되는 경우
3. multiple column subquery 서브쿼리에서 메인쿼리로 여러개의 컬럼값들이  리턴되는 경우
문제1. 아래의 sql을 r로 구현하시오
1) SQL
select ename, sal
	from emp
    where sal >(select sal 
    				from emp
                    where ename ='JONES';​


2) R

jones_sal <- emp[emp$ename =='JONES', c('sal')]
emp[emp$sal> jones_sal , c('ename','sal')]
문제2. 아래의 sql을 r로 구현하시오
1) SQL
select ename, sal
	from emp
    where sal =(select max(sal)
    				from emp);​
2) R
max_sal <- max(emp$sal)
emp[emp$sal == max_sal, c('ename','sal')]​

문제3. 아래의 sql을 r로 구현하시오
1) SQL
select ename, sal, deptno
	from emp
    where deptno in (select deptno
    					from emp
                        where job ='SALESMAN');​

2) R

job_sales <- emp[emp$job =='SALESMAN', c('deptno')]
emp[emp$deptno %in% job_sales , c('ename','sal','deptno')]
문제4. 아래의 sql을 r로 구현하시오
1) SQL
select ename
		from emp
        where empno in (select mgr 
        					from emp);​
2) R
 a <- emp[ emp$empno  %in%  emp$mgr, c("ename") ]
    library(data.table)
    data.table(이름=a)​
문제5. 전국에서 등록금이 가장 비싼 학교이름, 등록금을 출력하여 제출하시오 
tut <- read.csv("tut.csv", header=T, fileEncoding = "euc-kr")
colnames(tut)
max_tut <- max(tut$`평균등록금.원.`)
tut[ tut$`평균등록금.원.`== max_tut, c("대학명","평균등록금.원.")]​
문제6. 아래의 sql을 r로 구현하시오 (multiple column subquery)

1) SQL
select ename, sal, job
	from emp
    where deptno in (select deptno
    					from emp
                        where comm is not null)
                        
             and job in(select job
             				from emp
                            where comm is not null);​
2) R
sub1 <- emp[!is.na(emp$comm),c('deptno')]
sub2 <- emp[!is.na(emp$comm),c('job')]

emp[(emp$deptno %in% sub1)&(emp$job %in% sub2),c('ename','sal','job')]​

문제7. 아래의 sql을 r로 구현하시오 
1) SQL 
select ename,sal
	from emp
    where empno not in (select mgr
    						from emp
                            where mgr is not null);​
2) R
emp[!(emp$empno %in% emp$mgr), c('ename','sal')]​