SQL 액세스 문. SQL 문 소개 IN, BETWEEN, LIKE 연산자를 사용하여 SELECT 명령을 사용하여 Access에서 가장 간단한 SQL 쿼리 만들기

SQL 언어는 본격적인 개발 언어의 기능은 없지만 데이터 접근에 중점을 두고 있어 프로그램 개발 도구에 포함된다. 이 경우 호출됩니다. 임베디드 SQL. SQL 언어 표준은 PL/1, Ada, C, COBOL, Fortran, MUMPS 및 Pascal 프로그래밍 언어의 최신 구현을 지원합니다.

전문화된 클라이언트-서버 애플리케이션 개발 시스템에서는 일반적으로 프로그래밍 환경이 추가로 보완됩니다. 통신 수단(데이터베이스 서버와의 연결 설정 및 해제, 네트워크에서 발생하는 오류 감지 및 처리 등), 사용자 인터페이스 개발 도구, 설계 및 디버깅 도구.

Embedded SQL을 사용하는 주요 방법에는 정적 및 동적의 두 가지가 있습니다.

~에 공전언어 사용 (정적 SQL)프로그램 텍스트에는 컴파일 후 실행 가능한 모듈에 하드코딩된 SQL 언어 함수에 대한 호출이 포함됩니다. 호출된 함수의 변경 사항은 다음 수준에 있을 수 있습니다. 개별 매개변수프로그래밍 언어 변수를 사용하여 호출합니다.

~에 동적언어 사용 (동적 SQL) SQL 함수 호출의 동적 구성 및 이러한 호출의 해석(예: 프로그램 실행 중 원격 데이터베이스의 데이터 액세스)이 가정됩니다. 동적 방법은 일반적으로 응용 프로그램에서 SQL 호출의 유형을 미리 알지 못하고 사용자와의 대화 상자에서 빌드되는 경우에 사용됩니다.

SQL 언어(및 데이터베이스 작업을 위한 다른 언어)의 주요 목적은 쿼리를 준비하고 실행하는 것입니다. 하나 이상의 테이블에서 데이터를 선택한 결과로 레코드 세트를 얻을 수 있습니다. 대표.

성능본질적으로 쿼리 실행의 결과로 생성된 테이블입니다. 일종의 저장된 쿼리라고 할 수 있습니다. 동일한 테이블에 여러 보기를 작성할 수 있습니다. 보기 자체는 보기 ID와 이를 검색하기 위해 수행해야 하는 요청을 지정하여 설명됩니다.



보기 작업의 편의를 위해 커서 개념이 SQL 언어에 도입되었습니다. 커서처리하는 동안 레코드 집합을 이동하는 데 사용되는 일종의 포인터입니다.

