SQL 액세스. SQL - 데이터베이스 액세스 및 관리 언어 액세스

Access DBMS는 두 가지 유형의 쿼리를 사용합니다. QBE – 샘플별 쿼리 및 SQL(구조화된 쿼리 언어) - 구조화된 쿼리 언어입니다. "쿼리 빌더" 창에서 특별 요청 양식을 작성하면 샘플 요청이 생성됩니다. SQL – 프로그래머가 일련의 SQL에서 쿼리를 생성합니다. 지침. 일반적으로 SQL은 "생성" 탭의 "쿼리 작성기" 명령으로 열 수 있고 보기 메뉴에서 "SQL 모드"가 선택되는 쿼리 양식에서 프로그래머에 의해 생성됩니다. SQL 언어는 데이터와 함께 작동하도록 설계되었습니다. 관계형 데이터베이스에서 데이터를 생성, 수정 및 관리합니다.

ANSI-89 SQL 및 ANSI-92 SQL 표준을 준수하는 여러 가지 SQL 쿼리 모드(ANSI-89 SQL 및 ANSI-92 SQL 모드 쿼리)가 있다는 점에 유의해야 합니다.

지침에는 SQL의 데이터 세트에 대한 설명이 포함되어 있습니다. SQL 문절(SELECT, FROM, WHERE 등)로 구성됩니다. 제안 SQL 언어에서는 용어(연산자 또는 명령, 식별자, 상수 등)로 구성됩니다. 명령문은 명령문(SELECT, CREATE, INSERT, UPDATE, DELETE 등 명령 중 하나)으로 시작하고 세미콜론으로 끝납니다. 기본 SQL 문: SELECT, FROM 및 WHERE.

예를 들어, SQL 문은 다음과 같습니다.
SELECT Students.StudentCode
학생으로부터;
"SELECT Students.StudentCode" 절과 "FROM Students" 절로 구성됩니다.

SELECT 절에는 다음이 포함됩니다. 운영자선택하고 식별자"학생.학생 코드". 여기서 "StudentCode" 필드의 전체 이름 앞에는 데이터베이스의 "Students" 테이블 이름이 옵니다. SELECT - 필수 데이터가 포함된 필드를 지정합니다. FROM 절은 FROM 절과 식별자 "Students"로 구성됩니다. FROM - SELECT 절에 지정된 필드가 포함된 테이블을 정의합니다.

SQL에서 쿼리를 생성할 때 해당 구문을 고려해야 한다는 점에 유의해야 합니다. SQL 언어의 구문은 영어 구문을 기반으로 한다는 사실에도 불구하고 SQL 언어 버전의 구문은 DBMS마다 다를 수 있습니다.

쿼리에는 레코드 선택, 업데이트, 추가 및 삭제, 교차 쿼리, 테이블 생성 및 삭제, 테이블 조인 등 여러 유형이 있습니다. 가장 일반적인 것은 샘플 요청입니다. 선택 쿼리는 사용자가 필요로 하는 테이블에 포함된 정보를 선택하는 데 사용됩니다. 관련 테이블에 대해서만 생성됩니다.

Access 2003 또는 2007 DBMS에서 SQL 쿼리 쿼리를 보려면 샘플 쿼리를 디자인하기 위한 활성 창에서 SQL 보기/모드 명령을 실행해야 합니다(그림 1).


쌀. 1.

학생 수행 기준 "Grade=5"(그림 2)에 따라 Access 2003 데이터베이스에서 데이터를 샘플링하는 SQL 문(SELECT)을 가져옵니다.



쌀. 2.

SELECT 문(그림 1)에서 다음과 같이 SQL 언어로 데이터 세트를 설명합니다. SELECT - 데이터가 포함된 테이블 이름 앞에 필드 이름을 정의합니다. FROM - 데이터가 선택되는 기준으로 테이블의 키 필드를 통해 테이블과 해당 관계를 정의합니다(이를 위해 INNER JOIN ... ON 구성이 사용됨). WHREME - 필드 선택 조건을 정의합니다. ORDER BY - "Students" 테이블의 "Last Name" 필드 값을 오름차순으로 정렬하는 방법(기본적으로 오름차순이 수행됨)을 결정합니다.

데이터베이스에서 데이터를 검색하는 명령에서 다음과 같이 SQL 언어는 데이터베이스에서 무엇을 얻어야하는지 설명하고 SQL 언어에는 프로그램 실행을 제어하는 ​​​​자체 수단이 없기 때문에 실행을 DBMS에 맡깁니다.

이전 기사에서는 문제를 논의했습니다. SQL 쿼리를 기반으로 데이터베이스 테이블 “sql_training_st.mdb”의 구조를 생성하는 기술이 고려됩니다. 또한 SQL 쿼리를 사용하여 ACCESS DBMS 테이블 "sql_training_st.mdb"를 채웠습니다.

관계형 데이터베이스에서 SQL 언어는 데이터를 조작하고, 데이터베이스와 해당 구성 요소의 구조를 정의하고, 데이터베이스에 대한 사용자 액세스를 제어하고, 트랜잭션을 관리하거나 데이터베이스의 변경 사항을 관리하도록 설계되었다고 알려져 있습니다.

SQL 언어는 네 가지 그룹으로 구성됩니다.

  • 데이터 조작 언어 DML;
  • DDL 데이터 정의 언어;
  • 데이터 관리 언어 DCL;
  • TCL 트랜잭션 제어 언어.

