SQL

**SQL** ( , , *„ეს-ქიუ-ელ“*, ან , *„სი-ქველ“*) — პროგრამირებაში გამოყენებადი დომენ-სპეციფიკური სადეკლარაციო ენა, რომელიც შექმნილია რელაციურ მონაცემთა ბაზის მართვის სისტემაში (რმბმს) შენახული მონაცემების სამართავად, ან რელაციურ მონაცემთა ნაკადის მართვის სისტემებში (რმნმს) ნაკადის დამუშავებისთვის. განსაკუთრებით მოსახერხებელია სტრუქტურირებულ მონაცემებთან ურთიერთქმედებისას, სადაც არსებობს დამოკიდებულება მონაცემთა სხვადასხვა ობიექტებს / ცვლადებს შორის.

ჩაწერა/წაკითხვის ძველ პროგრამირების ინტერფეისებთან შედარებით, მაგალითად ISAM ან VSAM, SQL გვთავაზობს ორ უმთავრეს უპირატესობას: მასში რეალიზებულია ერთი ბრძანებით მრავალ ჩანაწერთან წვდომის კონცეფცია; აქრობს ჩანაწერამდე მიღწევის გზის განსაზღვრის აუცილებლობას, მაგ., ინდექსით თუ ინდექსის გარეშე.

SQL დაფუძნებულია რელაციურ ალგებრასა და კორტეჟთა რელაციურ აღრიცხვაზე და შედგება მრავალი სახის ოპერატორებისგან, რომლებიც არაფორმალურად შეიძლება დაიყოს შემდეგ ქვეენებად: მონაცემთა მოთხოვნის ენა (Data Query Language, DQL), მონაცემთა განსაზღვრის ენა (Data Definition Language, DDL), მონაცემთა წვდომის კონტროლის ენა (Data Control Language, DCL), მონაცემთა მანიპულაციის ენა (Data Manipulation Language, DML) და ტრანზაქციების კონტროლის ენა (Transaction Control Language, TCL). SQL-ის მოქმედების არეში ხვდება მონაცემთა მოთხოვნა, მონაცემებზე მანიპულაცია (დამატება, განახლება და წაშლა), მონაცემთა განსაზღვრა (სქემის შექმნა და მისი ცვლილება) და მონაცემებთან წვდომის კონტროლი. SQL დიდწილად სადეკლარაციო ენას წარმოადგენს, თუმცა კი, მასში პროცედურული ელემენტებიც გამოიყენება.

SQL არის ერთ-ერთი პირველი კომერციული ენა, რომელიც შეიქმნა ედგარ კოდის რელაციური მოდელისთვის. კოდმა საკუთარი მოდელის აღწერა მოიყვანა 1970 წელს გამოცემულ ნაშრომში „მონაცემთა რელაციური მოდელი დიდი ზიარი მონაცემთა ბანკებისთვის“. მიუხედავად იმისა, რომ მასში სრულყოფილად დაცული არ არის კოდის მიერ ნაშრომში ჩამოყალიბებული მოდელი, SQL იქცა მონაცემთა ბაზებთან სამუშაო ყველაზე გავრცელებულ ენად. 

SQL სტანდარტად აღიარებულ იქნა ამერიკის ეროვნული სტანდარტების ინსტიტუტის (ANSI) მიერ 1986 წელს, ხოლო 1987 წელს სტანდარტიზაციის საერთაშორისო ორგანიზაციის (ISO) მიერ. SQL-ის სტანდარტმა დროთა განმავლობაში მრავალი ცვლილება განიცადა ახალი შესაძლებლობებით გამდიდრების მიზნით. სტანდარტის მიუხედავად, არ არის მიღწეული SQL-ის კოდის სრული გადატანადობა მონაცემთა ბაზების განსხვავებულ სისტემებს შორის, შესწორებების შეტანის საჭიროების გარეშე.
## ისტორია 
SQL პირველად შემუშავებულ იქნა IBM-ში, დონალდ ჩემბერლინის და რეიმონდ ბოისის მიერ ედგარ კოდის რელაციური მოდელის გაცნობის შემდეგ ადრეულ 1970-იან წლებში. პირველ ვერსიას დაარქვეს SEQUEL (Structured English Query Language, სტრუქტურირებული ინგლისური მოთხოვნების ენა) და განკუთვნილი იყო System R სისტემაში შენახულ მონაცემთა გამოსატანად და მანიპულაციისთვის. System R იყო კვაზი-რელაციურ მონაცემთა ბაზის მართვის სისტემა და შემუშავდა IBM-ის სან-ხოსეს კვლევით ლაბორატორიაში 1970-იან წლებში.

