경우에 따라 한 테이블 또는 쿼리의 레코드를 하나 이상의 다른 테이블의 레코드와 결합하여 단일 결과로 만들 수 있습니다. 이것이 Access에서 통합 쿼리가 수행하는 작업입니다.
통합 쿼리를 효과적으로 이해하려면 먼저 Access에서 기본 선택 쿼리를 디자인하는 방법을 익혀야 합니다. 선택 쿼리 디자인에 대한 자세한 내용은 단순 선택 쿼리 만들기를 참조하세요.
작업 통합 쿼리 예제 학습
이전에 통합 쿼리를 만들어 본 적이 없는 경우 먼저 Northwind Access 서식 파일에서 작업 예제를 살펴보는 것이 도움이 될 수 있습니다. 새로 만들기 파일을> 선택하여 Access의 시작 페이지에서 Northwind 샘플 템플릿을 검색할 수있습니다. Northwind 샘플 템플릿에서 직접 복사본을 다운로드할 수도 있습니다.
Access에서 Northwind 데이터베이스를 연 후 처음 나타나는 로그인 대화 상자를 닫은 다음 탐색 창을 확장합니다. 탐색 창의 위쪽을 선택한 다음 개체 형식을 선택하여 모든 데이터베이스 개체를 유형별로 구성합니다. 다음으로 , 쿼리 그룹을 확장하면 제품 트랜잭션이라는 쿼리가 표시됩니다.
통합 쿼리는 두 집합의 통합 집합을 나타내는 두 개의 뒤얽힌 원과 비슷한 특별한 아이콘이 있기 때문에 다른 쿼리 개체와 쉽게 구별할 수 있습니다.
일반 선택 및 작업 쿼리와 달리 테이블은 공용 구조체 쿼리에서 관련되어 있지 않습니다. 즉, Access 그래픽 쿼리 디자이너를 사용하여 통합 쿼리를 작성하거나 편집할 수 없습니다. 탐색 창에서 통합 쿼리를 열면 Access에서 열리고 결과가 데이터시트 보기에 표시됩니다.
홈 탭의 보기에서 통합 쿼리로 작업할 때는 디자인 보기를 사용할 수 없습니다.
데이터시트 보기와 SQL 보기 사이에만 전환할 수 있습니다.
이 통합 쿼리 예제에 대한 연구를 계속하려면 홈>보기>SQL 보기 를 클릭하여 이를 정의하는 구문을 보십시오 SQL . 이 그림에서는 통합 쿼리를 구성하는 다양한 부분을 쉽게 볼 수 있도록 공백 SQL 을 추가했습니다.
Northwind 데이터베이스의 이 공용 구조체 쿼리 구문을 자세히 살펴보겠습니다 SQL .
SELECT [Product ID], [Order Date], [Company Name], [Transaction], [Quantity]
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity]
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
이 SQL 문의 첫 번째 및 세 번째 요소는 기본적으로 두 개의 선택 쿼리입니다. 이러한 쿼리는 두 개의 레코드 집합(Product Orders 테이블과 Product Purchases 테이블의 레코드 집합 하나씩)을 검색합니다.
이 SQL 문의 두 번째 부분은 UNION Access에 이 두 레코드 집합을 결합하도록 지시하는 키워드(keyword)입니다.
이 SQL 명령문의 마지막 부분은 명령문을 사용하여 결합된 레코드의 순서를 결정합니다 ORDER BY . 이 예제에서는 주문 날짜 필드를 기준으로 모든 레코드를 내림차순으로 정렬합니다.
참고
통합 쿼리는 Access에서 항상 읽기 전용입니다. 데이터시트 보기에서 값을 변경할 수 없습니다.
선택 쿼리를 만들고 결합하여 통합 쿼리 만들기
SQL 뷰에서 직접 구문을 SQL 작성하여 통합 쿼리를 만들 수 있지만 선택 쿼리를 사용하여 부분적으로 작성하는 것이 더 쉬울 수 있습니다. 그런 다음 SQL 요소를 복사하여 결합된 통합 쿼리에 붙여넣을 수 있습니다.
단계를 확인을 건너뛰고 예제를 보려면 다음 섹션 통합 쿼리 작성 예제 보기를 참조하세요.
- 만들기 탭의 쿼리 그룹에서 쿼리 디자인을 클릭합니다.
- 포함할 필드가 있는 테이블을 두 번 클릭합니다. 해당 테이블이 쿼리 디자인 창에 추가됩니다.
- 쿼리 디자인 창에서 포함할 각 필드를 두 번 클릭합니다. 필드를 선택할 때 다른 선택 쿼리에 추가하는 것과 동일한 수의 필드를 동일한 순서로 추가해야 합니다. 필드의 데이터 형식에 주의를 기울이고 결합하는 다른 쿼리에서 같은 위치에 있는 필드와 호환되는 데이터 형식이 있는지 확인합니다. 예를 들어 첫 번째 선택 쿼리에 5개의 필드가 있고 첫 번째는 날짜/시간 데이터를 포함하는 경우 결합하는 다른 각 선택 쿼리에도 5개의 필드가 있고 첫 번째 필드에는 날짜/시간 데이터가 포함되어 있는지 확인합니다.
- 원하는 경우 필드 눈금의 조건 행에 적절한 표현을 입력하여 필드에 조건을 추가합니다.
- 필드 및 필드 조건을 모두 추가했으면 선택 쿼리를 실행하고 결과를 검토합니다. 디자인 탭의 결과 그룹에서 실행을 클릭합니다.
- 해당 쿼리가 디자인 보기로 전환됩니다.
- 선택 쿼리를 저장하고 그대로 열어 둡니다.
- 결합하려는 각 선택 쿼리에 대해 이 절차를 반복합니다.
이제 선택 쿼리를 만들었으므로 결합할 차례입니다. 이 단계에서는 문을 복사하여 붙여 넣 SQL 어 공용 쿼리를 만듭니다.
- 만들기 탭의 쿼리 그룹에서 쿼리 디자인을 클릭합니다.
- 디자인 탭의 쿼리 그룹에서 통합을 클릭합니다. Access에서 쿼리 디자인 창을 숨기고 SQL 보기 개체 탭을 표시합니다. 이 시점에서 탭은 비어 있습니다.
- 통합 쿼리에 결합하려는 첫 번째 선택 쿼리의 탭을 클릭합니다.
- 홈 탭에서SQL 보기보기>를 클릭합니다.
- 선택 쿼리에 대한 문을 복사
SQL합니다. 이전에 만들기 시작한 통합 쿼리의 탭을 클릭합니다. - select 쿼리에 대한 문을 공용 쿼리의 SQL 보기 개체 탭에 붙여 넣
SQL습니다. - 선택 쿼리
SQL문 끝에 있는 세미콜론(;)을 삭제합니다. - Enter 키를 눌러 커서를 한 줄 아래로 이동한 다음 새 줄에 입력합니다
UNION. - 통합 쿼리에 결합하려는 다음 선택 쿼리의 탭을 클릭합니다.
- 선택 쿼리에 대한 모든
SQL문을 복사하여 공용 쿼리의 SQL 보기 창에 붙여넣을 때까지 5-10단계를 반복합니다. 마지막 선택 쿼리에 대한 문 다음SQL에 세미콜론을 삭제하거나 아무 것도 입력하지 마세요. - 디자인 탭의 결과 그룹에서 실행을 클릭합니다.
통합 쿼리의 결과가 데이터시트 보기에 나타납니다.
통합 쿼리를 작성 예제 보기
다음은 Northwind 샘플 데이터베이스에서 다시 만들 수 있는 예입니다. 이 통합 쿼리는 Customers 테이블의 사용자 이름을 수집하고 Suppliers 테이블의 사용자 이름과 결합합니다. 원하는 경우 Northwind 예제 데이터베이스의 복사본에서 이러한 단계를 수행합니다.
다음은 이 예제를 작성하는 데 필요한 단계입니다.
Customers 및 Suppliers 테이블을 각각 데이터 원본으로 사용하여 Query1 및 Query2라는 두 개의 선택 쿼리를 만듭니다. 이름 및 성 필드를 표시 값으로 사용합니다.
초기에 데이터 원본 없이 Query3이라는 새 쿼리를 만들고 디자인 탭에서 통합 명령을 클릭하여 이 쿼리를 통합 쿼리로 만듭니다.
Query1 및 Query2에서 Query3으로 SQL 문을 복사하여 붙여넣습니다. 여분의 세미콜론을 제거하고 키워드(keyword)를
UNION추가해야 합니다. 그런 다음 데이터시트 보기에서 결과를 확인할 수 있습니다.쿼리 중 하나에 ordering 절을 추가한 다음 SQL View의 통합 쿼리에 문을 붙여넣
ORDER BY습니다. 통합 쿼리 Query3에서 순서를 추가하려고 할 경우에는 먼저 세미콜론을 제거한 다음 필드 이름에서 테이블 이름을 제거합니다.이 통합 쿼리 예제의 이름을 결합하고 정렬한 결과는
SQL다음과 같습니다.SELECT Customers.Company, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers ORDER BY [Last Name], [First Name];
구문을 작성 SQL 하는 것이 매우 익숙한 경우 SQL 보기에서 직접 공용 구조체 쿼리에 대한 고유한 SQL 문을 작성할 수 있습니다. 그러나 다른 쿼리 개체에서 SQL을 복사하고 붙여넣는 방법을 따르는 것이 유용할 수 있습니다. 각 쿼리는 여기에 사용된 단순 선택 쿼리 예제보다 훨씬 더 복잡할 수 있습니다. 통합 쿼리에서 쿼리를 결합하기 전에 각 쿼리를 주의 깊게 만들고 테스트하는 것이 좋습니다. 통합 쿼리를 실행하지 못할 경우에는 성공할 때까지 각 쿼리를 개별적으로 조정하고 수정된 구문으로 통합 쿼리를 다시 작성할 수 있습니다.
이 문서의 나머지 섹션을 검토하여 통합 쿼리 사용에 대한 팁과 요령을 자세히 알아보세요.
통합 쿼리에서 세 개 이상의 테이블 또는 쿼리 결합
Northwind 데이터베이스를 사용하는 이전 섹션의 예제에서는 두 테이블의 데이터만 결합됩니다. 그러나 통합 쿼리에서는 세 개 이상의 테이블을 쉽게 결합할 수 있습니다. 예를 들어 이전 예제를 기반으로 작성할 경우 쿼리 출력에 ‘직원’ 이름도 포함할 수 있습니다. 세 번째 쿼리를 추가하고 다음과 같은 추가 UNION 키워드를 통해 이전 SQL 문과 결합하여 해당 작업을 수행할 수 있습니다.
SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers
UNION
SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers
UNION
SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees
ORDER BY [Last Name], [First Name];
데이터시트 보기에서 결과를 볼 때 모든 직원이 샘플 회사 이름과 함께 나열되며 이는 그다지 유용하지 않을 수 있습니다. 이 필드에 사용자가 사내 직원인지, 공급업체 또는 고객인지를 표시하려면 회사 이름 대신 고정 값을 포함할 수 있습니다. 다음은 다음과 같습니다.SQL
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers
UNION
SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers
UNION
SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees
ORDER BY [Last Name], [First Name];
데이터시트 보기의 결과는 다음과 같이 표시됩니다. Access가 다음과 같은 5개의 레코드를 표시합니다.
| 고용 | 성 | 이름 |
|---|---|---|
| 사내 | 지 | 민지 |
| 사내 | 유 | 명옥 |
| 공급자 | 김 | 배식 |
| 고객 | 홍 | 동선 |
| 고객 | 성 | 진민 |
Access는 통합 쿼리의 첫 번째 쿼리에서만 출력 필드의 이름을 읽으므로 쿼리를 더 줄일 수 있습니다. 여기서는 두 번째와 세 번째 쿼리 섹션의 출력이 제거됩니다.
SELECT "Customer" As Employment, [Last Name], [First Name]
FROM Customers
UNION
SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers
UNION
SELECT "In-house", [Last Name], [First Name]
FROM Employees
ORDER BY [Last Name], [First Name];
통합 쿼리에서 필터링
Access 통합 쿼리에서 순서는 한 번만 허용되지만 각 쿼리를 개별적으로 필터링할 수 있습니다. 이전 섹션의 공용 쿼리를 기반으로 절을 WHERE 추가하여 각 쿼리를 필터링하는 예제는 다음과 같습니다.
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers
WHERE [State/Province] = "UT"
UNION
SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers
WHERE [Job Title] = "Sales Manager"
UNION
SELECT "In-house", Employees.[Last Name], Employees.[First Name]
FROM Employees
WHERE City = "Seattle"
ORDER BY [Last Name], [First Name];
데이터시트 보기로 전환하면 다음과 유사한 결과가 표시됩니다.
| 고용 | 성 | 이름 |
|---|---|---|
| 공급자 | 신 | 선희 |
| 사내 | 지 | 민지 |
| 고객 | 강 | 서연 |
| 사내 | 우 | 순주 |
| 공급자 | 임 | 하은 |
| 고객 | 문 | 진선 |
| 공급자 | 권 | 수빈 |
| 공급자 | 박 | 광준 |
| 사내 | 노 | 효선 |
| 공급자 | 임 | 순복 |
| 사내 | 성 | 미옥 |
데이터 형식 혼합
통합하는 쿼리가 매우 다른 경우 출력 필드가 서로 다른 데이터 형식의 데이터를 결합해야 하는 상황이 발생할 수 있습니다. 이 경우 통합 쿼리는 텍스트 데이터 형식이 텍스트 ‘및’ 숫자를 모두 포함할 수 있으므로 결과를 텍스트 데이터 형식으로 반환합니다.
이 작업의 작동 방식을 이해하기 위해 Northwind 예제 데이터베이스의 ‘제품 트랜잭션’ 통합 쿼리를 사용합니다. 해당 예제 데이터베이스를 열고 나서 데이터시트 보기에서 제품 트랜잭션 쿼리를 엽니다. 마지막 10개의 레코드는 다음 출력과 유사합니다.
| 제품 ID | Order Date | 회사 이름 | 트랜잭션 | 수량 |
|---|---|---|---|---|
| 77 | 2006/1/22 | 공급자 B | 구입 | 60 |
| 80 | 2006/1/22 | 공급자 D | 구입 | 75 |
| 81 | 2006/1/22 | 공급자 A | 구입 | 125 |
| 81 | 2006/1/22 | 공급자 A | 구입 | 200 |
| 7 | 2006/1/20 | 회사 D | 판매 | 10 |
| 51 | 2006/1/20 | 회사 D | 판매 | 10 |
| 80 | 2006/1/20 | 회사 D | 판매 | 10 |
| 34 | 2006/1/15 | 회사 AA | 판매 | 100 |
| 80 | 2006/1/15 | 회사 AA | 판매 | 30 |
수량 필드를 구매와 판매의 두 필드로 분할하려고 한다고 가정해 보겠습니다. 또한 값이 없는 필드에 고정된 0 값을 사용한다고 가정해 보겠습니다. 이 통합 쿼리의 모양은 다음과 같습니다 SQL .
SELECT [Product ID], [Order Date], [Company Name], [Transaction], 0 As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, 0 As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
데이터시트 보기로 전환하면 다음과 같이 마지막 10개의 레코드가 표시됩니다.
| 제품 ID | Order Date | 회사 이름 | 트랜잭션 | 구매 | 판매 |
|---|---|---|---|---|---|
| 74 | 2006/1/22 | 공급자 B | 구입 | 20 | 0 |
| 77 | 2006/1/22 | 공급자 B | 구입 | 60 | 0 |
| 80 | 2006/1/22 | 공급자 D | 구입 | 75 | 0 |
| 81 | 2006/1/22 | 공급자 A | 구입 | 125 | 0 |
| 81 | 2006/1/22 | 공급자 A | 구입 | 200 | 0 |
| 7 | 2006/1/20 | 회사 D | 판매 | 0 | 10 |
| 51 | 2006/1/20 | 회사 D | 판매 | 0 | 10 |
| 80 | 2006/1/20 | 회사 D | 판매 | 0 | 10 |
| 34 | 2006/1/15 | 회사 AA | 판매 | 0 | 100 |
| 80 | 2006/1/15 | 회사 AA | 판매 | 0 | 30 |
이 예제를 계속하여, 값이 0인 필드를 비워 두려면 어떻게 해야 할까요? 다음과 같이 키워드(keyword)를 Null 추가하여 0 대신 아무것도 표시하지 않도록 수정 SQL 할 수 있습니다.
SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
그러나 데이터시트 보기로 전환되었으므로 예기치 않은 결과가 발생합니다. 구매 열에서 모든 필드가 지워집니다.
| 제품 ID | Order Date | 회사 이름 | 트랜잭션 | 구매 | 판매 |
|---|---|---|---|---|---|
| 74 | 2006/1/22 | 공급자 B | 구입 | ||
| 77 | 2006/1/22 | 공급자 B | 구입 | ||
| 80 | 2006/1/22 | 공급자 D | 구입 | ||
| 81 | 2006/1/22 | 공급자 A | 구입 | ||
| 81 | 2006/1/22 | 공급자 A | 구입 | ||
| 7 | 2006/1/20 | 회사 D | 판매 | 10 | |
| 51 | 2006/1/20 | 회사 D | 판매 | 10 | |
| 80 | 2006/1/20 | 회사 D | 판매 | 10 | |
| 34 | 2006/1/15 | 회사 AA | 판매 | 100 | |
| 80 | 2006/1/15 | 회사 AA | 판매 | 30 |
이 상황이 발생하는 이유는 Access에서는 필드의 데이터 형식을 첫 번째 쿼리에서 확인하기 때문입니다. 이 예제에서 Null은 숫자가 아닙니다.
그렇다면 필드의 빈 값에 빈 문자열을 삽입하려고 하면 어떻게 될까요?
SQL 이 시도의 경우 다음과 같을 수 있습니다.
SELECT [Product ID], [Order Date], [Company Name], [Transaction], "" As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, "" As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
데이터시트 보기로 전환하면 Access가 구매 값을 검색하지만 값을 텍스트로 값을 변환한 것을 알 수 있습니다. 값이 데이터시트 보기에서 왼쪽 맞춤으로 정렬되므로 텍스트 값이라는 것을 알 수 있습니다. 첫 번째 쿼리의 빈 문자열은 이러한 결과가 표시되는 이유를 나타내는 숫자가 아닙니다. 또한 구매 레코드에 빈 문자열이 포함되어 있으므로 판매 값도 텍스트로 변환됩니다.
| 제품 ID | Order Date | 회사 이름 | 트랜잭션 | 구매 | 판매 |
|---|---|---|---|---|---|
| 74 | 2006/1/22 | 공급자 B | 구입 | 20 | |
| 77 | 2006/1/22 | 공급자 B | 구입 | 60 | |
| 80 | 2006/1/22 | 공급자 D | 구입 | 75 | |
| 81 | 2006/1/22 | 공급자 A | 구입 | 125 | |
| 81 | 2006/1/22 | 공급자 A | 구입 | 200 | |
| 7 | 2006/1/20 | 회사 D | 판매 | 10 | |
| 51 | 2006/1/20 | 회사 D | 판매 | 10 | |
| 80 | 2006/1/20 | 회사 D | 판매 | 10 | |
| 34 | 2006/1/15 | 회사 AA | 판매 | 100 | |
| 80 | 2006/1/15 | 회사 AA | 판매 | 30 |
이 퍼즐을 어떻게 해결하나요?
한 가지 해결 방법은 쿼리에서 필드 값이 숫자로 되도록 하는 것입니다. 다음 식을 사용하여 이 작업을 수행할 수 있습니다.
IIf(False, 0, Null)
검사할 조건 은 False사용 안 함True이므로 식은 항상 를 반환Null합니다. 그러나 Access는 여전히 두 출력 옵션을 모두 평가하고 출력을 숫자 또는 Null로 처리합니다.
작업 예제에서 이 식을 사용하는 방법은 다음과 같습니다.
SELECT [Product ID], [Order Date], [Company Name], [Transaction], IIf(False, 0, Null) As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
두 번째 쿼리는 수정할 필요가 없습니다.
데이터시트 보기로 전환하면 원하는 결과가 표시됩니다.
| 제품 ID | Order Date | 회사 이름 | 트랜잭션 | 구매 | 판매 |
|---|---|---|---|---|---|
| 74 | 2006/1/22 | 공급자 B | 구입 | 20 | |
| 77 | 2006/1/22 | 공급자 B | 구입 | 60 | |
| 80 | 2006/1/22 | 공급자 D | 구입 | 75 | |
| 81 | 2006/1/22 | 공급자 A | 구입 | 125 | |
| 81 | 2006/1/22 | 공급자 A | 구입 | 200 | |
| 7 | 2006/1/20 | 회사 D | 판매 | 10 | |
| 51 | 2006/1/20 | 회사 D | 판매 | 10 | |
| 80 | 2006/1/20 | 회사 D | 판매 | 10 | |
| 34 | 2006/1/15 | 회사 AA | 판매 | 100 | |
| 80 | 2006/1/15 | 회사 AA | 판매 | 30 |
동일한 결과를 얻는 대체 방법은 통합 쿼리에서 쿼리 앞에 다른 쿼리를 추가하는 것입니다.
SELECT
0 As [Product ID], Date() As [Order Date],
"" As [Company Name], "" As [Transaction],
0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False
각 필드에 대해 Access는 사용자가 정의하는 데이터 형식의 고정 값을 반환합니다. 물론 이 쿼리의 출력이 결과를 방해하지 않도록 WHERE 절을 False로 포함하는 요령을 사용할 수 있습니다.
WHERE False
이것은 작은 트릭입니다. 이 조건은 항상 false이므로 쿼리는 아무 것도 반환하지 않습니다. 이 문을 기존 SQL과 결합하면 다음과 같이 완료된 문이 생성됩니다.
SELECT
0 As [Product ID], Date() As [Order Date],
"" As [Company Name], "" As [Transaction],
0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False
UNION
SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
참고
이 예제에서 Northwind 데이터베이스의 결합된 쿼리는 100개의 레코드를 반환하는 반면 두 개의 개별 쿼리는 58개 및 43개 레코드를 총 101개 레코드를 반환합니다. 이 차이는 두 레코드가 고유하지 않기 때문에 발생합니다. 을 사용하여 UNION ALL이 시나리오를 해결하는 방법을 알아보려면 UNION ALL을 사용하여 공용체 쿼리의 고유 레코드 작업을 참조하십시오.
통합 쿼리에 합계 추가
통합 쿼리의 특별한 용도는 레코드 집합을 하나 이상의 필드 합계가 포함된 하나의 레코드와 결합하는 것입니다.
통합 쿼리에서 합계를 구하는 방법을 설명하기 위해 Northwind 예제 데이터베이스에서 만들 수 있는 또 다른 예제는 다음과 같습니다.
다음 SQL 구문을 사용하여 맥주(제품 ID=Northwind 데이터베이스의 34) 구매를 표시하는 간단한 새 쿼리를 만듭니다.
SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34)) ORDER BY [Purchase Order Details].[Date Received];데이터시트 보기로 전환하면 다음 4개의 구매가 표시됩니다.
받은 날짜 수량 2006/1/22 100 2006/1/22 60 2006/4/4 50 2006/4/5 300 합계를 구하려면 다음 SQL을 사용하여 단순 집계 쿼리를 만듭니다.
SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34))데이터시트 보기로 전환하면 다음 하나의 레코드만 표시됩니다.
MaxOfDate Received SumOfQuantity 2006/4/5 510 이러한 두 쿼리를 통합 쿼리로 결합하여 전체 수량이 포함된 레코드를 구매 레코드에 추가합니다.
SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34)) UNION SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34)) ORDER BY [Purchase Order Details].[Date Received];데이터시트 보기로 전환하면 각각의 합계, 이어서 수량을 합계하는 레코드가 포함된 4개의 구매가 표시됩니다.
받은 날짜 수량 2006/1/22 60 2006/1/22 100 2006/4/4 50 2006/4/5 300 2006/4/5 510
통합 쿼리에 합계를 추가하는 방법에 대한 기본 사항을 설명합니다. 또한 두 쿼리에 "Detail" 및 "Total"과 같은 고정 값을 포함하여 총 레코드를 다른 레코드와 시각적으로 구분할 수 있습니다. 통합 쿼리에서 세 개 이상의 테이블 또는 쿼리 결합 섹션에서 고정 값 사용에 대해 검토할 수 있습니다.
UNION ALL을 사용하여 통합 쿼리에서 고유 레코드 작업
기본적으로 Access의 통합 쿼리에는 고유 레코드만 포함됩니다. 그러나 모든 레코드를 포함하려면 어떻게 하나요? 여기서는 다른 예제가 유용할 수 있습니다.
이전 섹션에서는 통합 쿼리에서 합계를 만드는 방법을 설명했습니다. 다음을 포함Product ID = 48하도록 해당 공용 쿼리 SQL 를 수정합니다.
SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
UNION
SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
ORDER BY [Purchase Order Details].[Date Received];
데이터시트 보기로 전환하면 약간 잘못된 결과가 표시됩니다.
| 받은 날짜 | 수량 |
|---|---|
| 2006/1/22 | 100 |
| 2006/1/22 | 200 |
물론 하나의 레코드가 총 수량의 두 배를 반환하지는 않습니다.
이 결과가 나타나는 이유는 구매 주문 세부 정보 테이블에 기록된 것과 같이 하루에 동일한 양의 초콜릿이 두 번 판매되었기 때문입니다. Northwind 예제 데이터베이스의 두 레코드를 모두 표시하는 간단한 선택 쿼리 결과는 다음과 같습니다.
| 구매 주문 ID | 제품 | 수량 |
|---|---|---|
| 100 | Northwind Traders 초콜릿 | 100 |
| 92 | Northwind Traders 초콜릿 | 100 |
앞서 언급한 통합 쿼리에서 구매 주문 ID 필드가 포함되지 않고 두 필드가 두 개의 고유한 레코드를 구성하지 않음을 확인할 수 있습니다.
모든 레코드 UNION ALL 를 포함하려면 .s에서 SQL대신 UNION 이는 결과의 정렬에 영향을 줄 가능성이 높으므로 정렬 순서를 결정하는 절을 ORDER BY 포함할 수도 있습니다. 이전 예에 따라 수정된 SQL 내용은 다음과 같습니다.
SELECT [Purchase Order Details].[Date Received], Null As [Total], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
UNION ALL
SELECT Max([Date Received]), "Total" As [Total], Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
ORDER BY [Total];
데이터시트 보기로 전환하면 마지막 레코드로 합계 외에 모든 세부 정보가 표시됩니다.
| 받은 날짜 | 합계 | 수량 |
|---|---|---|
| 2006/1/22 | 100 | |
| 2006/1/22 | 100 | |
| 2006/1/22 | 합계 | 200 |
통합 쿼리를 사용하여 콤보 상자 컨트롤을 통해 폼에서 레코드 필터링
통합 쿼리는 일반적으로 폼에서 콤보 상자 컨트롤의 레코드 원본으로 사용됩니다. 이 콤보 상자를 사용하여 폼의 레코드를 필터링할 값을 선택할 수 있습니다. 예를 들어 도시별로 직원 레코드를 필터링합니다.
이 작업의 작동 방식을 확인하기 위해 Northwind 예제 데이터베이스에서 다음과 같은 다른 예제를 만들어 이 시나리오를 설명할 수 있습니다.
다음
SQL구문을 사용하여 간단한 선택 쿼리를 만듭니다.SELECT Employees.City, Employees.City AS Filter FROM Employees;데이터시트 보기로 전환하면 다음 결과가 표시됩니다.
구/군/시 필터 과천시 과천시 수원 수원 삼신 삼신 성대 성대 과천시 과천시 삼신 삼신 과천시 과천시 삼신 삼신 과천시 과천시 결과를 확인하면 유용한 정보라고 생각되지 않을 수 있습니다. 그러나 다음을 사용하여 쿼리를 확장하고 통합 쿼리로 전환합니다.
SQLSELECT Employees.City, Employees.City AS Filter FROM Employees UNION SELECT "<All>", "*" AS Filter FROM Employees ORDER BY City;데이터시트 보기로 전환하면 다음 결과가 표시됩니다.
구/군/시 필터 <모두> * 수원 수원 성대 성대 삼신 삼신 과천시 과천시 Access에서는 이전에 표시된 9개 레코드를 모두 및 "*"라는 <> 고정 필드 값으로 통합합니다. 이 union 절에는 , 가 포함되어
UNION ALL있지 않으므로 Access는 고유 레코드만 반환합니다. 즉, 각 도시는 고정된 동일한 값으로 한 번만 반환됩니다.이제 각 도시 이름을 한 번만 표시하는 완료된 통합 쿼리를 완료했으므로, 모든 도시를 효과적으로 선택하는 옵션과 함께 이 쿼리를 폼에서 콤보 상자의 레코드 원본으로 사용할 수 있습니다. 이 특정 예제를 모델로 사용하여 폼에서 콤보 상자 컨트롤을 만들고, 이 쿼리를 레코드 원본으로 설정하고, 필터 열의 열 너비 속성을 0(영)으로 설정하여 열을 시각적으로 숨긴 다음, 바인딩된 열 속성을 1로 설정하여 두 번째 열의 색인을 표시합니다. 폼 자체의 속성에서
Filter콤보 상자 컨트롤에서 선택한 값을 사용하여 폼 필터를 활성화하는 다음과 같은 코드를 추가할 수 있습니다.Me.Filter = "[City] Like '" & Me![FilterComboBoxName].Value & "'" Me.FilterOn = True그러면 양식 사용자는 양식 레코드를 특정 도시 이름으로 필터링하거나 모두>를 선택하여 <모든 도시에 대한 모든 레코드를 나열할 수 있습니다.