본문 바로가기

배우기/복습노트[R과 분석]

[복습] R(programming language)에서 SQL 작성하기(sqldf 패키지)

728x90
반응형

R 내부에서 SQL을 사용하여 데이터 처리를 도와주는 패키지/함수명이 sqldf 이다.

SQLite 문법을 사용하기 때문에 Oracle의 함수가 작동되지 않는다(decode 등). 

그러나 Oracle join문법을 지원하며 ANSI 표준도 당연히 지원된다.

 

https://metime.tistory.com/120

 

[복습] R(programming language) R의 join + 복습후기(20231127)

우선 join이란 참조 테이블에 참조 조건을 걸어 값을 가져오는 행위이다. join 메커니즘은 아래와 같다. step 1) 원본 table에서 참조 조건을 걸 대상(상수) 선택 step 2) 참조 table에서 참조 대상과의 조

metime.tistory.com

이 게시물에서 한번 다룬 적이 있으나 오늘 선생님께서 한번 더 알려주셨으나 다시 한번 정리!

 

 

첫 실행 시 install.packages('sqldf')

새 세션에서 사용할 때마다 library(sqldf)

실행해주면 된다.

 

예제를 하나 풀어보자.

emp데이터를 이용하여 10번 부서원의 이름, 급여, 부서번호를 출력하여라.

 

 

이번엔 SMITH의 이름, 급여를 출력하여라.

sqldf 함수 안에 원래는 작은따옴표 하나를 사용하여 쿼리를 작성하면 되는데 나는 쌍따옴표를 사용하였다. 왜냐하면 SMITH라는 문자를 where절에서 선택할 때 작은따옴표를 사용하게되기 때문이다.

만일 쿼리 작성시에도 작은 따옴표를 사용하게 되면  SMITH를 불러오는 곳에서 에러가 발생한다.

쿼리문도 작은 따옴표를 써야겠다면 다음과 같은 방법을 사용할 수 있다.

이스케이프를 사용하여 작은따옴표를 사용하였다.

 

 

이번엔 join 예시를 풀어보자.

student와 professor를 join하여 각 학생의 이름, 교수 이름을 출력하여라.

학생은 20명인데 15명이 출력되었다. inner join이 기본이기 때문이다.

그리고 Line 8처럼 Alias도 된다.

 

이번엔 outer join을 이용하여 20명의 학생을 모두 출력하여보자. 즉 담당교수가 없는 경우이다.

위의 에러에서도 알 수 있듯이 oracle 표준의 outer join은 지원하지 않는다.

ANSI 표준으로만 outer join을 사용할 수 있다.

 

RDBMS마다 ANSI 표준을 지원하고 있기 때문에 select절에 대한 6개 구문은 달라지지 않으나 함수는 달라진다.

함수의 이름이나 사용법이 RDBMS마다 조금씩 다르나, 그 중에 가장 DBMS마다 완전히 달라지는 함수는 날짜함수이다.

 

우선 먼저 SQLite는 dual 생략이 가능하다. dual은 oracle문법이다.

따라서 날짜를 출력할 때 from dual을 하지 않아도 된다.

 

oracle에서는 select sysdate 라고 하면 되지만 SQLite에서는 아래와 같이 작성할 수 있다.

Line 1 은 UTC(협정세계시) 이고, Line 4는 KST(로컬기준)이다.

 

 

연습문제를 하나 풀어보자.

emp2, p_grade 데이터를 사용하여 각 직원의 나이 기준 예상 직급을 각 직원의 이름과 현재 직급과 함께 출력하여라.

단, 예상 직급이 없는 직원도 출력하여라.

 

 

나는 처음에 sol 2로 풀었고 그 다음에 sol 1로 접근하였다.

 

728x90
반응형