ჩემბერლინის და ბოისის მიერ რელაციურ მონაცემთა ბაზის ენის შექმნის პირველი მცდელობის შედეგი იყო Square, თუმცა ეს უკანასკნელი ძნელად გამოსაყენებელი გამოდგა. 1973 წელს სან-ხოსეს კვლევით ლაბორატორიაში გადასვლის შემდეგ მკვლევარებმა SEQUEL-ზე მუშაობა დაიწყეს. მოგვიანებით აკრონიმიდან SEQUEL ამოღებულ იქნა რამდენიმე ასო და დარჩა SQL, რაც გამოწვეული იყო იმით, რომ სავაჭრო ნიშნის რეგისტრაციის მცდელობისას გაირკვა, რომ SEQUEL სახელი უკვე მისაკუთრებული ჰქონდა ბრიტანულ ავიამწარმოებელ კომპანიას Hawker Siddeley Dynamics Engineering Limited.

SQL-ის გამოცდა პრაქტიკულობასა და გამოყენებადობაზე ჩატარებულ იქნა კლიენტთა მონაწილეობით, რომლის შედეგების გათვალისწინებით IBM-მა დაიწყო System R-ის პროტოტიპზე დაფუძნებული კომერციული პროდუქტების შემუშავება, რომელთა შორის იყო System/38, SQL/DS, DB2 და კომერციულად ხელმისაწვდომი იყო 1979, 1981 და 1983 წლებში შესაბამისად.

გვიან 70-იანებში კომპანია Relational Software-ში (ამჟამად Oracle Corporation) გაიაზრეს კოდის, ჩემბერლინის და ბოისის კონცეპტების შესაძლებლობები და მალევე შეიმუშავეს SQL-ზე დაფუძნებული საკუთარი ᲠᲛᲑᲛᲡ, აშშ-ის საზღვაო ძალებზე, ცენტრალურ სადაზვერვო სამმართველოზე და აშშ-ის სხვა სახელმწიფო ორგანოებზე გაყიდვის მიზნით. 1979 წლის ივნისში Relational Software Inc-მა წარმოადგინა VAX კომპიუტერებისთვის შექმნილი პირველი საკუთარი კომერციული SQL პროდუქტი Oracle V2.

1986 წლისთვის ANSI-ს და ISO-ს სტანდარტიზების ჯგუფებმა ოფიციალურად მიიღეს სტანდარტად „მონაცემთა ბაზების ენა SQL“ ენის აღწერა. ამ სტანდარტის ახალი ვერსიები გამოქვეყნდა 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011 და 2016 წელს.

## დიზაინი 
SQL ენა გარკვეულ სხვაობას იძლევა საკუთარ თეორიულ საფუძვლებთან, რელაციურ მოდელთან და კორტეჟების აღრიცხვასთან მიმართებაში. კერძოდ, რელაციური მოდელის მიხედვით, ცხრილი ესაა კორტეჟების ნაკრები, მაშინ როდესაც SQL-ში ცხრილი და მოთხოვნის შედეგი არის სტრიქონების სია: ერთი და იგივე სტრიქონი შეიძლება გამეორდეს რამდენიმე ჯერ, ხოლო მათი მიმდევრობა შეიძლება გამოცხადებულ იქნას მოთხოვნის ბრძანებაში.
კრიტიკოსების განცხადებით, აუცილებელია SQL შეიცვალოს ისეთი ენით, რომელიც ხისტად შესაბამისი ქნება რელაციური მოდელის აღწერილობის. თუმცა, არ არსებობს არც ერთი ცნობილი დასაბუთება იმისა, რომ შეუძლებელია თავად SQL ან მისი რომელიმე ვარიანტი მოყვანილ იქნას შესაბამის სახემდე. სხვა სიტყვებით რომ ვთქვათ, სავსებით შესაძლებელია SQL „გამოსწორდეს“ ან გაუმჯობესდეს ისე, რომ მთელ  ინდუსტრიას არ მოუწევს სრულად განსხვავებულ ენაზე „გადაბარგება“ უნიკალური მოდელის უზრუნველსაყოფად. 