SQL 언어에서 커서의 설명과 사용법은 다음과 같다. 프로그램의 설명 부분에서 커서(CURSOR) 유형의 변수는 SQL 문(일반적으로 SELECT 문과 함께)과 연결됩니다. 프로그램의 실행 부분에서 커서가 열립니다(OPEN<имя курсора», перемещение курсора по записям (FETCI-1 <имя курсора>...), 적절한 처리, 마지막으로 커서 닫기(CLOSE<имя курсора>).

관계형 DBMS에서 관계에 대한 작업을 수행하기 위해 E. Codd가 제안한 이론적 쿼리 언어를 수학적으로 기반으로 하는 두 그룹의 언어가 사용됩니다.

관계 대수학;

관계 미적분.

관계 대수학에서피연산자와 모든 연산의 결과는 관계입니다. 관계형 대수학 언어는 관계형 데이터베이스 질의로 인한 관계가 관계에 적용된 일련의 관계 연산자를 실행하여 평가된다는 점에서 절차적이다. 연산자는 관계인 피연산자와 관계 연산으로 구성됩니다.

Codd의 관계 대수 연산은 두 그룹으로 나눌 수 있습니다. 기본 집합 이론 및 특수 관계. 첫 번째 연산 그룹에는 집합 이론의 고전적 연산인 합집합, 차분, 교집합 및 곱이 포함됩니다. 두 번째 그룹은 실제 데이터 조작 문제에 대한 일반적인 집합 이론 연산의 개발이며 여기에는 투영, 선택, 분할 및 결합 연산이 포함됩니다.

미적분 언어비절차적(기술적 또는 선언적)이며 튜플 또는 관계 도메인이 충족해야 하는 1차 술어(함수 명제)를 사용하여 쿼리를 표현할 수 있습니다. 이러한 언어를 사용하여 실행된 데이터베이스 쿼리에는 원하는 결과에 대한 정보만 포함됩니다. 이 언어는 쿼리 작성 규칙 세트가 있다는 특징이 있습니다. 특히 SQL은 이 그룹의 언어에 속합니다.

애플리케이션 기능 SQL 쿼리

SQL 쿼리는 SQL 문을 사용하여 만든 쿼리입니다. SQL 쿼리의 예로는 조인 쿼리, 서버 쿼리, 제어 쿼리 및 하위 쿼리가 있습니다.

통합 쿼리는 하나 이상의 테이블 또는 쿼리의 필드(열)를 레코드 결과 집합의 단일 필드 또는 열로 결합하는 쿼리입니다. 예를 들어, 6명의 영업 사원이 매달 사용 가능한 품목의 인벤토리를 경영진에 제출합니다. 조인 쿼리를 생성하여 결과 레코드 집합에서 이러한 설명을 결합한 다음 쿼리를 개발하여 조인 쿼리를 기반으로 테이블을 생성할 수 있습니다.

서버에 대한 요청은 ODBC를 통해 Microsoft와 같은 서버로 SQL 명령 전송을 수행합니다. SQL 서버. 서버 쿼리를 사용하면 테이블을 연결하는 대신 서버에서 직접 작업할 수 있습니다. 서버에 대한 요청을 실행한 결과는 레코드를 로드하거나 데이터를 변경하는 것일 수 있습니다.

제어 쿼리는 Access 또는 SQL Server 테이블과 같은 데이터베이스 개체를 만들거나 수정합니다.

하위 쿼리는 다른 선택 또는 업데이트 쿼리 내의 SQL SELECT 문으로 구성됩니다. 이러한 지침은 요청 양식의 필드 라인에 입력하여 새 필드를 정의하거나 기준 라인에 필드 선택 조건을 정의합니다. 하위 쿼리는 다음 작업을 수행하는 데 사용됩니다.

예약어 EXISTS 또는 NO EXISTS를 사용하여 일부 결과가 있는지 하위 쿼리에서 확인합니다.

기본 쿼리에서 하위 쿼리에서 반환된 값과 같거나 크거나 작은 값을 검색합니다(예약어 ANY, IN 또는 ALL 사용).

하위 쿼리 내에서 하위 쿼리 만들기(중첩된 하위 쿼리).

Access의 SQL 언어는 화면 양식, 보고서의 개발은 물론 VBA의 매크로 및 프로그램 생성에 사용할 수 있습니다.

QBE와 SQL 언어의 관계

Access에서는 QBE와 SQL 사이에 밀접한 관계가 있습니다. 사용자가 입력한 QBE 언어의 쿼리 테이블(양식, 양식)은 직접 실행되기 전에 SQL 표현식으로 변환됩니다. 즉, SQL 언어는 쿼리 실행을 위한 내부 표준입니다. 이 메커니즘은 Access 시스템 내에서 로컬 및 원격 컴퓨터에서 실행할 쿼리 준비를 통합할 수 있다는 장점이 있습니다. 후자의 경우 SQL(메시지가 실제로 요청의 서버)인 컴퓨터로 전송됩니다.

Access에서 쿼리는 디자인, SQL 및 테이블의 세 가지 모드(상태) 중 하나일 수 있습니다. 디자인 모드는 마법사나 다른 도구를 사용하지 않고 처음부터 새 쿼리를 디자인하거나 기존 쿼리의 레이아웃을 변경하는 데 사용됩니다. SQL 모드는 SQL 문을 입력하거나 보는 데 사용됩니다. 테이블 모드는 쿼리 결과로 작업하는 데 사용됩니다.

양식 및 보고서의 SQL

디스플레이 및 보고서의 주요 레코드 소스는 테이블과 쿼리입니다. 두 번째 경우 쿼리는 데이터베이스에 대한 기성 쿼리이거나 양식 또는 보고서 개발 중에 생성될 수 있습니다.

매크로의 SQL

매크로는 데이터베이스 작업에서 자주 반복되는 작업의 실행을 자동화하는 데 사용되는 매크로의 일부입니다. 매크로는 인수가 있는 하나 이상의 매크로입니다.

매크로는 데이터베이스 창에서 호출되거나 특정 이벤트가 발생할 때 자동으로 호출됩니다. 매크로가 호출되는 이벤트는 예를 들어 양식 영역의 버튼을 누르거나 데이터베이스 창을 열 수 있습니다. 데이터베이스 개체에 대한 일부 작업을 수행하는 것과 함께 매크로는 다른 매크로, Visual Basic 프로그램 및 외부 응용 프로그램을 호출할 수 있습니다.

SQL을 사용하는 많은 매크로 중 RunSQL 쿼리(SQL 실행) 및 OpenQuery(OpenQuery)의 두 가지 매크로가 직접 관련되어 있습니다.

RunSQL 쿼리 매크로적절한 SQL 문을 사용하여 변경 쿼리 또는 액세스 제어 쿼리를 실행합니다. 이 매크로를 사용하면 먼저 쿼리를 저장하지 않고도 매크로에서 작업을 수행할 수 있습니다. 매크로를 사용하여 저장된 쿼리를 실행할 수도 있습니다.

변경 요청추가(INSERT INTO), 삭제(DELETE), 테이블 생성(SELECT ... INTO) 및 업데이트(UPDATE) 기능을 구현하는 SQL 문입니다.

제어 요청테이블 생성(CREATE TABLE), 테이블 수정(ALTER TABLE), 테이블 삭제(DROP TABLE), 인덱스 생성(CREATE INDEX), 인덱스 삭제(DROP INDEX) 기능을 수행하는 SQL 문입니다.

유일하고 필요한 매크로 인수 SQL 쿼리 실행 SQL 문입니다. SQL 텍스트 형식의 매크로 인수 - 명령은 매크로 입력 창에 수동으로 입력하거나 SQL 창에서 복사하므로 더 편리한 경우가 많습니다.

매크로 오픈요청선택 쿼리 또는 교차 쿼리(데이터시트, 디자인 및 미리 보기 모드에서)를 열거나 변경 쿼리를 실행하거나 데이터 입력 쿼리를 실행할 수 있습니다.

매크로는 쿼리 이름, 모드 및 데이터 모드의 세 가지 인수를 사용합니다. 첫 번째 인수는 열려는 요청의 이름을 지정하며 필수입니다. 두 번째 인수는 쿼리 열기 모드(테이블, 디자인 및 보기)를 지정합니다. 세 번째 인수는 쿼리에 대한 데이터 입력 모드를 설명합니다(추가, 수정 및 읽기 전용).

VBA 프로그램의 SQL

매크로와 마찬가지로 VBA는 Access 데이터베이스 개체에 대한 반복 작업의 성능을 자동화하도록 설계되었습니다.

Access는 VBA 프로그램을 실행하는 다음과 같은 방법을 제공합니다.

이벤트 처리 절차에 프로그램 포함

표현식에서 함수 호출

다른 프로시저 또는 디버그 창에서 Sub 프로시저를 호출합니다.

매크로에서 매크로 RunCode(RunCode)의 실행.

함수는 양식, 보고서 또는 쿼리에서 계산된 필드를 정의하는 식에 사용됩니다. 표현식은 쿼리와 필터, 매크로, VBA 문 및 메서드, SQL 문에서 조건을 지정하는 데 사용됩니다. Sub 프로시저는 다른 프로시저에서 호출되는 공용 VBA 서브루틴을 포함할 수 있습니다.

Visual Basic for Applications 프로그램에서 SQL 문을 사용하여 데이터베이스 쿼리를 실행하는 것을 고려하십시오.

쿼리는 데이터베이스에서 특정 조건을 충족하는 레코드를 선택하거나(선택 요청) 특정 조건을 충족하는 레코드로 지정된 작업을 수행하라는 명령을 내립니다(변경 요청).

요청을 실행하는 방법은 다음과 같습니다.

Execute 메서드 호출(변경할 SQL 쿼리 실행)

특수 QueryDef 객체 생성 및 실행

OpenRecordset 메서드에 대한 인수로 SQL 문 사용

기존 QueryDef 개체에서 OpenRecordset 메서드를 실행합니다.

RunSQL 및 OpenQuery 메서드 호출.

메소드 실행레코드를 반환하지 않는 데이터베이스에서 이러한 변경을 수행하려는 경우에 사용됩니다. 예를 들어, 레코드의 삽입 또는 삭제 작업.

쿼리 정의 개체데이터베이스에 저장된 쿼리 정의를 나타냅니다. 컴파일된 SQL 문으로 생각할 수 있습니다.

OpenRecordset 메서드후속 작업을 수행하기 위해 Recordset 유형의 개체를 여는 데 사용됩니다.

RunSQL 메서드매크로를 실행 SQL 쿼리 실행 VBA 프로그램에서

OpenQuery 메서드 VBA 프로그램에서 OpenQuery 매크로를 실행합니다. 데이터시트, 디자인 또는 보기 보기에서 쿼리를 여는 데 사용할 수 있습니다. 추가, 수정 또는 읽기 전용 데이터 작업 모드 중 하나를 설정합니다.

쿼리 실행 옵션의 선택은 해결 중인 문제의 세부 사항을 고려하여 프로그래머가 결정합니다.

질문은 이전 기사에서 다루었습니다. SQL 쿼리를 기반으로 데이터베이스 테이블 "sql_training_st.mdb"의 구조를 생성하는 기술을 고려합니다. 또한 SQL 쿼리의 도움으로 DBMS ACCESS "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 Mode 명령을 실행하여 SQL 모드를 선택합니다. 키보드에서 다음 SQL 문을 입력합니다.

고르다 *
학생으로부터;

이 문은 "SELECT *" 및 "FROM Students"의 두 절로 구성됩니다. 첫 번째 절은 SELECT 문과 식별자 *를 포함합니다("식별자 *"는 테이블의 모든 열을 표시함을 의미합니다). 두 번째 절에는 FROM 절과 식별자 "Students"가 포함됩니다.

FROM - SELECT 절에 지정된 필드가 포함된 "Students" 테이블을 정의합니다. 선택 쿼리에는 항상 SELECT 및 FROM의 두 문이 있습니다. 선택 조건에 따라 선택 요청에 다른 운영자가 있을 수 있습니다. 그림 1은 데이터 가져오기 요청의 스크린샷을 보여줍니다.


쌀. 1. 데이터 선택을 위한 SQL SELECT 쿼리

이 예에서 데이터 선택은 Students 테이블의 모든 열에서 구성됩니다.

"Students-query1"이라는 이름으로 쿼리를 저장합니다. "저장" 명령을 실행한 결과 "탐색 영역" - "요청: 학생-요청1"에 개체가 나타납니다.

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



쌀. 2. Students 테이블의 모든 열에서 데이터 샘플링


Microsoft Access SQL과 ANSI SQL 비교 Microsoft Access SQL은 대부분 ANSI-89(Level 1) 표준을 따릅니다. Microsoft Access SQL에서는 일부 ANSI SQL 기능을 사용하지 않습니다. Microsoft Access SQL에서는 예약어를 사용하고 ANSI SQL에서 지원하지 않는 기능을 사용합니다. Access 2000에서는 언어를 ANSI SQL-92 표준에 더 가깝게 만드는 MS Jet 4.0) 확장이 도입되었습니다. 이 모드는 Jet용 MS OLE DB 공급자를 사용할 때만 사용할 수 있습니다.


