Мазмұнға өту

SQL

Уикипедия — ашық энциклопедиясынан алынған мәлімет
11:25, 2024 ж. наурыздың 14 кезіндегі KoishymanovaG (талқылау | үлесі) жасаған нұсқа
SQL
бағдарламалау парадигмасы Multi-paradigm
Пайда болды 1974
Дамытушы/дизайнері Donald D. Chamberlin
Raymond F. Boyce
Бағдарламалық жасақтама дамытушысы ISO/IEC
Бағдарламалық жасақтама рилизіSQL:2011/ 2011
Теру жүйесі Static, strong
Имплементациялары Many
Бағдарламалық жасақтама тілінің диалекттері SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003, SQL:2008, SQL:2011
Бұған ықпал етті Datalog
Ықпалы CQL, LINQ, Windows PowerShell[1]
Операциялық жүйесі Cross-platform
Веб-сайты ISO/IEC 9075-1:2008: Information technology – Database languages – SQL – Part 1: Framework (SQL/Framework).
SQL
Файл кеңейтімі:.sql
MIME түрі:application/x-sql
Дамытқан мекеме атауы:ISO/IEC
Формат типі:Database
Қалып(тар)ы:ISO/IEC 9075

SQL (ағылш. Structured Query Language, «құрылымдық сұрау тілі») — тиісті дерекқорды басқару жүйесімен басқарылатын реляциялық дерекқорда деректерді құру, өзгерту және басқару үшін қолданылатын декларативті бағдарламалау тілі.

Бұл, ең алдымен, реляциялық мәліметтер базасында сақталған деректерді сипаттауға, өзгертуге және алуға арналған ақпараттық-логикалық тіл. Жалпы жағдайда, SQL (бірқатар заманауи кеңейтімдерсіз) тьюрингте толық емес бағдарламалау тілі болып саналады, бірақ сонымен бірге SQL/PSM спецификациясының тіл стандарты оның процедуралық кеңейтілу мүмкіндігін қарастырады.

Бастапқыда SQL пайдаланушының дерекқормен жұмыс істеуінің негізгі әдісі болды және келесі операциялар жиынтығын орындауға мүмкіндік берді:

  • деректер базасында жаңа кесте құру;
  • кестеге жаңа жазбалар қосу;
  • жазбаларды өзгерту;
  • жазбаларды жою;
  • бір немесе бірнеше кестеден жазбаларды іріктеу (берілген шартқа сәйкес);
  • кесте құрылымдарын өзгерту.

Уақыт өте келе SQL күрделене түсті — жаңа конструкциялармен байытылды, жаңа сақталған объектілерді сипаттауға және басқаруға мүмкіндік берді (мысалы, индекстер, көріністер, триггерлер және сақталған процедуралар) — және бағдарламалау тілдеріне тән белгілерді ала бастады.

Барлық өзгерістерімен SQL қолданбалы бағдарламалық жасақтаманың мәліметтер базасымен өзара әрекеттесуінің ең кең таралған лингвистикалық құралы болып қала береді. Сонымен қатар, қазіргі заманғы ДҚБЖ, сондай-ақ ДҚБЖ қолданатын Ақпараттық жүйелер пайдаланушыға сұраныстарды визуалды құрудың дамыған құралдарын ұсынады[2].

Тарихы

Алғашқы әзірлемелер

Дональд Чемберлин (Дональд Д. Чемберлин) және Раймонд Бойс 1972 жылы Нью-Йорктегі симпозиумда кездескеннен кейін Э.Коддтан реляциялық модель туралы білгеннен кейін реляциялық мәліметтер базасының тілінде жұмыс істей бастады. Чемберлиннің естеліктеріне сәйкес, бұл «аян» болды. Авторлар күрделі сұрауларды ұсыну үшін Э.Кодд ұсынған реляциялық алгебра мен реляциялық есептеудің экспрессивтілігі мен компамдылығына таң қалды. Код операциялардың математикалық белгілері бар символдық жазбаны қолданды, бірақ Чемберлен мен Бойс тілді кез-келген қолданушы тіпті бағдарламалау дағдылары мен математика білімі жоқ адамдар қолдана алатындай етіп жасағысы келді[3][4].

Кодда симпозиумынан кейін Чемберлин мен Бойс келесі жылды тіл дизайнындағы эксперименттерде өткізді. Олардың алғашқы әрекеті SQUARE тілі болды (Relational Environment - тегі арнайы сұраулар), бірақ ол жоғарғы және төменгі математикалық белгілерге байланысты практикалық қолдануда күрделі болды.