DML 그룹에는 네 가지 주요 SQL 쿼리 유형이 포함됩니다.

  • INSERT - 테이블 끝에 하나 이상의 레코드를 추가하도록 설계되었습니다.
  • 업데이트 - 테이블 열의 기존 레코드를 변경하거나 테이블의 데이터를 수정하도록 설계되었습니다.
  • DELETE - 테이블에서 레코드를 삭제하도록 설계되었습니다.
  • SELECT - 테이블에서 데이터를 선택하도록 설계되었습니다.

데이터베이스에 대한 수정 쿼리와 관련된 처음 세 가지 유형의 SQL 쿼리(INSERT, UPDATE, DELETE)가 해당 페이지에서 논의되었습니다.

이 문서에서는 Access 데이터베이스 테이블에서 데이터를 검색하는 쿼리를 살펴보겠습니다.

Access 2003 또는 2007 데이터베이스에 저장된 정보를 검색하려면 SELECT 쿼리를 사용하여 테이블에서 데이터를 선택할 수 있습니다.

샘플링을 위해 다음과 같은 SQL 쿼리(SQL 문)를 작성해 보겠습니다. 이를 위해 View/SQL 모드 명령을 실행하여 SQL 모드를 선택합니다. 키보드에서 다음 SQL 문을 입력합니다.

선택하다 *
학생으로부터;

이 명령문은 "SELECT *" 및 "FROM Students"라는 두 개의 절로 구성됩니다. 첫 번째 절에는 SELECT 문과 식별자 *("식별자 *"는 테이블의 모든 열을 나열한다는 의미)가 포함되어 있습니다. 두 번째 절에는 FROM 문과 식별자 "Students"가 포함되어 있습니다.

FROM - SELECT 절에 지정된 필드가 포함된 학생 테이블을 정의합니다. 선택 쿼리에는 항상 SELECT와 FROM이라는 두 개의 문이 포함된다는 점에 유의해야 합니다. 선택 조건에 따라 다른 운영자가 선택 요청에 포함될 수 있습니다. 그림 1은 데이터 검색 요청의 스크린샷을 보여줍니다.


쌀. 1. 데이터를 선택하는 SQL SELECT 쿼리

이 예에서는 Students 테이블의 모든 열에서 데이터 샘플이 생성됩니다.

"Students-query1"이라는 이름으로 요청을 저장합니다. "저장" 명령을 실행하면 "탐색 영역" - "요청: Students-request1"에 개체가 나타납니다.

선택 요청을 저장한 후 "실행" 아이콘을 클릭하여 이 요청을 실행해야 합니다. "Run" 명령의 결과는 그림 1에 나와 있습니다. 2.



쌀. 2. Students 테이블의 모든 열에서 데이터 선택

실험실 작업 No.1

SQL: 데이터 추출 - 명령선택하다

작업의 목표:

  • SQL 문에 익숙해집니다.
  • SELECT 명령을 사용하여 Access에서 간단한 SQL 쿼리를 만드는 방법을 알아보세요.

· IN, BETWEEN, LIKE, IS NULL 연산자를 사용합니다.

운동№1. SQL 모드에서 STUDENTS 테이블의 FIRST NAME 및 LAST NAME 필드 값을 모두 선택하는 쿼리를 작성합니다.

이름, 성 선택

학생으로부터;

운동№2 . SQL 모드에서 STUDENTS 테이블의 모든 열을 선택하는 쿼리를 만듭니다.

선택하다 *

학생으로부터;


작업 번호 3. SQL 모드에서 학생이 거주하는 도시 이름과 개인 데이터 테이블에 있는 정보를 선택하는 쿼리를 만듭니다.

다른 도시를 선택하세요

[개인 데이터]에서;

작업 번호 4. STUDENTS 테이블에 있는 정보인 Ivanov라는 성을 가진 모든 학생의 이름을 검색하는 SQL 모드에서 선택 쿼리를 생성합니다.

성, 이름 선택

학생으로부터

성은 어디에 있습니까="이바노프";

작업 번호 5. SQL 모드에서 선택 쿼리를 생성하여 예산 교육 형태로 UIT-22 그룹에서 공부하는 학생의 성과 이름을 얻습니다.

성, 이름 선택

학생으로부터

GROUP="UIT-22" 및 예산=true인 경우;

작업 번호 6. SQL 모드에서 쿼리를 만듭니다. EXAMINATION 테이블의 샘플은 4학년과 5학년 학생에 대한 정보입니다.

선택하다 *

에서 [변화시험]

어디등급IN(4,5);

작업 번호 7. IOSU 과목의 시험 성적이 3등급인 학생에 대한 정보를 선택하는 zanpoc 및 SQL 모드를 만듭니다.

선택하다 *

에서 [변화시험]

어디안건=" 이오수"그리고등급(4,5)에 없음;

작업 번호 8.시간이 100에서 130 사이인 항목에 대한 레코드를 선택하려면 SQL 모드에서 쿼리를 만듭니다.

선택하다 *

에서품목

어디보다100에서 130 사이;


작업 번호 9. SQL 모드에서 쿼리를 작성하여 STUDENTS 테이블에서 성이 문자 "C"로 시작하는 학생에 대한 정보를 선택하십시오.

선택하다 *

에서재학생

어디좋다"와 함께*";

결론:실험실 작업 중에 우리는 SQL 지침에 익숙해졌고 IN, BETWEEN, LIKE 연산자를 사용하여 SELECT 명령을 사용하여 Access에서 간단한 SQL 쿼리를 만드는 방법을 배웠습니다.

교육 프로젝트 "Shop"에 대한 설명

