처음부터 Microsoft Access SQL 쿼리를 작성하는 방법

처음부터 Microsoft Access SQL 쿼리를 작성하는 방법

Microsoft Access는 틀림없이 전체 Microsoft Office 제품군에서 가장 강력한 도구이지만 Office 고급 사용자를 어리둥절하게 만들고 때로는 겁을 줍니다. Word 또는 Excel보다 학습 곡선이 더 가파르기 때문에 이 도구 사용에 대해 머리를 어떻게 감쌀까요? 이번 주에 Bruce Epper는 독자 중 한 명이 이 질문으로 인해 촉발된 몇 가지 문제를 살펴볼 것입니다.





한 독자가 묻습니다.

Microsoft Access에서 쿼리를 작성하는 데 문제가 있습니다. 숫자 제품 코드와 관련 제품 이름이 있는 공통 열이 포함된 두 개의 제품 테이블이 있는 데이터베이스가 있습니다. 테이블 A에서 어떤 제품을 찾을 수 있는지 알고 싶습니다. 테이블 B에 있습니다. 테이블 A의 제품 이름이 있는 경우 이를 포함하고 테이블 B의 제품 이름이 테이블 A에 없는 경우 테이블 B의 제품 이름을 포함하는 결과라는 열을 추가하고 싶습니다. 조언이 있으십니까?





브루스의 대답:

Microsoft Access는 Windows 및 Mac 시스템 모두에서 사용하도록 설계된 DBMS(데이터베이스 관리 시스템)입니다. 데이터 처리 및 저장을 위해 Microsoft의 Jet 데이터베이스 엔진을 사용합니다. 또한 SQL(Structured Query Language)을 이해할 필요가 거의 없는 사용자를 위한 그래픽 인터페이스를 제공합니다.





SQL은 데이터베이스에 저장된 정보를 추가, 삭제, 업데이트 및 반환하고 테이블 또는 인덱스 추가, 삭제 또는 수정과 같은 핵심 데이터베이스 구성 요소를 수정하는 데 사용되는 명령 언어입니다.

출발점

Access 또는 다른 RDBMS에 대해 아직 익숙하지 않은 경우 계속 진행하기 전에 다음 리소스로 시작하는 것이 좋습니다.



  • 그렇다면 데이터베이스란 무엇인가? Ryan Dube는 Excel을 사용하여 관계형 데이터베이스의 기본 사항을 보여줍니다.
  • Microsoft Access 2007 시작을 위한 빠른 가이드 Access 및 Access 데이터베이스를 구성하는 구성 요소에 대한 상위 수준 개요입니다.
  • Microsoft Access 2007의 테이블에 대한 빠른 자습서에서는 구조화된 데이터를 저장할 첫 번째 데이터베이스와 테이블을 만드는 방법을 살펴봅니다.
  • Microsoft Access 2007의 쿼리에 대한 빠른 자습서 데이터베이스 테이블에 저장된 데이터의 특정 부분을 반환하는 수단을 살펴봅니다.

이 기사에서 제공하는 개념을 기본적으로 이해하면 다음 내용을 보다 쉽게 ​​소화할 수 있습니다.

데이터베이스 관계 및 정규화

전 세계적으로 50가지 유형의 위젯을 판매하는 회사를 운영하고 있다고 상상해 보십시오. 귀하는 1,250명의 고객 기반을 가지고 있으며 평균 한 달에 이러한 고객에게 10,000개의 위젯을 판매합니다. 현재 단일 스프레드시트를 사용하여 이러한 모든 판매를 추적하고 있습니다. 사실상 단일 데이터베이스 테이블입니다. 그리고 매년 스프레드시트에 수천 개의 행이 추가됩니다.





위 이미지는 사용 중인 주문 추적 스프레드시트의 일부입니다. 이제 이 두 클라이언트가 모두 일년에 여러 번 위젯을 구매하므로 두 클라이언트 모두에 대해 훨씬 더 많은 행이 있다고 가정해 보겠습니다.





Joan Smith가 Ted Baines와 결혼하여 그의 성을 사용하면 이제 그녀의 이름이 포함된 모든 행을 변경해야 합니다. 'Joan Smith'라는 이름을 가진 두 명의 다른 클라이언트가 있는 경우 문제가 더 복잡해집니다. 상당히 일반적인 이벤트로 인해 판매 데이터를 일관되게 유지하는 것이 훨씬 더 어려워졌습니다.

데이터베이스를 사용하고 데이터를 정규화하여 항목을 인벤토리, 클라이언트 및 주문과 같은 여러 테이블로 분리할 수 있습니다.