1973 жылы Сан-Хосе ғылыми-зерттеу зертханасына көшкеннен кейін Чемберлин мен Бойс SEQUEL деп аталатын мүлдем жаңа тілде жұмыс істей бастады (құрылымдық Structured English QUEry Language ағылшын тілінен, «құрылымдық сұраныстардың ағылшын тілі»). Авторлар кішкене тәжірибеден кейін тіпті қарапайым қолданушылар (мысалы, бухгалтерлер, инженерлер, сәулетшілер, қала жоспарлаушылар[5]) сұраныстарды қарапайым ағылшын тілінде жазылғандай оқи алады деп үміттенді. Тіл «декларативті» деп аталды, өйткені ол осы ақпаратты іздеудің егжей-тегжейлі жоспарын емес, қажетті нәтижені сипаттады. Декларативті сұранысты егжей-тегжейлі орындау жоспарына аударумен арнайы оңтайландырушы компилятор айналысуы керек еді[3].

SEQUEL туралы алғашқы жалпыға қол жетімді мақала 1974 жылы жарық көрді[6]. Бір айдан кейін Рэй Бойс қайтыс болды. Ол қайтыс болғаннан кейін SEQUEL тілі IBM System R жобасының бөлігі ретінде дамуын жалғастырды. Пэт Селингер (Pat Selinger) құндылық оптимизаторын (cost-based optimizer) әзірлеумен айналысты, Раймонд Лори (Raymond Lorie) сұраныстарды құрастырумен айналысты.

1977 жылы авторлар Ұлыбританияның Hawker Siddeley авиакомпаниясының заңгерінен осы компанияның «SEQUEL» сауда маркасына иелік ететіндігі туралы хат алды. Тіл атауын SQL-ге дейін қысқарту туралы шешім қабылданды (Structured Query Language, «құрылымдық сұрау тілі»)[7]. Дегенмен, SEQUEL-дің бастапқы атауы SQL аббревиатурасының қазіргі айтылуына әсер етті.

Жаңа тілді қолдайтын алғашқы ДҚБЖ 1979 жылы Relational Software компаниясының (кейіннен компаниейacle компаниясы болған) VAX машиналары үшін Oracle V2 және System/R негізіндегі IBM фирмасының system/38 болды.

Бастапқыда SQL термині аббревиатура болды, бірақ 1986 жылғы ANSI бірінші ресми стандартында «құрылымдық тіл» деген тіркес еш жерде айтылмаған және тіл «Database Language — SQL» деп аталған[8]. Келесі ISO/IEC 9075:1989 және ISO/IEC 9075:1992 стандарттарында «Database Language — SQL» орнына «Database Language SQL» немесе жай «language SQL» атауы қолданылған[9]. Алайда ISO/IEC 9075-1:2011 стандартының сипаттамасында ISO сайтында «ISO/IEC 9075 defines Structured Query Language (SQL)» көрсетілген.

SQL мұндай мақсаттағы жалғыз тіл емес еді. Калифорния Беркли университетінде Коммерциялық емес Ingres ДҚБЖ (қазіргі уақытта танымал коммерциялық емес PostgreSQL ДҚБЖ-ның алыс атасы) әзірленді, ол реляциялық ДҚБЖ болды, бірақ өзінің QUEL тілін қолданды, ол SQL тілімен салыстырғанда оны қолдайтын ДҚБЖ саны бойынша бәсекелестікке төтеп бере алмады. Пайдаланушының дерекқорға қол жетімділігін қамтамасыз етудің балама тәсілі ретінде 1970 жылдары пайда болған QBE әдісі де қарастырылды, кейіннен бірқатар интеграцияланған деректерді басқару орталарында модификацияланған түрде пайда болды, бірақ ешқашан АЛМАСТЫРЫЛМАДЫ, тек SQL-ді толықтырды.

Стандарттау

1980 жылдардың басында әр түрлі өндірушілердің ДҚБЖ-нің бірнеше нұсқалары болғандықтан, олардың әрқайсысының сұраныс тілін өзіндік жүзеге асыруы болғандықтан, бір ДҚБЖ-дан екіншісіне ауысуға кепілдік беретін тіл стандартын әзірлеу туралы шешім қабылданды (егер олар осы стандартты қолдайтын болса).