## სინტაქსი 
SQL-ის ენა იყოფა ენობრივ რამდენიმე ელემენტად:
* წინადადებები — მოთხოვნების და ინსტრუქციების შემადგენელი ნაწილები. ზოგ შემთხვევაში გამოყენება არასავალდებულოა;
* გამოსახულებები —  შეიძლება დააბრუნონ სკალარული მნიშვნელობა, ან მონაცემების სტრიქონების და სვეტებისგან შემდგარი ცხრილი;
* პრედიკატები — განსაზღვრავენ პირობებს, რომლებიც შეიძლება გადამოწმდეს SQL-ის სამმნიშვნელობიანი ლოგიკის (ჭეშმარიტება/მცდარობა/უცნობი) ან ბულის ალგებრის მიხედვით და შესაბამისად გავლენა მოახდინონ ინსტრუქციების და მოთხოვნების შესრულებაზე, ან შეცვალონ პროგრამის მსვლელობის მიმართულება.
* მოთხოვნები —– ამოაქვთ მონაცემები განსაზღვრული პირობების მიხედვით. არის SQL-ის ერთ-ერთი ძირითადი შემადგენელი ნაწილი.
* ინსტრუქციები —  შეიძლება იქონიონ მუდმივი გავლენა სქემებზე და მონაცემებზე, ან აკონტროლონ ტრანზაქციები, პროგრამის მსვლელობა, კავშირები, სესიები ან აწარმოონ დიაგნოსტიკა.
** SQL-ინსტრუქციები მოიცავს წერტილ-მძიმესაც `;` რომელიც ინსტრუქციის დამსრულებელია. წერტილ-მძიმის გამოყენება უმეტეს პლატფორმებსა და SQL-ის რეალიზაციებში აუცილებელი არ არის, თუმცა იგი შედის SQL-ის სინტაქსის სტანდარტში.
* უმნიშვნელო ნიშანსივრცეები SQL ინსტრუქციებსა და მოთხოვნებში უგულვებელყვება, რაც აადვილებს SQL კოდის ფორმატირებას კითხვადობის გასაუმჯობესებლად.

## პროცედურული გაფართოებები 
SQL შემუშავებულია განსაზღვრული მიზნისთვის: მონაცემების გამოსათხოვათ, რომლებიც ინახება რელაციურ მონაცემთა ბაზაში. SQL არის სიმრავლეების საფუძველზე აგებული, დეკლარატიული პროგრამირების ენა, იგი არ არის იმპერატიული პროგრამირების ენა როგორც C ან BASIC. თუმცა, სტანდარტული SQL-ისთვის დამატებულმა გაფართოებებმა ენას პროცედურული ფუნქციონალიც შემატა, როგორიც არის ნაკადის საკონტროლებელი ინსტრუქციები. მათ შორისაა:

ბევრ SQL პლატფორმაზე სტანდარტული SQL/PSM და პროპრიეტარული SQL გაფართოებების გარდა, ხელმისაწვდომია პროცედურული და ობიექტზე-ორიენტირებული პროგრამირება მონაცემთა ბაზების მართვის სისტემის სხვა ენებთან ინტეგრაციის გზით. SQL სტანდარტში აღწერილია SQL/JRT გაფართოება Java კოდის მხარდასაჭერად SQL მონაცემთა ბაზებში. SQL Server 2005-ში გამოყენებულია SQLCLR (SQL Server Common Language Runtime) მართვადი .NET ანაწყობების მონაცემთა ბაზაში განლაგებისთვის, მაშინ როდესაც, SQL Server-ის უფრო ძველი ვერსიები შეზღუდულები იყვნენ ძირითადად C-ზე დაწერილი გაფართოებული უმართავი შენახვადი პროცედურებით. PostgreSQL-ში მომხმარებელს ფუნქციების დასაწერად ენების ფართო არჩევან აქვს, ესენია Perl, Python, Tcl, JavaScript (Pl/V8) და C.

## ფუნქციური თავსებადობა და სტანდარტიზაცია 
სხვადასხვა მომწოდებელის მიერ შემუშავებული SQL-ის რეალიზაციები არათავსებადია და არც მკაცრად სტანდარტს შეესაბამებიან. კერძოდ, თარიღისა და დროის სინტაქსი, სტრიქონის კონკატენცია, `NULL`-ები და შედარებისას რეგისტრისადმი მგრძნობელობა განსხვავდება მომწოდებლებს შორის. გარკვეულწილად გამონაკლისებია PostgreSQL და Mimer SQL, რომლებიც ცდილობენ სტანდარტს შეესაბამებოდნენ, თუმცა PostgreSQL სტანდარტს არ შეესაბამება ბრჭყალებში არ ჩასმული სახელების დამუშავებაში. PostgreSQL-ში ბრჭყალებში არ ჩასმული სახელები ქვედა რეგისტრში გადაიყვანება, მაშინ როდესაც SQL სტანდარტი ამბობს საწინააღმდეგოს — უბრჭყალებო სახელები უნდა აკეცილ იქნას მაღალ რეგისტრში. სტანდარტის შესაბამისად, თუ წერია `Lname`, იგი უნდა აიკეცოს როგორც `LNAME`, და არა `lname`, როგორც ეს PostgreSQL-ში ხდება.