예제의 클라이언트 부분만 보면 클라이언트 이름 및 클라이언트 주소에 대한 열을 제거하고 새 테이블에 넣습니다. 위의 이미지에서 데이터에 더 세분화된 액세스를 위해 더 잘 분류했습니다. 새 테이블에는 기본 키(ClientID)에 대한 열도 포함되어 있습니다. 이 열은 이 테이블의 각 행에 액세스하는 데 사용되는 숫자입니다.

이 데이터를 제거한 원래 테이블에서 이 특정 클라이언트에 대한 정보가 포함된 적절한 행에 연결되는 외래 키(ClientID)에 대한 열을 추가합니다.

이제 Joan Smith가 자신의 이름을 Joan Baines로 변경할 때 변경 사항은 Client 테이블에서 한 번만 수행하면 됩니다. 조인된 테이블의 다른 모든 참조는 적절한 클라이언트 이름을 가져오고 Joan이 지난 5년 동안 구매한 것을 보고 있는 보고서는 보고서 생성 방법을 변경하지 않고도 결혼 전 이름과 결혼 전 이름으로 모든 주문을 받습니다. .

추가 이점으로 사용되는 전체 스토리지 양도 줄어듭니다.

조인 유형

SQL은 INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER 및 CROSS의 5가지 다른 유형의 조인을 정의합니다. OUTER 키워드는 SQL 문에서 선택 사항입니다.

Microsoft Access에서는 INNER(기본값), LEFT OUTER, RIGHT OUTER 및 CROSS를 사용할 수 있습니다. FULL OUTER는 그대로 지원되지 않지만 LEFT OUTER, UNION ALL 및 RIGHT OUTER를 사용하면 더 많은 CPU 주기와 I/O 작업을 희생하여 위조할 수 있습니다.

CROSS 조인의 출력에는 오른쪽 테이블의 모든 행과 쌍을 이루는 왼쪽 테이블의 모든 행이 포함됩니다. CROSS 조인이 사용되는 것을 본 유일한 시간은 데이터베이스 서버의 부하 테스트 동안입니다.

기본 조인이 어떻게 작동하는지 살펴본 다음 필요에 맞게 수정하겠습니다.

다음 디자인 속성을 사용하여 ProdA 및 ProdB라는 두 개의 테이블을 만드는 것으로 시작하겠습니다.

AutoNumber는 항목이 테이블에 추가될 때 항목에 할당되는 자동으로 증가하는 긴 정수입니다. 텍스트 옵션은 수정되지 않았으므로 최대 255자 길이의 텍스트 문자열을 허용합니다.

이제 일부 데이터로 채우십시오.

3가지 조인 유형이 작동하는 방식의 차이점을 보여주기 위해 ProdA에서 항목 1, 5, 8을 삭제했습니다.

다음, 새 쿼리 만들기 에 가서 만들기 > 쿼리 디자인 . 테이블 표시 대화 상자에서 두 테이블을 모두 선택하고 추가 클릭 , 그 다음에 닫다 .

테이블 ProdA에서 ProductID를 클릭하고 테이블 ProdB의 ProductID로 드래그한 다음 마우스 버튼을 놓아 테이블 간의 관계를 생성합니다.

항목과 항목 간의 관계를 나타내는 테이블 사이의 선을 마우스 오른쪽 버튼으로 클릭합니다. 조인 속성 선택 .

기본적으로 조인 유형 1(INNER)이 선택됩니다. 옵션 2는 LEFT OUTER 조인이고 3은 RIGHT OUTER 조인입니다.

먼저 INNER 조인을 살펴보므로 확인을 클릭하여 대화 상자를 닫습니다.

쿼리 디자이너의 드롭다운 목록에서 보려는 필드를 선택합니다.

쿼리(리본의 빨간색 느낌표)를 실행하면 첫 번째 열에 테이블 ProdA의 값과 두 번째 열에 ProdB 값이 있는 두 테이블의 ProductName 필드가 표시됩니다.

결과에는 두 테이블 모두에서 ProductID가 동일한 값만 표시됩니다. ProdB 테이블에 ProductID = 1에 대한 항목이 있어도 ProdA 테이블에는 ProductID = 1이 없기 때문에 결과에 표시되지 않습니다. ProductID = 11에도 동일하게 적용됩니다. ProdA 테이블에는 있지만 ProdB 테이블에는 없습니다.

리본의 보기 단추를 사용하고 SQL 보기로 전환하면 이러한 결과를 얻는 데 사용된 디자이너가 생성한 SQL 쿼리를 볼 수 있습니다.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA INNER JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

