(기본) SQL 쿼리는 의미 적으로 상위 함수와 동일합니까?


12

SQL은 기본적으로 map + fold + filter의 도메인 특정 인스턴스입니까?

다음과 같은 SQL 인 것 같습니다.

SELECT name
FROM fruits
WHERE calories < 100 

다음 맵 + 필터 + 접기 작업에 대한 구문 설탕입니다.

var fruits = [{id : 1, name: 'orange', calories : 100},
    {id : 2, name : 'banana',  calories : 150},
    {id : 3, name: 'apple', calories : '50'}];

fruits.map(function(fruit) { return { name : fruit.name, calories : fruit.calories })
    .filter(function(obj) { return obj.calories < 100 })
    .reduce(function (accumulator, obj) { accumulator + "\n" + val.name; });

이 우연의 일치입니까, 아니면 입증 할 수있는 건전한 의미 론적 동등성이 있습니까? 어떻게 요?

실제로 SQL에는 많은 종과 휘파람이 있지만 그 핵심은 단순히 맵 폴드 필터 작업입니까?

다음 기사는 관련이 있습니다 : http://blogs.msdn.com/b/doriancorompt/archive/2013/01/21/bringing-the-querying-power-of-sql-to-javascript.aspx


1
JOIN 또는 GROUP BY 절을 어떻게 모델링 하시겠습니까?
Ixrec

1
@Ixrec : 이것 처럼
Mason Wheeler

2
gnat-다른 게시물을 읽으면 질문이 Stackoverflow에 적합하지 않다고 말한 후에 나중에 여기에 게시했습니다. 때로는 Stackoverflow로 이길 수 없습니다. 게시물이 부적절하거나, 포럼이 잘못되었거나, 너무 복잡하여이 사이트에 적합하지 않아서 게시물이 닫혔거나 Google을 사용하기가 쉬웠습니다.
Sridhar Sarnobat

1
아, 다른 게시물을 삭제해야합니다. 끝난.
Sridhar Sarnobat

1
@ Sridhar-Sarnobat : 일반적으로 많은 사용자가 귀하의 질문을 Programmers.SE로 마이그레이션하기 위해 투표하면 자동으로 마이그레이션됩니다. 필수 5 표에 도달하기 전에 질문을 마감했습니다.
Brian

답변:


6

SQL의 기본 개념을 객체 지향 프로그래밍으로 일반화하는 LINQ를 살펴보십시오 . Where운영자는, 늪지 표준 필터입니다 Select연산자는 투사 /지도 등이다. 모든 기본 SQL 쿼리 작업은 LINQ로 표시되며 고차 함수를 사용하여 구현되므로 SQL에 대한 직관적 인 이해가 정확합니다.

얻은 예제와 관계형 데이터베이스의 작동 방식의 가장 큰 차이점은 SQL이 매우 제한된 명령 집합을 염두에두고 설계되었다는 것입니다. Turing-complete가 아니며 데이터베이스 디자이너가 할 수있는 것과 할 수없는 것을 알고 있기 때문에 간단한 Map데이터 세트 열거 로 가능한 것보다 훨씬 더 쿼리를 최적화하도록 시스템을 설계하기가 훨씬 쉽습니다. 요소별로.


이것은 단지 고차원 함수가 SQL 연산을 실현하는 데 사용될 수 있다는 것을 보여줍니다.
Bart van Ingen Schenau 2016 년

1
@Bart : 그렇다면 질문은 "증명 될 수있는 건전한 의미 론적 동등성이 있습니까?"였습니다. 한 가지를 다른 것의 측면에서 구현하는 것은 컴퓨터 과학의 동등성을 입증하기 위해 오랜 시간 동안 명예를 얻은 기술입니다. 예를 들어, 언어가 이미 Turing-complete라고 알려진 다른 언어를 구현하여 언어가 Turing-complete임을 증명하는 한 가지 방법입니다.
메이슨 휠러

시맨틱 등가의 경우 양방향으로 표시 할 수있을 것으로 기대합니다. SQL 쿼리는 고차 함수로 표현 될 수 있고 SQL 구문으로 고차 함수를 표현할 수 있습니다.
Bart van Ingen Schenau 2016 년

2
어쩌면 나는 공식적으로 질문을 충분히 표현하지 않았을 것입니다. 100 %의 경우 양방향으로 동등 할 필요는 없습니다. 한 접근 방식을 통한 일반적인 쿼리는 다른 접근 방식으로 다시 작성할 수 있습니다.
Sridhar Sarnobat

2
공평하게, OP는 "SQL 언어 가 기능 프로그래밍 언어와 동등 하지 않다"는 것이 아니라 "고차 함수와 동등한 SQL 쿼리 "라고 질문을 표현 했으므로 어느 대답도 틀렸다.
Ixrec 2016 년

10

SQL은 관계형 대수 및 튜플 관계형 미적분학을 기반으로하며, 고차 함수 나 함수형 프로그래밍이 아닙니다. SELECT, FROM 및 WHERE는 다른 언어에서 유사한 기능을 가지고 있지만 SQL 자체는 일반화 된 고차 함수를 지원하지 않지만 언어 자체가 정의하는 "고차"함수 만 지원 합니다.

SQL을 사용하면 사용자 지정 고차 함수를 작성할 수 없으므로 언어가 고차 함수를 지원한다고 말할 수는 없습니다.


관계형 대수 / 미적분은 함수형 프로그래밍과 전혀 관련이 있습니까? 관계형 언어는 집합 이론에서 파생 된 것으로 생각되지만 이것이 기능적으로 작동하는지 확실하지 않습니다.
Sridhar Sarnobat

1
그렇기 때문에 "고차"가 겁에 질린 이유입니다.
Robert Harvey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.