내장 함수 SQL데이터 처리를 촉진하고 속도를 높이도록 설계되었습니다. 특징은 표현식에서 직접 지정할 수 있다는 것입니다. 모든 내장 기능은 조건부로 그룹으로 나눌 수 있습니다.

수학 함수:

    ABS(의미) - 숫자의 절대값을 반환합니다.

    둥근(가치, 정밀도) - 지정된 인수로 반올림된 숫자 값을 반환합니다. 정확성소수점 이하 자릿수;

    징후(의미) - 숫자가 음수이면 빼기를 반환하고 그렇지 않으면 더하기를 반환합니다.

    (가치, 정도) - 숫자를 거듭제곱합니다.

    SQRT(의미) - 숫자의 제곱근을 추출합니다.

    천장(의미)- 값보다 크거나 같은 가장 가까운 정수를 반환합니다.

    - 바닥(의미)값보다 작거나 같은 가장 가까운 정수를 반환합니다.

문자열 함수:

    아스키() - 반환 아스키문자열의 첫 번째 문자 코드;

    채널아르 자형(숫자) - 문자를 반환합니다. 아스키암호;

    () – 후행 공백을 제외하고 문자열의 길이를 문자로 반환합니다.

    손질(선)/ 알트림(선)-문자열의 시작/끝에서 공백을 제거합니다.

    왼쪽(문자열, 숫자)/ 아르 자형오른쪽(문자열, 숫자)- 지정된 인수를 반환 숫자왼쪽/오른쪽 가장자리에서 시작하여 문자열의 문자 수.

    서브스트링(선, 위치, 길이) - 지정된 위치에서 시작하여 문자열에서 지정된 길이의 하위 문자열을 반환합니다.

    낮추다(선) /높은(선) - 더 낮은 /로 변환된 문자열을 반환합니다. 대문자등.

날짜 작업을 위한 함수:

    GETDATE() - SQL Server 인스턴스가 실행 중인 컴퓨터의 날짜와 시간이 포함된 값을 반환합니다.

    (계약 날짜)– 지정된 날짜의 숫자를 반환합니다.

    (계약 날짜)- 지정된 날짜의 월 수를 반환합니다.

    년도(계약 날짜)- 지정된 날짜의 연도 값을 반환합니다.

    다테난( 부품, value_date) - 반환 문자열, 지정된 부분을 나타내는( , , 등.) 지정된 날짜부터;

    날짜 부분( 부품, value_date) - 지정된 부분을 나타내는 정수를 반환합니다( , , 등.) 지정된 날짜부터.

데이터 유형 변환 함수

    깁스 (의미 처럼 데이터 형식)

    전환하다(데이터 형식, 의미)

논쟁 의미함수에서 변환할 값을 지정합니다.

7.3. 데이터 정의 언어 명령

데이터 정의 언어에는 데이터베이스와 해당 개체를 생성, 수정 및 삭제하기 위한 명령이 포함되어 있습니다.

테이블 생성

새 테이블 생성은 명령으로 수행됩니다. 테이블 생성. 이 명령은 테이블의 구조, 테이블의 각 열 및 테이블에 대해 설정해야 하는 무결성 제약 조건을 설명합니다.

명령 구문:

테이블 생성 table_name(( column_description |계산된_열_이름처럼 표현 | table_level_integrity_constraints) [, ...])

테이블 이름은 최대 길이가 128자인 식별자입니다.

테이블에는 계산된 열이 포함될 수 있으며, 이 경우 열의 값은 테이블 구조에 저장된 표현식에 의해 결정됩니다. 계산 열은 수정할 수 없으므로 NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY 또는 DEFAULT일 수 없습니다.

테이블 열을 설명하는 구문은 다음과 같습니다.

열 이름 데이터 형식[(크기)]

[(기본값 기본값 | IDENTITY [(값, 단계)]}]

[column_level_integrity_constraints]

DEFAULT - 새로 추가된 레코드의 열에 할당된 값을 지정할 수 있습니다.

IDENTITY 자동 번호 지정이 활성화된 열(카운터 열)이 생성되고 있음을 나타냅니다. 테이블에는 하나의 카운터 열만 정의할 수 있습니다. value 매개변수는 카운터의 초기 값을 지정하고 step 매개변수는 증분 단계를 지정합니다. 이러한 매개변수가 설정되지 않은 경우 값은 1입니다. IDENTITY는 정수 또는 10진수 유형이 있는 열에 대해서만 설정할 수 있습니다. IDENTITY 열에 값을 삽입하는 것은 허용되지 않습니다.

DBMS에서 처리하는 무결성 제약 조건에는 두 가지 그룹이 있습니다.

테이블이 생성되거나 수정될 때 선언되는 선언적 무결성 제약 조건.

트리거에 의해 처리되는 절차적 무결성 제약 조건입니다.

선언적 무결성 제약 조건은 테이블 수준 제약 조건과 테이블 수준 제약 조건이 될 수 있습니다. 열 수준 제약 조건은 하나의 열에만 적용됩니다. 각 선언적 무결성 제약 조건에 이름을 지정할 수 있습니다.

열 수준 제약 조건에 대한 설명에는 다음 구문이 있습니다.