테이블 링크 다이어그램

테이블 설명

m_category - 제품 카테고리

m_income - 입고

m_outcome - 상품 소비

m_product - 디렉토리, 제품 설명

m_supplier - 디렉토리; 공급업체 정보

m_unit - 디렉토리; 단위

이 교육 자료에 제공된 예제를 실제로 테스트하려면 다음 소프트웨어가 있어야 합니다.

Microsoft Access 2003 이상.

MS Access의 SQL 쿼리. 시작

테이블의 내용을 보려면 왼쪽 패널에서 테이블 이름을 두 번 클릭하세요.

테이블 필드 편집 모드로 전환하려면 상단 패널에서 디자인 모드를 선택합니다.

SQL 쿼리 결과를 표시하려면 왼쪽 창에서 쿼리 이름을 두 번 클릭합니다.

SQL 쿼리 편집 모드로 전환하려면 상단 패널에서 SQL 모드를 선택합니다.

SQL 쿼리. MS Access의 예. 선택: 1-10

SQL 쿼리에서 SELECT 문은 데이터베이스 테이블에서 선택하는 데 사용됩니다.

SQL 쿼리 Q001.원하는 순서로 필수 필드만 가져오는 SQL 쿼리 예:

SELECT dt, product_id, 금액


m_income에서;

SQL 쿼리 Q002.이 예제 SQL 쿼리에서는 별표(*) 문자를 사용하여 m_product 테이블의 모든 열을 나열합니다. 즉, m_product 관계의 모든 필드를 가져옵니다.

선택하다 *
m_product에서;

요구SQL Q003. DISTINCT 문은 중복된 항목을 제거하고 여러 개의 고유한 항목을 얻는 데 사용됩니다.

DISTINCT 제품_ID 선택


m_income에서;

SQL 쿼리 Q004. ORDER BY 문은 특정 필드의 값을 기준으로 레코드를 정렬(순서)하는 데 사용됩니다. 필드 이름은 ORDER BY 문 뒤에 지정됩니다.

선택하다 *
m_income에서


가격순으로 주문하세요.

SQL 쿼리 Q005. ASC 문은 ORDER BY 문에 대한 보완으로 사용되며 오름차순 정렬을 지정하는 데 사용됩니다. DESC 문은 ORDER BY 문과 함께 사용되며 내림차순 정렬을 지정하는 데 사용됩니다. ASC나 DESC가 모두 지정되지 않은 경우 ASC(기본값)가 있다고 가정합니다.

선택하다 *
m_income에서


dt DESC로 주문, 가격;

SQL 쿼리 Q006.테이블에서 필요한 레코드를 선택하기 위해서는 선택 조건을 표현하는 다양한 논리식을 사용합니다. 부울 표현식은 WHERE 문 뒤에 나타납니다. m_income 테이블에서 금액 값이 200보다 큰 모든 레코드를 가져오는 예:

선택하다 *
m_income에서


금액>200;

SQL 쿼리 Q007.복잡한 조건을 표현하기 위해서는 논리연산자 AND(접속), OR(접합), NOT(논리부정)을 사용합니다. m_outcome 테이블에서 금액 값이 20이고 가격 값이 10보다 크거나 같은 모든 레코드를 가져오는 예:

가격


m_outcome에서
여기서 금액=20 AND 가격>=10;

SQL 쿼리 Q008.두 개 이상의 테이블에서 데이터를 조인하려면 INNER JOIN, LEFT JOIN, RIGHT JOIN 명령어를 사용하세요. 다음 예에서는 m_income 테이블에서 dt, product_id, amount, Price 필드를 검색하고 m_product 테이블에서 title 필드를 검색합니다. m_income 테이블 레코드는 m_income.product_id 값이 m_product.id 값과 같을 때 m_product 테이블 레코드에 조인됩니다.



ON m_income.product_id=m_product.id;

