Các truy vấn SQL (cơ bản) có tương đương về mặt ngữ nghĩa với các Hàm bậc cao hơn không?


11

SQL về cơ bản là một thể hiện cụ thể miền của map + Fold + filter?

Dường như với tôi rằng SQL sau:

SELECT name
FROM fruits
WHERE calories < 100 

chỉ là cú pháp đường cho bản đồ sau + bộ lọc + thao tác gấp:

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; });

Là sự trùng hợp ngẫu nhiên này, hay có một sự tương đương ngữ nghĩa âm thanh có thể được chứng minh? Làm thế nào, đại khái?

Tôi biết trong thực tế SQL có rất nhiều tiếng chuông và tiếng huýt sáo nhưng cốt lõi của nó là nó chỉ đơn giản là một hoạt động của bộ lọc bản đồ?

Bài viết sau đây có liên quan: http://bloss.msdn.com/b/doriancorompt/archive/2013/01/21/brelling-the-querying-power-of-sql-to-javascript.aspx


1
Làm thế nào bạn sẽ mô hình một mệnh đề THAM GIA hoặc một nhóm BY BY?
Ixrec


2
gnat - Nếu bạn đọc bài đăng khác, bạn sẽ thấy rằng họ nói với tôi rằng câu hỏi không phù hợp với Stackoverflow nên sau đó tôi đã đăng ở đây. Đôi khi bạn không thể chiến thắng với Stackoverflow. Bài đăng bị đóng vì không phù hợp, trong diễn đàn sai hoặc quá phức tạp nên không phù hợp với trang này hoặc quá dễ để bạn sử dụng Google.
Sridhar Sarnobat

1
Oh, tôi phải xóa bài viết khác. Làm xong.
Sridhar Sarnobat

1
@ Sridhar-Sarnobat: Thông thường, khi một nhóm người dùng bỏ phiếu để di chuyển câu hỏi của bạn sang Lập trình viên. Nó sẽ tự động được di chuyển. Bạn đã đóng câu hỏi của bạn trước khi nó đạt được 5 phiếu cần thiết.
Brian

Câu trả lời:


6

Hãy xem LINQ , lấy các khái niệm cơ bản đằng sau SQL và khái quát hóa nó để lập trình hướng đối tượng. Các Wherenhà điều hành là một Lọc bog tiêu chuẩn, các Selectnhà điều hành là một chiếu / Bản đồ, và vân vân. Tất cả các hoạt động truy vấn SQL cơ bản được trình bày trong LINQ, được triển khai bằng các hàm bậc cao hơn, vì vậy, bạn hiểu đúng về cách hiểu trực quan của bạn về SQL.

Sự khác biệt lớn giữa ví dụ bạn có và cách thức hoạt động của cơ sở dữ liệu quan hệ là SQL được thiết kế với một bộ lệnh rất hạn chế. Nó không hoàn chỉnh và các nhà thiết kế cơ sở dữ liệu biết những gì nó có thể và không thể làm, điều đó giúp họ dễ dàng thiết kế hệ thống để tối ưu hóa các truy vấn ở mức độ lớn hơn nhiều so với việc Mapliệt kê một bộ dữ liệu đơn giản từng phần tử


Điều này chỉ chứng minh rằng các hàm bậc cao hơn có thể được sử dụng để nhận ra các hoạt động SQL, chứ không phải nói chung hai hàm này có liên quan với nhau.
Bart van Ingen Schenau

1
@Bart: Sau đó, câu hỏi là "có một sự tương đương ngữ nghĩa âm thanh có thể được chứng minh?" Thực hiện một điều theo cách khác là một kỹ thuật được tôn vinh theo thời gian để chứng minh sự tương đương trong khoa học máy tính. Ví dụ: một cách để chứng minh rằng một ngôn ngữ là Turing-Complete bằng cách sử dụng nó để thực hiện một ngôn ngữ khác đã được biết là Turing-Complete.
Mason Wheeler

Đối với một sự tương đương ngữ nghĩa, tôi mong rằng bạn có thể hiển thị nó theo cả hai hướng. Cả hai truy vấn SQL có thể được thể hiện trong các hàm bậc cao hơn và bạn có thể biểu thị một hàm bậc cao hơn trong cú pháp SQL.
Bart van Ingen Schenau

2
Có lẽ tôi đã không đặt câu hỏi chính thức đủ. Tôi đoán tôi không cần nó tương đương hai chiều trong 100% trường hợp. Chỉ là các truy vấn thông thường thông qua một cách tiếp cận có thể được viết lại như một cách khác.
Sridhar Sarnobat

2
Công bằng mà nói, OP đã đặt câu hỏi là "các truy vấn SQL tương đương với các hàm bậc cao hơn", chứ không phải "là ngôn ngữ SQL tương đương với ngôn ngữ lập trình chức năng", vì vậy không có câu trả lời nào sai.
Ixrec

9

SQL dựa trên Đại số quan hệ và Tính toán quan hệ Tuple, không phải các hàm bậc cao hơn hoặc lập trình hàm. Trong khi CHỌN, TỪ và WHERE có các chức năng tương tự trong các ngôn ngữ khác, bản thân SQL không hỗ trợ các hàm bậc cao hơn, mà chỉ các hàm "bậc cao hơn" mà ngôn ngữ tự xác định.

Vì SQL không cho phép bạn viết các hàm bậc cao tùy chỉnh của riêng bạn, nên không thể nói với bất kỳ cơ quan nào rằng ngôn ngữ hỗ trợ các hàm bậc cao hơn.


Là đại số / tính toán quan hệ có liên quan đến lập trình chức năng không? Tôi nghĩ rằng các ngôn ngữ quan hệ có nguồn gốc từ lý thuyết tập hợp nhưng không chắc chắn nếu điều đó làm cho chúng hoạt động.
Sridhar Sarnobat

1
Đó là lý do tại sao "thứ tự cao hơn" là trong trích dẫn sợ hãi.
Robert Harvey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.