((PRIMARY KEY | UNIQUE | NOT NULL ) | FOREIGN KEY REFERENCES table_name( 열 이름)

|CHECK 부울 식)

데이터 무결성 제약 조건의 이름은 데이터베이스 내에서 고유해야 합니다. 열 수준에서 정의할 수 있는 제약 조건을 고려하십시오.

PRIMARY KEY 제약 조건. 모든 테이블 기본 키 값은 고유해야 하며 null이 아니어야 합니다. 테이블에는 하나의 기본 키만 있을 수 있습니다. 복합인 경우 기본 키에 대한 무결성 제약 조건이 테이블 수준에서 설정됩니다.

UNIQUE 열 값 고유성 제약 조건. 이는 테이블이 해당 열에 동일한 값을 갖는 두 개의 레코드를 가질 수 없음을 의미합니다.

열이 NULL 값을 저장하지 못하도록 하는 NOT NULL 제약 조건입니다.

외래 키 제약 조건 FOREIGN KEY(참조 무결성 제약 조건). 외래 키인 열의 경우 REFERENCES를 사용하여 링크가 설정되는 테이블의 이름과 연결될 이 테이블의 열 이름을 지정합니다. 이러한 테이블은 생성된 테이블과 관련하여 기본(상위) 테이블입니다. 값이 연결되는 기본 테이블의 열에는 PRIMARY KEY 제약 조건이 있어야 합니다.

외부 테이블 키가 여러 필드로 구성된 경우 테이블 수준에서 FOREIGN KEY 제약 조건을 지정해야 합니다. 이 경우 외래 키에 포함된 모든 열을 나열하고, 메인 테이블의 이름과 외래 키가 참조하는 메인 테이블의 열 이름을 지정해야 합니다.

참조 무결성은 외래 키와 해당 기본 키 제약 조건을 사용하여 테이블에 데이터를 추가하고 수정하기 위한 규칙을 설정합니다. 외래 키에 대한 ON UPDATE 및 ON DELETE 절은 관련 데이터를 수정하기 위한 다음 규칙을 정의합니다.

NO ACTION - 자식 테이블에 해당 외래 키 값이 없는 기본 테이블의 값만 변경(삭제)할 수 있습니다. 이 규칙은 기본적으로 적용됩니다.

CASCADE는 부모 테이블의 기본 키 값이 수정될 때 자식 테이블의 외래 키의 각 값이 자동으로 변경(삭제)된다는 것을 의미합니다.

SET NULL은 부모 테이블의 기본 키가 변경(삭제)된 경우 자식 테이블의 모든 참조 행에서 외래 키 값에 자동으로 NULL 값이 할당됨을 의미합니다.

SET DEFAULT는 부모 테이블의 기본 키가 변경(삭제)된 경우 자식 테이블의 모든 참조 행에서 외래 키의 값에 자동으로 기본값이 할당됨을 의미합니다.

챕터에서 설계를 고려한 교육 데이터베이스 "University"의 예를 완성해 보겠습니다. 4.3 표 DISCIPLINE 및 GENERAL STATEMENT. 표 6과 7은 테이블의 논리적 구조를 설명합니다.

표 6

정보 객체 DISCIPLINE의 논리적 구조

표 7

정보 객체의 논리적 구조 GENERAL STATEMENT

키 사인

필드 형식

이름

정확성

레코드 북 번호

등록된 학생 기록부 번호

텍스트

규율 코드

규율 코드

수치

긴 정수

수치

그림에 표시된 것과 같이 테이블 생성을 요청합시다. 35 정보학적 데이터베이스 모델.

쌀. 35. 데이터베이스 스키마 "대학"

데이터베이스 스키마에서 알 수 있듯이 FACULTY 테이블은 독립적인 테이블이므로 가장 먼저 생성됩니다. Table의 논리적 구조에 대한 설명을 고려하여 테이블 생성 요청입니다. 4 (p. 61)는 다음과 같습니다.

CREATE TABLE 교수진

([부서번호] tinyint PRIMARY KEY , [부서명] char(50))

SPECIALTY 테이블도 독립적이므로 두 번째로 생성합니다. 질의를 생성할 때 Table의 논리적 구조에 대한 설명을 사용합니다. 5(62페이지).

테이블 만들기 [전문] (

[특수번호] int PRIMARY KEY,

[특기명] char(60),

[교육비] )

GROUP 테이블은 FACULTY 및 SPECIALTY 테이블에 종속됩니다. 쿼리를 생성할 때 표 3 (p. 61)을 사용하고 열이 교수 번호그리고 전문 번호외래 키:

테이블 생성 [그룹](

[그룹 번호] smallint 기본 키,

[전문 번호] int FOREIGN KEY REFERENCES speciality( 특별한- 소식)UPDADE CASCADE의 DELETE CASCADE,

[교수번호] tinyint FOREIGN KEY REFERENCES 교수진( 학부) ON DELETE CASCADE ON UPDADE CASCADE, [과정 번호] tinyint)

STUDENT 테이블은 GROUP 종속 테이블입니다. 표 2(p. 60)의 데이터를 기반으로 쿼리를 수행합니다. 우리는 또한 컬럼 그룹 번호외래 키:

