SQL | |
---|---|
Jazyková třída | Multi-paradigma |
Objevil se v | 1974 |
Autor |
Donald Chamberlin Raymond Boyce |
Vývojář | ISO / IEC |
Přípona souboru | .sql |
Uvolnění | ISO/IEC 9075-1:2016 ( 14. prosince 2016 ) |
Typový systém | Statický , přísný |
Dialekty | SQL-86, SQL-89, SQL-92 , SQL:1999 , SQL:2003 , SQL:2008 , SQL:2011 , SQL:2016 |
Byl ovlivněn | Datalog |
ovlivnil | Agena , CQL , LINQ , Windows PowerShell [1] |
webová stránka | iso.org/standard/63555.h… |
Mediální soubory na Wikimedia Commons |
SQL | |
---|---|
Rozšíření | .sql |
MIME typ | application/x-sql a application/sql [2] [3] |
Vývojář | ISO / IEC |
zveřejněno | 1986 |
Poslední vydání | SQL:2016 ( 2016 ) |
Typ formátu | Databáze |
standard(y) | ISO/IEC 9075 |
otevřený formát ? | Ano |
Mediální soubory na Wikimedia Commons |
SQL ( MFA : [ ˈ ɛ s ˈ k j u ˈ ɛ l ]; zkratka z angličtiny S strukturovaný dotazovací jazyk - „strukturovaný dotazovací jazyk“) je deklarativní programovací jazyk používaný k vytváření, úpravě a správě dat v relačních databáze spravovaná vhodným systémem pro správu databází .
Je to především informačně-logický jazyk určený k popisu, úpravě a získávání dat uložených v relačních databázích . V obecném případě je SQL (bez řady moderních rozšíření) považován za programovací jazyk, který není Turingův úplný , ale zároveň specifikace jazykového standardu SQL/PSM poskytuje možnost jeho procedurálních rozšíření .
Zpočátku bylo SQL hlavním způsobem interakce uživatele s databází a umožňovalo provádět následující sadu operací:
Postupem času se SQL stalo složitějším – bylo obohaceno o nové konstrukce, poskytovalo možnost popisovat a spravovat nové uložené objekty (jako jsou indexy, pohledy, spouštěče a uložené procedury) – a začalo přebírat funkce vlastní programovacím jazykům.
Se všemi svými změnami zůstává SQL nejběžnějším jazykovým prostředkem pro interakci aplikačního softwaru s databázemi. Moderní DBMS , stejně jako informační systémy využívající DBMS, zároveň poskytují uživateli pokročilé nástroje pro vytváření vizuálních dotazů.
Počátkem 70. let byl v jedné z výzkumných laboratoří IBM vyvinut experimentální relační DBMS IBM System R , pro který byl poté vytvořen speciální jazyk SEQUEL , který umožnil relativně snadnou správu dat v této DBMS. Zkratka SEQUEL znamená Structured English QUEry Language – „Structured English Query Language“. Později byl z právních důvodů [4] jazyk SEQUEL přejmenován na SQL . Když byl v roce 1986 ANSI ( American National Standards Institute ) přijat první jazykový standard SQL , oficiální výslovnost se stala [ ˈ ɛ s ˈ k j u ˈ ɛ l ] - es-q-el . Navzdory tomu anglicky mluvící odborníci často pokračují ve čtení SQL jako pokračování (v ruštině často říkají „es-ku-el“).
Cílem vývoje bylo vytvořit jednoduchý neprocedurální jazyk, který by mohl používat každý uživatel i bez znalosti programování [5] . Samotný dotazovací jazyk vyvinuli Donald D. Chamberlin a Ray Boyce . Pat Selinger vyvinul optimalizátor založený na nákladech a Raymond Lorie vyvinul kompilátor dotazů .
SEQUEL nebyl jediný jazyk pro tento účel. Na Kalifornské univerzitě v Berkeley byl vyvinut nekomerční Ingres DBMS (který byl vzdáleným předchůdcem dnes populárního nekomerčního DBMS PostgreSQL ), který byl relačním DBMS, ale používal svůj vlastní jazyk QUEL , který ve srovnání s jazyk SQL, nemohl odolat konkurenci v počtu DBMS, které jej podporují. Jako alternativní přístup k poskytování uživatelského přístupu k databázím byla zvažována také metoda QBE , která se objevila v 70. letech 20. století , která se následně v pozměněné podobě objevila v řadě integrovaných prostředí pro správu dat, ale nenahradila, ale pouze doplnila SQL.
První DBMS podporující nový jazyk byly v roce 1979 Oracle V2 pro stroje VAX společnosti Relational Software (později Oracle ) a System/38 od IBM , který byl založen na System/R.
Protože na začátku 80. let existovalo několik variant DBMS od různých výrobců a každá z nich měla vlastní implementaci dotazovacího jazyka, bylo rozhodnuto vyvinout jazykový standard, který by zaručoval přenositelnost softwaru z jednoho DBMS do druhého ( za předpokladu, že budou podporovat tento standard).
V roce 1983 začaly Mezinárodní organizace pro standardizaci (ISO) a Americký národní institut pro standardy (ANSI) vyvíjet standard pro jazyk SQL. Po mnoha konzultacích a zamítnutí několika návrhů představila ANSI v roce 1986 svou první verzi standardu, popsanou v ANSI X3.135-1986 pod názvem „Databázový jazyk SQL“. Neoficiálně se tento standard SQL-86 nazývá SQL1. O rok později byla pod stejným názvem dokončena verze ISO 9075-1987. Vývoj této normy probíhal pod záštitou Technické komise TC97 ( angl. Technical Committee TC97 ), jejíž oblastí činnosti byly procesy počítání a zpracování informací ( angl. Computing and Information Processing ). Právě jeho divize, označovaná jako Subcommittee SC21 ( anglicky Subcommittee SC21 ), dohlížela na vývoj standardu, který se stal klíčem k identitě standardů ISO a ANSI pro SQL1 (SQL-86).
Standard SQL1 byl rozdělen do dvou úrovní. První úroveň byla podmnožinou druhé úrovně, která popisovala celý dokument jako celek. To znamená, že taková struktura za předpokladu, že ne všechny specifikace standardu SQL1 budou úrovně 1. Prodejce, který si nárokuje podporu tohoto standardu, musel deklarovat úroveň, které odpovídá jeho implementace jazyka SQL. To značně usnadnilo přijetí a podporu standardu, protože výrobci mohli implementovat jeho podporu ve dvou fázích.
Postupem času se ke standardu nashromáždilo několik připomínek a přání, zejména z hlediska zajištění integrity a správnosti dat, v důsledku čehož byl v roce 1989 tento standard rozšířen pod názvem SQL89. Zejména byl přidán koncept primárního a cizího klíče . ISO verze dokumentu se nazývá ISO 9075:1989 "Databázový jazyk SQL s vylepšeními integrity". Paralelně byla dokončena i verze ANSI.
Bezprostředně po dokončení prací na standardu SQL1 v roce 1987 byly zahájeny práce na nové verzi standardu, která měla nahradit standard SQL89 s názvem SQL2, neboť datum přijetí dokumentu v té době nebylo známo. Ve skutečnosti byly SQL89 a SQL2 vyvíjeny paralelně. Nová verze standardu byla přijata v roce 1992 a nahradila standard SQL89. Nový standard s názvem SQL92 byl v podstatě rozšířením standardu SQL1, který zahrnoval mnoho dodatků z předchozích verzí instrukcí.
Stejně jako SQL1 byl i SQL92 rozdělen do několika úrovní, za prvé se však počet úrovní zvýšil ze dvou na tři a za druhé dostaly místo pořadových čísel názvy: initial ( English entry ), middle ( English .intermediate ) , full ( anglicky full ). "Úplná" úroveň, stejně jako úroveň 2 v SQL1, znamenala celý standard. Úroveň "začátečník" byla podmnožinou "střední" úrovně, která zase byla podmnožinou "úplné" úrovně. Úroveň pro začátečníky byla srovnatelná s úrovní 2 standardu SQL1, ale specifikace pro tuto úroveň byly poněkud rozšířeny. Řetězec zahrnutí úrovní standardů tedy vypadal asi takto: SQL1 Úroveň 1 → SQL1 Úroveň 2 → SQL92 „Počáteční“ → SQL92 „Střední“ → SQL92 „Plná“.
Po přijetí standardu SQL92 k němu bylo přidáno několik dalších dokumentů, které rozšířily funkčnost jazyka. V roce 1995 byl tedy přijat standard SQL / CLI (Call Level Interface, Call Level Interface), následně přejmenovaný na CLI95. Následující rok byl přijat standard SQL/PSM (Persistent Stored Modules) nazvaný PSM-96. [6]
Dalším standardem byl SQL:1999 (SQL3). Současný standard je ten, který byl přijat v roce 2003 ( SQL:2003 ) s menšími úpravami provedenými později ( SQL:2008 ). Historie verzí standardu:
Rok | název | Jiné jméno | Změny |
---|---|---|---|
1986 | SQL-86 | SQL-87 | První verze normy přijatá ANSI a schválená ISO v roce 1987. |
1989 | SQL-89 | FIPS 127-1 | Mírně upravená verze předchozího standardu. |
1992 | SQL-92 | SQL2, FIPS 127-2 | Významné změny (ISO 9075); Vstupní úroveň SQL-92 byla přijata jako FIPS 127-2. |
1999 | SQL:1999 | SQL3 | Přidána podpora regulárních výrazů , rekurzivních dotazů, podpora spouštěčů , základní procedurální rozšíření, neskalární datové typy a některé objektově orientované funkce. |
2003 | SQL:2003 | Zavedena rozšíření pro práci s XML daty, okenní funkce (slouží pro práci s OLAP databázemi), generátory sekvencí a na nich založené datové typy. | |
2006 | SQL:2006 | Výrazně byla rozšířena funkcionalita práce s XML daty. Nyní můžete používat SQL a XQuery společně v dotazech . | |
2008 | SQL:2008 | Vylepšené možnosti funkcí oken, odstranění některých nejednoznačností standardu SQL:2003 [7] | |
2011 | SQL:2011 | Implementována podpora chronologických databází (PERIOD FOR), podpora konstruktu FETCH [8] . | |
2016 | SQL:2016 | Zabezpečení na úrovni řádků, funkce polymorfních tabulek, JSON . |
Tradičně, stejně jako u mnoha standardů v IT průmyslu, byl problém s jazykem SQL: v určité fázi se mnoho výrobců softwaru používajících SQL rozhodlo, že funkčnost v aktuální (v té době) verzi standardu je nedostatečná a bylo žádoucí jej rozšířit. V důsledku toho různí výrobci systémů pro správu databází (DBMS) používají různé dialekty SQL, které jsou obecně vzájemně nekompatibilní.
Před rokem 1996 se National Institute of Standards and Technology (NIST) zabýval souladem komerčních implementací SQL se standardem , který stanovil úroveň souladu se standardem. Později byla divize DBMS rozpuštěna a v tuto chvíli veškeré snahy o kontrolu souladu DBMS s normou padají na jeho výrobce.
Poprvé byl koncept „úrovně shody“ navržen ve standardu SQL-92. Konkrétně ANSI a NIST definovaly čtyři úrovně implementace souladu s tímto standardem:
Je snadné pochopit, že každá následující úroveň shody zjevně znamenala shodu s předchozí úrovní. Dále, podle tohoto „žebříčku“ standardů se každý DBMS, který odpovídal vstupní úrovni, mohl prohlásit za „kompatibilní s SQL-92“ („kompatibilní s SQL-92“), ačkoli přenositelnost a soulad se standardem byly ve skutečnosti omezené. na sadu funkcí zahrnutých do této úrovně.
Situace se změnila se zavedením standardu SQL:1999. Od této chvíle získal standard modulární strukturu – hlavní část standardu byla přesunuta do sekce „SQL/Foundation“, všechny ostatní byly přesunuty do samostatných modulů. V souladu s tím zbývala pouze jedna úroveň kompatibility - Core , což znamenalo podporu pro tuto hlavní část. Podpora dalších funkcí je ponechána na uvážení prodejců DBMS. Podobná situace nastala u následujících verzí standardu.
Hnutí NoSQL z druhé poloviny 20. století, které ve svém názvu zafixovalo „negaci SQL“, nebylo způsobeno ani tak odmítnutím jazyka jako takového, ale sjednocením DBMS, které opustilo relační model a principy přísné konzistence z důvodu horizontální škálovatelnosti a řady dalších kvalit. Zároveň podpora SQL v raných systémech NoSQL skutečně chyběla, postupem času některé z těchto DBMS získaly specifické dotazovací jazyky podobné SQL ( CQL , N1QL , AQL a další). V roce 2010 se řada DBMS klasifikovala jako NewSQL , při zachování vlastností škálovatelnosti systémů NoSQL je také implementována podpora SQL v různých systémech - různé stupně kompatibility se standardy. Kromě toho se podpora pro SQL v roce 2010 objevila nejen v DBMS, ale také v ekosystému Hadoop ( Spark SQL , Phoenix , Impala ), stejně jako v middlewaru ( Kafka message broker , Flink stream processing system ), tedy , jazyk se postupně stává de facto standardem pro přístup k jakýmkoli zpracovávaným údajům, a to nejen relačního charakteru.
Jazyk SQL je soubor operátorů, instrukcí a vypočítaných funkcí.
Podle běžného programovacího stylu se operátory (a další vyhrazená slova) v SQL obecně doporučuje psát velkými písmeny [9] .
SQL příkazy se dělí na:
Navzdory přítomnosti dialektů a rozdílů v syntaxi lze z větší části texty dotazů SQL obsahující DDL a DML poměrně snadno přenášet z jednoho DBMS do druhého. Existují systémy, jejichž vývojáři se zpočátku soustředili na použití alespoň několika DBMS (například: systém elektronické správy dokumentů Documentum umí pracovat jak s databází Oracle , tak s Microsoft SQL Server a DB2 ). Při použití některých funkcí specifických pro implementaci je samozřejmě takové přenositelnosti již velmi obtížné dosáhnout.
Dostupnost noremPřítomnost standardů a sady testů pro zjištění kompatibility a souladu konkrétní implementace SQL s obecně uznávaným standardem pouze přispívá ke „stabilizaci“ jazyka. Je pravda, že je třeba poznamenat, že samotný standard je někdy příliš formalizovaný a nabubřelý (např. základní část standardu SQL:2003 se skládá z více než 1300 stran textu).
DeklarativníU SQL programátor pouze popisuje, jaká data je třeba načíst nebo upravit. Jak to udělat, rozhoduje DBMS přímo při zpracování SQL dotazu. Neměli byste si však myslet, že jde o zcela univerzální princip – programátor popíše datovou sadu pro vzorkování nebo úpravu, ale je pro něj užitečné si představit, jak bude DBMS analyzovat text jeho požadavku. Čím složitější je dotaz zkonstruován, tím více umožňuje možnosti pravopisu, které se liší rychlostí provádění, ale v konečné sadě dat jsou stejné.
Tvůrci relačního datového modelu Edgar Codd , Christopher Date a jejich příznivci poukazují na to, že SQL není skutečný relační jazyk. Zejména upozorňují na následující vady v SQL z pohledu relační teorie [10] :
Ve Třetím manifestu [11] publikovaném Christopherem Datem a Hughem Darwenem vymezují principy příští generace DBMS a navrhují jazyk Tutorial D , který je skutečně relační.
SložitostPřestože byl SQL koncipován jako nástroj pro koncového uživatele, později se stal natolik složitým, že se stal nástrojem programátora.
Odchylky od noremNavzdory přítomnosti mezinárodního standardu ANSI SQL-92 mnoho vývojářů DBMS provádí změny v jazyce SQL používaném ve vyvinutém DBMS, čímž se odchylují od standardu. Objevují se tak dialekty jazyka SQL specifické pro každý konkrétní DBMS.
Složitost práce s hierarchickými strukturamiDříve dialekty SQL většiny DBMS nenabízely způsob, jak manipulovat se stromovými strukturami. Někteří prodejci DBMS přišli s řešeními (například databáze Oracle používá klauzuli CONNECT BY ). ANSI nyní standardizuje rekurzivní konstrukci WITH z dialektu DB2 SQL . Rekurzivní dotazy ( Recursive Common Table Expressions ) se objevují v Microsoft SQL Server od verze 2005 [12] .
Protože SQL není známý procedurální programovací jazyk (to znamená, že neposkytuje nástroje pro vytváření smyček, větví atd.), rozšíření zaváděná různými výrobci se týkala především procedurálních rozšíření. Jedná se o uložené procedury ( uložené procedury ) a procedurální „add-on“ jazyky. Téměř každý DBMS používá svůj vlastní procedurální jazyk, konkrétně Oracle Database používá PL/SQL (podporováno také v DB2 a Timesten ), Interbase a Firebird používají PSQL , DB2 používá SQL PL , Microsoft SQL Server a Adaptive Server Enterprise - Transact-SQL , v PostgreSQL - PL/pgSQL .
![]() | ||||
---|---|---|---|---|
|
SQL | |
---|---|
Verze |
|
Klíčová slova | |
Související články | |
Části ISO/IEC SQL |
|
Dotazovací jazyky | |
---|---|
Databáze | |
---|---|
Koncepty |
|
Objekty | |
Klíče | |
SQL | |
Komponenty |
Programovací jazyky | |
---|---|
|
ISO | normy|
---|---|
| |
1 až 9999 |
|
10 000 až 19999 |
|
20 000+ | |
Viz také: Seznam článků, jejichž názvy začínají na „ISO“ |