შინაარსზე გადასვლა

SQL

მასალა ვიკიპედიიდან — თავისუფალი ენციკლოპედია

SQL (ინგლ. Structured Query Language, Listeni/ˌɛsˌkjuːˈɛl/, „ეს-ქიუ-ელ“, ან /ˈskwəl/, „სი-ქველ“) — პროგრამირებაში გამოყენებადი დომენ-სპეციფიკური სადეკლარაციო ენა, რომელიც შექმნილია რელაციურ მონაცემთა ბაზის მართვის სისტემაში (რმბმს) შენახული მონაცემების სამართავად, ან რელაციურ მონაცემთა ნაკადის მართვის სისტემებში (რმნმს) ნაკადის დამუშავებისთვის. განსაკუთრებით მოსახერხებელია სტრუქტურირებულ მონაცემებთან ურთიერთქმედებისას, სადაც არსებობს დამოკიდებულება მონაცემთა სხვადასხვა ობიექტებს / ცვლადებს შორის.

ჩაწერა/წაკითხვის ძველ პროგრამირების ინტერფეისებთან შედარებით, მაგალითად 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-ისთვის დამატებულმა გაფართოებებმა ენას პროცედურული ფუნქციონალიც შემატა, როგორიც არის ნაკადის საკონტროლებელი ონსტრუქციები. მათ შორისაა:

წყარო გავრცელებული სახელი სრული სახელი
ANSI/ISO სტანდარტი SQL/PSM SQL/Persistent Stored Modules
Interbase / Firebird PSQL Procedural SQL
IBM DB2 SQL PL SQL Procedural Language (რეალიზებულია SQL/PSM)
IBM Informix SPL Stored Procedural Language
IBM Netezza NZPLSQL[1] (based on Postgres PL/pgSQL)
Invantive PSQL[2] Invantive Procedural SQL (რეალიზებულია SQL/PSM და PL/SQL)
MariaDB SQL/PSM, PL/SQL SQL/Persistent Stored Module (რეალიზებულია SQL/PSM), Procedural Language/SQL (ეფუძნება Ada-ს)[3]
Microsoft / Sybase T-SQL Transact-SQL
Mimer SQL SQL/PSM SQL/Persistent Stored Module (რეალიზებულია SQL/PSM)
MySQL SQL/PSM SQL/Persistent Stored Module (რეალიზებულია SQL/PSM)
MonetDB SQL/PSM SQL/Persistent Stored Module (რეალიზებულია SQL/PSM)
NuoDB SSP Starkey Stored Procedures
Oracle PL/SQL Procedural Language/SQL (უფუძნება Ada-ს)
PostgreSQL PL/pgSQL Procedural Language/PostgreSQL Structured Query Language (რეალიზებულია SQL/PSM)
SAP R/3 ABAP Advanced Business Application Programming
SAP HANA SQLScript SQLScript
Sybase Watcom-SQL SQL Anywhere Watcom-SQL Dialect
Teradata SPL Stored Procedural Language

ბევრ 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 სტანდარტის ახალი ვერსია წინააღმდეგობრივია მომწოდებლის წინამორბედი ვერსიის მონაცემთა ბაზის ქცევასთან, მაშინ შესაძლოა მომწოდებელს არ მოესურვოს უკუთავსებადობის შეწყვეტა.
  • მომწოდებლებს არ აქვთ კომერვიული ინტერესი მომხმარებელს თავისუფლად შეეძლოს მონაცემთა ბაზის მიმწოდებლის ცვლილება (იხ., მომწოდებლთან მიჯაჭვულობა).
  • მომხმარებლები, რომლებიც აფასებენ მონაცემთა ბაზის პროგრამულ უზრუნველყოფას, უპირატესობას ანიჭებენ ბაზის მაღალ წარმადობას, ვიდრე სტანდარტებთან შესაბამისობას.

სქოლიო

  1. IBM PureData System for Analytics, Version 7.0.3.
  2. Invantive Procedural SQL.
  3. CREATE PROCEDURE. ციტირების თარიღი: 2019-04-23
მოძიებულია „https://ka.wikipedia.org/w/index.php?title=SQL&oldid=3676278“-დან