(พื้นฐาน) แบบสอบถาม SQL มีความหมายเทียบเท่ากับฟังก์ชันคำสั่งซื้อที่สูงขึ้นหรือไม่


12

SQL นั้นเป็นโดเมนเฉพาะของ map + fold + filter หรือไม่

ดูเหมือนว่าฉันว่า SQL ต่อไปนี้:

SELECT name
FROM fruits
WHERE calories < 100 

เป็นเพียงน้ำตาล syntactic สำหรับแผนที่ + ตัวกรอง + การดำเนินการพับ:

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 มี bells และ whistles จำนวนมาก แต่ที่สำคัญคือมันเป็นเพียงการดำเนินการ map-fold-filter?

บทความต่อไปนี้มีความเกี่ยวข้อง: http://blogs.msdn.com/b/doriancorompt/archive/2013/01/21/bringing-the-querying-power-of-sql-to-javascript.aspx


1
คุณจะสร้างแบบจำลองการเข้าร่วมหรือกลุ่มตามข้อ?
Ixrec


2
gnat - หากคุณอ่านโพสต์อื่นคุณจะเห็นว่าพวกเขาบอกฉันว่าคำถามนั้นไม่เหมาะสมสำหรับ Stackoverflow ดังนั้นหลังจากนั้นฉันโพสต์ที่นี่ บางครั้งคุณไม่สามารถชนะด้วย Stackoverflow โพสต์อาจถูกปิดเนื่องจากไม่เหมาะสมในฟอรัมที่ไม่ถูกต้องหรือซับซ้อนเกินไปดังนั้นจึงไม่เหมาะสำหรับไซต์นี้หรือเป็นเรื่องง่ายที่คุณควรใช้ Google
Sridhar Sarnobat

1
โอ้ฉันควรลบโพสต์อื่น เสร็จสิ้น
Sridhar Sarnobat

1
@ Sridhar-Sarnobat: โดยปกติเมื่อผู้ใช้หลายคนโหวตให้โยกย้ายคำถามของคุณไปยัง Programmers.SE มันจะถูกย้ายโดยอัตโนมัติ คุณปิดคำถามก่อนที่จะถึง 5 คะแนนที่จำเป็น
Brian

คำตอบ:


6

ดูที่LINQซึ่งจะนำแนวคิดพื้นฐานที่อยู่เบื้องหลัง SQL และวางลงในการเขียนโปรแกรมเชิงวัตถุ Whereประกอบเป็นตัวกรองลุ่มมาตรฐานSelectผู้ประกอบการคือการฉาย / แผนที่และอื่น ๆ การดำเนินการสืบค้น SQL พื้นฐานทั้งหมดจะแสดงใน LINQ, ดำเนินการโดยใช้ฟังก์ชันลำดับสูงกว่าดังนั้นใช่คุณถูกต้องในการทำความเข้าใจ SQL ที่เข้าใจง่ายของคุณ

ความแตกต่างอย่างมากระหว่างตัวอย่างที่คุณมีและวิธีการทำงานของฐานข้อมูลเชิงสัมพันธ์คือ SQL ได้รับการออกแบบโดยคำนึงถึงชุดคำสั่งที่ จำกัด อย่างมาก มันไม่ทัวริงที่สมบูรณ์และนักออกแบบฐานข้อมูลรู้ว่ามันสามารถทำได้และไม่สามารถทำได้ซึ่งทำให้ง่ายขึ้นสำหรับพวกเขาในการออกแบบระบบเพื่อปรับการสืบค้นให้มีระดับสูงสุดยิ่งกว่าที่จะเป็นไปได้ด้วยMapชุดข้อมูลที่เรียบง่ายองค์ประกอบโดยองค์ประกอบ


สิ่งนี้แสดงให้เห็นว่าสามารถใช้ฟังก์ชันลำดับสูงเพื่อตระหนักถึงการดำเนินงานของ SQL ไม่ใช่ว่าทั้งสองเกี่ยวข้องกันโดยทั่วไป
Bart van Ingen Schenau

1
@Bart: คำถามก็คือ "มีความหมายที่เท่าเทียมกันที่สามารถพิสูจน์ได้หรือไม่" การนำสิ่งหนึ่งไปใช้ในแง่ของสิ่งอื่นเป็นเทคนิคที่ได้รับเกียรติจากการพิสูจน์ความเท่าเทียมกันทางวิทยาศาสตร์คอมพิวเตอร์ ตัวอย่างเช่นวิธีหนึ่งในการพิสูจน์ว่าภาษาทัวริงสมบูรณ์โดยใช้ภาษานั้นเพื่อนำภาษาอื่นมาใช้ซึ่งเป็นที่ทราบกันแล้วว่าทัวริงสมบูรณ์
Mason Wheeler

สำหรับความเท่าเทียมกันทางความหมายฉันคาดหวังว่าคุณจะสามารถแสดงได้ทั้งสองทิศทาง ทั้งแบบสอบถาม SQL นั้นสามารถแสดงในฟังก์ชันลำดับสูงกว่าและคุณสามารถแสดงฟังก์ชันลำดับสูงกว่าในไวยากรณ์ SQL
Bart van Ingen Schenau

2
บางทีฉันอาจไม่ได้คำถามอย่างเป็นทางการพอ ฉันเดาว่าฉันไม่ต้องการให้เทียบเท่าสองทางในกรณี 100% เพียงว่าการสืบค้นทั่วไปผ่านวิธีการหนึ่งสามารถเขียนใหม่ได้
Sridhar Sarnobat

2
เพื่อความเป็นธรรม OP ทำวลีคำถามว่า "เป็นคำสั่ง SQL เทียบเท่ากับฟังก์ชันลำดับสูงกว่า" ไม่ใช่ "เป็นภาษา SQL เทียบเท่ากับภาษาโปรแกรมที่ใช้งานได้" ดังนั้นคำตอบก็ไม่ผิด
Ixrec

10

SQL ยึดตามพีชคณิตเชิงสัมพันธ์และแคลคูลัสเชิงสัมพันธ์ของ Tuple ไม่ใช่ฟังก์ชันลำดับสูงกว่าหรือการโปรแกรมเชิงฟังก์ชัน ในขณะที่ SELECT, FROM และ WHERE จะมีฟังก์ชั่นแบบอะนาล็อกในภาษาอื่น ๆ , SQL เองไม่รองรับฟังก์ชั่นการเรียงลำดับที่สูงกว่าแต่เฉพาะฟังก์ชั่น "ลำดับสูงกว่า" ที่ภาษานั้นกำหนด

เนื่องจาก SQL ไม่อนุญาตให้คุณเขียนฟังก์ชันลำดับสูงกว่าที่กำหนดเองของคุณเองจึงไม่สามารถพูดได้ด้วยสิทธิ์ใด ๆ ที่ภาษารองรับฟังก์ชันลำดับสูงกว่า


พีชคณิตเชิงสัมพันธ์ / แคลคูลัสสัมพันธ์กับการเขียนโปรแกรมเชิงฟังก์ชันหรือไม่? ฉันคิดว่าภาษาเชิงสัมพันธ์มาจากทฤษฎีเซต แต่ไม่แน่ใจว่ามันทำให้พวกมันทำงานได้หรือไม่
Sridhar Sarnobat

1
ซึ่งเป็นสาเหตุที่ "คำสั่งซื้อที่สูงกว่า" อยู่ในเครื่องหมายตกใจ
Robert Harvey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.