SQL-ის გავრცელებულ რეალიზაციებში უგულვებელყოფილია SQL სტანდარტის ისეთი ძირითადი ფუნქციების მხარდაჭერა, როგორებიცაა `DATE` და `TIME` მონაცემთა ტიპები. ამის ყველაზე თვალსაჩინო მაგალითებია Oracle (რომლის `DATE` იქცევა როგორც `DATETIME` ტიპი, და არ აქვს `TIME` ტიპის მონაცემი) და MS SQL Server (2008 წლამდე), რომლებიც ამასთან ყველაზე გავრცელებული კომერციული და პროპრიეტარული SQL მონაცემთა ბაზის მართვის სისტემებია. ამის შედეგად, SQL კოდის სხვადასხვა მომწოდებლის მონაცემთა ბაზის სისტემებს შორის გადატანა იშვიათად შეიძლება მოხერხდეს კოდში ცვლილებებს გარეშე.

არსებობს ბაზების სისტემებს შორის კოდის თავსებადობის ამ ნაკლოვანების რამდენიმე მიზეზი:

* SQL სტანდარტი იმდენად მოცულობითი და რთულია, რომ მწარმოებლების უმრავლესობა არ მიყვება სრულ სტანდარტს.
* სტანდარტი არ განსაზღვრავს მონაცემთა ბაზის მოქმედებას ისეთ მნიშვნელოვან არეალებში, როგორებიცა ინდექსები, ფაილური სანახი და სხვა, შესაბამისად მწარმოებლებს  უტოვებს თავისუფლებას თავად გადაწყვიტონ თუ როგორ მოახდენენ რეალიზაციას.
* SQL სტანდარტში მკაცრად განსაზღვრულია სინტაქსი, რომელსაც უნდა აკმაყოფილებდეს შესაბამისი მონაცემთა ბაზის სისტემა. თუმცა, სტანდარტში ენის კონსტრუქციების სემანტიკის თავისებურებები ნაკლებადაა აღწერილი, რაც ორაზროვნებას იწვევს. 
* მომწოდებლების უმრავლესობას აქვს კლიენტების დიდი ბაზები; თუ SQL სტანდარტის ახალი ვერსია წინააღმდეგობრივია მომწოდებლის წინამორბედი ვერსიის მონაცემთა ბაზის ქცევასთან, მაშინ შესაძლოა მომწოდებელს არ მოესურვოს უკუთავსებადობის შეწყვეტა. 
* მომწოდებლებს არ აქვთ კომერციული ინტერესი მომხმარებელს თავისუფლად შეეძლოს მონაცემთა ბაზის მიმწოდებლის ცვლილება (იხ., მომწოდებელთან მიჯაჭვულობა).
* მომხმარებლები უპირატესობას ანიჭებენ ბაზის მაღალ წარმადობას, ვიდრე სტანდარტებთან შესაბამისობას.

SQL სტანდარტად აღიარებულ იქნა ამერიკის ეროვნული სტანდარტების ინსტიტუტის მიერ 1986 წელს როგორც SQL-86, ხოლო სტანდარტიზაციის საერთაშორისო ორგანიზაციის მიერ 1987 წელს. მის მხარდაჭერას ახორციელებს ISO/IEC JTC 1/SC 32. სტანდარტი ჩვეულებრივ აღნიშნება შაბლონურად: ISO/IEC 9075-„ნომერი“:„წელი“ Part „ნომერი“: „სათაური“, ან შემოკლებით, ISO/IEC 9075.

ISO/IEC 9075 სტანდარტს დამატებულია ISO/IEC 13249: SQL Multimedia and Application Packages (SQL/MM), რომელიც განსაზღვრავს SQL-ზე დაფუძნებულ ინტერფეისებსა და პაკეტებს ფართოდ გავრცელებული ფორმატებისთვის, როგორებიცაა ვიდეო, აუდიო და სივრცული მონაცემები.