1983 жылы Халықаралық стандарттау ұйымы (ISO) және Американдық ұлттық стандарттар институты (ANSI) SQL тілінің стандартын жасауға кірісті. Көптеген консультациялар мен бірнеше алдын — ала нұсқалардан бас тартқаннан кейін, 1986 жылы ANSI ANSI X3.135-1986 құжатында сипатталған «Database Language-SQL» (SQL мәліметтер базасының тілі) деп аталатын стандарттың алғашқы нұсқасын ұсынды[8]. Бейресми түрде бұл SQL-86 стандарты sql1 деп аталды. Бір жылдан кейін ISO 9075-1987 стандартының сол атаумен нұсқасы аяқталды. Бұл стандартты әзірлеу TC97 Техникалық комитетінің (ағылш. Technical Committee tc97), оның қызметі ақпаратты есептеу және өңдеу процестері болды (ағылш. Computing and Information Processing). Бұл SC21 кіші комитеті деп аталатын оның бөлімшесі (ағылш. Subcommittee SC21), стандарттың дамуын қадағалады, бұл SQL1 (SQL-86) үшін ISO және ANSI стандарттарының сәйкестігінің кепілі болды.

Sql1 стандарты екі деңгейге бөлінді. Бірінші деңгей бүкіл құжатты сипаттайтын екінші деңгейдің ішкі жиыны болды. Яғни, мұндай құрылым SQL1 стандартының барлық сипаттамалары 1 деңгейге жатпайтындығын қарастырды. Осылайша, осы стандартты қолдайтынын мәлімдеген жеткізуші оның SQL тілін іске асыруына сәйкес келетін деңгейді талап етуі керек еді. Бұл стандартты қабылдау мен қолдауды едәуір жеңілдетті, өйткені өндірушілер оны қолдауды екі кезеңде жүзеге асыра алды.

Уақыт өте келе стандартқа бірнеше ескертулер мен тілектер жинақталды, әсіресе деректердің тұтастығы мен дұрыстығын қамтамасыз ету тұрғысынан, нәтижесінде 1989 жылы бұл стандарт sql89 атауын ала отырып кеңейтілді. Атап айтқанда, оған бастапқы және сыртқы кілттер тұжырымдамасы қосылды. Құжаттың ISO нұсқасы ISO 9075:1989 «database language SQL with Integrity Enhancements» деп аталды (SQL мәліметтер базасының тілі тұтастықты бақылауды қосады). Сонымен қатар, ANSI нұсқасы да аяқталды.

1987 жылы sql1 стандартында жұмыс аяқталғаннан кейін бірден sql89 стандартын алмастыратын стандарттың жаңа нұсқасында жұмыс басталды, ол sql2 деп аталды, өйткені сол кезде құжаттың қабылданған күні белгісіз болды. Осылайша, іс жүзінде sql89 және sql2 қатар дамыды. Стандарттың жаңа нұсқасы 1992 жылы sql89 стандартын ауыстыру арқылы қабылданды. Sql92 деп аталатын жаңа стандарт негізінен sql1 стандартының кеңеюі болды, ол Нұсқаулықтың алдыңғы нұсқаларында бар көптеген толықтыруларды қамтыды[9].

SQL1 сияқты, SQL92 де бірнеше деңгейге бөлінді, бірақ біріншіден, деңгейлер саны екіден үшке дейін өсті, екіншіден, олар реттік сандардың орнына атаулар алды: бастапқы (ағылш. entry), орта (ағылш. Intermediate), толық (ағылш. full). «Толық» деңгей, sql1-дегі 2-деңгей сияқты, бүкіл стандартты білдіреді. «Бастапқы» деңгей «орташа» деңгейдің ішкі жиыны болды, өз кезегінде «толық» деңгейдің ішкі жиыны болды. «Бастапқы» деңгей sql1 стандартының 2 деңгейімен салыстырылды, бірақ бұл деңгейдің сипаттамалары біршама кеңейтілді. Осылайша, стандарттар деңгейлерін қосу тізбегі келесідей болды: SQL1 1 деңгей → SQL1 2 деңгей → sql92 «бастапқы»→ Sql92 «орташа» → Sql92 «толық».

Sql92 стандартын қабылдағаннан кейін оған тілдің функционалдығын кеңейтетін тағы бірнеше құжаттар қосылды. Сонымен, 1995 жылы SQL/CLI стандарты қабылданды (Call Level Interface, қоңырау деңгейінің интерфейсі), кейіннен CLI95 деп өзгертілді. Келесі жылы PSM-96 деп аталатын SQL/PSM (Persistent Stored Modules, үнемі сақталатын Модульдер) стандарты қабылданды.[12]

