[MS오피스] 액세스에서 뷰테이블 만들어 사용하는 방법

folder 프로그래밍 calendar_month web_traffic 4

회사에서 프로젝트성 업무나 간단한 데이터 핸들링을 위해서는 액세스로 데이터베이스를 만들어 적극적으로 활용하고 있습니다.

처음에는 간단하게 만들어서 테스트도 해보고 사용하다가 나중에 규모가 커지면 정식 데이터베이스로 이관해야지~ 하고 있던 것들이 어느새 데이터가 너무 많아져서, 어떤 경우 액세스 DB 파일 자체가 1GB 가 넘어가는 경우가 있더라구요.

그런데 시계열 데이터를 담고 있는 특정 테이블이 담고 있는 레코드가 3백만 개가 넘어가면서 엑셀에서 SELECT 문을 통해 간단한 조건으로 데이터를 조회할 때 일단 테이블 자체를 메모리에 올릴 때 엄청난 시간이 소요되다보니 작업이 너무 진연되는 상황이 발생했고, 이를 해결하기 위해 간단하게 뷰테이블을 만들어서 사용하기로 결정 했습니다.

뷰테이블

뷰테이블을 간단하게 정의하자면, 각 데이터 테이블에서 필요한 정보들을 가져와 다시 구성한 가상의 테이블이라고 생각할 수 있을 것 같습니다.

예를 들어 주가 데이터라고 했을 때, StockPrice 테이블에는 주가의 시계열 데이터가 들어가 있고, StockName 이라는 테이블에는 주식의 이름이 들어가 있으며, 두 테이블에는 공통적으로 StockID 라는 구분자를 통해 각 주식을 구분하고 있다고 해봅시다. 이 상황을 대충 정리하면 아래와 같습니다.

Table Columns
StockPrice [Date], [StockID], [Price]
StockName [StockID], [Name]

자, 여기서 우리가 주가 데이터를 보여주고 싶은데, StockID 만으로는 어떤 주식인지 명확하게 정보 전달이 안되니까 날짜, 주식코드, 주식이름, 주가이렇게 4개의 컬럼으로 표시해주고 싶다면 StockPriceStockName 테이블의 데이터를 알맞게 조합한 뷰테이블을 만들어서 간단하게 해결 할 수 있는 것이죠.

SELECT 
    SP.DATE, 
    SP.STOCKID,
    (SELECT NAME FROM STOCKNAME SN WHERE SN.STOCKID=SP.STOCKID ),
    SP.PRICE
FROM STOCKPRICE SP

(가상으로 만든 쿼리이기 때문에 실제로 작동할지는 의문입니다만, 대충 아~ 이런식이구나~ 라고 생각하면 됩니다.)

위 쿼리를 보시면, 일단 STOCKPRICE 라는 테이블의 데이터를 가져오는데, 중간에 STOCKNAME 에서 STOCKPRICESTOCKID 가 일치하는 데이터의 NAME 데이터를 보여주는 컬럼이 추가된 것을 알 수 있습니다.

이 쿼리로 조회된 데이터는 일반적인 데이터 테이블과 마찬가지로 테이블의 형식을 그대로 가지고 있는 가상의 테이블, 즉, 뷰테이블이라고 여길 수가 있는 것이죠.

액세스에서 뷰테이블 만들기

위 예제에서 우리는 쿼리를 사용해 가상의 뷰테이블을 만드는 방법을 알아보았는데, 이제 다시 제가 처음에 처했던 상황을 해결해 보도록 합시다.

제가 경험했던 문제를 정리하면,

  • 특정 테이블에 너무나 많은 시계열 데이터가 들어 있음
  • 해당 테이블에서 SELECT 문을 실행하기에도 너무 많은 시간이 소요됨
  • 해당 테이블에서 필요한 데이터는 최근 7일치 정도이며 그 이전의 데이터는 필요하지 않음

그렇다면 이를 해결하기 위해 최근 7일치 데이터로 구성된 가상의 테이블을 만들고, 그 가상의 테이블에서 SELECT 문을 실행하면 더 빠르게 작업을 진행할 수 있을 것이라는게 제 생각이었습니다.

액세스에 쿼리 추가

액세스 상단 리본 메뉴

일단 액세스로 DB 파일을 열어둔 상태에서, 리본 메뉴의 만들기를 눌러 보시면 아래에 쿼리 마법사와 쿼리 디자인이 보일 것입니다. 여기서 쿼리 디자인을 눌러줍니다.

그 다음 쿼리를 직관적으로 간단하게 만들 수 있는 “테이블 표시” 뭐 이런 창이 뜨는데, 일단 꺼주세요.

액세스 쿼리 도구 디자인 화면

일단 창이 쿼리 디자인 모드로 켜진 것을 볼 수 있는데, 다시 상단 메뉴를 보면 SQL 보기라는 버튼이 보일 것입니다. 이 버튼을 눌러 보면 우리가 잘 알고 있는 쿼리를 직접 일일이 타이핑에서 작성 할 수 있는 창이 뜹니다.

이제 여기에 직접 가상의 테이블에 들어갈 데이터를 조회(SELECT)하는 쿼리를 작성하고 저장하면 됩니다.

뷰테이블에 들어갈 데이터를 조회해주는 쿼리 작성

위 이미지에서 제가 작성한 쿼리를 보면, STOCKPRICE 라는 테이블의 데이터들 중 DATE 컬럼이 7일 전(DATE()-7)에서 오늘 날짜(DATE()) 사이에 존재하는 것들만 조회하도록 만들었습니다.

이제 다시 상단의 빨간색 느낌표 아이콘이 있는 실행 버튼을 눌러 해당 쿼리가 잘 작동하는지 확인한 후, 쿼리 이름이 표시된 탭을 우클릭해서 쿼리를 저장합니다.

저 같은 경우는 해당 쿼리가 STOCKPRICE 의 뷰테이블이라는 의미로 v_STOCKPRICE 라는 이름으로 쿼리를 저장했습니다.

엑셀에서 데이터 조회

자, 이제 본론으로 다시 돌아와서, 제가 겪었던 문제는 엑셀에서 액세스 DB 의 데이터를 조회 할 때 너무 많은 시간이 소요된 것이었는데 이를 해결하기 위해 뷰테이블(v_STOCKPRICE)을 만들었잖아요.

그래서 원래는, 데이터를 조회 할 때

SELECT * FROM STOCKPRICE WHERE DATE=#2025-02-25#

이렇게 했었다면, 뷰테이블을 활용할 땐 저장된 쿼리 이름을 테이블 이름 처럼 사용해서

SELECT * FROM v_STOCKPRICE WHERE DATE=#2025-02-25#

이렇게 하면 되는 것이죠.

이게 말로 풀어서 쓰려니 굉장히 복잡해 보이는데 간단하게 요약 하자면,

  1. 액세스에서 SELECT 문으로 쿼리를 작성하고 저장
  2. 외부에서 액세스 데이터를 가져올 때 액세스에 저장된 쿼리 이름으로 뷰테이블 처럼 사용

이렇게 되겠습니다.

끝.

댓글 남기기