우리는 대부분의 언어가 "관계 기반"또는 "높은 수준"의 두 가지로 분류된다는 것을 알고 있습니다.
이러한 개념은 직교합니다. "관계 기반"은 언어의 의미가 관계의 개념, 즉 두 세트 사이의 다 대다 연관 (상대 관계는 SQL 테이블의 수학적 기초)을 기반으로 함을 의미합니다. "고수준"은 언어에 기본 기술 세부 사항 (메모리 위치, CPU 레지스터, 디스크 액세스, 비트 연산 등)을 숨기는 많은 추상화가 포함되어 있음을 의미합니다. SQL의 주요 목적은 관계형 데이터와 그에 대한 작업을 설명하는 것이므로 SQL은 확실히 관계에 기반합니다. SQL도 상당히 높은 수준입니다. 디스크의 바이트에 직접 액세스하는 수단을 제공하지 않으며 데이터를 저장하는 방법에 대한 세부 정보를 제공하지 않습니다 (적어도 표준 SQL은 그렇지 않습니다.
실제로 프로그래밍 언어와 데이터를 분류 할 수있는 축이 더 많습니다. 특히 흥미로운 것은 선언적 대 명령 적 입니다. 선언적 언어는 뭔가가 무엇인지 설명 이다 ; 명령형 언어 는 무언가 를 수행 하는 방법을 설명합니다 . SQL의 DDL 부분은 ( "명령형 보이는 키워드에도 불구하고, 대부분의 선언이다 CREATE TABLE
", " DROP DATABASE
", 등), 심지어 데이터 조작 부분은 ( SELECT
, UPDATE
, INSERT
, DELETE
)는 여전히 꽤 선언이다. SQL의 매우 흥미로운 속성은 Turing complete가 아니라는 것입니다. 일반 표준 ANSI SQL에서 무한 루프를 작성할 수 없습니다.
기능적 프로그래밍은 몇 가지 핵심 아이디어를 중심으로합니다.
- 함수는 일류 시민입니다 (즉, 값, 다른 함수의 입력 및 다른 함수의 출력으로 사용할 수 있음).
- 고차 함수 (함수에서 작동하는 함수 또는 함수를 반환하는 함수)
- 순도 (순수 함수는 부작용이없는 함수입니다. 순수 함수는 I / O를 수행 할 수 없으며 전역 상태를 읽거나 수정할 수 없으며 비 const 참조 인수를 사용할 수 없습니다. 순수 함수는 특히 흥미로울 것입니다. 항상 동일한 입력으로 동일한 출력을 생성합니다)
SQL은 확실히 기능을 모델링하는 주요 도구 인 함수를 중심으로하지는 않지만 순도 아이디어를 어느 정도 수용합니다. 동일한 데이터베이스에서 동일한 쿼리를 실행하면 매번 동일한 결과가 생성됩니다 (주문 제외). SQL을 '기능적'언어라고 부르는 것은 IMO를 통해 약간의 확장입니다.