Келесі стандарт SQL болды: 1999 (SQL3). Қазіргі уақытта 2003 жылы қабылданған стандарт бар (SQL:2003) кейінірек енгізілген шағын модификациялармен (SQL:2008). Стандарт нұсқаларының тарихы:

Жыл Атауы Басқаша атауы Өзгерістер
1986 SQL-86 SQL-87 ANSI институты қабылдаған және 1987 жылы ISO мақұлдаған стандарттың бірінші нұсқасы.
1989 SQL-89 FIPS 127-1 Алдыңғы стандарттың сәл өзгертілген нұсқасы.
1992 SQL-92 SQL2, FIPS 127-2 Елеулі өзгерістер (ISO 9075); SQL-92 стандартының Entry Level деңгейі FIPS 127-2 стандарты ретінде қабылданды.
1999 SQL:1999 SQL3 Тұрақты өрнектерге, рекурсивті сұрауларға, триггерлерді қолдауға, негізгі процедуралық кеңейтімдерге, скалярлық емес деректер түрлеріне және кейбір объектіге бағытталған мүмкіндіктерге қолдау қосылды.
2003 SQL:2003 XML деректерінің кеңейтімдері, терезе функциялары (OLAP дерекқорларымен жұмыс істеу үшін қолданылады), реттілік генераторлары және оларға негізделген деректер түрлері енгізілді.
2006 SQL:2006 XML деректерімен жұмыс істеу функционалдығы айтарлықтай кеңейтілді. SQL және XQuery сұрауларында ортақ пайдалану мүмкіндігі пайда болды.
2008 SQL:2008 Терезе мүмкіндіктерінің мүмкіндіктері жақсарды, SQL: 2003 стандартының кейбір түсініксіздіктері жойылды
2011 SQL:2011 Хронологиялық мәліметтер базасын қолдау (period FOR), fetch құрылымын қолдау жүзеге асырылды.
2016 SQL:2016 Жол деңгейіндегі қорғаныс, полиморфты кесте функциялары, JSON.
2023 SQL:2023 Графиктердегі операциялар. ANY_VALUE () агрегаттық функциясы. Он алтылық/екілік/сегіздік литералдарды қолдау, JSON қолдауын жақсарту[10].

Үйлесімділік мәселелері

Дәстүр бойынша, IT индустриясындағы көптеген стандарттар сияқты, SQL тілінде де проблема туындады: белгілі бір кезеңде SQL қолданатын бағдарламалық жасақтаманың көптеген өндірушілері стандарттың Қазіргі (сол кездегі) нұсқасындағы функционалдылық жеткіліксіз деп шешті және оны кеңейткен жөн. Нәтижесінде мәліметтер базасын басқару жүйелерінің (ДҚБЖ) әр түрлі өндірушілері әр түрлі SQL диалектілерін қолдана бастады, жалпы жағдайда бір-біріне сәйкес келмейді.

1996 жылға дейін SQL коммерциялық енгізулерінің стандартқа сәйкестігі мәселелерімен негізінен ұлттық стандарттар және технологиялар институты (NIST) айналысқан, ол стандартқа сәйкестік деңгейін белгілеген. Кейінірек ДҚБЖ-мен айналысатын бөлімше таратылды және қазіргі уақытта ДҚБЖ-ны стандартқа сәйкестігін тексеру бойынша барлық күш-жігер оны өндірушіге жүктеледі.

Алғаш рет «сәйкестік деңгейі» ұғымы SQL-92 стандартында ұсынылды. Атап айтқанда, ANSI және NIST осы стандартқа сәйкестіктің төрт деңгейін анықтады:

  1. Entry (негізгі);
  2. Transitional (өтпелі) — тек NIST осы деңгейге сәйкестігін тексерді;
  3. Аралық (аралық);
  4. Толық (толық);

Әрбір келесі сәйкестік деңгейі алдыңғы деңгейге сәйкестікті білдіретінін оңай түсінуге болады. Әрі қарай, стандарттардың осы «баспалдағына» сәйкес, Entry деңгейіне сәйкес келетін кез келген ДҚБЖ өзін «SQL-92 compliant» (SQL-92 үйлесімді) деп жариялай алады, дегенмен шын мәнінде портативтілік пен стандартқа сәйкестік осы деңгейге кіретін мүмкіндіктер жиынтығымен шектелді.