SELECT 명령 구문(Microsoft Access) SELECT [ 술어 ] ( * | table.* | [ table.] field_1 [, [ table.] field_2 [,...]]) FROM 식 [,...] FROM 절 SELECT 목록 필드 FROM 표현식 표현식은 데이터를 검색할 하나 이상의 테이블을 지정하는 표현식입니다. 이 표현식은 단일 테이블의 이름, 저장된 쿼리의 이름 또는 INNER JOIN, LEFT JOIN 또는 RIGHT JOIN 작업의 결과일 수 있습니다. 내부 결합, 왼쪽 결합 오른쪽 결합.


SELECT 문 인수 술어(ALL, DISTINCT, DISTINCTROW 또는 TOP)는 선택 조건 중 하나입니다. 술어는 리턴되는 레코드 수를 제한하는 데 사용됩니다. 없는 경우 기본적으로 ALL 술어가 사용됩니다(SQL 문에 지정된 조건과 일치하는 모든 레코드가 선택됨) SQL DISTINCT 문 - 선택한 필드에 중복 값이 ​​포함된 레코드를 제외합니다. DISTINCTROW 개별 중복 필드가 아닌 전체 중복 레코드를 기반으로 데이터를 생략합니다. 쿼리가 하나의 테이블만 포함하거나 모든 테이블의 모든 필드를 포함하는 경우 DISTINCTROW 술어는 무시됩니다. TOP n - ORDER BY 절에서 설명하는 범위의 시작 또는 끝에 있는 지정된 수의 레코드를 반환합니다. SELECT ]] FROM 가장 많은 5개 부서의 테이블: SELECT TOP 5 employee.[부서 코드], Count(employee.Name) AS number_of_employees FROM employee GROUP BY employee.[부서 코드] ORDER BY Count(employee.Name) DESC ;