SQL 쿼리 Q009.이 SQL 쿼리에서 주목해야 할 두 가지 사항은 다음과 같습니다. 1) 검색 텍스트는 작은따옴표(")로 묶여 있습니다. 2) 날짜는 MS Access의 경우에 해당하는 #월/일/연도# 형식입니다. 시스템에 따라 날짜 작성 형식이 다를 수 있습니다. 2011년 6월 12일 우유 수령에 대한 정보를 표시하는 예입니다. 날짜 형식 #6/12/2011#에 유의하세요.

SELECT dt, product_id, 제목, 금액, 가격


m_income 내부 JOIN m_product에서

WHERE title="우유" And dt=#6/12/2011#; !}

SQL 쿼리 Q010. BETWEEN 명령어는 값이 특정 범위에 속하는지 여부를 테스트하는 데 사용됩니다. 2011년 6월 1일부터 6월 30일 사이에 받은 제품에 대한 정보를 표시하는 SQL 쿼리의 예:

선택하다 *
m_income 내부 JOIN m_product에서


ON m_income.product_id=m_product.id
#6/1/2011#과 #6/30/2011# 사이의 dt는 어디입니까?

SQL 쿼리. MS Access의 예. 선택: 11-20

하나의 SQL 쿼리가 다른 쿼리 내에 중첩될 수 있습니다. 하위 쿼리는 쿼리 내의 쿼리에 지나지 않습니다. 일반적으로 WHERE 절에는 하위 쿼리가 사용됩니다. 그러나 하위 쿼리를 사용하는 다른 방법도 있습니다.

질문 Q011. m_product 테이블의 제품에 대한 정보가 표시되며 해당 코드는 m_income 테이블에도 있습니다.

선택하다 *
m_product에서


WHERE id IN (m_income에서 product_id 선택);

요청 Q012. m_product 테이블의 제품 목록이 표시되며 해당 코드는 m_outcome 테이블에 없습니다.

선택하다 *
m_product에서


ID가 없는 곳(m_outcome에서 product_id 선택);

요청 Q013.이 SQL 쿼리는 m_income 테이블에는 있지만 m_outcome 테이블에는 없는 고유한 제품 코드 및 이름 목록을 표시합니다.

DISTINCT 제품_ID, 제목 선택


m_income 내부 JOIN m_product에서
ON m_income.product_id=m_product.id
product_id가 IN이 아닌 곳(m_outcome에서 product_id 선택);

질문 Q014.이름이 문자 M으로 시작하는 고유한 범주 목록이 m_category 테이블에 표시됩니다.

고유한 제목 선택


m_product에서
제목이 "M*"과 같은 곳;

질문 Q015.쿼리의 필드에 대해 산술 연산을 수행하고 쿼리의 필드 이름을 바꾸는 예(별칭)입니다. 이 예에서는 이익이 매출의 7%라고 가정하고 비용 = 수량*가격 및 각 항목 비용 항목의 이익을 계산합니다.


금액*가격/100*7 AS 이익
m_outcome에서;

질문 Q016.산술 연산을 분석하고 단순화함으로써 쿼리 실행 속도를 높일 수 있습니다.

SELECT dt, product_id, 금액, 가격, 금액*가격 AS 결과_합계,


result_sum*0.07 AS 이익
m_outcome에서;

질문 Q017. INNER JOIN 문을 사용하여 여러 테이블의 데이터를 조인할 수 있습니다. 다음 예에서는 ctgry_id 값에 따라 m_income 테이블의 각 항목이 제품이 속한 m_category 테이블의 카테고리 이름과 일치합니다.

SELECT c.제목, b.제목, dt, 금액, 가격, 금액*가격 AS 소득_합계


FROM (m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id)
내부 조인 m_category AS c ON b.ctgry_id=c.id
ORDER BY c.제목, b.제목;

요청 Q018. SUM - 합계, COUNT - 수량, AVG - 산술 평균, MAX - 최대값, MIN - 최소값과 같은 함수를 집계 함수라고 합니다. 그들은 많은 값을 받아들이고 처리 후에 단일 값을 반환합니다. SUM 집계 함수를 사용하여 금액 필드와 가격 필드의 곱의 합계를 계산하는 예:

SELECT SUM(금액*가격) AS Total_Sum


m_income에서;

질문 Q019.여러 집계 함수를 사용하는 예:

SELECT Sum(금액) AS Amount_Sum, AVG(금액) AS Amount_AVG,


MAX(금액) AS Amount_Max, Min(금액) AS Amount_Min,
개수(*) AS Total_Number
m_income에서;

Q020을 질의하세요.이 예에서는 2011년 6월에 자본화된 코드 1의 모든 상품 금액이 계산됩니다.

SELECT Sum(금액*가격) AS 수입_합계


m_income에서
여기서 product_id=1 AND dt BETWEEN #6/1/2011# AND #6/30/2011#;.

Q021을 쿼리하세요.다음 SQL 쿼리는 코드가 4 또는 6인 품목의 판매량을 계산합니다.

SELECT Sum(금액*가격) as result_sum


m_outcome에서
WHERE product_id=4 또는 product_id=6;

질문 Q022. 2011년 6월 12일에 코드 4 또는 6이 포함된 상품이 판매된 금액을 계산합니다.

SELECT Sum(금액*가격) AS 결과_합계


m_outcome에서
WHERE (product_id=4 OR product_id=6) AND dt=#6/12/2011#;

질문 Q023.임무는 이것이다. "베이커리 제품" 카테고리에서 자본화된 상품의 총 금액을 계산합니다.

이 문제를 해결하려면 다음과 같은 이유로 m_income, m_product 및 m_category라는 세 가지 테이블을 사용하여 작업해야 합니다.


- 자본화된 재화의 수량과 가격은 m_income 테이블에 저장됩니다.
- 각 제품의 카테고리 코드는 m_product 테이블에 저장됩니다.
- 제목 카테고리의 이름은 m_category 테이블에 저장됩니다.

이 문제를 해결하기 위해 다음 알고리즘을 사용합니다.


- 하위 쿼리를 사용하여 m_category 테이블에서 카테고리 코드 "베이커리 제품"을 결정합니다.
- m_income 및 m_product 테이블을 연결하여 구매한 각 제품의 카테고리를 결정합니다.
- 카테고리 코드가 위 하위 쿼리에서 정의한 코드와 동일한 상품에 대한 수령 금액(= 수량*가격)을 계산합니다.
선택하다
FROM m_product AS a INNER JOIN m_income AS b ON a.id=b.product_id
WHERE ctgry_id = (m_category WHERE title="베이커리 제품에서 ID 선택)"); !}

질문 Q024.다음 알고리즘을 사용하여 "베이커리 제품" 카테고리의 자본화 상품 총액을 계산하는 문제를 해결하겠습니다.
- m_income 테이블의 각 항목에 대해 m_category 테이블의 product_id 값에 따라 카테고리 이름과 일치합니다.
- 카테고리가 "베이커리 제품"인 레코드를 선택합니다.
- 영수증 금액 = 수량 * 가격을 계산합니다.

FROM (m_product AS a INNER JOIN m_income AS b ON a.id=b.product_id)