SQL:1999 стандартының енгізілуімен жағдай өзгерді. Бұдан былай стандарт модульдік құрылымға ие болды-стандарттың негізгі бөлігі «SQL/Foundation» бөліміне енгізілді, қалғандары бөлек модульдерге шығарылды. Тиісінше, үйлесімділіктің бір ғана деңгейі қалды-Core, бұл негізгі бөлікті қолдауды білдіреді. Қалған мүмкіндіктерді қолдау ДҚБЖ өндірушілеріне қалдырылды. Ұқсас позиция стандарттың кейінгі нұсқаларында да орын алды.

No SQL

2000-шы жылдардың екінші жартысындағы NoSQL қозғалысы, оның атауында «SQL теріске шығаруды» тіркеді, бұл тілден бас тарту емес, көлденең масштабтау және басқа да бірқатар қасиеттер үшін реляциялық модельден және қатаң консистенция принциптерінен бас тартқан ДҚБЖ-ны біріктірді. Сонымен қатар, ерте NoSQL жүйелерінде SQL қолдауы болмады, уақыт өте келе мұндай ДҚБЖ-лардың кейбіреулері SQL-ге ұқсас сұраныс тілдерін (CQL, N1QL, AQL[en] және басқалары) алды. 2010 жылдары бірқатар ДҚБЖ өзін NewSQL санатына жатқызды, оларда NoSQL жүйелерінің масштабталу қасиеттерін сақтай отырып, SQL қолдауы да жүзеге асырылды, әртүрлі жүйелерде-стандарттармен үйлесімділіктің әртүрлі дәрежесі. Сонымен қатар, 2010 жылдары SQL қолдауы тек ДҚБЖ-да ғана емес, сонымен қатар Hadoop экожүйесінде (Spark SQL, Phoenix, Impala), сондай-ақ байланыстырушы бағдарламалық жасақтамада (Kafka хабарлама брокері, Flink ағынды өңдеу жүйесі) пайда болды, осылайша тіл біртіндеп қол жетімділіктің нақты стандартына айналуда реляциялық сипатта ғана емес, өңделетін кез келген деректер.

Элементтер

This chart shows several of the SQL language elements that compose a single statement.

SQL тілі-операторлар, нұсқаулар, есептелген функциялар жиынтығы.

Жалпы қабылданған бағдарламалау стиліне сәйкес, SQL-дегі операторлар (және басқа сақталған сөздер) әдетте бас әріптермен жазылуы ұсынылады[16].

SQL операторлары бөлінеді:

  • деректерді анықтау операторлары (data Definition Language, DDL) :

CREATE дерекқор нысанын жасайды (Дерекқордың өзі, кесте, көрініс, пайдаланушы және т. б.),

ALTER нысанды өзгертеді,

DROP нысанды жояды;

  • деректерді манипуляциялау операторлары (data Manipulation Language, DML) :

SELECT берілген шарттарды қанағаттандыратын деректерді таңдайды,

INSERT жаңа деректерді қосады,

Жаңарту бар деректерді өзгертеді,

DELETE деректерді жояды;

  • деректерге қол жеткізуді анықтау операторлары (Data Control Language, DCL) :

Грант пайдаланушыға (топқа) объектімен белгілі бір операцияларға рұқсат береді,

REVOKE бұрын берілген рұқсаттарды қайтарып алады,

DENY рұқсатқа басымдық беретін тыйым салады;

  • транзакцияны басқару операторлары (transaction Control Language, TCL) :

COMMIT транзакцияны қолданады,

ROLLBACK ағымдағы транзакция контекстінде жасалған барлық өзгерістерді қайтарады,

SAVEPOINT транзакцияны кішігірім бөлімдерге бөледі.

Дереккөздер

  1. Paul, Ryan A guided tour of the Microsoft Command Shell. Ars Technica. Тексерілді, 10 сәуір 2011.
  2. https://peter.eisentraut.org/blog/2023/06/01/sql-2023-is-out
  3. a b Chamberlin, Donald (2012). "Early History of SQL". IEEE Annals of the History of Computing. 34 (4): 78—82.
  4. https://api.semanticscholar.org/CorpusID:1322572
  5. Donald D. Chamberlin, Raymond F. Boyce. SEQUEL: A structured English query language // Proceedings of the SIGFIDET '74. — N. Y.: AC, 1974. — С. 249—264.
  6. https://dx.doi.org/10.1145%2F800296.811515
  7. Andy Oppel. Databases Demystified. — San Francisco, CA: McGraw-Hill Osborne Media. — С. 90—91. — ISBN 0-07-146960-5.
  8. a b https://archive.org/details/federalinformati127nati/
  9. a b http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
  10. http://peter.eisentraut.org/blog/2023/06/01/sql-2023-is-out