SELECT 문 인수 테이블은 레코드를 선택할 테이블의 이름입니다. WITH OWNERACCESS OPTION - 보안 작업 그룹 다중 사용자 환경에서 요청에 대해 작업하는 사용자에게 요청 소유자와 동일한 권한을 부여하는 데 사용됩니다. field_1, field_2 - 데이터를 선택해야 하는 필드의 이름입니다. 여러 필드를 포함하는 경우 지정된 순서로 검색됩니다. Alias_1, Alias_2 - 테이블의 원래 열 이름 대신 열 머리글이 될 이름. 식 - 선택한 데이터를 포함하는 하나 이상의 테이블 이름 외부 데이터베이스 - 현재 데이터베이스에 없는 경우 식 인수를 사용하여 지정된 테이블을 포함하는 데이터베이스의 이름입니다. SELECT employee.Name, [salary]*0.5 AS Bonus FROM employee; SELECT Avg(employee.salary) AS Average_salary FROM 직원;


여러 테이블의 공동 처리 SELECT 직원.이름, 주제.[짧은 주제 이름] FROM 직원 INNER JOIN (주제 INNER JOIN [항목 소유권] ON 주제.[항목 ID] = [항목 소유권].[규율 코드]) ON 직원. 코드 = [아이템 소지].[직원 코드];