테이블 만들기 [학생] (

[그룹 번호] smallint NOT NULL FOREIGN KEY REFERENCES group( 여러 떼) ,

[성] char(15) NOT NULL ,

[생년월일] datetime NOT NULL ,

[상업] 비트 NOT NULL ,

[등록명] char(9))

GENERAL RECORD 테이블의 데이터는 STUDENT 및 DISCIPLINE 테이블에 따라 다릅니다. 이 표에서 기본 키는 복합 키이고 각 기본 키 열은 외래 키입니다(표 7 및 그림 35 참조).

표 6에 나와 있는 분야 테이블의 논리적 구조에 대한 설명을 사용하여 쿼리를 만들어 보겠습니다.

CREATE TABLE [규율] (

[분야 코드] int PRIMARY KEY,

[학문명] char(50))

이제 쿼리를 생성하여 일반 명령문 테이블을 생성할 수 있습니다. 테이블의 기본 키는 복합 키이므로 PRIMARY KEY 제약 조건은 테이블 수준에서 설정해야 합니다. 예를 들어 테이블 수준에서도 FOREIGN KEY 제약 조건을 설정해 보겠습니다. 요청은 다음과 같습니다.

CREATE TABLE [일반 시트] (

[규율 코드] int,

[성적 번호] char(8),

[학년] NOT NULL , PRIMARY KEY([학문 코드],[교과서 번호]), FOREIGN KEY([학문 코드]) REFERENCES [학문]([학문 코드]), FOREIGN KEY([교과서 번호]) REFERENCES [학생 ] ([성적부 번호]))

테이블 구조 변경

테이블 구조 변경은 ALTER TABLE 명령으로 수행됩니다. 명령을 사용하여 기존 열의 속성을 변경하거나 삭제하거나 테이블에 새 열을 추가하고 열 수준과 테이블 수준에서 무결성 제한을 관리할 수 있습니다. 많은 매개변수 및 키워드의 할당은 CREATE TABLE 명령의 해당 매개변수 및 키워드의 할당과 유사합니다.

테이블 삭제

테이블 삭제는 DROP TABLE 명령을 사용하여 수행됩니다. 명령 구문:

드롭 테이블 테이블

예를 들어 STUDENT 테이블을 삭제하는 쿼리는 다음과 같습니다.

DROP TABLE 학생

테이블 삭제는 테이블 사이의 데이터베이스에 설정된 관계를 고려해야 합니다(SHOULD). 다른 테이블이 FOREIGN KEY 무결성 제약 조건을 사용하여 삭제되는 테이블을 참조하는 경우 DBMS는 삭제를 허용하지 않습니다.

인덱스 생성

인덱스는 데이터베이스 테이블의 특정 데이터에 대한 액세스 속도를 높이는 데 사용됩니다. 인덱스는 STUDENT 테이블의 Last Name 열과 같이 데이터베이스 테이블의 하나 이상의 열에 있는 값을 정렬하는 구조입니다. 성을 기준으로 특정 학생을 검색하는 경우 색인을 사용하면 테이블의 모든 행을 검색하는 것보다 더 빨리 필요한 정보를 얻을 수 있습니다.

인덱스는 테이블의 특정 열에 저장된 데이터 값에 대한 포인터를 제공하고 지정된 정렬 순서에 따라 해당 포인터를 정렬합니다. 인덱스를 사용하여 테이블에서 데이터를 검색하는 것은 책에서 인덱스를 검색하는 것과 유사합니다. 먼저 인덱스에서 특정 값을 검색한 다음 이 값이 포함된 행에 대한 포인터를 통해 해당 점프를 수행합니다.

인덱스는 CREATE INDEX 명령을 사용하여 생성됩니다.

인덱스 생성

이름_인덱스 ON 이름 _테이블(열 [,…])

여기서 UNIQUE는 인덱스가 고유한 값만 저장해야 함을 나타냅니다.

인덱스는 하나 이상의 열(복합 인덱스)에 생성할 수 있습니다. 복합 인덱스를 사용하면 동일한 열에 동일한 값이 있는 레코드를 구별할 수 있습니다.

예: STUDENT 테이블에 복합 인덱스 생성 필드의 성 및 생년월일

인덱스 생성 Ind_Fam ON

학생(성, [생년월일] DESC)

인덱싱된 열의 데이터를 자주 쿼리하려는 경우에만 테이블에 인덱스를 만들어야 합니다. 인덱스는 디스크 공간을 차지하고 행 추가, 삭제 및 업데이트 속도를 저하시킵니다.

테이블 인덱스 삭제

DROP 명령은 테이블에서 인덱스를 제거합니다. 인덱스를 삭제하는 DROP 명령의 구문은 다음과 같습니다.

드롭 인덱스 인덱스켜짐 테이블

테이블이나 테이블 자체에서 인덱스를 삭제하려면 먼저 인덱스를 닫아야 합니다.

예: STUDENT 테이블에서 인덱스 Ind_Fam 삭제

DROP INDEX Ind_Fam ON 학생

