กลับไปหน้าบทความ

อ่าน 14 นาที

คำสั่ง SQL

Structured Query Language ( SQL ) ( ออกเสียงว่า / ˌ ɛ s ˌ k j u ˈ ɛ l / SQL ; หรืออีกทางหนึ่งเป็น / ˈ s iː k w ə l / ⓘ "ภาคต่อ" [ 4 ] [ 5 ] เป็น ภาษาเฉพาะโดเมน...

คำสั่ง SQL

SQL (ภาษาการสอบถามเชิงโครงสร้าง)
กระบวนทัศน์การประกาศ
ตระกูลภาษาสอบถาม
ออกแบบโดยโดนัลด์ ดี. แชมเบอร์ลิน เรย์มอนด์ เอฟ. บอยซ์
นักพัฒนาISO/IEC JTC 1 (คณะกรรมการเทคนิคร่วม 1) / SC 32 (คณะอนุกรรมการ 32) / WG 3 (กลุ่มงานที่ 3)
ปรากฏครั้งแรกพ.ศ. 2516 ( 1973 )
เวอร์ชันเสถียร
SQL:2023 / มิถุนายน 2023 ( 2023-06 )
วินัยในการพิมพ์คงที่แข็งแกร่ง
โอเอสข้ามแพลตฟอร์ม
เว็บไซต์www.iso.org/standard/76583.html
การนำไปใช้งานหลักๆ
มากมาย
ภาษาถิ่น
  • คิวบี-86
  • คิวบี-89
  • คิวบี-92
  • คิวบี:1999
  • คิวบี:2003
  • คิวบี:2006
  • สแควร์:2008
  • คิวบี:2011
  • คิวบี:2016
  • คิวบี:2023
ได้รับอิทธิพลจาก
บันทึกข้อมูล
ได้รับอิทธิพล
CQL , LINQ , SPARQL , SOQL, PowerShell , [ 1 ] JPQL , jOOQ , N1QL , GQL
  • โลโก้ Wikibooksภาษาการสืบค้นข้อมูลเชิงโครงสร้าง (Structured Query Language)ที่วิกิบุ๊กส์
SQL (รูปแบบไฟล์)
นามสกุลไฟล์
.sql
สื่อประเภทอินเทอร์เน็ต
แอปพลิเคชัน/sql [ 2 ] [ 3 ]
พัฒนาโดยISO / IEC
การเผยแพร่ครั้งแรกพ.ศ. 2529 ( 1986 )
ประเภทของรูปแบบฐานข้อมูล
มาตรฐานไอโซ/อีอีซี 9075
รูปแบบเปิด ?ใช่
เว็บไซต์www.iso.org/standard/76583.html

Structured Query Language ( SQL ) ( ออกเสียงว่า/ ˌ ɛ s ˌ k j u ˈ ɛ l / SQL ; หรืออีกทางหนึ่งเป็น/ ˈ s k w ə l / "ภาคต่อ" [ 4 ] [ 5 ]เป็นภาษาเฉพาะโดเมนที่ใช้ในการจัดการข้อมูล โดยเฉพาะในระบบจัดการฐานข้อมูลเชิงสัมพันธ์(RDBMS) มีประโยชน์อย่างยิ่งในการจัดการข้อมูลที่มีโครงสร้าง กล่าวคือ ข้อมูลที่รวมความสัมพันธ์ระหว่างเอนทิตีและตัวแปร

SQL ซึ่งเปิดตัวในทศวรรษ 1970 มีข้อดีหลักสองประการเหนือกว่าAPI แบบอ่าน-เขียนรุ่นเก่า เช่นISAMหรือVSAMประการแรก คือ นำเสนอแนวคิดการเข้าถึงหลายระเบียน ด้วย คำสั่งเดียวประการที่สอง คือ ขจัดความจำเป็นในการระบุวิธี การเข้าถึงระเบียน เช่น จะใช้ ดัชนี หรือไม่ใช้ดัชนี

SQL ซึ่งเดิมทีมีพื้นฐานมาจากพีชคณิตเชิงสัมพันธ์และแคลคูลัสเชิงสัมพันธ์ของทูเพิลประกอบด้วยคำสั่งหลายประเภท[ 6 ]ซึ่งอาจจัดประเภทอย่างไม่เป็นทางการเป็นภาษาย่อยได้โดยทั่วไปได้แก่ภาษาสอบถามข้อมูล (DQL) ภาษานิยามข้อมูล (DDL) ภาษาควบคุมข้อมูล (DCL) และภาษาจัดการข้อมูล (DML) [ 7 ]

ขอบเขตของ SQL ครอบคลุมถึงการสอบถามข้อมูล การจัดการข้อมูล (การแทรก การอัปเดต และการลบ) การกำหนดโครงสร้างข้อมูล ( การสร้างและการแก้ไข สคีมา ) และการควบคุมการเข้าถึงข้อมูล แม้ว่า SQL จะเป็นภาษาเชิงประกาศ ( 4GL ) เป็นหลัก แต่ก็มีองค์ประกอบ เชิงกระบวนการ รวมอยู่ด้วย

SQL เป็นหนึ่งในภาษาเชิงพาณิชย์แรกๆ ที่ใช้โมเดลเชิงสัมพันธ์ของEdgar F. Coddโมเดลนี้ได้รับการอธิบายไว้ในบทความที่มีอิทธิพลของเขาในปี 1970 เรื่อง "A Relational Model of Data for Large Shared Data Banks" [ 8 ] แม้ว่าจะไม่ได้ยึดตามโมเดลเชิงสัมพันธ์ที่ Codd อธิบายไว้ อย่างสมบูรณ์ แต่ SQL ก็กลายเป็นภาษาฐานข้อมูลที่ใช้กันอย่างแพร่หลายที่สุด[ 9 ] [ 10 ]

SQL กลายเป็นมาตรฐานของสถาบันมาตรฐานแห่งชาติอเมริกัน (ANSI) ในปี 1986 และขององค์การมาตรฐานสากล (ISO) ในปี 1987 [ 11 ]นับตั้งแต่นั้นมา มาตรฐานดังกล่าวได้รับการแก้ไขหลายครั้งเพื่อให้มีฟีเจอร์ที่หลากหลายมากขึ้นและรวมส่วนขยายทั่วไปเข้าไว้ด้วย แม้จะมีมาตรฐานอยู่ แต่ในทางปฏิบัติแล้วแทบไม่มีการใช้งานใดที่ปฏิบัติตามมาตรฐานอย่างสมบูรณ์ และโค้ด SQL ส่วนใหญ่จำเป็นต้องมีการเปลี่ยนแปลงอย่างน้อยบางส่วนก่อนที่จะนำไปใช้กับระบบ ฐานข้อมูล อื่น

ประวัติศาสตร์

SQL ได้รับการพัฒนาครั้งแรกที่IBMโดยDonald D. ChamberlinและRaymond F. Boyceหลังจากเรียนรู้เกี่ยวกับแบบจำลองเชิงสัมพันธ์จากEdgar F. Codd [ 12 ]ในช่วงต้นทศวรรษ 1970 [ 13 ]เวอร์ชันนี้ซึ่งเดิมเรียกว่า SEQUEL (Structured English Query Language) ได้รับการออกแบบมาเพื่อจัดการและเรียกค้นข้อมูลที่จัดเก็บไว้ในระบบจัดการฐานข้อมูลกึ่งเชิงสัมพันธ์ดั้งเดิมของ IBM คือSystem Rซึ่งกลุ่มที่ห้องปฏิบัติการวิจัย IBM San Joseได้พัฒนาขึ้นในช่วงทศวรรษ 1970 [ 13 ]

ความพยายามครั้งแรกของ Chamberlin และ Boyce ในการสร้างภาษาฐานข้อมูลเชิงสัมพันธ์คือ SQUARE (Specifying Queries in A Relational Environment) แต่ใช้งานยากเนื่องจากการใช้สัญลักษณ์ตัวห้อย/ตัวยก หลังจากย้ายไปที่ห้องปฏิบัติการวิจัยซานโฮเซในปี 1973 พวกเขาเริ่มทำงานกับ SQUARE รุ่นต่อไป[ 12 ]ชื่อเดิมคือ SEQUEL ซึ่งถือกันอย่างกว้างขวางว่าเป็นการเล่นคำกับQUELซึ่งเป็นภาษาสอบถามข้อมูลของIngres [ 14 ] ต่อมาได้เปลี่ยนเป็น SQL (ตัดสระออก) เนื่องจาก "SEQUEL" เป็นเครื่องหมายการค้า ของบริษัท Hawker Siddeley Dynamics Engineering Limited ซึ่งตั้งอยู่ในสหราชอาณาจักร[ 15 ] ต่อมาคำว่า SQL กลายเป็นคำย่อของ Structured Query Language [ 16 ]

หลังจากทดสอบ SQL ที่ไซต์ทดสอบของลูกค้าเพื่อพิจารณาถึงประโยชน์และความเหมาะสมของระบบแล้ว IBM ก็เริ่มพัฒนาผลิตภัณฑ์เชิงพาณิชย์โดยอิงจากต้นแบบ System R ของตน ซึ่งรวมถึงSystem/38 , SQL/DSและIBM Db2ซึ่งวางจำหน่ายในเชิงพาณิชย์ในปี 1979, 1981 และ 1983 ตามลำดับ[ 17 ]การรับรองของ IBM ทำให้ภาคอุตสาหกรรมเปลี่ยนมาใช้ SQL แทนทางเลือกอื่น ๆ เช่น QUEL [ 18 ]

ในช่วงปลายทศวรรษ 1970 บริษัท Relational Software, Inc. (ปัจจุบันคือOracle Corporation ) เล็งเห็นศักยภาพของแนวคิดที่ Codd, Chamberlin และ Boyce อธิบายไว้ และได้พัฒนาRDBMS ที่ใช้ SQL ของตนเอง โดยมีเป้าหมายที่จะขายให้กับกองทัพเรือสหรัฐฯหน่วยข่าวกรองกลางและ หน่วยงาน รัฐบาลสหรัฐฯอื่นๆในเดือนมิถุนายน 1979 Relational Software ได้เปิดตัวหนึ่งในโปรแกรมที่ใช้ SQL เวอร์ชันแรกๆ ที่วางจำหน่ายในเชิงพาณิชย์ นั่นคือOracle V2 (เวอร์ชัน 2) สำหรับคอมพิวเตอร์ VAX

ภายในปี 1986 กลุ่มมาตรฐาน ANSIและISOได้นำคำจำกัดความภาษามาตรฐาน "Database Language SQL" มาใช้อย่างเป็นทางการเวอร์ชันใหม่ของมาตรฐานนี้ได้รับการเผยแพร่ในปี 1989, 1992 , 1996 , 1999 , 2003, 2006 , 2008 , 2011 , [ 12 ] 2016และล่าสุดในปี2023 [ 19 ]

ความสามารถในการทำงานร่วมกันและการกำหนดมาตรฐาน

ภาพรวม

การใช้งาน SQL ไม่เข้ากันระหว่างผู้จำหน่ายและไม่จำเป็นต้องปฏิบัติตามมาตรฐานอย่างสมบูรณ์ โดยเฉพาะอย่างยิ่ง ไวยากรณ์วันที่และเวลา การเชื่อมต่อสตริงNULLs และความไวต่อตัวพิมพ์ ใหญ่-เล็กในการเปรียบเทียบ จะแตกต่างกันไปในแต่ละผู้จำหน่ายPostgreSQL [ 20 ]และMimer SQL [ 21 ]มุ่งมั่นที่จะปฏิบัติตามมาตรฐาน แม้ว่า PostgreSQL จะไม่ปฏิบัติตามมาตรฐานในทุกกรณีก็ตาม ตัวอย่างเช่น การพับชื่อที่ไม่มีเครื่องหมายคำพูดเป็นตัวพิมพ์เล็กใน PostgreSQL ไม่เข้ากันกับมาตรฐาน SQL [ 22 ] ซึ่งระบุว่าชื่อที่ไม่มีเครื่องหมาย คำ พูดควรพับเป็นตัวพิมพ์ใหญ่[ 23 ]ดังนั้น ตามมาตรฐานFooควรเทียบเท่ากับFOOไม่ใช่foo

การใช้งาน SQL ที่เป็นที่นิยมมักจะละเว้นการสนับสนุนคุณสมบัติพื้นฐานของ SQL มาตรฐาน เช่น ประเภทข้อมูล DATEหรือTIMEตัวอย่างที่ชัดเจนที่สุด และโดยบังเอิญก็เป็น DBMS SQL เชิงพาณิชย์และกรรมสิทธิ์ที่เป็นที่นิยมมากที่สุด คือ Oracle (ซึ่งมีDATEพฤติกรรมเหมือนDATETIME[ 24 ] [ 25 ]และไม่มีประเภท) [ 26 ]และ MS SQL Server (ก่อนเวอร์ชัน 2008) ด้วยเหตุนี้ โค้ด SQL จึงแทบจะไม่สามารถถ่ายโอนระหว่างระบบฐานข้อมูลได้โดยไม่ต้องแก้ไข TIME

สาเหตุของความไม่เข้ากัน

สาเหตุหลายประการที่ทำให้การถ่ายโอนข้อมูลระหว่างระบบฐานข้อมูลทำได้ยาก ได้แก่:

  • เนื่องจากมาตรฐาน SQL มีความซับซ้อนและมีขนาดใหญ่ ผู้พัฒนาส่วนใหญ่จึงไม่รองรับมาตรฐานทั้งหมด
  • มาตรฐาน SQL ไม่ได้ระบุพฤติกรรมของฐานข้อมูลในบางส่วนที่สำคัญ (เช่นดัชนีการจัดเก็บไฟล์) ทำให้การใช้งานแต่ละแบบต้องตัดสินใจเองว่าจะดำเนินการอย่างไร
  • มาตรฐาน SQL มอบอำนาจการตัดสินใจบางอย่างให้กับการใช้งานแต่ละแบบ เช่น วิธีการตั้งชื่อคอลัมน์ผลลัพธ์ที่ไม่ได้ระบุชื่อไว้อย่างชัดเจน[ 27 ] : 207
  • มาตรฐาน SQL ระบุไวยากรณ์ที่ระบบฐานข้อมูลที่สอดคล้องกับมาตรฐานต้องนำไปใช้ไว้อย่างแม่นยำ อย่างไรก็ตาม การระบุความหมายของโครงสร้างภาษาในมาตรฐานนั้นไม่ชัดเจนนัก ทำให้เกิดความกำกวม
  • ผู้จำหน่ายฐานข้อมูลหลายรายมีฐานลูกค้าขนาดใหญ่ และหากมาตรฐาน SQL เวอร์ชันใหม่ขัดแย้งกับพฤติกรรมเดิมของฐานข้อมูลของผู้จำหน่ายนั้น ผู้จำหน่ายอาจไม่เต็มใจที่จะยกเลิกความเข้ากันได้กับเวอร์ชัน ก่อนหน้า
  • ผู้ขายแทบไม่มีแรงจูงใจทางการค้าที่จะทำให้การเปลี่ยนผู้ให้บริการฐานข้อมูลทำได้ง่ายขึ้น (ดูเรื่องการผูกขาดผู้ให้บริการ )
  • ผู้ใช้งานที่ประเมินซอฟต์แวร์ฐานข้อมูลมักให้ความสำคัญกับปัจจัยอื่นๆ เช่น ประสิทธิภาพ มากกว่าการปฏิบัติตามมาตรฐาน

ประวัติการกำหนดมาตรฐาน

SQL ได้รับการยอมรับเป็นมาตรฐานโดย ANSI ในปี 1986 ในชื่อ SQL-86 [ 28 ]และ ISO ในปี 1987 [ 11 ]โดยได้รับการดูแลโดยISO/IEC JTC 1, เทคโนโลยีสารสนเทศ, คณะอนุกรรมการ SC 32, การจัดการข้อมูลและการแลกเปลี่ยนข้อมูล

จนถึงปี 1996 โครงการมาตรฐานการจัดการข้อมูล ของสถาบันมาตรฐานและเทคโนโลยีแห่งชาติ (NIST) ได้รับรองการปฏิบัติตามมาตรฐาน SQL DBMS ของ SQL ปัจจุบันผู้ขายรับรองการปฏิบัติตามมาตรฐานของผลิตภัณฑ์ของตนเอง[ 29 ]

มาตรฐานเดิมประกาศว่าการออกเสียงอย่างเป็นทางการของ "SQL" เป็นคำย่อ : / ˌ ɛ s ˌ k juː ˈ ɛ l / ("ess cue el") [ 9 ]อย่างไรก็ตาม ผู้เชี่ยวชาญด้านฐานข้อมูลที่พูดภาษาอังกฤษหลายคน (รวมถึง Donald Chamberlin เองด้วย[ 30 ] ) ใช้การออกเสียงแบบย่อ ว่า / ˈ s k w əl / ("sequel") [ 31 ]ซึ่งสะท้อนชื่อการพัฒนาก่อนวางจำหน่ายของภาษาว่า "SEQUEL" [ 13 ] [ 15 ] [ 30 ]มาตรฐาน SQL ได้ผ่านการแก้ไขหลายครั้ง:

ลำดับเหตุการณ์ของภาษา SQL
ปี มาตรฐานอย่างเป็นทางการ ชื่อเรียก อย่างไม่เป็นทางการความคิดเห็น
1986 1987 ANSI X3.135:1986 ISO/IEC 9075 :1987 FIPS PUB 127 คิวบี-86คิวบี-87 ได้รับการกำหนดรูปแบบอย่างเป็นทางการครั้งแรกโดย ANSI และนำมาใช้เป็นมาตรฐาน FIPS PUB 127
1989 ANSI X3.135-1989 ISO/IEC 9075:1989 FIPS PUB 127-1 คิวบี-89การแก้ไขเล็กน้อยที่เพิ่มข้อจำกัดด้านความสมบูรณ์ นำมาใช้เป็นมาตรฐาน FIPS PUB 127-1
1992 ANSI X3.135-1992 ISO/IEC 9075:1992 FIPS PUB 127-2 คิวบี-92คิวบี 2การปรับปรุงครั้งใหญ่ (ISO 9075), มาตรฐาน SQL-92 ระดับเริ่มต้น นำมาใช้เป็นมาตรฐาน FIPS PUB 127-2
1999 ไอโซ/อีอีซี 9075:1999 SQL:1999 SQL3 เพิ่มการจับคู่ด้วยนิพจน์ปกติ, การค้นหาแบบเรียกซ้ำ (เช่นการปิดแบบส่งผ่าน ), ทริกเกอร์ , การสนับสนุนคำสั่งเชิงกระบวนการและการควบคุมการไหล, ประเภทที่ไม่ใช่สเกลาร์ (อาร์เรย์), และคุณสมบัติเชิงวัตถุบางอย่าง (เช่นประเภทโครงสร้าง ), การสนับสนุนการฝัง SQL ใน Java ( SQL/OLB ) และในทางกลับกัน ( SQL/JRT )
2003 ISO/IEC 9075:2003 คิวบี:2003มีการนำคุณสมบัติที่เกี่ยวข้องกับXML ( SQL/XML ) ฟังก์ชันหน้าต่างลำดับมาตรฐาน และคอลัมน์ที่มีค่าที่สร้างขึ้นโดยอัตโนมัติ (รวมถึงคอลัมน์เอกลักษณ์) มาใช้
2006 ISO/IEC 9075-14:2006คิวบี:2006เพิ่มส่วนที่ 14 กำหนดวิธีการใช้ SQL ร่วมกับ XML โดยกำหนดวิธีการนำเข้าและจัดเก็บข้อมูล XML ในฐานข้อมูล SQL การจัดการข้อมูลภายในฐานข้อมูล และการเผยแพร่ทั้งข้อมูล XML และข้อมูล SQL ทั่วไปในรูปแบบ XML นอกจากนี้ยังช่วยให้แอปพลิเคชันสามารถผสานรวมการสืบค้นเข้ากับโค้ด SQL ด้วยXQueryซึ่งเป็นภาษาการสืบค้น XML ที่เผยแพร่โดย World Wide Web Consortium ( W3C ) เพื่อเข้าถึงข้อมูล SQL ทั่วไปและเอกสาร XML พร้อมกันได้[ 32 ]
2008 ISO/IEC 9075:2008 สแควร์:2008อนุญาตให้ใช้คำสั่ง ORDER BY ภายนอกคำจำกัดความเคอร์เซอร์ เพิ่มทริกเกอร์ INSTEAD OF คำสั่ง TRUNCATE และข้อความ FETCH [ 33 ]
2011 ISO/IEC 9075:2011 คิวบี:2011เพิ่มข้อมูลเชิงเวลา (PERIOD FOR) [ 34 ] (ข้อมูลเพิ่มเติมที่ฐานข้อมูลเชิงเวลา#ประวัติ ) การปรับปรุงสำหรับฟังก์ชันหน้าต่างและข้อกำหนด FETCH [ 35 ]
2016 ISO/IEC 9075:2016 คิวบี:2016เพิ่มฟังก์ชันการจับคู่รูปแบบแถว ฟังก์ชันตารางโพลีมอร์ฟิก และการดำเนินการกับ ข้อมูล JSONที่จัดเก็บในฟิลด์สตริงอักขระ
2019 ISO/IEC 9075-15:2019 คิวบี:2019เพิ่มส่วนที่ 15 อาร์เรย์หลายมิติ (ชนิดข้อมูล MDarray และตัวดำเนินการ)
2023 ISO/IEC 9075:2023 คิวบี:2023เพิ่มชนิดข้อมูล JSON (SQL/Foundation); เพิ่มส่วนที่ 16 การสืบค้นกราฟคุณสมบัติ (SQL/PGQ)

มาตรฐานปัจจุบัน

มาตรฐานนี้โดยทั่วไปจะระบุด้วยรูปแบบ: ISO/IEC 9075-n:yyyy Part n: titleหรือเรียกสั้นๆ ว่าISO/IEC 9075ผู้ที่สนใจสามารถซื้อเอกสารมาตรฐานได้จาก ISO [ 36 ] IEC หรือ ANSI ร่างเก่าบางฉบับมีให้ใช้งานได้ฟรี[ 37 ] [ 38 ]

มาตรฐาน ISO/IEC 9075ได้รับการเสริมด้วยมาตรฐาน ISO/IEC 13249: SQL Multimedia and Application Packagesและรายงานทางเทคนิค บาง ฉบับ

ไวยากรณ์

แผนภูมิแสดงองค์ประกอบต่างๆ ของภาษา SQL ที่ประกอบกันเป็นคำสั่งเดียว

ภาษา SQL แบ่งออกเป็นองค์ประกอบย่อยหลายส่วน ได้แก่:

  • อนุประโยคซึ่งเป็นส่วนประกอบของข้อความและคำถาม (ในบางกรณี อนุประโยคเหล่านี้เป็นตัวเลือก) [ 39 ]
  • นิพจน์ซึ่งสามารถสร้าง ค่า สเกลาร์หรือตารางที่ประกอบด้วยคอลัมน์และแถวของข้อมูล ได้
  • เงื่อนไข (Predicates ) คือเงื่อนไขที่สามารถประเมินค่าได้เป็นตรรกะสามค่า (3VL) ของ SQL (จริง/เท็จ/ไม่ทราบ) หรือค่าความจริงแบบบูลีน และใช้เพื่อจำกัดผลกระทบของคำสั่งและแบบสอบถาม หรือเพื่อเปลี่ยนแปลงการไหลของโปรแกรม
  • คำสั่งค้นหา (Queries)คือ คำสั่ง ที่ใช้ดึงข้อมูลตามเกณฑ์ที่กำหนด นี่เป็นองค์ประกอบสำคัญของSQL
  • คำสั่งต่างๆซึ่งอาจส่งผลกระทบอย่างถาวรต่อโครงสร้างและข้อมูล หรืออาจควบคุมธุรกรรมการไหลของโปรแกรม การเชื่อมต่อ เซสชัน หรือการวินิจฉัยปัญหา
    • คำสั่ง SQL ยังรวมถึง เครื่องหมาย เซมิโคลอน (";") เป็นตัวจบคำสั่งด้วย แม้ว่าจะไม่จำเป็นต้องใช้ในทุกแพลตฟอร์ม แต่ก็ถูกกำหนดให้เป็นส่วนมาตรฐานของไวยากรณ์ SQL
  • โดยทั่วไปแล้ว ช่องว่างที่ไม่สำคัญจะถูกละเลยในคำสั่งและแบบสอบถาม SQL ทำให้การจัดรูปแบบโค้ด SQL อ่านง่ายขึ้น

การขยายขั้นตอน

SQL ถูกออกแบบมาเพื่อวัตถุประสงค์เฉพาะ: คือการสอบถามข้อมูลที่อยู่ในฐานข้อมูลเชิงสัมพันธ์ SQL เป็นภาษาโปรแกรมเชิงประกาศ (declarative) ที่ ใช้ เซตเป็น พื้นฐาน ไม่ใช่ภาษาโปรแกรมเชิงคำสั่ง (imperative)เช่นCหรือBASICอย่างไรก็ตาม ส่วนขยายของ SQL มาตรฐานจะเพิ่ม ฟังก์ชันการทำงาน ของภาษาโปรแกรมเชิงขั้นตอนเช่น โครงสร้างการควบคุมการไหลของ โปรแกรม

นอกเหนือจาก ส่วนขยาย SQL/PSM มาตรฐาน และส่วนขยาย SQL ที่เป็นกรรมสิทธิ์แล้ว การเขียนโปรแกรมเชิงขั้นตอนและเชิงวัตถุยังมีให้ใช้งานบนแพลตฟอร์ม SQL หลายแพลตฟอร์มผ่านการบูรณาการ DBMS กับภาษาอื่นๆ มาตรฐาน SQL กำหนด ส่วนขยาย SQL/JRT (SQL Routines and Types for the Java Programming Language) เพื่อรองรับ โค้ด Javaในฐานข้อมูล SQL Microsoft SQL Server 2005ใช้SQLCLR (SQL Server Common Language Runtime) เพื่อโฮสต์ แอสเซมบลี .NET ที่จัดการ ในฐานข้อมูลในขณะที่ SQL Server เวอร์ชันก่อนหน้าถูกจำกัดไว้ที่ขั้นตอนการจัดเก็บแบบขยายที่ไม่ได้รับการจัดการซึ่งเขียนด้วยภาษา C เป็นหลักPostgreSQLอนุญาตให้ผู้ใช้เขียนฟังก์ชันในภาษาต่างๆ มากมาย รวมถึงPerl , Python , Tcl , JavaScript (PL/V8) และ C [ 40 ]

ทางเลือกอื่นๆ

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

การประมวลผล SQL แบบกระจาย

สถาปัตยกรรมฐานข้อมูลเชิงสัมพันธ์แบบกระจาย (DRDA) ได้รับการออกแบบโดยกลุ่มงานภายใน IBM ตั้งแต่ปี 1988 ถึง 1994 DRDA ช่วยให้ฐานข้อมูลเชิงสัมพันธ์ที่เชื่อมต่อเครือข่ายสามารถทำงานร่วมกันเพื่อตอบสนองคำขอ SQL ได้[ 42 ] [ 43 ]

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

ข้อความ โปรโตคอล และส่วนประกอบโครงสร้างของ DRDA ถูกกำหนดโดยสถาปัตยกรรมจัดการข้อมูลแบบกระจาย (Distributed Data Management Architecture ) การประมวลผล SQL แบบกระจายตามแบบ DRDA นั้นแตกต่างจากฐานข้อมูล SQL แบบกระจาย ในปัจจุบัน

คำวิจารณ์

ออกแบบ

SQL มีความแตกต่างในหลายแง่มุมจากพื้นฐานทางทฤษฎี นั่นคือแบบจำลองเชิงสัมพันธ์และแคลคูลัสทูเพิล ในแบบจำลองนั้น ตารางคือเซตของทูเพิล ในขณะที่ใน SQL ตารางและผลลัพธ์ของการค้นหาคือรายการของแถว แถวเดียวกันอาจปรากฏหลายครั้ง และลำดับของแถวสามารถนำมาใช้ในการค้นหาได้ (เช่น ในLIMITเงื่อนไข) นักวิจารณ์โต้แย้งว่า SQL ควรถูกแทนที่ด้วยภาษาที่กลับไปสู่พื้นฐานดั้งเดิมอย่างเคร่งครัด ตัวอย่างเช่น ดูThe Third Manifestoโดย Hugh Darwen และ CJ Date (2006, ISBN 1006) 0-321-39942-0)

ความตั้งฉากและความสมบูรณ์

ข้อกำหนดเบื้องต้นไม่ได้รองรับคุณสมบัติหลัก เช่น คีย์หลัก ชุดผลลัพธ์ไม่สามารถตั้งชื่อได้ และไม่ได้กำหนดแบบสอบถามย่อยไว้ คุณสมบัติเหล่านี้ถูกเพิ่มเข้ามาในปี 1992 [ 12 ]

การขาดประเภทผลรวมได้รับการอธิบายว่าเป็นอุปสรรคต่อการใช้ประเภทที่ผู้ใช้กำหนดของ SQL อย่างเต็มที่ ตัวอย่างเช่น การสนับสนุน JSON จำเป็นต้องเพิ่มโดยมาตรฐานใหม่ในปี 2016 [ 44 ]

โมฆะ

แนวคิดเรื่องค่า Nullเป็นเรื่องที่ถกเถียงกัน อยู่บ้าง เครื่องหมาย Null บ่งชี้ถึงการไม่มีค่า และแตกต่างจากค่า 0 สำหรับคอลัมน์จำนวนเต็มหรือสตริงว่างสำหรับคอลัมน์ข้อความ แนวคิดเรื่องค่า Null บังคับใช้ตรรกะ 3 ค่าใน SQL ซึ่งเป็นการนำ ตรรกะ 3 ค่าทั่วไปมาใช้ในรูปแบบที่เป็นรูปธรรม[ 12 ]

สำเนา

คำวิจารณ์ยอดนิยมอีกประการหนึ่งคือ การอนุญาตให้มีแถวซ้ำกัน ทำให้การรวมเข้ากับภาษาต่างๆ เช่นPythonซึ่งประเภทข้อมูลอาจทำให้การแสดงข้อมูลอย่างถูกต้องทำได้ยาก[ 12 ]ในแง่ของการแยกวิเคราะห์และการขาดความเป็นโมดูลาร์ โดยปกติจะหลีกเลี่ยงปัญหานี้ได้โดยการประกาศคีย์หลักหรือข้อจำกัดที่ไม่ซ้ำกัน โดยมีคอลัมน์อย่างน้อยหนึ่งคอลัมน์ที่ระบุแถวในตารางได้อย่างไม่ซ้ำกัน

ความไม่ตรงกันของอิมพีแดนซ์

ในแง่ที่คล้ายกับความไม่ตรงกันของอิมพีแดนซ์เชิงวัตถุ-ความสัมพันธ์ ความไม่ตรงกันเกิดขึ้นระหว่างภาษา SQL แบบประกาศและภาษาเชิงขั้นตอนซึ่งโดยทั่วไปแล้ว SQL จะถูกฝังอยู่[ 45 ]

ประเภทข้อมูล SQL

มาตรฐาน SQL กำหนดประเภทข้อมูลไว้ 3 ประเภท (บทที่ 4.1.1 ของ SQL/Foundation):

  • ประเภทข้อมูลที่กำหนดไว้ล่วงหน้า
  • ประเภทที่สร้างขึ้น
  • ประเภทที่ผู้ใช้กำหนดเอง

ประเภทข้อมูลที่สร้างขึ้นเองได้แก่ARRAY, MULTISET, REF(อ้างอิง) หรือ ประเภท ROWข้อมูลที่ผู้ใช้กำหนดเองนั้นเทียบได้กับคลาสในภาษาเชิงวัตถุที่มีคอนสตรัคเตอร์ ตัวสังเกตการณ์ ตัวแก้ไข เมธอด การสืบทอด การโอเวอร์โหลด การเขียนทับ อินเทอร์เฟซ และอื่นๆประเภทข้อมูลที่กำหนดไว้ล่วงหน้าได้รับการสนับสนุนโดยพื้นฐานของการใช้งาน

ประเภทข้อมูลที่กำหนดไว้ล่วงหน้า

  • ประเภทตัวละคร
    • อักขระ ( CHAR)
    • ลักษณะที่แตกต่างกัน ( VARCHAR)
    • ตัวอักษรวัตถุขนาดใหญ่ ( CLOB)
  • ประเภทลักษณะประจำชาติ
    • ลักษณะประจำชาติ ( NCHAR)
    • ลักษณะประจำชาติที่แตกต่างกัน ( NCHAR VARYING)
    • วัตถุขนาดใหญ่ที่มีลักษณะประจำชาติ ( NCLOB)
  • ประเภทไบนารี
    • ไบนารี ( BINARY)
    • ไบนารีแปรผัน ( VARBINARY)
    • วัตถุไบนารีขนาดใหญ่ ( BLOB)
  • ประเภทตัวเลข
    • ประเภทตัวเลขที่แน่นอน ( NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT)
    • ประเภทตัวเลขโดยประมาณ ( FLOAT, REAL, DOUBLE PRECISION)
    • ประเภทจุดลอยตัวทศนิยม ( DECFLOAT)
  • ประเภทวันที่และเวลา ( DATE, TIME, TIMESTAMP)
  • ประเภทช่วงเวลา ( INTERVAL)
  • บูลีน
  • XML (ดูSQL/XML ) [ 46 ]
  • เจซอน

ดูเพิ่มเติม

แหล่งที่มา

  • Codd, Edgar F (มิถุนายน 1970). "แบบจำลองเชิงสัมพันธ์ของข้อมูลสำหรับธนาคารข้อมูลขนาดใหญ่ที่ใช้ร่วมกัน"การสื่อสารของ ACM 13 ( 6): 377– 87. doi : 10.1145/362384.362685 . S2CID  207549016 .
  • การอภิปรายเกี่ยวกับช่องโหว่ SQL ที่ถูกกล่าวหา (วิกิ C2)
  • CJ Dateร่วมกับHugh Darwen : คู่มือมาตรฐาน SQL: คู่มือผู้ใช้ภาษาฐานข้อมูลมาตรฐาน SQL ฉบับที่ 4 , Addison Wesley, สหรัฐอเมริกา 1997, ISBN 978-0-201-96426-4
  • การรวมตัวศิษย์เก่า SQL ปี 1995: บุคคล โครงการ และการเมืองโดย พอล แมคโจนส์ (บรรณาธิการ) : บันทึกการประชุมรวมตัวศิษย์เก่าที่อุทิศให้กับประวัติส่วนตัวของฐานข้อมูลเชิงสัมพันธ์และ SQL
  • สถาบันมาตรฐานแห่งชาติอเมริกัน (American National Standards Institute) เอกสารบันทึก X3H2 ปี 1978–1995 จากชุดเอกสารของ สถาบันชาร์ลส์ แบ็บเบจ (Charles Babbage Institute Collection) บันทึกการพัฒนามาตรฐาน NDL และ SQL ของคณะกรรมการ H2
  • บทสัมภาษณ์ประวัติศาสตร์ปากเปล่ากับโดนัลด์ ดี. แชมเบอร์ลินสถาบันชาร์ลส์ แบ็บเบจในบทสัมภาษณ์ประวัติศาสตร์ปากเปล่านี้ แชมเบอร์ลินเล่าถึงชีวิตในวัยเด็ก การศึกษาที่วิทยาลัยฮาร์วีย์ มัด ด์ และมหาวิทยาลัยสแตนฟอร์ดและงานของเขาเกี่ยวกับเทคโนโลยีฐานข้อมูลเชิงสัมพันธ์ แชมเบอร์ลินเป็นสมาชิกของทีมวิจัย System R และร่วมกับเรย์มอนด์ เอฟ. บอยซ์พัฒนาภาษาฐานข้อมูล SQL แชมเบอร์ลินยังกล่าวถึงงานวิจัยล่าสุดของเขาเกี่ยวกับภาษาการสืบค้น XML โดยสังเขปด้วย
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=SQL&oldid=1358725186#Procedural_extensions "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ คำสั่ง SQL

Structured Query Language ( SQL ) ( ออกเสียงว่า / ˌ ɛ s ˌ k j u ˈ ɛ l / SQL ; หรืออีกทางหนึ่งเป็น / ˈ s iː k w ə l / ⓘ "ภาคต่อ" [ 4 ] [ 5 ] เป็น ภาษาเฉพาะโดเมน...

ประวัติศาสตร์

SQL ได้รับการพัฒนาครั้งแรกที่ IBM โดย Donald D. Chamberlin และ Raymond F. Boyce หลังจากเรียนรู้เกี่ยวกับแบบจำลองเชิงสัมพันธ์จาก Edgar F.

ความสามารถในการทำงานร่วมกันและการกำหนดมาตรฐาน

การแก้ไขภาษา SQL คิวบี-86 คิวบี-89 คิวบี-92 คิวบี:1999 คิวบี:2003 คิวบี:2006 สแควร์:2008 คิวบี:2011 คิวบี:2016 คิวบี:2023 วี ที อี

ภาพรวม

การใช้งาน SQL ไม่เข้ากันระหว่างผู้จำหน่ายและไม่จำเป็นต้องปฏิบัติตามมาตรฐานอย่างสมบูรณ์ โดยเฉพาะอย่างยิ่ง ไวยากรณ์วันที่และเวลา การเชื่อมต่อสตริง NULL s และ ความไวต่อตัวพิมพ์ ใหญ่-เล็กในการเปรียบเทียบ จะแตกต่างกันไปในแต่ละผู้จำหน่าย PostgreSQL [ 20 ] และ Mimer...