1996 წლამდე, SQL მონაცემთა ბაზების მართვის სისტემების სერტიფიცირებას SQL სტანდარტთან შესაბამისობაზე ახდენდა სტანდარტების და ტექნოლოგიების ეროვნული ინსტიტუტი (NIST). ამჟამად მომწოდებლები თავად ახდნენ საკუთარი ნაწარმის სერტიფიცირებას შესაბამისობაზე. 

სტანდარტი განსაზღვრავს SQL-ის სახელწოდების ოფიციალურ წარმოთქმას როგორც  („ეს-ქიუ-ელ“) და ამბობს, რომ მოცემული სახელი არის აბრევიატურა. მიუხედავად ამისა, დარგის ბევრი ინგლისურენოვანი სპეციალისტი (მათ შორის თავად SQL-ის შემმუშავებელი დევიდ ჩემბერლინი) სახელწოდებას წარმოთქვამს როგორც აკრონიმს  („სიქველ“), რაც არის SQL-ის წინამორბედი პროდუქტის, SEQUEL-ის ანარეკლი.

SQL სტანდარტმა დროთა განმავლობაში გარკვეული ცვლილებები განიცადა:

დაინტერესებულ მხარეებს შეუძლია SQL სტანდარტის დოკუმენტის შეძენა სტანდარტიზაციის საერთაშორისო ორგანიზაციისგან, საერთაშორისო ელექტროტექნიკური კომისიისგან ან ამერიკის ეროვნული სტანდარტების ინსტიტუტისგან. SQL:2008 სტანდარტის პროექტი თავისუფალ წვდომაშია zip არქივის სახით.

SQL სტანდარტი იყოფა ცხრა ნაწილად:
* ISO/IEC 9075-1:2016 Part 1: Framework (SQL/Framework). აღწერს ლოგიკურ კონცეპტს.
* ISO/IEC 9075-2:2016 Part 2: Foundation (SQL/Foundation). შეიცავს ენის მთავარი ელემენტებს და შედგება აუცილებელი და ნებაყოფლობითი შესაძლებლობებისგან.
* ISO/IEC 9075-3:2016 Part 3: Call-Level Interface (SQL/CLI). აღწერს ურთიერთმოქმედ კომპონენტებს (სტრუქტურებს, პროცედურებს, ცვლადებს), რომლებიც შესაძლებელია გამოყენებულ იქნან SQL ინსტრუქციების შესრულებისთვის აპლიკაციებიდან, რომლებიც დაწერილია Ada-ზე, C-ზე, C++, COBOL, Fortarn, MUMPS, Pascal ან PL/I-ზე. Java-ზე წერია მეათე ნაწილში. SQL/CLI აღწერილი იმგვარად, რომ SQL-ინსტრუქცია და SQL/CLI-პროცედურის გამოძახებები მუშავდება გამომძახებელი აპლიკაციის წყაროს კოდისგან განცალკევებული სახით. SQL/CLI-ს ფართოდ ცნობილი გაფართოებული კომპლექტია Open Database Connectivity. სტანდარტის ეს ნაწილი შეგება მხოლოდ სავალდებულო ფუნქციებისაგან.
* ISO/IEC 9075-4:2016 Part 4: Persistent stored modules (SQL/PSM). ეს ნაწილი აყალიბებს SQL-ის პროცედურული გაფართოებების სტანდარტებს, მათ შორის, კონტროლის ნაკადი, მდგომარეობის მართვის, ინსტრუქციის მდგომარეობის სიგნალები და რესიგნალები, კურსორები და ადგილობრივი ცვლადები, ცვლადებისთვის და პარამეტრებისთვის გამოსახულებების მინიჭება. დამატებით, SQL/PSM-ში ფორმალიზებულია მონაცემთა ბაზების მუდმივი ქვეპროგრამები (მაგ., „დაცული პროცედურები“). სტანდარტის ეს ნაწილი შედგება მხოლოდ ნებაყოფლობითი შესაძლებლობებისგან.
* Part-6: Support for JavaScript Object Notation (JSON). 2017 წელს ISO/IEC-მა გამოაქვეყნა პირველადი ტექნიკური ანგარიში JSON მონაცემთა ტიპის SQL-სტანდარტში საინტეგრაციო ძალისხმევასთან დაკავშირებით. მხედველობაში იქონიეთ, რომ ტექნიკური ანგარიში ასახავს საკითხის ამჟამინდელ მდგომარეობას და არ არის სტანდარტის ნაწილი.
* ISO/IEC 9075-9:2016 Part 9: Management of External Data (SQL/MED). უზრუნველყოფს გაფართოებას SQL-ისთვის, რომელიც განსაზღვრავს გარე მონაცემების გარსებს და კავშირის არხების ტიპებს, SQL-ის მიერ გარე მონაცემების სამართავად. გარე მონაცემები, არის მონაცემები, რომელიც ხელმისაწვდომია SQL-მონაცემთა ბაზის მართვის სისტემისთვის, თუმცა არ არის მართული მისით. სტანდარტის ეს ნაწილი შედგება მხოლოდ ნებაყოფლობითი შესაძლებლობებისგან.
* ISO/IEC 9075-10:2016 Part 10: Object language bindings (SQL/OLB). განსაზღვრავს SQLJ-ის სინტაქსსა და სემანტიკას. SQLJ არის Java-ში ჩაშენებული SQL (იხ. Part 3). სტანდარტი ასევე აღწერს SQLJ აპლიკაციების ორობითი გადატანადობის უზრუნველყოფის მექანიზმებს და განსაზღვრავს სხვადასხვა Java-პაკეტებსა და მათში არსებულ კლასებს. სტანდარტის ეს ნაწილი მოიცავს მხოლოდ ნებაყოფლობით შესაძლებლობებს. SQL/OLB-სგან განსხვავებით, JDBC განსაზღვრავს აპლიკაციის პროგრამულ ინტერფეისს (API) და არ არის SQL სტანდარტის ნაწილი.