요약하는 법을 배워봅시다. 아니오, 이것은 SQL을 학습한 결과가 아니라 데이터베이스 테이블의 열 값에 대한 결과입니다. SQL 집계 함수는 열 값에 대해 작동하여 단일 결과 값을 생성합니다. 가장 일반적으로 사용되는 SQL 집계 함수는 SUM, MIN, MAX, AVG 및 COUNT입니다. 집계 함수를 사용해야 하는 두 가지 경우가 있습니다. 첫째, 집계 함수는 단독으로 사용되며 단일 결과 값을 반환합니다. 둘째, 집계 함수는 SQL GROUP BY 절과 함께 사용됩니다. 즉, 필드(열)별로 그룹화하여 각 그룹의 결과 값을 얻습니다. 그룹화하지 않고 집계 함수를 사용하는 경우를 먼저 고려하십시오.

SQL SUM 함수

SQL SUM 함수는 데이터베이스 테이블의 열 값의 합계를 반환합니다. 값이 숫자인 열에만 적용할 수 있습니다. 결과 합계를 얻기 위한 SQL 쿼리는 다음과 같이 시작합니다.

합계 선택(COLUMNAME) ...

이 표현식 뒤에는 FROM(TABLE_NAME)이 오고 WHERE 절을 사용하여 조건을 지정할 수 있습니다. 또한 DISTINCT는 고유한 값만 고려됨을 나타내기 위해 열 이름에 접두어를 붙일 수 있습니다. 기본적으로 모든 값이 고려됩니다(이를 위해 DISTINCT가 아닌 ALL을 구체적으로 지정할 수 있지만 ALL이라는 단어는 선택 사항임).

실시예 1부서 및 직원에 대한 데이터가 포함된 회사 데이터베이스가 있습니다. Staff 테이블에는 직원 급여 데이터가 있는 열도 있습니다. 표에서 선택한 항목의 형식은 다음과 같습니다(그림을 확대하려면 마우스 왼쪽 버튼으로 클릭).

모든 급여의 합계를 얻으려면 다음 쿼리를 사용하십시오.

직원에서 SUM(급여) 선택

이 쿼리는 287664.63 값을 반환합니다.

그리고 지금 . 연습에서 우리는 이미 작업을 복잡하게 만들기 시작하여 실제로 발생하는 작업에 더 가깝게 만듭니다.

SQL MIN 함수

SQL MIN 함수는 값이 숫자인 열에서도 작동하며 열에 있는 모든 값의 최소값을 반환합니다. 이 함수는 SUM 함수와 유사한 구문을 가지고 있습니다.

실시예 3데이터베이스와 테이블은 예제 1과 동일합니다.

최소한의 것을 알아야 한다 임금부서 번호 42의 직원. 이렇게하려면 다음 요청을 작성하십시오.

쿼리는 10505.90 값을 반환합니다.

그리고 다시 운동 독립적인 결정 . 이 연습과 다른 연습에서는 Staff 테이블뿐만 아니라 회사 부서에 대한 데이터가 포함된 Org 테이블도 필요합니다.


실시예 4조직 테이블이 회사 부서에 대한 데이터가 포함된 직원 테이블에 추가됩니다. 한 직원이 보스턴에 있는 부서에서 근무한 최소 년수를 출력하십시오.

SQL MAX 함수

SQL MAX 함수는 유사하게 작동하며 동일한 구문을 가지며, 이는 열의 모든 값 중에서 최대값을 결정하고자 할 때 사용됩니다.

실시예 5

부서 번호 42의 직원의 최대 급여를 찾아야합니다. 이렇게하려면 다음 쿼리를 작성하십시오.

쿼리는 18352.80 값을 반환합니다.

지금이 절호의 기회 다 자기 결정을 위한 연습.

실시예 6다시 우리는 Staff와 Org라는 두 개의 테이블로 작업합니다. 부서(Division) Eastern 부서 그룹에 속한 부서에서 부서 이름과 한 직원이 받는 최대 커미션 금액을 표시하십시오. 사용 JOIN(테이블 조인) .

SQL AVG 함수

앞에서 설명한 함수의 구문에 대해 말한 내용은 SQL AVG 함수에 대해서도 마찬가지입니다. 이 함수는 열에 있는 모든 값의 평균을 반환합니다.

실시예 7데이터베이스와 테이블은 이전 예와 동일합니다.

부서 번호 42 직원의 평균 근속 기간을 알아내야 합니다. 이를 위해 다음 쿼리를 작성합니다.

결과는 6.33입니다

실시예 8우리는 하나의 테이블과 함께 일합니다 - 직원. 4년에서 6년 사이의 직원들의 평균 급여를 표시하십시오.

SQL 카운트 함수

SQL COUNT 함수는 데이터베이스 테이블의 레코드 수를 반환합니다. 쿼리에서 SELECT COUNT(COLUMNAME) ...을 지정하면 결과는 열 값이 NULL(정의되지 않음)인 레코드를 고려하지 않은 레코드 수입니다. 별표를 인수로 사용하고 SELECT COUNT(*) ... 쿼리를 시작하면 결과는 테이블의 모든 레코드(행) 수가 됩니다.

실시예 9데이터베이스와 테이블은 이전 예와 동일합니다.

커미션을 받는 모든 직원의 수를 알고 싶습니다. Comm 열 값이 NULL이 아닌 직원 수는 다음 쿼리를 반환합니다.

직원에서 SELECT COUNT(통신)

결과는 값 11이 됩니다.

실시예 10데이터베이스와 테이블은 이전 예와 동일합니다.