사이...그리고 식 1 BETWEEN 식 2 AND 식 3(Microsoft Access SQL에서 식 2는 식 3보다 클 수 있지만 ANSI SQL에서는 그렇지 않음). SELECT employee.name, employee.salary FROM employee WHERE (((employee.salary) 사이 1000 및 2000)); 쿼리: SELECT employee.name, employee.salary FROM employee WHERE (((employee.salary) 사이 2000 및 1000)); 오류가 발생하지 않고 동일한 답변을 제공합니다. SELECT employee.name, employee.salary FROM employee WHERE (((employee.salary) 15000)); SELECT employee.name, employee.salary FROM employee WHERE ((((employee.salary) Not between 1000 and 2000));


패턴 문자 다양한 패턴 문자가 Like 술어와 함께 사용됩니다. MS Access SQL ANSI SQL 템플릿 문자 1자? _ (밑줄) 문자 그룹 * % character_list의 단일 문자 [ character_list] 누락된 단일 문자가 character_list [! characterlist] missing 마지막 두 옵션은 Access-only입니다. Access 2000에서는 ANSI SQL-92 모드에서 ANSI 와일드카드를 사용할 수 있습니다. 동일한 쿼리에서 문자를 혼합할 수 없습니다. SELECT employee.Name FROM employee WHERE (((employee.Name) Like "D*"));


GROUP BY SELECT 절의 필드 목록 FROM 테이블 WHERE 그룹화된 필드가 레코드를 그룹화하는 데 사용되는 필드의 이름(최대 10개)인 선택 조건입니다. 그룹화 가능한 Fields 인수에서 필드 이름의 순서는 이러한 각 필드의 그룹화 수준을 결정합니다. WHERE 절을 사용하여 그룹화에서 레코드를 제외하고 HAVING 절을 사용하여 그룹화 후 레코드에 필터를 적용합니다. HAVING GROUP BY 절을 사용할 때 SELECT 문의 필드 목록에 있는 모든 필드는 GROUP BY 절에 포함되거나 SQL 집계 함수에 대한 인수로 사용해야 합니다. 직원이 5명 이상인 부서: SELECT collaborator[부서 코드], Count(직원 이름) AS [직원 수] FROM collaborator GROUP BY collaborator [부서 코드] HAVING (((Count(직원 이름))>5 )); 5));">