* ISO/IEC 9075-11:2016 Part 11: Information and definition schemas (SQL/Schemata). იგი აღწერს ინფორმაციის სქემას და განსაზღვრების სქემას, რომელიც იძლევა საერთო ხელსაწყოების ნაკრებს SQL-ბაზების და ობიექტებისთვის თვითაღწერადობის უზრუნველსაყოფად. აღნიშნული ხელსაწყოები მოიცავს SQL-ობიექტის იდენტიფიკატორის, სტრუქტურის და მთლიანობის შეზღუდვებს, უსაფრთხოების და ავტორიზაციის სპეციფიკაციებს, ISO/IEC 9075-ის პაკეტებსა და შესაძლებლობებს, SQL-პლატფორმაზე მბმს-ით წარმოდგენილი შესაძლებლობების მხარდაჭერას, SQL-ზე დაფუძნებული მბმს-ის რეალიზაციის ინფორმაციას და ზომის განსაზღვრის ელემენტებს, ასევე მსბს-ის რეალიზაციით მხარდაჭერილ მნიშვნელობებს. სტანდარტის ეს ნაწილი შეიცავს როგორც აუცილებელ , ასევე ნებაყოფლობით შესაძლებლობებს.

* ISO/IEC 9075-13:2016 Part 13: SQL Routines and types using the Java TM programming language (SQL/JRT). ამ ნაწილში განსაზღვრულია სტატიკური Java-მეთოდების გამოძახების შესაძლებლობა ქვეპროგრამის სახით  SQL-აპლიკაციების შიგნიდან (Java-in-the-database). ასევე, მასში მოითხოვება Java-კლასების გამოყენების შესაძლებლობა „მომხმარებლის მიერ განსაზღვრული“ სტრუქტურირებული SQL ტიპების სახით. სტანდარტის ეს ნაწილი მოიცავს მხოლოდ ნებაყოფლობით შესაძლებლობებს.

* ISO/IEC 9075-14:2016 Part 14: XML-Related Specifications (SQL/XML). განსაზღვრავს SQL-ზე დაფუძნებულ გაფართოვებებს XML-ის გამოსაყენებლად SQL-თან ერთად. წარმოდგენილია მონაცემთა XML ტიპი, ასევე სხვადასხვა ქვეპროგრამები, ფუნქციები და XML-SQL მონაცემთა ტიპების შეპირისპირება SQL მონაცემთა ბაზაში XML-ტიპის მონაცემების შენახვისთვის და მათზე მანიპულირებისთვის. სტანდარტის ეს ნაწილი შეიცავს მხოლოდ ნებაყოფლობით შესაძლებლობებს. 

* ISO/IEC 9075-15:2019 Part 15: Multi-dimensional arrays (SQL/MDA). განსაზღვრავს SQL-ში მარავალგანზომილებიანი მასივის ტიპს, ასევე ოპერაციებს MDarrays-ზე,  MDarray ჭრებზე, MDarray უჯრედებზე, და მათთან დაკავშირებულ შესაძლებლობებს.  სტანდარტის ეს ნაწილი შეიცავს მხოლოდ ნებაყოფლობით შესაძლებლობებს. 