WHERE c.title="베이커리 제품"; !}

질문 Q025.이 예에서는 소비된 상품 수를 계산합니다.

SELECT COUNT(product_id) AS product_cnt


FROM (SELECT DISTINCT product_id FROM m_outcome) AS t;

질문 Q026. GROUP BY 문은 레코드를 그룹화하는 데 사용됩니다. 일반적으로 레코드는 하나 이상의 필드 값을 기준으로 그룹화되며 일부 집계 작업이 각 그룹에 적용됩니다. 예를 들어, 다음 쿼리는 상품 판매에 대한 보고서를 생성합니다. 즉, 상품 이름과 판매 금액이 포함된 테이블이 생성됩니다.

SELECT 제목, SUM(금액*가격) AS 결과_합계


FROM m_product AS a INNER JOIN m_outcome AS b
ON a.id=b.product_id
제목별로 그룹화;

Q027을 요청하세요.카테고리별 판매 보고서입니다. 즉, 상품 카테고리명, 해당 카테고리의 상품이 판매된 총액, 평균 판매량을 포함하는 테이블이 생성된다. ROUND 함수는 평균값을 가장 가까운 소수점 이하 자릿수(소수 구분 기호 뒤의 두 번째 숫자)로 반올림하는 데 사용됩니다.

SELECT c.제목, SUM(금액*가격) AS 결과_합계,


ROUND(AVG(금액*가격),2) AS result_sum_avg
FROM (m_product AS a INNER JOIN m_outcome AS b ON a.id=b.product_id)
내부 조인 m_category AS c ON a.ctgry_id=c.id
GROUP BY c.제목;

질문 Q028.각 제품에 대해 총 영수증 수와 평균 영수증 수를 계산하고 총 영수증이 500개 이상인 제품에 대한 정보를 표시합니다.

SELECT product_id, SUM(amount) AS amount_sum,


Round(Avg(금액),2) AS 금액_avg
m_income에서
GROUP BY product_id
HAVING 합계(금액)>=500;

질문 Q029.이 쿼리는 각 제품에 대해 2011년 2분기에 발생한 수령 금액과 평균을 계산합니다. 제품 영수증 총액이 1000 이상인 경우 해당 제품에 대한 정보가 표시됩니다.

SELECT 제목, SUM(금액*가격) AS 소득_합계


FROM m_income a INNER JOIN m_product b ON a.product_id=b.id
2011년 4월 1일#과 2011년 6월 30일# 사이의 dt는 어디입니까?
제목별로 그룹화
HAVING SUM(금액*가격)>=1000;

Q030을 질의하세요.어떤 경우에는 일부 테이블의 각 레코드를 다른 테이블의 각 레코드와 일치시켜야 합니다. 이를 데카르트 곱이라고 합니다. 이러한 연결로 인해 생성된 테이블을 데카르트 테이블이라고 합니다. 예를 들어 테이블 A에 100개의 레코드가 있고 테이블 B에 15개의 레코드가 있는 경우 데카르트 테이블은 100*15=150개의 레코드로 구성됩니다. 다음 쿼리는 m_income 테이블의 각 레코드를 m_outcome 테이블의 각 레코드와 조인합니다.
m_income, m_outcome;

Q031을 쿼리하세요.두 개의 필드로 레코드를 그룹화하는 예입니다. 다음 SQL 쿼리는 각 공급업체에 대해 해당 공급업체로부터 수령한 상품의 수량을 계산합니다.


SUM(금액*가격) AS 수입_합계

Q032를 요청하세요.두 개의 필드로 레코드를 그룹화하는 예입니다. 다음 쿼리는 각 공급업체에 대해 당사가 판매한 제품의 수량을 계산합니다.

SELECT 공급자_ID, 제품_ID, SUM(금액) AS 금액_합계,




GROUP BY 공급자_ID, 제품_ID;

질문 Q033.이 예에서는 위의 두 쿼리(q031 및 q032)가 하위 쿼리로 사용됩니다. LEFT JOIN 방법을 사용한 이러한 쿼리의 결과는 하나의 보고서로 결합됩니다. 다음 쿼리는 각 공급업체에 대해 입고 및 판매된 제품의 수량 및 금액에 대한 보고서를 표시합니다. 일부 제품이 이미 수령되었지만 아직 판매되지 않은 경우 이 항목의 results_sum 셀은 비어 있게 됩니다. 이 쿼리는 상대적으로 복잡한 쿼리를 하위 쿼리로 사용하는 예일 뿐입니다. 많은 양의 데이터가 포함된 이 SQL 쿼리의 성능은 의심스럽습니다.

선택하다 *
에서



SUM(금액*가격) AS 수입_합계

ON a.product_id=b.id GROUP BY 공급자_ID, 제품_ID) AS a
왼쪽 조인
(SELECT 공급업체_ID, 제품_ID, SUM(금액) AS 금액_합계,
SUM(금액*가격) AS 결과_합계
FROM m_outcome AS a INNER JOIN m_product AS b
ON a.product_id=b.id GROUP BY 공급자_ID, 제품_ID) AS b
ON (a.product_id=b.product_id) AND (a.supplier_id=b.supplier_id);