하위 쿼리. 술어가 존재합니다. SELECT 협력자, Count(comp.employee) AS number_attest_company FROM comp WHERE (((Exists (SELECT DISTINCT 협력자, 협력자 FROM 협력자 INNER JOIN ex ON 협력자 = 협력자 인스턴스))False)) GROUP BY 협력자; False)) GROUP BY company;"> False)) GROUP BY company;"> False)) GROUP BY company;" title="(!LANG: Subquery. 술어 존재. SELECT company, Count(emp.emp.) AS number_attest_emp FROM op. WHERE (((Exists (SELECT DISTINCT op. firm, op. op. FROM op. INNER JOIN ex. ON op. op. = inst. op.)) False)) GROUP BY op. firm;"> title="하위 쿼리. 술어가 존재합니다. SELECT 협력자, Count(comp.employee) AS number_attest_company FROM comp WHERE (((Exists (SELECT DISTINCT 협력자, 협력자 FROM 협력자 INNER JOIN ex ON 협력자 = 협력자 인스턴스))False)) GROUP BY 협력자;"> !}








QBE 쿼리 빌더를 사용하여 하위 쿼리 만들기 하위 쿼리를 사용하여 필드 기준을 정의하는 경우 필드 열의 선택 기준 행에 있는 셀에 SELECT 문을 입력합니다. SELECT 문은 괄호로 묶어야 합니다.








항목 삭제. SQL 쿼리(생성됨) DELETE DISTINCTROW 학생.이름 FROM 학생 WHERE(((student.Name)="Burlak G. N."));


DELETE 문 삭제 요청은 지정된 필드의 내용뿐만 아니라 전체 레코드를 삭제합니다. 특정 필드의 데이터를 삭제하려면 기존 값을 Null 값으로 바꾸는 레코드 업데이트 쿼리를 만듭니다. 주어진 조건검색은 테이블에서 모든 레코드를 제거합니다. DROP 명령과 달리 테이블 구조 및 모든 속성이 유지됩니다.


항목 삭제. SQL 쿼리 쿼리: DELETE * FROM 학생 WHERE 학생.Name="Burlak GN"; 비슷한 결과를 제공합니다.



















35





41



DDL을 사용하여 전력 설계 테이블 생성

Access와 같은 RAD 도구로 수행할 수 있는 모든 데이터베이스 정의 단계는 SQL로도 수행할 수 있습니다. 이 경우 메뉴 항목을 클릭하는 대신 키보드를 사용하여 명령을 입력합니다. 그래픽 개체 조작을 선호하는 사람들은 RAD 도구가 이해하고 배우기 쉽고 자연스럽다는 것을 알게 됩니다. 특정 논리가 있는 문장에 단어를 넣는 것을 선호하는 다른 사람들은 SQL 명령이 여전히 더 쉽고 더 자연스럽다고 믿습니다. 어떤 것은 객체 패러다임을 사용하여 표현하기 쉽고 어떤 것은 SQL을 사용하여 다루기 쉽기 때문에 두 방법을 모두 숙지하는 것이 좋다.

다음 섹션에서는 SQL을 사용하여 이전 섹션에서 RAD 도구가 사용한 것과 동일한 테이블 생성, 수정 및 삭제 작업을 수행합니다.

Microsoft Access에서 SQL 사용

Access는 프로그래밍이 필요 없는 RAD(Rapid Application Development) 도구로 설계되었습니다. Access에서 직접 SQL 명령을 작성하고 실행할 수 있지만 백도어를 사용하여 이 작업을 수행할 수도 있습니다. SQL 코드를 입력하는 데 사용되는 기본 편집기를 열려면 다음 단계를 따르세요.

  1. 데이터베이스를 열고 개체 목록에서 쿼리 옵션을 선택합니다.
  2. 창 오른쪽에 있는 작업 창에서 디자인 보기에서 쿼리 만들기 옵션을 선택합니다. 테이블 추가 대화 상자가 나타납니다.
  3. 테이블을 선택하고 추가 및 닫기 버튼을 클릭합니다. 새로 생성된 쿼리 창에서 깜박이는 커서는 무시합니다.
  4. 액세스 기본 메뉴에서 SQL 모드 보기를 선택합니다. SQL SELECT 문 시작과 함께 편집기 창이 표시됩니다.
  5. SELECT 문을 삭제한 다음 필요한 SQL 문을 입력합니다.
  6. 완료되면 저장 아이콘을 클릭합니다. Access에서 새로 만든 이름을 입력하라는 메시지가 표시됩니다. 주어진 요청.
  7. 쿼리 이름을 입력하고 확인을 클릭합니다.

새로 생성된 명령은 저장되어 나중에 요청으로 실행됩니다. 안타깝게도 Access는 전체 범위의 SQL 명령을 실행하지 않습니다. 예를 들어, CREATE TABLE 명령을 실행하지 않습니다. 그러나 일단 테이블이 생성되면 테이블에 포함된 데이터에 대해 원하는 거의 모든 변환을 수행할 수 있습니다.

테이블 만들기

Microsoft SQL Server, Oracle 9i 또는 IBM DB2와 같은 완전한 기능을 갖춘 DBMS로 작업할 때 RAD 도구를 사용하여 테이블을 생성할 때와 같이 SQL을 사용하여 테이블을 생성할 때 동일한 정보를 입력해야 합니다. 여기서 차이점은 RAD 도구가 테이블 생성 대화 상자(또는 유사한 구조)를 제공하고 잘못된 이름필드, 유형 또는 크기. SQL은 그다지 주의를 기울이지 않을 것입니다. SQL로 작업할 때 처음부터 정확히 무엇을 해야 하는지 알아야 합니다. 전체 CREATE TABLE 문은 SQL이 이를 인지하기 전에 입력되어야 하며 문에 오류가 있는지 여부는 말할 것도 없습니다.

다음 명령은 이전에 만든 것과 동일한 테이블을 만듭니다.

테이블 생성
제안 번호 스몰 INT
이름 챠르 (15),
챠(20),
주소 챠르(30),
도시 차르 (25),
주정부 문자(2),
우편번호 CHAR(10)
국가 챠르(30),
핸드폰 CHAR (14),
어떻게 알려진 챠르(30),
제안 챠(50)
비즈니스 또는 자선 단체 CHAR(1);

보시다시피 정보는 기본적으로 RAD 도구를 사용하여 테이블을 생성할 때와 동일합니다(이 장의 앞부분에서 설명한 대로). 테이블을 생성하는 모든 방법에 우선권을 줄 수 있습니다. 그러나 SQL 언어의 장점은 다용성입니다. 동일한 표준 구문이 모든 데이터베이스 관리 시스템에서 작동합니다.

기억하다:
어떤 노력을 기울이든 SQL 학습이 언어는 무대를 빨리 떠나지 않을 것이기 때문에 오랫동안 정당화 될 것입니다. 그리고 개발 환경의 전문가가 되기 위해 투자한 노력은 더 적은 수익을 가져오기도 합니다. 그리고 최신 RAD 도구가 뛰어난 만큼 2~3년 안에 더 나은 기술로 대체될 것임을 확신하십시오. 이 시간에 공부에 투자한 노력을 회수할 수 있다면 좋습니다. 이 도구! 당신이 할 수 있다면 그것을 사용하십시오. 그리고 그렇게 할 수 없다면 오래되고 시도된 치료법을 고수하는 것이 더 현명할 것입니다. SQL에 대한 지식은 훨씬 더 오래 배당금을 지불할 것입니다.
.

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

요청 Q011. m_product 테이블의 제품에 대한 정보를 표시하며 해당 코드는 m_income 테이블에도 있습니다.

고르다 *
m_product에서
WHERE id IN (SELECT product_id FROM m_income);

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

고르다 *
m_product에서
WHERE id NOT IN (SELECT product_id FROM m_outcome);

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

SELECT DISTINCT 제품 ID, 제목
FROM m_income INNER JOIN m_product
ON m_income.product_id=m_product.id
WHERE product_id NOT IN (SELECT product_id FROM m_outcome);

요청 Q014.고유한 범주 목록이 m_category 테이블에서 표시되며 이름은 문자 M으로 시작합니다.

DISTINCT 제목 선택
m_product에서
WHERE 제목 LIKE "M*";

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

가격, 금액*가격 AS result_sum,
금액*가격/100*7 AS수익
m_outcome에서;

요청 Q016.산술 연산을 분석하고 단순화하여 쿼리 실행 속도를 높일 수 있습니다.


result_sum*0.07 AS 수익
m_outcome에서;

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

SELECT c.title, b.title, dt, amount, price, amount*price AS income_sum
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.title, b.title;

요청 Q018. SUM - 합계, COUNT - 수량, AVG - 산술 평균, MAX - 최대값, MIN - 최소값과 같은 함수를 집계 함수라고 합니다. 여러 값을 취하고 처리 시 단일 값을 반환합니다. 다음을 사용하여 금액 및 가격 필드의 곱의 합계를 계산하는 예 집계 함수합집합:

SELECT SUM(금액*가격) AS Total_Sum
FROM m_income;

요청 Q019.여러 집계 함수를 사용하는 예:


SELECT 합계(금액) AS Amount_Sum, AVG(금액) AS Amount_AVG,
MAX(금액) AS Amount_Max, Min(금액) AS Amount_Min,
개수(*) AS Total_Number
FROM m_income;

요청 Q020.이 예에서는 2011년 6월에 받은 코드가 1인 모든 항목의 합계가 계산됩니다.

고르다
FROM m_income
WHERE product_id=1 AND dt BETWEEN #6/1/2011# AND #6/30/2011#;.

요청 Q021.다음 SQL 쿼리는 코드 4 또는 6의 상품이 얼마에 판매되었는지 계산합니다.

고르다
m_outcome에서
WHERE product_id=4 또는 product_id=6;

요청 Q022.코드가 4 또는 6인 상품의 2011년 6월 12일에 판매된 금액에 대해 계산됩니다.

SELECT 합계(금액*가격) AS result_sum
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 = (SELECT id FROM m_category WHERE title="(!LANG:제과류)"); !}