테이블의 총 레코드 수를 알고 싶다면 별표가 있는 쿼리를 COUNT 함수에 대한 인수로 사용하십시오.

직원에서 SELECT COUNT(*)

결과는 값 17이 됩니다.

다음 자기 결정을 위한 운동하위 쿼리를 사용해야 합니다.

예 11.우리는 하나의 테이블과 함께 일합니다 - 직원. 평원 부서의 직원 수를 표시하십시오.

SQL GROUP BY로 함수 집계

이제 SQL GROUP BY 절과 함께 집계 함수를 사용하는 방법을 살펴보겠습니다. SQL GROUP BY 절은 결과 값을 데이터베이스 테이블의 열별로 그룹화하는 데 사용됩니다. 사이트에는 이 연산자에 대한 별도의 강의 .

예 12.데이터베이스 포털 광고가 있습니다. 여기에는 해당 주에 제출된 광고에 대한 데이터가 포함된 광고 테이블이 있습니다. 카테고리 열에는 큰 광고 카테고리(예: 부동산)에 대한 데이터가 포함되고 부품 열에는 카테고리에 포함된 작은 부품에 대한 데이터가 포함됩니다(예: 아파트 및 빌라 부품은 부동산 카테고리의 일부임). Units 열에는 제출된 광고 수에 대한 데이터가 포함되고 Money 열에는 광고 제출로 얻은 금액이 포함됩니다.

범주부분단위
수송자동차110 17600
부동산아파트89 18690
부동산다차스57 11970
수송오토바이131 20960
건축 자재무대68 7140
전기 공학TV127 8255
전기 공학냉장고137 8905
건축 자재레지스112 11760
여가서적96 6240
부동산주택47 9870
여가음악117 7605
여가계략41 2665

SQL GROUP BY 절을 사용하여 각 카테고리에 광고를 제출하여 발생하는 금액을 찾습니다. 다음 쿼리를 작성합니다.

SELECT Category, SUM(Money) AS Money FROM Ads GROUP BY 카테고리

실시예 13데이터베이스와 테이블은 이전 예제와 동일합니다.

SQL GROUP BY 절을 사용하여 각 카테고리에서 가장 많은 광고가 있는 부분을 찾으십시오. 다음 쿼리를 작성합니다.

SELECT 카테고리, 부품, MAX(단위) AS 최대 FROM 광고 GROUP BY 카테고리

결과는 다음 표가 됩니다.

하나의 테이블에서 합계 및 개별 값을 얻을 수 있습니다. UNION 연산자를 사용하여 쿼리 결과 결합 .

관계형 데이터베이스 및 SQL 언어

대부분의 프로그래밍 언어와 마찬가지로 SQL에는 데이터를 처리하는 기능이 있습니다. SQL 문과 달리 함수는 모든 유형의 DBMS에 대해 표준화되어 있지 않습니다. 즉, 데이터에 대해 동일한 작업을 수행하기 위해 다른 DBMS에는 고유한 함수 이름이 있습니다. 즉, 하나의 DBMS에 작성된 쿼리 코드가 다른 DBMS에서 작동하지 않을 수 있으며, 향후 이를 고려해야 합니다. 무엇보다도 이것은 텍스트 값 처리, 데이터 유형 변환 및 날짜 조작과 관련된 기능입니다.

일반적으로 DBMS가 지원됩니다. 표준 세트함수 유형, 즉:

  • 텍스트 처리에 사용되는 텍스트 기능(텍스트의 일부 문자 선택, 텍스트 길이 결정, 문자를 대문자 또는 소문자로 변환...)
  • 숫자 함수. 수행하는 데 사용 수학 연산숫자보다
  • 날짜 및 시간 기능(날짜 및 시간 조작 수행, 날짜 사이의 기간 계산, 날짜의 정확성 확인 등)
  • 통계 함수(최대값 계산용 / 최소값, 평균, 수량 및 합계 계산...)
  • 시스템 기능(DBMS, 사용자 등에 대한 다양한 서비스 정보 제공)

1. 텍스트 처리를 위한 SQL 함수

Access DBMS에서 SQL을 구현하면 다음과 같은 텍스트 처리 기능이 있습니다.

함수를 사용하여 제품 이름을 대문자로 변환해 보겠습니다. UCase():

고르다 제품, UCase(제품) AS Product_UCase FROM Sumproduct

함수를 사용하여 텍스트의 처음 세 문자를 선택합니다. 왼쪽():

고르다 제품, LEFT(제품, 3) AS 제품_LEFT FROM Sumproduct

2. 숫자 처리를 위한 SQL 함수

숫자 처리 함수는 숫자 데이터에 대한 수학 연산을 수행하도록 설계되었습니다. 이러한 함수는 대수 및 기하 계산을 위한 것이므로 날짜 및 시간 처리 함수보다 훨씬 덜 자주 사용됩니다. 그러나 숫자 함수는 모든 SQL 버전에서 가장 표준화되어 있습니다. 숫자 함수 목록을 살펴보겠습니다.

주요 기능 중 일부만 나열했지만 지원되는 기능의 전체 목록과 자세한 설명은 언제든지 데이터베이스 설명서를 참조할 수 있습니다.