디자인 보기로 돌아가서 조인 유형을 2(LEFT OUTER)로 변경합니다. 쿼리를 실행하여 결과를 확인합니다.

보시다시피 ProdA 테이블의 모든 항목은 결과에 표시되지만 ProdB 테이블에 일치하는 ProductID 항목이 있는 ProdB 항목만 결과에 표시됩니다.

ProdB.ProductName 열의 공백은 ProdB 테이블에 일치하는 값이 없기 때문에 특수 값(NULL)입니다. 이것은 나중에 중요할 것입니다.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA LEFT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

세 번째 유형의 조인(RIGHT OUTER)으로 동일한 작업을 시도합니다.

결과는 ProdA 테이블에 일치하는 값이 없는 빈 값(NULL이라고 함)을 표시하는 동안 ProdB 테이블의 모든 것을 보여줍니다. 지금까지 이것은 독자의 질문에서 원하는 결과에 가장 가깝게 만듭니다.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

쿼리에서 함수 사용

함수의 결과는 쿼리의 일부로 반환될 수도 있습니다. 결과 집합에 '결과'라는 새 열이 표시되기를 원합니다. ProdA에 값이 있는 경우(NULL이 아님) 해당 값은 테이블 ProdA의 ProductName 열 내용이 되고, 그렇지 않으면 ProdB 테이블에서 가져와야 합니다.

IIF(Immediate IF) 함수를 사용하여 이 결과를 생성할 수 있습니다. 이 함수는 세 개의 매개변수를 사용합니다. 첫 번째는 True 또는 False 값으로 평가되어야 하는 조건입니다. 두 번째 매개변수는 조건이 True인 경우 반환할 값이고, 세 번째 매개변수는 조건이 False인 경우 반환할 값입니다.

우리 상황에 대한 전체 기능 구성은 다음과 같습니다.

IIF(ProdA.ProductID Is Null, ProdB.ProductName,ProdA.ProductName)

조건 매개변수는 같음을 확인하지 않습니다. 데이터베이스의 Null 값에는 다른 Null을 포함하여 다른 값과 비교할 수 있는 값이 없습니다. 즉, Null은 Null과 같지 않습니다. 항상. 이를 극복하기 위해 대신 'Is' 키워드를 사용하여 값을 확인합니다.

'Is Not Null'을 사용하고 True 및 False 매개변수의 순서를 변경하여 동일한 결과를 얻을 수도 있습니다.

이것을 쿼리 디자이너에 넣을 때 전체 함수를 Field: 항목에 입력해야 합니다. '결과' 열을 생성하려면 별칭을 사용해야 합니다. 이렇게 하려면 다음 스크린샷과 같이 함수 앞에 '결과:'를 추가합니다.

이를 수행하는 동등한 SQL 코드는 다음과 같습니다.

SELECT ProdA.ProductName, ProdB.ProductName, IIF(ProdA.ProductID Is Null,ProdB.ProductName,ProdA.ProductName) AS Results FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

이제 이 쿼리를 실행하면 이러한 결과가 생성됩니다.

무료로 음악을 다운로드하는 방법

여기에서 테이블 ProdA에 값이 있는 각 항목에 대해 해당 값이 결과 열에 반영되는 것을 볼 수 있습니다. ProdA 테이블에 항목이 없으면 ProdB의 항목이 독자가 요청한 것과 정확히 일치하는 결과에 나타납니다.

Microsoft Access 학습을 위한 추가 리소스는 Joel Lee의 How to Learn Microsoft Access: 5 무료 온라인 리소스 를 확인하십시오.

공유하다 공유하다 트위터 이메일 Windows 11로 업그레이드할 가치가 있습니까?

Windows가 새롭게 디자인되었습니다. 그러나 Windows 10에서 Windows 11로 전환하도록 설득하기에 충분합니까?

다음 읽기
관련 항목
  • 생산력
  • 전문가에게 물어보세요
저자 소개 브루스 에퍼(13개 기사 게재)

Bruce는 70년대부터 전자제품을, 80년대 초반부터 컴퓨터를 다루며 그동안 사용하거나 본 적이 없는 기술에 대한 질문에 정확하게 답합니다. 그는 또한 기타를 치려고 하여 스스로를 귀찮게 한다.

브루스 에퍼가 참여한 작품 더보기

뉴스레터 구독

기술 팁, 리뷰, 무료 전자책 및 독점 거래에 대한 뉴스레터에 가입하십시오!

구독하려면 여기를 클릭하세요.