ISO/IEC 9075 სტანდარტს ავსებს ISO/IEC 13249 SQL Multimedia and Application Packages. ეს იმავე კომიტეტის მიერ შემუშავებული მჭიდროდ დაკავშირებული, თუმცა ცალკე სტანდარტია. იგი განსაზღვრავს SQL-ზე დაფუძნებულ პაკეტებსა და ინტერფეისებს. მისი მიზანია უნიფიცირებული წვდომის შემუშავება მონაცემთა ბაზის ტიპურ დანართებთან, როგორებიცაა ტექსტი, სურათი, მონაცემთა მოპოვებისათვის (data mining) ან სივრცული მონაცემებისთვის (გეომონაცემები).

* ISO/IEC 13249-1:2016 Part 1: Framework
* ISO/IEC 13249-2:2003 Part 2: Full-Text
* ISO/IEC 13249-3:2016 Part 3: Spatial
* ISO/IEC 13249-5:2003 Part 5: Still image
* ISO/IEC 13249-6:2006 Part 6: Data mining
* ISO/IEC 13249-7:2013 Part 7: History
* ISO/IEC 13249-8:xxxx Part 8: Metadata Registry Access MRA (მიმდინარეობს მუშაობა).

ISO/IEC 9075 სტანდარტს თან ახლავს ასევე ტექნიკური ანგარიშების რამდენიმე სერია, რომელიც გამოქვეყნებულია როგორც ISO/IEC 19075 8 ნაწილად. ამ ტექნიკურ ანგარიშებში ახსნილია ზოგიერთი SQL-შესაძლებლობის გამოყენება და დასაბუთება, იქ სადაც აუცილებელია, მოცემულია მაგალითები. ტექნიკური ანგარიშები არ არის ნორმატიული ხასიათის; თუ მასში მოყვანილი ინფორმაცია გარკვეულ წინააღმდეგობაშია 9075-თან, მაშინ უპირატესობა აქვს 9075. ამჟამად ხელმისაწვდომია ტექნიკური ანგარიშის შემდეგი სერიები კოდით 19075:

* ISO/IEC TR 19075-1:2011 Part 1: XQuery Regular Expression Support in SQL
* ISO/IEC TR 19075-2:2015 Part 2: SQL Support for Time-Related Information
* ISO/IEC TR 19075-3:2015 Part 3: SQL Embedded in Programs using the JavaTM programming language
* ISO/IEC TR 19075-4:2015 Part 4: SQL with Routines and types using the JavaTM programming language
* ISO/IEC TR 19075-5:2016 Part 5: Row Pattern Recognition in SQL
* ISO/IEC TR 19075-6:2017 Part 6: SQL support for Javascript Object Notation (JSON)
* ISO/IEC TR 19075-7:2017 Part 7: Polymorphic table functions in SQL
* ISO/IEC TR 19075-8:2019 Part 8: Multi-Dimensional Arrays (SQL/MDA)

## ალტერნატივები 
აუცილებელია გავმიჯნოთ ერთმანეთისგან SQL ენის ალტერნატივები, და უშუალოდ რელაციური მოდელის ალტერნატივები. ქვემოთ წარმოდგენილია SQL ენის ალტერნატივების ნუსხა. რელაციური მოდელის ალტერნატივების გასაცნობად, იხილეთ NoSQL და ნავიგაციური მონაცემთა ბაზები. 

* .QL — ობიექტზე ორიენტირებული მოთხოვნების ენა.
* 4D Query Language (4D QL)
* Datalog — კრიტიკოსების აზრით, Datalog-ს ორი უპირატესობა გააჩნია SQL-თან, ესენია: აქვს უფრო სუფთა სემანტიკა, რაც ხელს უწყობს პროგრამის გაგებას და მის ტექნიკურ მომსახურებას, და უფრო ექსპრესიულია, განსაკუთრებით რეკურსული მოთხოვნებისთვის. 
* HTSQL — URL-ზე დაფუძნებული მოთხოვნის მეთოდი.
* IBM Business System 12 (IBM BS12) — სრულად რელაციური მონაცემთა ბაზების მართვის ერთ-ერთი პირველი სისტემა, წარმოდგენილ იქნა 1982 წელს. 
* ISBL
* JOOQ — Java-ში ჩაშენებული SQL, როგორც შიდა დომენ-სპეციფიკური ენა
* Java Persistence Query Language (JPQL) — მოთხოვნების ენა, რომელსაც იყენებენ Java Persistence API და პერსისტენტული ბიბლიოთეკა Hibernate.
* JavaScript — MongoDB-ში დანერგილია მოთხოვნების საკუთარი ენა JavaScript API-ში.
* LINQ — Microsoft-ის მიერ შემუშავებული SQL-მაგვარი ფუნქციური დაპროგრამების ენა, რომელიც მოთხოვნებს უშვებს უშუალოდ .Net კოდიდან.
* QBE (Query By Example)  — შეიქმნა მოშე ზლუფის მიერ 1977 წელს IBM-ში.
* QUEL — ბერკლის უნივერსიტეტის პროექტ Ingres-ის ფარგლებში 1974 წელს
* Tutorial D
* XQuery