예를 들어 열에 있는 숫자의 제곱근을 구하는 쿼리를 작성해 보겠습니다. 기능을 사용하여 SQR():

고르다 Amount, SQR(Amount) AS Amount_SQR FROM Sumproduct

3. 날짜 및 시간 처리를 위한 SQL 함수

날짜 및 시간 조작 함수는 가장 중요하고 자주 사용되는 SQL 함수 중 하나입니다. 데이터베이스는 날짜 및 시간 값을 특별한 형식으로 저장하므로 추가 처리. 각 DBMS에는 날짜 처리를 위한 고유한 기능 세트가 있지만 불행히도 날짜를 다른 플랫폼 및 SQL 구현으로 전송할 수 없습니다.

날짜 및 시간 처리를 위한 일부 함수 목록 DBMS 접근:

함수가 작동하는 방식의 예를 살펴보겠습니다. 날짜 부분():

고르다 Date1, DatePart("m", Date1) AS Month1 FROM Sumproduct

기능 날짜 부분()그것은 가지고있다 추가 매개변수, 날짜의 필요한 부분을 표시할 수 있습니다. 예제에서는 매개변수를 사용했습니다. "중", 월 번호를 표시합니다(연도를 표시할 수 있는 것과 같은 방식으로 - "야이", 4분의 1 - "큐", 낮 - "디", 주 - "와", 시 - "시간", 분 - "N", 초 - "에스"등.).

4. SQL 통계 함수

통계 기능을 사용하면 샘플링하지 않고 미리 만들어진 데이터를 얻을 수 있습니다. 이러한 기능이 포함된 SQL 쿼리는 다양한 보고서를 분석하고 생성하는 데 자주 사용됩니다. 이러한 선택의 예는 다음과 같습니다. 테이블의 행 수 결정, 특정 필드에 대한 값 합계 얻기, 지정된 테이블 열에서 최대/최소 또는 평균 값 검색. 또한 통계 기능은 철자를 크게 변경하지 않고 모든 DBMS에서 지원됩니다.

통계 함수 목록 DBMS 접근:

세다():

고르다 COUNT(*) AS Count1 FROM Sumproduct- 테이블의 모든 행 수를 반환

고르다 COUNT(제품) AS Count2 FROM Sumproduct- 필드의 비어 있지 않은 모든 행의 수를 반환합니다. 제품

열에서 의도적으로 하나의 값을 제거했습니다. 제품두 쿼리가 작동하는 방식의 차이를 보여줍니다.

함수 사용 예 합집합():

고르다 SUM(수량) AS Sum1 FROM Sumproduct WHERE Month = "4월"

이 요청으로 4월에 판매된 총 상품 수를 반영했습니다.

고르다 SUM(수량*금액) AS Sum2 FROM Sumproduct

보시다시피 집계 함수에서 표준 수학 연산자를 사용하여 여러 열에 대해 계산을 수행할 수 있습니다.

함수 사용 예 분():

고르다 MIN(Amount) AS Min1 FROM Sumproduct

함수 사용 예 최대():

고르다 MAX(금액) AS Max1 FROM Sumproduct

함수 사용 예 AVG():

고르다 AVG(Amount) AS Avg1 FROM Sumproduct

함수는 SQL 명령 세트에서 특별한 유형의 명령이며 각 방언에는 명령 세트의 고유한 구현이 있습니다. 결과적으로 함수는 한 단어로 구성되고 단일 값을 반환하는 명령이라고 말할 수 있습니다. 함수의 값은 데이터베이스에 있는 값 목록의 평균을 계산하는 함수의 경우와 같이 입력 매개변수에 따라 달라질 수 있습니다. 그러나 많은 함수는 입력 매개변수를 사용하지 않습니다. 예를 들어 현재 시스템 시간을 반환하는 함수는 CURRENTJ1ME입니다.

ANSI 표준은 여러 유용한 기능. 이 장에서는 이러한 기능에 대한 설명과 함께 상세 설명및 각 플랫폼에 대한 예제. 또한 각 플랫폼에는 SQL 표준을 능가하는 자체 내부 기능의 긴 목록이 있습니다. 이 장에서는 각 플랫폼의 모든 내부 기능에 대한 매개변수와 설명을 제공합니다.

또한 대부분의 플랫폼에는 사용자 지정 기능을 생성할 수 있는 기능이 있습니다. 당 추가 정보사용자 정의 함수의 경우 "CREATE/ALTER FUNCTION/PROCEDURE 문"을 참조하십시오.

함수 유형

존재하다 다른 방법들기능 분류. 다음 하위 섹션에서는 기능 작동 방식을 이해하는 데 도움이 되는 중요한 차이점에 대해 설명합니다.

결정적 및 비결정적 함수

함수는 결정적이거나 비결정적일 수 있습니다. 결정적 함수는 동일한 입력 값 집합에 대해 항상 동일한 결과를 반환합니다. 비결정적 함수는 동일한 입력 값이 제공되더라도 호출에 따라 다른 결과를 반환할 수 있습니다.

