제21강. 액세스 쿼리-통합쿼리
Q> 두 테이블에 입력된 자료를 하나의 테이블로 저장하려면 어떻게 하나요?
A> 두 테이블을 통합 쿼리로 만든 다음 이를 근거로 테이블 만들기 쿼리를 만드시면 됩니다. |
QBE 쿼리 디자인 창에서 쿼리를 작성하면 그 내용은 SQL 문으로 만들어집니다. 그러나 통합 쿼리, 통과 쿼리, 데이터 정의
쿼리 등은 QBE 디자인 창에서 만들 수 없습니다. SQL 보기창에서 직접 SQL 문을 작성해야 합니다.
통합 쿼리
통합 쿼리는 두 개 이상의 테이블이나 쿼리 테이블로부터 나온 여러 레코드를 하나의 테이블로 결합하여 보여 줍니다.
예를 들어, A가 가지고 있는 회사 주소 테이블과 내가 가지고 있는 회사 주소 테이블이 있을 때 이 두 테이블을 하나로 결합하여
주소테이블을 만들 수 있습니다. 물론 중복된 주소가 있을 경우 중복되는 레코드 중 하나만 포함하도록 할 수도 있고(UNION) 또는
중복된 경우까지 모두 포함할 수도 있습니다(UNION ALL).
다음 SQL문은 UNION 키워드만 사용하여 두 테이블을 통합하되 중복되는 레코드가 있다면 그 중 하나만 포함하도록 하는 내용입니다.
SELECT CompanyName, City
FROM TableA ;
UNION
SELECT CompanyName, City
FROM TableB ;
또는
TABLE TableA
UNION
TABLE TableB
주의]
1) 통합하는 테이블들의 필드 수가 서로 같아야 합니다.

2) 통합질의에서 UNION ALL 대신 UNION만 사용한 경우 메모필드나 OLE 개체필드를 포함하면 오류를 발생합니다.
중복된 레코드를 확인하기 위한 정렬을 하는데 메모필드나, OLE 개체필드, 하이퍼링크 필드는 정렬을 할 수 없는 필드이기
때문입니다.
 
메모필드의 내용이 꼭 필요하면 문자열 조작함수를 사용하여 255글자 이내로 포함할 수 있도록 할 수 있습니다. (
Left([메모필드],255) 와 같이 사용)
또는 UNION 키워드에 ALL을 포함하여 사용하십시오. 단, UNION ALL을 사용하는 경우는 중복된 레코드도 포함된다는
것을 명심하십시오. |
열 제목과 정렬
열 제목 및 기타 필드 속성은 첫 번째 SELECT문에서 결정됩니다. 따라서 열 제목의 경우 두 테이블의 필드명이 틀린 경우는
첫 번째 쿼리문에서 별칭을 사용하는 것이 좋습니다.
레코드 정렬은 마지막 쿼리문 다음에 ORDER BY로 결정하지만 정렬할 필드는 첫 번째 쿼리문에 포함된 필드만 포함할 수 있습니다.
 
SELECT Table1.ID, Table1.매입일
AS 일자, Table.매입금
AS 금액
FROM Table1 ;
UNION ALL
SELECT Table2.ID, Table2.매출일, Table.매출금
FROM Table2 ORDER BY 일자;
테이블을 통합할 때 레코드 출처정보 포함하기
여러 테이블을 통합할 때 출처(또는 소속테이블)에 대한 정보나 서로 다른 조건을 만족하는 자료를 추출하는 경우 그러한 것에 대한
추가 정보가 필요한 경우도 간혹 있습니다. 첫 번째 예의 경우는 대개 초보자들이 테이블을 디자인했을 때 발생하는 경우가 많고 두 번째
경우는 여러 조건을 만족하는 자료를 추출했을 때 조건을 명시하고자 하는 경우입니다.
예들 들어, 여러 사람이 나누어 자료를 입력한 후 통합한다고 합시다. 그런 경우 작성자 정보 필드를 만들고 작성자를 입력해두면
좋은데 그렇지 못했다고 합시다. 사실 이런 일은 테이블디자인을 신경 쓰면 되므로 초보자의 경우에나 볼 수 있는 일이지만 일단 예로
들어 봅니다. 이 경우는 다음과 같이 질의문을 작성하면 되겠습니다.
SELECT tblAngel.*, “Dragon” AS 작성자 FROM
tblDragon
UNION ALL
SELECT tblAngel.*, “Angel” AS 작성자 FROM tblAngel
그러나 바람직한 것은 테이블에 실제 필드를 만들고 값을 업데이트하는 것입니다.
|