질문 Q034.이 예에서는 위의 두 쿼리(q031 및 q032)가 하위 쿼리로 사용됩니다. RIGTH JOIN 방법을 사용한 이러한 쿼리의 결과는 하나의 보고서로 결합됩니다. 다음 쿼리는 각 고객이 사용한 결제 시스템과 투자 금액에 따라 각 고객의 결제 금액에 대한 보고서를 표시합니다. 다음 쿼리는 각 공급업체에 대해 입고 및 판매된 제품의 수량 및 금액에 대한 보고서를 표시합니다. 일부 제품이 이미 판매되었지만 아직 도착하지 않은 경우 이 항목의 소득 합계 셀은 비어 있습니다. 이러한 빈 셀이 있다는 것은 판매 회계에 오류가 있음을 나타내는 지표입니다. 판매 전에 먼저 해당 제품이 도착해야 하기 때문입니다.

선택하다 *
에서


(SELECT 공급업체_ID, 제품_ID, SUM(금액) AS 금액_합계,
SUM(금액*가격) AS 수입_합계
FROM m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id
GROUP BY 공급자_ID, 제품_ID) AS
바로 가입
(SELECT 공급업체_ID, 제품_ID, SUM(금액) AS 금액_합계,
SUM(금액*가격) AS 결과_합계
FROM m_outcome AS a INNER JOIN m_product AS b ON a.product_id=b.id
GROUP BY 공급자_ID, 제품_ID) AS b
ON (a.supplier_id=b.supplier_id) AND (a.product_id=b.product_id);

질문 Q035.제품별 수입 및 지출 금액을 보여주는 보고서가 표시됩니다. 이를 위해 m_income 및 m_outcome 테이블에 따라 제품 목록이 생성되고, 이 목록의 각 제품에 대해 m_income 테이블에 따라 수입 합계가 계산되고 m_outcome 테이블에 따라 비용 금액이 계산됩니다.

SELECT product_id, SUM(in_amount) AS 수입_금액,


SUM(out_amount) AS 결과_금액
에서
(SELECT product_id, 금액 AS in_amount, 0 AS out_amount
m_income에서
유니온 올
SELECT product_id, 0 AS in_amount, amount AS out_amount
m_outcome) AS t
GROUP BY 제품_ID;

질문 Q036. EXISTS 함수는 전달된 집합에 요소가 포함된 경우 TRUE를 반환합니다. EXISTS 함수는 전달된 집합이 비어 있는 경우, 즉 요소가 없는 경우 FALSE를 반환합니다. 다음 쿼리는 m_income 및 m_outcome 테이블 모두에 포함된 제품 코드를 표시합니다.

DISTINCT 제품_ID 선택


m_income AS에서
존재하는 곳(m_outcome AS b에서 product_id 선택)

질문 Q037. m_income 및 m_outcome 테이블 모두에 포함된 제품 코드가 표시됩니다.

DISTINCT 제품_ID 선택


m_income AS에서
WHERE product_id IN(m_outcome에서 product_id 선택)

질문 Q038. m_income 테이블에는 포함되어 있지만 m_outcome 테이블에는 포함되지 않은 제품 코드가 표시됩니다.

DISTINCT 제품_ID 선택


m_income AS에서
존재하지 않는 곳(m_outcome AS b에서 product_id 선택)
WHERE b.product_id=a.product_id);

질문 Q039.최대 판매 금액이 표시된 상품 목록이 표시됩니다. 알고리즘은 다음과 같습니다. 각 제품에 대해 판매량이 계산됩니다. 그런 다음 이 금액의 최대값이 결정됩니다. 그런 다음 각 제품에 대해 매출 합계가 다시 계산되고 매출 합계가 최대값과 같은 상품의 코드와 매출 합계가 표시됩니다.

SELECT product_id, SUM(금액*가격) AS amount_sum


m_outcome에서
GROUP BY product_id
HAVING SUM(금액*가격) = (SELECT MAX(s_amount)
FROM (SELECT SUM(금액*가격) AS s_amount FROM m_outcome GROUP BY product_id));

Q040을 질의하세요.예약어 IIF(조건부 연산자)는 논리식을 평가하고 결과(TRUE 또는 FALSE)에 따라 작업을 수행하는 데 사용됩니다. 다음 예에서는 수량이 500개 미만인 경우 품목 배송이 "소형"으로 간주됩니다. 그렇지 않은 경우 즉, 수령 수량이 500보다 크거나 같으면 배송이 "대형"으로 간주됩니다.

SELECT dt, product_id, 금액,