왜 그렇게 중요합니까? 입력 매개변수같은 결과를 얻었습니까? 이는 뷰, 사용자 정의 함수 및 저장 프로시저에서 함수가 사용되는 방식을 정의하기 때문에 중요합니다. 제한 사항 다양한 플랫폼다를 수 있지만 때로는 이러한 개체에서 결정적 함수만 사용할 수 있습니다. 예를 들어, SQL Server는 표현식에 비결정적 함수가 포함되지 않는 한 열의 표현식에 대한 인덱스를 만들 수 있습니다. 규칙 및 제한 사항은 플랫폼마다 다르므로 기능 사용 시 제조사 설명서를 참조하시기 바랍니다.

집계 및 스칼라 함수

함수를 분류하는 또 다른 방법은 단일 문자열 또는 값 모음 또는 문자열 집합에 대해 작동하는 기능입니다. 집계 함수는 값 모음에서 작동하고 단일 총 값을 반환합니다. 스칼라 함수는 스칼라 입력 인수에 따라 단일 값을 반환합니다. CURRENTJTIME과 같은 일부 스칼라 함수에는 인수가 필요하지 않습니다.

창 기능

창 함수는 한 번에 여러 행에서 작동할 수 있다는 점에서 집계 함수와 유사하다고 간주할 수 있습니다. 차이점은 이러한 행을 지정하는 방법에 있습니다. 집계 함수는 GROUP BY 절에 지정된 행 집합에서 작동합니다. 창 함수의 경우 행 집합은 각 함수 호출과 함께 지정되며 동일한 쿼리 내의 다른 함수 호출은 다른 행 집합에서 작동할 수 있습니다.

이 단계의 SQL 쿼리 학습 단계는 SQL이 복잡한 선택 및 데이터 정렬뿐만 아니라 수학 함수의 결과 계산, 텍스트 변환 수행, 레코드 그룹화 등을 수행할 수 있다는 사실을 보여주기 위해 설계되었습니다. 더 정확하게는 SQL이 이 모든 작업을 수행할 수는 없지만 이를 지원하는 사람은 할 수 있습니다. 표준이 있는 SQL은 이러한 동일한 DBMS에 대한 요구 사항만 공식화합니다.

15단계 SUM, AVG, MIN, MAX, COUNT…

이 단계에서는 합계, 최소, 최대, 평균 등과 같은 SQL에서 가장 간단한 함수를 사용하는 방법을 보여줍니다. 바로 모든 직원의 평균 연공서열을 도출하는 예부터 시작하겠습니다.

SELECT AVG(D_STAFF.S_EXPERIENCE) AS [AVERAGE STAFF EXPERIENCE] FROM D_STAFF

SQL 함수 AVG.

마찬가지로 최소값과 최대값(MIN, MAX), 총액(SUM) 등을 계산할 수 있습니다. 자습서를 사용하여 시도하는 것이 좋습니다. WHERE 절을 사용하여 함수의 최종 값을 결정하는 것과 관련된 레코드를 선택하기 위한 추가 기준을 정의하는 것은 가치가 있습니다.

위에 나열된 함수는 전체 쿼리 결과를 사용하여 값을 결정합니다. 이러한 기능을 호출 골재 . 또한 인수가 쿼리에 정의된 열의 모든 값이 아니라 결과의 각 개별 행의 개별 값인 여러 함수가 있습니다. 이러한 함수의 예는 길이를 계산하기 위한 SQL 함수입니다. 텍스트 필드렌:

SELECT S_NAME, LEN(D_STAFF.S_NAME) AS [LENGTH] FROM D_STAFF


사용할 수 있습니다 SQL 함수의 중첩, 아래와 같이 S_NAME 필드의 최대 길이 값을 계산합니다.

SELECT MAX(LEN(D_STAFF.S_NAME)) AS [MAX LENGTH] FROM D_STAFF


SQL 함수 MAX.

글쎄, 결론적으로, 모두 함께.

SELECT SUM(D_STAFF.S_EXPERIENCE) AS [SUM], AVG(D_STAFF.S_EXPERIENCE) AS [AVERAGE], MIN(D_STAFF.S_EXPERIENCE) AS [MINIMUM], MAX(D_STAFF.S_EXPERIENCE) AS [MAXIMUM], COUNT(*) AS [NUMBER OF RECORDS], MAX(LEN(D_STAFF.S_NAME)) AS [MAXIMUM LENGTH] FROM D_STAFF


집계 SQL 함수를 사용하는 예입니다.

COUNT 함수에 대한 인수를 확인하십시오. 정확히 얻고 싶기 때문에 인수로 (*)를 지정했습니다. 총 수기록. 예를 들어 COUNT(S_NAME)를 지정하면 결과는 비어 있지 않은 S_NAME 값의 수가 됩니다(S_NAME IS NOT NULL). COUNT(DISTINCT S_NAME)를 작성하고 고유한 S_NAME 값의 수를 얻는 것이 가능하지만 MS Access는 불행히도 이 옵션을 지원하지 않습니다. 이 예에서 COUNT(S_NAME) 및 COUNT(*)는 정확히 동일한 결과를 제공합니다.

16단계 텍스트 변환

자주, 텍스트 값사용자가 채운 소프트웨어다른 방식으로: 누가 전체 이름을 작성합니다. 대문자가 아닌 사람; 누군가가 모든 것을 씁니다. 대문자. 많은 보고 양식에는 보고 양식뿐만 아니라 통합된 접근 방식이 필요합니다. 이 문제를 해결하기 위해 SQL에는 UCASE와 LCASE의 두 가지 함수가 있습니다. 요청의 예와 처리 결과는 다음과 같습니다.