요청 Q024."구운 제품"범주의 신용 제품 총 금액을 계산하는 문제는 다음 알고리즘으로 해결됩니다.
- m_category 테이블의 product_id 값에 따라 m_income 테이블의 각 레코드는 카테고리 이름과 일치합니다.
- 범주가 "구운 제품"과 동일한 레코드를 선택합니다.
- 수입 금액 = 수량 * 가격을 계산합니다.

SELECT Sum(금액*가격) AS income_sum
FROM(m_product AS a INNER JOIN m_income AS b ON a.id=b.product_id)
WHERE c.title="(!LANG:베이커리"; !}

요청 Q025.이 예에서는 소비된 항목 수를 계산합니다.

SELECT COUNT(product_id) AS product_cnt
FROM (SELECT DISTINCT product_id FROM m_outcome) AS t;

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

SELECT 제목, SUM(금액*가격) AS result_sum
FROM m_product AS a INNER JOIN m_outcome AS b
ON a.id=b.product_id
GROUP BY 제목;

요청 Q027.카테고리별 판매 보고서입니다. 즉, 제품 범주의 이름, 이러한 범주의 제품이 판매된 총액 및 평균 판매액을 포함하는 테이블이 생성됩니다. ROUND 함수는 평균값을 가장 가까운 100분의 1로 반올림하는 데 사용됩니다(소수점 구분 기호 다음 소수점 둘째 자리).

SELECT c.title, SUM(금액*가격) AS result_sum,
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.title;

요청 Q028.각 제품에 대해 총 영수증 및 평균 영수증 수가 계산되고 총 영수증 수가 500개 이상인 상품에 대한 정보가 표시됩니다.

SELECT product_id, SUM(금액) AS amount_sum,
Round(Avg(amount),2) AS amount_avg
FROM m_income
GROUP BY product_id
HAVING 합계(금액)>=500;

요청 Q029.이 쿼리는 2011년 2분기에 이루어진 영수증의 합계와 평균을 각 항목에 대해 계산합니다. 총 상품 수령 금액이 1000 이상인 경우 이 제품에 대한 정보가 표시됩니다.

SELECT 제목, SUM(금액*가격) AS income_sum
FROM m_income a INNER JOIN m_product b ON a.product_id=b.id
2011년 4월 1일#과 2011년 6월 30일# 사이의 dt 위치
GROUP BY 제목
HAVING SUM(금액*가격)>=1000;

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

SELECT *FROM m_income, m_outcome;

요청 Q031.두 필드로 레코드를 그룹화하는 예입니다. 다음 SQL 쿼리는 공급자로부터 받은 상품의 양과 수량을 각 공급자에 대해 계산합니다.


SUM(금액*가격) AS income_sum

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

SELECT Supplier_id, product_id, SUM(금액) AS amount_sum,
SUM(금액*가격) AS result_sum
GROUP BY 공급자 ID, 제품 ID;