IIF(m_income의 금액;

SQL 쿼리 Q041. IIF 연산자를 여러 번 사용하는 경우에는 SWITCH 연산자로 대체하는 것이 더 편리합니다. SWITCH 연산자(다중 선택 연산자)는 논리식을 평가하고 그 결과에 따라 동작을 수행하는 데 사용됩니다. 다음 예에서는 로트의 상품 수량이 500개 미만인 경우 배송된 로트는 "소형"으로 간주됩니다. 그렇지 않은 경우, 즉 상품 수량이 500개 이상인 경우 로트는 "대형"으로 간주됩니다. ":

SELECT dt, product_id, 금액,


SWITCH(수량=500,"대형") AS 마크
m_income에서;

질문 Q042.다음 요청에서 수신된 배치의 상품 수량이 300개 미만인 경우 배치는 "소형"으로 간주됩니다. 그렇지 않은 경우, 즉 조건 금액 SELECT dt, product_id, amount,
IIF(금액 IIF(금액 FROM m_income;

SQL 쿼리 Q043.다음 요청에서 수신된 배치의 상품 수량이 300개 미만인 경우 배치는 "소형"으로 간주됩니다. 그렇지 않은 경우, 즉 조건 금액 SELECT dt, product_id, amount,
SWITCH(금액금액금액>=1000,"대형") AS마크
m_income에서;

SQL 쿼리 Q044.다음 쿼리에서 매출은 소규모(최대 150개), 중간(150~300개), 대규모(300개 이상)의 세 그룹으로 나뉩니다. 다음으로 각 그룹에 대한 총액이 계산됩니다.

SELECT 범주, SUM(outcome_sum) AS Ctgry_Total


FROM (SELECT 금액*가격 AS 결과_합계,
IIf(금액*가격 IIf(금액*가격 FROM m_outcome) AS t
카테고리별로 그룹화;

SQL 쿼리 Q045. DateAdd 함수는 주어진 날짜에 일, 월 또는 연도를 추가하고 새 날짜를 얻는 데 사용됩니다. 다음 요청:
1) dt 필드의 날짜에 30일을 더하고 dt_plus_30d 필드에 새 날짜를 표시합니다.
2) dt 필드의 날짜에 1개월을 더하고 dt_plus_1m 필드에 새 날짜를 표시합니다.

SELECT dt, dateadd("d",30,dt) AS dt_plus_30d, dateadd("m",1,dt) AS dt_plus_1m


m_income에서;

SQL 쿼리 Q046. DateDiff 함수는 서로 다른 단위(일, 월 또는 연도)로 두 날짜 간의 차이를 계산하도록 설계되었습니다. 다음 쿼리는 dt 필드의 날짜와 일, 월, 연도 단위의 현재 날짜 간의 차이를 계산합니다.

SELECT dt, DateDiff("d",dt,Date()) AS last_day,


DateDiff("m",dt,Date()) AS last_months,
DateDiff("yyyy",dt,Date()) AS last_years
m_income에서;

SQL 쿼리 Q047. DateDiff 함수를 사용하여 상품 수령일(테이블 m_income)부터 현재 날짜까지의 일수를 계산하고 만료 날짜를 비교합니다(테이블 m_product).


DateDiff("d",dt,Date()) AS last_days
FROM m_income AS a INNER JOIN m_product AS b
ON a.product_id=b.id;

SQL 쿼리 Q048.상품 수령일부터 현재 날짜까지의 일수를 계산한 후 이 수량이 만료일을 초과하는지 확인합니다.

SELECT a.id, product_id, dt, lifedays,


DateDiff("d",dt,Date()) AS last_days, IIf(last_days>lifedays,"Yes","No") AS date_expire
FROM m_income a INNER JOIN m_product b
ON a.product_id=b.id;

SQL 쿼리 Q049.상품 수령일로부터 현재 날짜까지의 개월 수를 계산합니다. Month_last1 열은 절대 월 수를 계산하고, Month_last2 열은 전체 월 수를 계산합니다.

SELECT dt, DateDiff("m",dt,Date()) AS 월_지난1,


DateDiff("m",dt,Date())-iif(day(dt)>day(date()),1,0) AS 월_지난2
m_income에서;

SQL 쿼리 Q050. 2011년에 구매한 상품의 수량과 금액에 대한 분기별 보고서가 표시됩니다.

SELECT kvartal, SUM(outcome_sum) AS 합계


FROM (SELECT 금액*가격 AS 결과_합계, 월(dt) AS m,
SWITCH(m =10.4) AS kvartal
FROM m_income WHERE 연도(dt)=2011) AS t
분기별 그룹;

Q051을 쿼리하세요.다음 쿼리는 사용자가 받은 상품 금액보다 많은 금액의 상품 소비에 대한 정보를 시스템에 입력할 수 있었는지 확인하는 데 도움이 됩니다.

SELECT product_id, SUM(in_sum) AS 소득_합, SUM(out_sum) AS 결과_합


FROM (SELECT product_id, amount*price는 in_sum, 0은 out_sum
m_income에서
유니온 올
SELECT product_id, 0은 in_sum, amount*price는 out_sum으로 선택
m_outcome에서) AS t
GROUP BY product_id
HAVING SUM(in_sum)
Q052를 요청하세요.쿼리에서 반환된 행 번호 지정은 다양한 방식으로 구현됩니다. 예를 들어, MS Access 자체를 사용하여 MS Access에서 준비된 보고서의 줄 번호를 다시 매길 수 있습니다. VBA 또는 PHP와 같은 프로그래밍 언어를 사용하여 번호를 다시 매길 수도 있습니다. 그러나 SQL 쿼리 자체에서 이 작업을 수행해야 하는 경우도 있습니다. 따라서 다음 쿼리는 ID 필드 값의 오름차순에 따라 m_income 테이블의 행에 번호를 매깁니다.

N, b.id, b.product_id, b.amount, b.price로 SELECT COUNT(*)


FROM m_income a INNER JOIN m_income b ON a.id GROUP BY b.id, b.product_id, b.amount, b.price;

질문 Q053.해당 상품 중 판매량 기준 상위 5개 상품이 표시됩니다. 처음 5개 레코드는 TOP 명령어를 사용하여 인쇄됩니다.

SELECT TOP 5, product_id, sum(amount*price) AS summa


m_outcome에서
GROUP BY product_id
ORDER BY 합계(금액*가격) DESC;

질문 Q054.제품 중 판매량 기준 상위 5개 제품이 표시되며, 그에 따른 행 번호가 지정됩니다.

SELECT COUNT(*) AS N, b.product_id, b.summa


에서


m_outcome GROUP BY product_id) AS a
내부 조인
(SELECT product_id, sum(amount*price) AS summa,
summa*10000000+product_id AS ID
FROM m_outcome GROUP BY product_id) AS b
ON a.id>=b.id
GROUP BY b.product_id, b.summa
개수(*)개수별 주문(*);

Q055를 쿼리하세요.다음 SQL 쿼리는 MS Access SQL에서 수학 함수 COS, SIN, TAN, SQRT, ^ 및 ABS의 사용을 보여줍니다.

SELECT(m_income에서 count(*) 선택)를 N, 3.1415926으로 pi, k,


2*pi*(k-1)/N은 x, COS(x)는 COS_, SIN(x)는 SIN_, TAN(x)는 TAN_,
SQR(x)는 SQRT_로, x^3은 "x^3"으로, ABS(x)는 ABS_로
FROM (SELECT COUNT(*) AS k
FROM m_income AS a INNER JOIN m_income AS b ON a.idGROUP BY b.id) t;

SQL 쿼리. MS Access의 예. 업데이트: 1-10

U001을 요청하세요.다음 SQL 변경 쿼리는 m_income 테이블의 코드 3을 사용하여 상품 가격을 10% 인상합니다.

업데이트 m_income SET 가격 = 가격*1.1


여기서 product_id=3;

U002를 요청하세요.다음 SQL 업데이트 쿼리는 m_income 테이블에서 이름이 "Oil"이라는 단어로 시작하는 모든 제품의 수량을 22단위만큼 늘립니다.

UPDATE m_income SET 금액 = 금액+22


WHERE product_id IN (SELECT id FROM m_product WHERE title LIKE "Oil*");

U003을 요청하세요. m_outcome 테이블 변경에 대한 다음 SQL 쿼리는 Sladkoe LLC가 제조한 모든 상품의 가격을 2%만큼 인하합니다.

업데이트 m_outcome SET 가격 = 가격*0.98


product_id가 어디에 있나요?
(m_product a에서 a.id를 선택하세요. INNER JOIN m_supplier b
ON a.supplier_id=b.id WHERE b.title="LLC"Сладкое"");. !}

Access의 쿼리는 데이터베이스 테이블의 데이터를 선택, 업데이트 및 처리하기 위한 주요 도구입니다. Access는 관계형 데이터베이스의 개념에 따라 SQL(Structured Query Language)을 사용하여 쿼리를 실행합니다. SQL 언어 지침을 사용하여 Access의 모든 쿼리가 구현됩니다.

주요 요청 유형은 선택 요청입니다. 이 쿼리의 결과는 쿼리가 닫힐 때까지 존재하는 새 테이블입니다. 쿼리의 기반이 되는 테이블의 레코드를 결합하여 레코드가 형성됩니다. 테이블 레코드를 결합하는 방법은 데이터 스키마에서 관계를 정의하거나 쿼리를 생성할 때 지정됩니다. 쿼리에 작성된 선택 조건을 사용하면 테이블 조인 결과를 구성하는 레코드를 필터링할 수 있습니다.

Access에서는 여러 유형의 쿼리를 만들 수 있습니다.

  • 샘플 요청- 하나의 테이블이나 쿼리 또는 여러 상호 관련된 테이블과 기타 쿼리에서 데이터를 선택합니다. 결과는 쿼리가 닫힐 때까지 존재하는 테이블입니다. 결과 테이블 레코드는 지정된 선택 조건에 따라 생성되며, 여러 테이블을 조합하여 사용할 경우;
  • 테이블 생성 요청- 상호 연관된 테이블 및 기타 쿼리에서 데이터를 선택하지만 선택 쿼리와 달리 결과를 새로운 영구 테이블에 저장합니다.
  • 업데이트, 추가, 삭제 요청- 작업 요청으로 인해 테이블의 데이터가 변경됩니다.

디자인 모드의 Access 쿼리에는 사용된 테이블을 표시하는 데이터 스키마와 쿼리 테이블의 구조 및 레코드 선택 조건이 디자인된 쿼리 양식이 포함되어 있습니다(그림 4.1).

쿼리를 사용하면 다음 유형의 데이터 처리를 수행할 수 있습니다.

  • 쿼리 테이블에 사용자가 선택한 테이블 필드를 포함합니다.
  • 수신된 각 레코드에서 계산을 수행합니다.
  • 선택 조건을 충족하는 레코드를 선택합니다.
  • 상호 연관된 테이블의 레코드 결합을 기반으로 새로운 가상 테이블을 생성합니다.
  • 하나 이상의 필드에서 동일한 값을 갖는 그룹 레코드는 그룹의 다른 필드에 대해 동시에 통계 기능을 수행하며 결과적으로 각 그룹에 대해 하나의 레코드를 포함합니다.
  • 기존 테이블의 데이터를 사용하여 새 데이터베이스 테이블을 생성합니다.
  • 선택한 레코드 하위 집합의 필드를 업데이트합니다.
  • 데이터베이스 테이블에서 선택한 레코드 하위 집합을 삭제합니다.
  • 선택한 레코드 하위 집합을 다른 테이블에 추가합니다.

Access의 쿼리는 다른 쿼리, 양식 및 보고서에 대한 레코드 원본 역할을 합니다. 쿼리를 사용하면 완전한 정보를 수집하여 여러 테이블에서 특정 주제 영역 문서를 생성한 다음 이를 사용하여 이 문서의 전자 표현인 양식을 만들 수 있습니다. 상호 연관된 여러 테이블을 기반으로 마법사에서 폼이나 보고서를 만든 경우 레코드 원본으로 해당 테이블에 대한 쿼리가 자동으로 생성됩니다.
이를 강화하려면 비디오 튜토리얼을 시청하세요.