SELECT UCASE(D_STAFF.S_NAME) AS , LCASE(D_STAFF.S_NAME) AS FROM D_STAFF


SQL 함수 UCASE 및 LCASE.

17단계: SQL 및 문자열 조작

텍스트 필드의 전체 값에서 문자열의 일부를 추출하는 문제를 해결하는 데 도움이 되는 멋진 MID 기능도 있습니다. 여기에서도 가장 좋은 설명은 사용자 프로필 이름을 "조롱하는" 예입니다.

SELECT UCASE(MID(P_NAME,3,5)) FROM D_PROFILE


SQL 함수 UCASE 및 MID의 중첩.

우리는 프로필 이름 값에서 3번째부터 시작하여 5개의 문자를 "잘라내고" 반복되는 "쓰레기"를 잔뜩 얻었습니다. 고유한 값만 남기기 위해 예어별개의.

SELECT DISTINCT UCASE(MID(P_NAME,3,5)) AS FROM D_PROFILE


고유한 집계 함수 값 선택.

MID 함수에 대한 인수로 LEN 함수가 있는 표현식을 사용해야 하는 경우가 있습니다. 다음 예에서는 이미 프로필 이름의 마지막 5자를 표시하고 있습니다.

SELECT UCASE(MID(P_NAME,LEN(P_NAME)-4,5)) FROM D_PROFILE


SQL 함수 LEN 사용.

단계 18. 레코드 선택 기준에서 SQL 기능 사용. HAVING 문

기능을 다루면 거의 즉시 질문이 발생합니다. 레코드 선택 기준에서 어떻게 사용할 수 있습니까? 집계가 아닌 일부 함수는 사용하기 쉽습니다. 예를 들어, 다음은 전체 이름이 25자 이상.

SELECT S_NAME FROM D_STAFF WHERE LEN(D_STAFF.S_NAME) > 25


SQL 쿼리 조건에서 비집계 LEN 함수 사용.

예를 들어 회사에서 두 명 이상의 직원이 차지하는 모든 직책의 식별자를 표시해야 하는 경우 이 접근 방식이 작동하지 않습니다. 내 말은 다음 쿼리가 의미가 없을 수 있지만 구조화된 쿼리의 관점에서 볼 때 올바르지 않다는 것입니다. 이는 집계 함수를 사용하여 이러한 SQL 쿼리를 올바르게 처리하기 위해 직원 레코드를 통한 하나의 선형 통과로는 충분하지 않기 때문입니다.

SELECT S_POSITION FROM D_STAFF WHERE COUNT(S_POSITION)>1

이러한 경우 HAVING 키워드가 SQL에 도입되어 직위 및 직원 문제를 해결하는 데 도움이 됩니다.

SELECT S_POSITION FROM D_STAFF GROUP BY S_POSITION HAVING COUNT(S_POSITION)>1


SQL 쿼리 조건에서 집계 함수 사용

19단계. GROUP BY 연산자를 사용하여 SQL 쿼리 결과의 데이터 그룹화

GROUP BY 절은 관련 필드의 값으로 집계 함수의 값을 그룹화하는 데 필요합니다. 레코드 선택 기준(이전 단계)에서 집계 함수 값을 사용하고자 할 때 필요합니다. 쿼리 결과에 집계 함수 값을 포함하려는 경우에도 필요합니다. 그러나 아주 간단한 버전그룹화는 고유한 열 값을 강조 표시하는 것과 같습니다. 요청의 예를 살펴보겠습니다.

D_STAFF에서 S_POSITION 선택


그리고 이것은 고유한 S_POSITION 값만 표시할 수 있는 두 가지 옵션입니다.

S_POSITION에 의해 ​​D_STAFF 그룹에서 S_POSITION 선택

D_STAFF에서 DISTINCT S_POSITION 선택


자, 이제 함수 값과 관련된 필드의 값을 기준으로 함수 값을 그룹화하는 것으로 돌아가 보겠습니다. 각 사용자 프로필에 대해 D_STAFF_PROFILE 테이블에 연결된 레코드 수를 표시해 보겠습니다.

SELECT PROFILE_ID AS , COUNT(PROFILE_ID) AS [NUMBER OF RECORDS] FROM D_STAFF_PROFILE GROUP BY PROFILE_ID


그룹화와 함께 집계 SQL 함수 사용

GROUP BY 연산자를 사용하면 쿼리 결과를 쉼표로 구분하여 나열하여 둘 이상의 필드로 그룹화할 수도 있습니다. 위의 모든 사항 이후에 마지막 쿼리의 결과에 대한 추가 설명이 필요하지 않기를 바랍니다.

SELECT S.S_POSITION AS , S.S_NAME AS [EMPLOYEE], COUNT(SP.STAFF_ID) AS [테이블 D_STAFF_PROFILE의 레코드 수] FROM D_STAFF S, D_STAFF_PROFILE SP WHERE S.XD_IID=SP.STAFF_ID GROUP BY S.S_ . S_NAME


여러 필드로 SQL 쿼리 결과 행을 그룹화합니다.