[MS오피스] 액세스에서 뷰테이블 만들어 사용하는 방법
회사에서 프로젝트성 업무나 간단한 데이터 핸들링을 위해서는 액세스로 데이터베이스를 만들어 적극적으로 활용하고 있습니다.
처음에는 간단하게 만들어서 테스트도 해보고 사용하다가 나중에 규모가 커지면 정식 데이터베이스로 이관해야지~ 하고 있던 것들이 어느새 데이터가 너무 많아져서, 어떤 경우 액세스 DB 파일 자체가 1GB 가 넘어가는 경우가 있더라구요.
그런데 시계열 데이터를 담고 있는 특정 테이블이 담고 있는 레코드가 3백만 개가 넘어가면서 엑셀에서 SELECT
문을 통해 간단한 조건으로 데이터를 조회할 때 일단 테이블 자체를 메모리에 올릴 때 엄청난 시간이 소요되다보니 작업이 너무 진연되는 상황이 발생했고, 이를 해결하기 위해 간단하게 뷰테이블을 만들어서 사용하기로 결정 했습니다.
뷰테이블
뷰테이블을 간단하게 정의하자면, 각 데이터 테이블에서 필요한 정보들을 가져와 다시 구성한 가상의 테이블이라고 생각할 수 있을 것 같습니다.
예를 들어 주가 데이터라고 했을 때, StockPrice
테이블에는 주가의 시계열 데이터가 들어가 있고, StockName
이라는 테이블에는 주식의 이름이 들어가 있으며, 두 테이블에는 공통적으로 StockID
라는 구분자를 통해 각 주식을 구분하고 있다고 해봅시다. 이 상황을 대충 정리하면 아래와 같습니다.
Table | Columns |
---|---|
StockPrice | [Date], [StockID], [Price] |
StockName | [StockID], [Name] |
자, 여기서 우리가 주가 데이터를 보여주고 싶은데, StockID
만으로는 어떤 주식인지 명확하게 정보 전달이 안되니까 날짜, 주식코드, 주식이름, 주가
이렇게 4개의 컬럼으로 표시해주고 싶다면 StockPrice
와 StockName
테이블의 데이터를 알맞게 조합한 뷰테이블을 만들어서 간단하게 해결 할 수 있는 것이죠.
SELECT
SP.DATE,
SP.STOCKID,
(SELECT NAME FROM STOCKNAME SN WHERE SN.STOCKID=SP.STOCKID ),
SP.PRICE
FROM STOCKPRICE SP
(가상으로 만든 쿼리이기 때문에 실제로 작동할지는 의문입니다만, 대충 아~ 이런식이구나~ 라고 생각하면 됩니다.)
위 쿼리를 보시면, 일단 STOCKPRICE
라는 테이블의 데이터를 가져오는데, 중간에 STOCKNAME
에서 STOCKPRICE
와 STOCKID
가 일치하는 데이터의 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#
이렇게 하면 되는 것이죠.
이게 말로 풀어서 쓰려니 굉장히 복잡해 보이는데 간단하게 요약 하자면,
- 액세스에서
SELECT
문으로 쿼리를 작성하고 저장 - 외부에서 액세스 데이터를 가져올 때 액세스에 저장된 쿼리 이름으로 뷰테이블 처럼 사용
이렇게 되겠습니다.
끝.