## დანაწილებული დამუშავება 
დანაწილებული რელაციური მონაცემთა ბაზის არქიტექტურა შემუშავდა IBM-ში სამუშაო ჯგუფის მიერ 1988-1994 წლებში. მისი საშუალებით შესაძლებელია, SQL-მოთხოვნების შესასრულებლად  ქსელით დაკავშირებული რელაციური ბაზების ურთიერთქმედება.

ინტერაქტიულ მომხმარებელს ან პროგრამას შეუძლია გადასცეს SQL-ინსტრუქცია ლოკალურ რელაციურ ბაზას, ხოლო პასუხის სახით მიიღოს მონაცემები და მდგომარეობის ინდიკატორები დისტანციურად განლაგებული რელაციური ბაზებიდან. ასევე შესაძლებელია, SQL-ინსტრუქციები კომპილირებულ და შენახულ იქნას დისტანციურ ბაზებში პაკეტების სახით და შემდეგ გამოძახებულ იქნას პაკეტის სახელით. აღნიშნული მნიშვნელოვანია იმ გამოყენებითი პროგრამების მაღალეფექტური გამოყენებისთვის, რომლებიც გამოსცემენ რთულ, მაღალსიხშირულ მოთხოვნებს. განსაკუთრებით კი, მნიშვნელოვანია, როდესაც გამოსაყენებელი ცხრილები მოშორებულ ბაზებზეა განთავსებული.

დანაწილებული რელაციური მონაცემთა ბაზის მესიჯები, პროტოკოლები და სტრუქტურული შემადგენელი ნაწილები წარმოდგენილია დანაწილებულ მონაცემთა მართვის არქიტექტურაში.

## კრიტიკა 
ჩემბერლინის 2012 წლის ნაშრომში განხილულია SQL-ს კრიტიკის ისტორიული ოთხი საგანი:

### ორთოგონალობა და სისრულე 
ადრეულ მახასიათებლებში მხარდაჭერილი არ იყო ძირითადი შესაზლებლობები, როგორიცაა პირველადი გასაღები. შედეგის ნაკრებებს ვერ ერქმეოდა სახელები, და ქვე-მოთხოვნები არ იყო განსაზღვრული. ეს ყველაფერი დაემატა 1992 წელს.

### NULL მნიშვნელობა 
SQL-ს აქვს საკამათო „NULL“-ები და სამმნიშვნელობიანი ლოგიკა. პრედიკატების შედარება NULL-თან აბრუნებს „უცნობ“ მნიშვნელობას , ჭეშმარიტის ან მცდარის მაგივრად. ისეთი შესაძლებლობები, როგორიცაა outer-join დამოკიდებულია NULL-ზე. NULL არ არის ნიშანსივრცის ან სიცარიელის ტოლი. NULL ნიშნავს სტრიქონში მონაცემის არ არსებობას, რომელთანაც შედარება შესაძლებელი

### დუბლიკატები 
ასევე პოპულარულია SQL-ის კრიტიკა იმის გამო, რომ SQL-ში დაშვებულია დუბლიკატი სტრიქონები, რაც ართულებს ინტეგრაციას ისეთ ენებთან, როგორიც Python-ია, რომლის მონაცემთა ტიპებმა შეიძლება გაართულონ მონაცემების ზუსტად ასახვა, პარსირების და მოდულურობის არარსებობის გამო.

### იმპედანსური შეუსაბამობა 
ისევე როგორც ობიექტურ-რელაციური იმპედანსური შეუსაბამობა, არსებობს ასევე შეუსაბამობა დეკლარატიულ SQL-ენასა და პროცედურულ ენებს შორის, რომლებშიც, როგორც წესი, ჩაშენებულია SQL.

## სქოლიო