요청 Q033.이 예에서는 위의 두 쿼리(q031 및 q032)가 하위 쿼리로 사용됩니다. 이러한 쿼리의 결과는 LEFT JOIN 방법을 사용하여 하나의 보고서로 병합됩니다. 다음 쿼리는 각 공급업체에 대해 입고 및 판매된 제품의 수와 수량에 대한 보고서를 표시합니다. 일부 제품이 이미 도착했지만 아직 판매되지 않은 경우 이 레코드의 result_sum 셀이 비어 있다는 사실에 주의해야 합니다. 또한 이 쿼리는 복잡한 쿼리하위 쿼리로. 많은 양의 데이터가 포함된 이 SQL 쿼리의 성능이 의심스럽습니다.

고르다 *
에서
SUM(금액*가격) AS income_sum
ON a.product_id=b.id GROUP BY Supplier_id, product_id) AS a
왼쪽 조인
(SELECT Supplier_id, product_id, SUM(amount) AS amount_sum,
SUM(금액*가격) AS result_sum
FROM m_outcome AS a INNER JOIN m_product AS b
ON a.product_id=b.id GROUP BY Supplier_id, product_id) AS b
ON (a.product_id=b.product_id) AND (a.supplier_id=b.supplier_id);

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

고르다 *
에서
(SELECT Supplier_id, product_id, SUM(amount) AS amount_sum,
SUM(금액*가격) AS income_sum
FROM m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id
GROUP BY Supplier_id, product_id) AS a
오른쪽 조인
(SELECT Supplier_id, product_id, SUM(amount) AS amount_sum,
SUM(금액*가격) AS result_sum
FROM m_outcome AS a INNER JOIN m_product AS b ON a.product_id=b.id
GROUP BY Supplier_id, product_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 income_amount,
SUM(out_amount) AS result_amount
에서
(SELECT product_id, 금액 AS in_amount, 0 AS out_amount
FROM m_income
유니온 올
SELECT product_id, 0 AS in_amount, 금액 AS out_amount
FROM m_outcome) AS t
GROUP BY product_id;

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

DISTINCT 제품 ID 선택
FROM m_income AS a
WHERE EXISTS(SELECT product_id FROM m_outcome AS b

요청 Q037. m_income 테이블과 m_outcome 테이블 모두에 포함된 제품 코드가 표시됩니다.

DISTINCT 제품 ID 선택
FROM m_income AS a
WHERE product_id IN(m_outcome에서 product_id 선택)

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

DISTINCT 제품 ID 선택
FROM m_income AS a
WHERE NOT EXISTS(SELECT product_id FROM m_outcome AS b
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(금액<500,"малая","большая") AS mark
FROM m_income;

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

SELECT dt, product_id, 금액,
SWITCH(금액<500,"малая",amount>=500,"큰") AS 마크
FROM m_income;

요청 Q042. <300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, 금액,
IIF(금액<300,"малая",
IIF(금액<1000,"средняя","большая")) AS mark
FROM m_income;

SQL 쿼리 Q043.다음 쿼리에서 들어오는 배치의 상품 수량이 300개 미만이면 해당 배치는 "소량"으로 간주됩니다. 그렇지 않으면, 즉 조건 금액이<300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, 금액,
SWITCH(금액<300,"малая",
양<1000,"средняя",
amount>=1000,"big") AS 표시
FROM m_income;

SQL 쿼리 Q044.다음 쿼리에서 판매는 소형(최대 150개), 중형(150~300개), 대형(300개 이상)의 세 그룹으로 나뉩니다. 다음으로 각 그룹에 대해 총 금액이 계산됩니다.

SELECT 범주, SUM(outcome_sum) AS Ctgry_Total
FROM(금액 선택*가격 AS result_sum,
IIf(금액*가격<150,"малая",
IIf(금액*가격<300,"средняя","большая")) AS Category
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
FROM 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
FROM m_income;

SQL 쿼리 Q047.상품을 받은 날(테이블 m_income)부터 현재 날짜까지의 일수를 DateDiff 함수를 사용하여 계산하고 만료 날짜를 비교합니다(테이블 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 month_last1,
DateDiff("m",dt,Date())-iif(day(dt)>day(date()),1,0) AS month_last2
FROM m_income;

SQL 쿼리 Q050. 2011년 입고된 상품 수량 및 수량에 대한 분기별 보고서가 표시됩니다.

SELECT kvartal, SUM(outcome_sum) AS 합계
FROM (금액 선택*가격 AS 결과_합계, 월(dt) AS m,
스위치(m<4,1,m<7,2,m<10,3,m>=10.4) AS 크바르탈
FROM m_income WHERE 연도(dt)=2011) AS t
GROUP BY 블록;

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

SELECT product_id, SUM(in_sum) AS income_sum, SUM(out_sum) AS result_sum
FROM(SELECT product_id, amount*price as in_sum, 0 as out_sum
m_income에서
유니온 올
SELECT product_id, in_sum으로 0, 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 테이블의 행 번호를 지정합니다.

SELECT COUNT(*) as N, b.id, b.product_id, b.amount, b.price
FROM m_income a INNER JOIN m_income b ON a.id<= b.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
에서

FROM 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
카운트(*)<=5
카운트로 주문(*);

요청 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.id<=b.id
그룹 BY b.id) t;



관련 기사: