배움터  
  HOME > 배움터 > 무료강좌
무료강좌
 
액세스 2000, 김규경님의 데이터베이스 기초 다지기 - 제20강. 액세스 쿼리 #2, Access 2000
  


제20강. 액세스 쿼리 #2


액세스의 쿼리 유형

질의문의 시작 키워드나 중요한 키워드에 의해 쿼리 이름을 붙이고 분류합니다.
다음 내용을 잘 읽어보시고 각 쿼리의 문장 구성의 특징을 이해하시도록 하십시오.

참고]
QBE 창 대신 쿼리의 SQL 내용을 보시려면 SQL 입력창을 열어야 합니다. SQL 입력창을 여는 것에 대해서는 이 강좌의 제일 마지막 부분을 참고 하십시오.

- 선택 쿼리
- 매개변수 쿼리
- 크로스탭 쿼리
- 실행 쿼리
- SQL 쿼리

 
선택 쿼리

선택 쿼리는 가장 일반적인 유형의 쿼리입니다. 질의문이 SELECT로 시작하기 때문에 SELECT Query라고 부릅니다.

- 지정한 조건을 사용하여 하나 이상의 테이블에서 데이터를 검색한 다음 원하는 순서대로 데이터를 표시합니다.
- 약간의 제한이 있지만 선택 쿼리의 데이터시트에서 레코드를 업데이트합니다. 이것은 흔히 초보자 분들이 당황하여 질문하는 내용 중에 하나입니다. 이 부분은 따로 설명을 드리겠습니다.
- 레코드를 그룹화하고 합계, 개수, 평균, 기타 요약 계산을 수행할 수 있습니다.따라서 이것을 요약질의라고 부르기도 합니다. 또 질의문에 GROUP BY 키워드가 쓰이므로 GROUP-BY 질의라고도 합니다.

예] 다음 질의문은 단종되지 않은 제품만 뽑아보는 선택질의의 내용입니다.

SELECT [Product List].ProductID, [Product List].ProductName
FROM Products AS [Product List]
WHERE ((([Product List].Discontinued)=No))
ORDER BY [Product List].ProductName;

요약질의는 QBE 질의디자인 창에서는 시그마 표시를 가지는 [요약]이라는 메뉴 버튼을 누르면 작성할 수 있습니다.
Sum(), Avg(), Min(), Max(), Std() 등 질의계산 함수는 질의에서만 사용됩니다. 그리고 Group By 쿼리나 CrossTab 쿼리에서만 사용됩니다.


예] 다음은 주문별 소계를 내는 합계질의입니다. SELECT로 시작하기 때문에 선택질의에 속합니다. GROUP BY 키워드가 대상을 구분해주고 Sum() 질의계산함수가 합계를 내줍니다.

SELECT [Order Details].OrderID, Sum(CCur([UnitPrice]*[Quantity]*(1-[Discount])/100)*100) AS Subtotal
FROM [Order Details]
GROUP BY [Order Details].OrderID;


 

매개 변수 쿼리

쿼리를 열 때 레코드 검색 조건이나 필드에 삽입할 값과 같은 정보를 입력할 수 있는 대화 상자를 표시하는 쿼리입니다. 질의문이 PARAMETERS로 시작하기 때문에 PARAMETER Query라고 부릅니다.
매개변수 쿼리는 조건만 다른 여러 작업을 반복적으로 할 때 유용합니다. 예를 들어, 월별 자료 검색이나 월별 소득 계산 등을 하고자 할 때 편리합니다.

매개변수
매개변수는 될 수 있으면 미리 정의를 한 다음 사용하십시오.
매개변수를 정의하려면 메뉴에서 [쿼리]-[매개변수…]를 실행하면 데이터 형식까지 정의를 할 수 있습니다.
그러나 매개변수를 명시적으로 정의하지 않았더라도 쿼리에 없는 이름(필드명)을 사용하면 쿼리는 매개변수라 여기고 처리합니다.
단, 크로스탭 질의에서는 반드시 매개변수를 명시적으로 정의한 다음에 사용하셔야 합니다.

PARAMETERS 시작일 DateTime, 종료일 DateTime;
SELECT Employees.Country, Employees.LastName, Employees.FirstName, Orders.ShippedDate,
Orders.OrderID, [Order Subtotals].Subtotal AS SaleAmount
FROM Employees INNER JOIN (Orders INNER JOIN [Order Subtotals] ON
Orders.OrderID = [Order Subtotals].OrderID) ON Employees.EmployeeID = Orders.EmployeeID
WHERE (((Orders.ShippedDate) Between [시작일] And [종료일]));


 
크로스탭 쿼리

크로스탭 쿼리를 사용하면 데이터를 계산하고 재구성할 수 있으므로 데이터를 쉽게 분석할 수 있습니다. 크로스탭 쿼리는 데이터시트의 왼쪽에 있는 정보를 세로로 그룹화하거나 맨 위에 있는 정보를 가로로 그룹화한 데이터에 대해 합계, 평균, 개수, 기타 요약 등을 계산합니다.

요약질의와 비슷하지만 크로스탭이란 그리드가 하나 더 생겼습니다. 크로스탭에는 행과 열 머리글이 있고 두 [행]과 [열]이 서로 교차하는 부분에 적을 [요약값]이 존재해야 합니다.


TRANSFORM Sum(CCur([Order Details].UnitPrice*[Quantity]*(1-[Discount])/100)*100)
 AS ProductAmount
SELECT Products.ProductName, Orders.CustomerID, Year([OrderDate]) AS OrderYear
FROM Products INNER JOIN (Orders INNER JOIN [Order Details] ON Orders.OrderID =
[Order Details].OrderID) ON Products.ProductID = [Order Details].ProductID
WHERE (((Orders.OrderDate) Between #1/1/1997# And #12/31/1997#))
GROUP BY Products.ProductName, Orders.CustomerID, Year([OrderDate])
PIVOT DatePart("q",[OrderDate],1,0) & "/4 분기" In ("1/4 분기","2/4 분기","3/4 분기","4/4 분기");

질의계산함수나 구간을 정하기 위한 함수, 특히 날짜 필드에서 구간을 정하기 위한 날짜 함수들이 많이 사용되므로 날짜 관련 함수들은 도움말을 보시고 꼭 익혀 두십시오.

이렇게 함수들이 사용되는 것뿐만 아니라 크로스탭질의는 쓰이는 키워드도 많아서 구문이 복잡하게 느껴져 초보자 분들에게는 상당히 부담스러운 쿼리에 해당됩니다. 크로스탭 쿼리 마법사를 이용하여 만드는 것도 초보자 분들에게는 그렇게 쉽지가 않습니다.

크로스탭 쿼리를 만들 때 다음과 같이 생각을 정리하게 되면 어렵지 않습니다.

위 예제는 [제품별]로 어떤 [고객]이 [해]마다 쓴 금액을 [분기]별로 구분해서 알아보고자 하는 질의문입니다.
이것을 정리하면 [제품별]-[고객별]-[연도별]-[분기별]-[구매금액]으로 되고 TRNSFORM 제일 뒤의 항목이 TRNSFORM, 그 앞에 있는 세부조건이 PIVOT, 그리고 나머지 조건들이 GROUP BY에 관련됩니다. 이것을 다시 구분해보면, 알고자 하는 값을 항상 마지막에 배치를 하고 이 앞에는 그 기준들을 적는데 [기준들(순서대로)]-[마지막 세부기준]-[요약계산 할 것] 순서로 배치합니다. 이것은 [Group By]-[Pivot]-[Transform]에 해당됩니다.
크로스탭쿼리 마법사를 이용할 때 이 순서대로 값을 설정해 주면 원하는 쿼리가 만들어 질 겁니다.

1. GROUP BY 다음에 놓인 것은 개별적인 레코드(행)를 그룹으로 만들어진 내용으로 여전히 행에 남아 있게 되고 따라서 행 머리글이 된다.
2. PIVOT 다음에 쓰여진 세부 조건은 열 머리글이 된다.
3. TRANSFORM 다음에 질의계산함수를 사용하여 계산한 값을 나타낼 값 필드로 테이블을 채우는 값이 된다.


 
실행 쿼리

실행 쿼리는 여러 레코드를 한꺼번에 변경하거나 이동할 수 있는 쿼리입니다. 실행 쿼리에는 네 가지 유형이 있습니다. 실행 쿼리는 데이터를 변경하므로 항상 조심해서 사용하도록 합니다. 초보자 분들은 이런 게 있구나 하는 정도로만 알아 두십시오.

삭제 쿼리 테이블 하나 이상에서 레코드 그룹을 삭제합니다. 예를 들어 단종제품만 일괄 삭제할 수 있습니다.
  DELETE Employees.*
    FROM Employees
    WHERE Title = “Trainee”;

업데이트 쿼리 업데이트 쿼리는 테이블 하나 이상에서 레코드 그룹을 전체적으로 변경합니다. 예를 들어, 제품의 가격이나 임금 등을 일괄해서 10%씩 올리고자 하는 경우에 사용됩니다.
  UPDATE Employees
    SET ReportsTo = 5
    WHERE ReportsTo = 2;

추가 쿼리 추가 쿼리는 테이블 하나 이상에서 레코드 그룹을 가져다 테이블 하나 이상의 끝에 추가합니다. 예를 들어, 새 고객들과 그 고객들에 대한 데이터가 포함된 테이블이 있는 데이터베이스가 생긴 경우, 모든 관련 정보를 데이터베이스에 일일이 입력하는 대신 Customers 테이블에 추가하기만 하면 됩니다.

  다중 레코드 추가 쿼리:
   INSERT INTO Customers
    SELECT *
    FROM [New Customers];

  단일 레코드 추가 쿼리:
   INSERT INTO Employees (FirstName,LastName, Title)
    VALUES ('Harry', 'Washington', 'Trainee');

테이블 만들기 쿼리 테이블 만들기 쿼리는 테이블 하나 이상에서 데이터의 일부나 전체를 가져와 새 테이블을 만듭니다. 이 쿼리는 다른 액세스 데이터베이스나 이전 레코드가 들어 있는 기록 테이블로 내보낼 테이블을 만들 때 유용합니다.

  SELECT Products.*
    INTO 단종품목테이블
    FROM Products
    WHERE ((( Products.Discontuned) = True));

 
SQL 쿼리

통과 쿼리, 데이터 정의 쿼리, 통합 쿼리는 QBE 디자인 창을 이용할 수 없고 메뉴에서 [보기]-[SQL 보기]로 SQL 입력창을 연 다음 직접 SQL 문을 작성해야 합니다.
또 하위 쿼리는 쿼리 디자인 눈금의 필드 행이나 조건 행에 SQL을 입력합니다.

[SQL 입력창 보기]
액세스 쿼리를 디자인보기로 열면 그래픽인터페이스인 QBE 디자인 창만 보입니다. 실제 작성된 SQL문을 확인하시려면 쿼리를 디자인 보기로 열고 메뉴에서 [보기]-[SQL 보기]를 클릭하십시오.

지금까지 많이 사용하는 쿼리에 대해 설명을 하였습니다. 간단하게 설명을 했지만 SQL문을 처음 접하신 분들에게는 상당히 어려운 내용이었을 겁니다. 그렇지만 실망하지 마시고 ‘보고 또 보고’ 하시면 익숙해지시리라 믿습니다.

오피스 튜터의 무료강좌 섹션에서 QBE(Query By Example) 창에서 각각의 쿼리를 만들고 필드를 추가하고, 정렬하고, 조건에 따라 레코드를 질의하고, 계산필드를 만드는 것 등에 대해서 반드시 공부를 하시도록 하십시오. 그리고 SQL창을 열어 항상 QBE로 만든 쿼리의 내용을 확인하는 습관을 가지시면 SQL문에 대해서는 조만간 익숙해지실 겁니다.

액세스2000 무료강좌 : www.officetutor.co.kr/tutor_new/access/daily/index.asp
 

 

  목차 | 이전