SQL негіздері



Кіріспе 4
1. Мәліметтерді басқару және алмастыру стандарттауы 7
2. SQL тілінің формалары 10
3. SQL тілінің құралдары срқылы сұратулар құру 16
4. Сұратуларды біріктіру 25
5. Ішкі сұратулар 30
6. Ұсыныстарды құру 37
7. Транзакциялар 42
8. Артықшылықтар 46
9. Статистикалық SQL 57
10. Динамикалық SQL операторларын құру 65
11. PL/SQL программасына сипаттама 73
12. Коллекциялар 82
13. Объектілік типтер 88
14. Курсорды басқару 97
Қолданылған әдебиеттер 103
Кіріспе
SQL тілі мәліметтерге қолжетім үшін және реляциялық деректер қорын басқаруға арналған. Әртүрлі реляциялық деректер қорын басқаруды ДҚБЖ - деректер қорын басқару жүйесі (DBMS - DataBase Management System) деп аталатын программалар жүзеге асырады. Реляциялық деректер қоры дегеніміз белгілі бір түрде ұйымдасқан ақпарат пен ДҚБЖ сақтау. Бірақ іс жүзінде ДҚБЖ теминін Деректер Қоры ДҚ терминімен жиі алмастырады. Oracle, Microsoft SQL Server, Informix, DB2, Access, MySQL сияқты әртүрлі деректер қорын бір тілде басқару үшін SQL тілі өңделді..
1986 жылдан бастап ISO (International Organization for Standardization) және ANSI (American National Standards Institute) комитеттері ISO (International Organization for Standardization) и ANSI (American National Standards Institute) тілінің бірнеше стандарттарын жасауға кірісті, нәтижесінде олар қабылданып келесі атауларға ие болды: SQL86, SQL89, SQL92 и SQL99.
SQL86 стандарты SQL тілінің минималды синтаксисін бекітті.
SQL89 стандарты 1989 жылы қабылданды. Ол барлық ДҚБЖ жүзеге асыра алатын SQL тілінің операторлар жиынын енгізді. Іс жүзінде кез келген коммерциялық ДҚБЖ стандарттқа қарағанда бірсыпыра көп мүмкіндіктер ұсынады. Стандартты қабылдаған кезде ДҚБЖ көбінде ішкі және динамикалық SQL бар бюолғанына қарамастан, SQL89 стандартында SQL тілін процедуралық программалау тіліне енгізу және динамикалық SQL тілін пайдалану ережесі жазылмаған.
Қазіргі таңға дейін ДҚБЖ көбі SQL 92 стандартын пайдалануда.
SQL92 стандартында үш сәйкестік деңгейі анықталған:
• негізгі (Entry);
• орта (Intermediate);
• толық (Full).
Сонымен қатар SQL92 стандартын пайдаланатын ДҚБЖ жасау үшін өндірушілердің көбі тек қана негізгі деңгейді жасап шығарды.
Жаңа SQL99 стандарты, жасау барысында SQL3 аталған, SQL тілінің объектілі және кейбір процедуралық кеңейюлерін стандарттады. Осы стандартты қабылданған уақытында көптеген коммерциялық ДҚБЖ, Oracle сиқты, аталған өзгерістерді пайдаланып жүрген еді.
SQL99 стандартында міндетті түрдегі функциональды ядро (Core) анықталған және кеңейтілген сәйкестік деңгейлер жиыны анықталған. SQL99 функционалды ядросы SQL92 негізгі сәйкесті деңгейіне ие. Кеңейтілген сәйкестік деңгейлері ДҚБЖ жүзеге асыру үшін міндетті емес. ДҚБЖ кеңейтілген сәйкестік деңгейін пайдаланбауы да мүмкін немесе кез келгенін пайлануы мүмкін.
Әр деңгей данных SQL тілінің мүмкіндіктер жиынын сипаттайды, олар аталға ддәрежедегі ДҚБЖ жүзеге алуы қажет.
Осыған қарамастан SQL99 стандарты жарияланған, ол алда пайда болатын барлық деңгейлер үшін ашық.
1. Баженова И. Ю.
Основы проектирования приложений баз данных
Интернет-университет информационных технологий - ИНТУИТ.ru
2. Полякова Л.Н.
Основы SQL
БИНОМ. Лаборатория знаний, Интернет-университет информационных технологий - ИНТУИТ.ru
3. Кузнецов С.Д.
Основы баз данных
Интернет-университет информационных технологий - ИНТУИТ.ru

Мазмұны

Кіріспе 4
Мәліметтерді басқару және алмастыру стандарттауы 7
SQL тілінің формалары 10
SQL тілінің құралдары срқылы сұратулар құру 16
Сұратуларды біріктіру 25
Ішкі сұратулар 30
Ұсыныстарды құру 37
Транзакциялар 42
Артықшылықтар 46
Статистикалық SQL 57
Динамикалық SQL операторларын құру 65
PLSQL программасына сипаттама 73
Коллекциялар 82
Объектілік типтер 88
Курсорды басқару 97
Қолданылған әдебиеттер 103

Кіріспе
SQL тілі мәліметтерге қолжетім үшін және реляциялық деректер қорын
басқаруға арналған. Әртүрлі реляциялық деректер қорын басқаруды ДҚБЖ -
деректер қорын басқару жүйесі (DBMS - DataBase Management System) деп
аталатын программалар жүзеге асырады. Реляциялық деректер қоры дегеніміз
белгілі бір түрде ұйымдасқан ақпарат пен ДҚБЖ сақтау. Бірақ іс жүзінде
ДҚБЖ теминін Деректер Қоры ДҚ терминімен жиі алмастырады. Oracle, Microsoft
SQL Server, Informix, DB2, Access, MySQL сияқты әртүрлі деректер қорын бір
тілде басқару үшін SQL тілі өңделді..
1986 жылдан бастап ISO (International Organization for Standardization)
және ANSI (American National Standards Institute) комитеттері ISO
(International Organization for Standardization) и ANSI (American National
Standards Institute) тілінің бірнеше стандарттарын жасауға кірісті,
нәтижесінде олар қабылданып келесі атауларға ие болды: SQL86, SQL89, SQL92
и SQL99.
SQL86 стандарты SQL тілінің минималды синтаксисін бекітті.
SQL89 стандарты 1989 жылы қабылданды. Ол барлық ДҚБЖ жүзеге асыра алатын
SQL тілінің операторлар жиынын енгізді. Іс жүзінде кез келген коммерциялық
ДҚБЖ стандарттқа қарағанда бірсыпыра көп мүмкіндіктер ұсынады. Стандартты
қабылдаған кезде ДҚБЖ көбінде ішкі және динамикалық SQL бар бюолғанына
қарамастан, SQL89 стандартында SQL тілін процедуралық программалау тіліне
енгізу және динамикалық SQL тілін пайдалану ережесі жазылмаған.
Қазіргі таңға дейін ДҚБЖ көбі SQL 92 стандартын пайдалануда.
SQL92 стандартында үш сәйкестік деңгейі анықталған:
• негізгі (Entry);
• орта (Intermediate);
• толық (Full).
Сонымен қатар SQL92 стандартын пайдаланатын ДҚБЖ жасау үшін өндірушілердің
көбі тек қана негізгі деңгейді жасап шығарды.
Жаңа SQL99 стандарты, жасау барысында SQL3 аталған, SQL тілінің объектілі
және кейбір процедуралық кеңейюлерін стандарттады. Осы стандартты
қабылданған уақытында көптеген коммерциялық ДҚБЖ, Oracle сиқты, аталған
өзгерістерді пайдаланып жүрген еді.
SQL99 стандартында міндетті түрдегі функциональды ядро (Core) анықталған
және кеңейтілген сәйкестік деңгейлер жиыны анықталған. SQL99 функционалды
ядросы SQL92 негізгі сәйкесті деңгейіне ие. Кеңейтілген сәйкестік
деңгейлері ДҚБЖ жүзеге асыру үшін міндетті емес. ДҚБЖ кеңейтілген
сәйкестік деңгейін пайдаланбауы да мүмкін немесе кез келгенін пайлануы
мүмкін.
Әр деңгей данных SQL тілінің мүмкіндіктер жиынын сипаттайды, олар аталға
ддәрежедегі ДҚБЖ жүзеге алуы қажет.
Осыған қарамастан SQL99 стандарты жарияланған, ол алда пайда болатын барлық
деңгейлер үшін ашық.
Қазіргі таңда SQL99 стандарты келесі сәйкестік деңгейлеріне ие:
• Функциональды ядро.
Аталған деңгей кез келген ДҚБЖ жүзеге асыру үшін қажетті болып табылады.
Оның құрамында SQL92 сәйкестіктің негізгі деңгейі бар, сонымен қатар LOB
объектілерімен (Large Object) жұмыс істеу, басқа программалау тілдерінде
жазылған SQL сыртқы программалардан шақыру, сонымен қатар қолданушы
анықтайтын қарапйым мәлімет түрін қолдайды (UDT-типы, User-Defined
Datatypes). LOB-объектілерді қолдаудың екі түрі бар: бинарлы BLOB-
объектілер (Binary Large Object) және символды CLOB-объектілер (Character
Large Object). LOB-объектілерді қолдану үшін лакаторлар деп аталатиын
объектілер енгізіледі. Локаторлар сілтеме бойынша LOB-объектілерге
мүмкіндік тудыратын бүтінсанды айнымалылармен сипатталады. Сыртқы
программалар схема объектілері, сонымен қатар кесте объектілері ретінде де
анықталады. Жүзеге асыру түріне байланыста программа коды DLL-
кітапханасында еркін файлда орналаусуы мүмкін, ал ішкі программалар CREATE
PROCEDURE немесе CREATE FUNCTION операторларымен LANGUAGE және EXTERNAL
жазбаларын міндетті түрде көрсетілуімен жасалады. Сыртқы программаларды
пайдалану функционалды ядроға енсе де, процедуралар мен SQL функцияларын
шақыру "PSM-модуль" (Persistent Stored Module) сәйкестік кеңейтілген
деңгейін жатады Қолданушы анықтайтын түр қарапайым және құрамдас болуы
мүмкін. Екінші жағдай Объектілерді базалық басқару сәйкестік деңгейіне
жатады.
Қолданушы анықтайтын мәліметтер қарапайым түрі – ол жаңа ат берілен және
символдар мен сандарға қатысты кейбір шектеулер көрсетілген негізгі түр.
Қолданушы анықтайтын қарапайым деректер түрі CREATE TYPE операторымен
құрылады (мысалы, CREATE TYPE name_of_new_type AS INTEGER (5) FINAL;).
• Мерзімуақыт жұмысын қолдау.
Бұл сәйкестік деңгейі DATETIME және INTERVAL мәліметтер түрін енгізеді.
DATETIME үшін TIMEZONE_HOUR және TIMEZONE_MINUTE өрістерін енгізеді,
универсалды уақыттың аудандық уақыттан ауытқуын анықтайды. SQL92
стандартында DATETIME және INTERVAL мәліметтер түріне сәйкестік деңгейі
алдын ала дағдыланған.
• Бүтіндікті басқару.
Бұл сәйкестік деңгейі сілтемелік бүтіндіктің қосымша мүмкіндіктерін
қолдауды енгізеді: CREATE TABLE операторының CHECK шектеулеріндегі ішкі
сұратулар , триггерлер, CREATE ASSERTION операторымен құрылатын тұжырымдар.
Аталған мүмкіндітердің көбі SQL92 стандартында болған.
• Белсенді деректер қоры.
Бұл сәйкестік деңгейінде деректер қорының триггерлерін қолдау анықталады.
Деректерді көрсетілген өзгерістерді жасуға дейін немесе жасағаннан кейін
код фрагменттері триггерлерді ұсынады (жол қосу, өзгерту немесе өшіру).
• OLAP.
Бұл сәйкестік деңгейі неғұрлым күрделі сұратуларды сипаттау құралдарын
анықтайды. SELECT операторында бірнеше сұратулар қиылысын алуға мүмкіндік
беретін INTERSECT фразасы қосылған. SQL92 стандартында бұл мүмкіндік тек
қана толық сәйкестік деңгейінде сипатталған. SELECT операторында
кестелердің сыртқы толық бірігуін қамтамасыз ететін FULL OUTER JOIN жазбасы
берілген. Мұндай бірігу барлық біріккен кестелер жолдарын қамтиды,
сәйкестік болмаған жағдайда NULL мәні беріледі. Аталған мүмкіндік SQL92
стандартының толық сәйкестік деңгейінде де қарастырылды. SQL тілінің
мәліметтері басқаруда қолданатын операторларында кесте мен жолдардың
конструкторларын пайдалануы анықталады. Жол конструкторлары бір немесе
бірнеше мәндерден тұрады ( мысалы, (NULL,1,'Field1')). Кесте мәндерінің
конструкорлары жол конструкторлары жиынын береді, жолдар тобын сипаттайды.
(мысалы , VALUES (1,'A'), (2,'B')).
• PSM-моделдер
Бұл сәйкестік деңгейі SQL99 стандартының құжаттарында толығымен SQLPSM
сипаталған. SQL тілі SQL CASE, IF, WHILE, REPEAT, LOOP және FOR
операторларымен кеңеюде. CREATE PROCEDURE және CREATE FUNCTION
операторлармен құрлатын функциялар мен процедуралар пайдалану енгізілуде
SQL тілінде айналымдарды пайдалану және қателерді өңдеушілерде қолдану
енгізілген.
• CLI-интерфейсі.
Бұл сәйкестік деңгейі SQL операторларының шақырылу деңгейін анықтайтын
интерфейс енгізеді. Өз кезегінде CLI-интерфейсі негізінде ODBC стандарты
жазылған, төмендегі дәрістерде тереңінек қарастырылады.
• Объектілерді базалық қолдау (Basic Object Support).
Бұл сәйкестік деңгейі қолданушы анықтайтын мәліметтер объектілі түрлерін
енгізе отырып объектілерді пайдалануды стандарттайды, типтелген кестелерді
пайдаланады, массивтар емн мәліметтердің сілтеиелік түрін пайдаланады,
сонымен қатар сыртқы процедураларды алдына ала анықтау..
• Объектілерді кең пайдалану (Enhanced Object Support).
Бұл сәйкестік деңгейі объектілерді базалық қолдау деңгейлері ұсынатын
барлық мүмкіндіктерді қамтиды, қолданушы анықтайтын мәліметтер түрінің
жиынын қолдаумен толықтырады.
Жоғарыда көрсетілген кеңейтілген сәйкестік деңгейлері стандарттың
тарауларына сәйкес келетін құжаттарға тура байланысты емес. Қазіргі таңда
SQL99 стандарты келесі негізгі бөлімдерден тұрады.:
• SQLFramework – стандарттың логикалық негіздерін сипаттайды..
• SQLFoundation – стандарттың әр тарауының мазмұнын анықтайды және
стандарттың функционалдық ядросын сипаттайды (Core SQL99).
• SQLCLI – шақыру деңгейі интерфейсін сипаттайды.
• SQLPSM – SQL тілінің процедуралық кеңеюін анықтайды.
• SQLBindings - SQL тілінің басқа программалау тілдерімен арақатынас
мехнизмін анықтайды.
• SQLMM – мультимедиялық мәліметтермен жұмыс істеуге арналған SQL
тілінің құралдарын анықтайды.
• SQLOLB - SQL тілінің басқа объектілі тілдермен байланысын анықтайды.
1. Мәліметтерді басқару және алмастыру стандарттауы
ISO халықаралық стандарттау ұйымы 32 JTC1 ("Data Management and
Interchange") ішкі комитеттер қарауында локальды жэәне тараған ақпараттық
жүйелер үшін мәліметтерді басқару мен алмастыру аумағында стандарт жасауда.

SC32 қарастыратын мәселелер аумағында бұрын болған және жаңа пайда болған
стандарттар арақатынасы мәселесі де қарастырылады; мәліметтер құрамымен
түрін анықтау, бұл құрылымдардың пайдалану семантикасы; параллелді
пайдалануға, мәліметтерді өзгертуге, мәліметтерді алмастыруға, мәліметтерді
сақтауды жүзеге асыруға арналған хаттамалар, сервистер және тілдер
стандартын сипаттау; мета мәліметтерді құрылымдауға, ұйымдастыру мен
тіркеуге, және басқа да ақпараттық ресурстарда пайдаланатын хаттамалар,
сервистер, тілдер.
SC32 ұйымының қарсаңында келесі жұмыс топтары қызмет атқаруда:
WG01 – жасалған бизнес сценарилер мен олардың компоненттерін формальды
сипаттау спцификациясы мен идентификациясы үшін стандарттарды жасауға
мамандандыруға арналға топ, сонымен қатар электронды аумағындағы басқа да
стандарттар.
WG02 – метамәліметтерді басқару, түрлі орталарды( Internet, Intranet және
басқа орталар) метамәліметтерді алмастыру мен спцификация бойынша
стандарттарды жасау және дамытумен айналысатын топ. Аталған топтың ірі
жобаларына келесілер жатады
o 1.32.16.01.02.00 ISOIEC AWI 20943-2 "Ақпараттық технологиялар -
XML құрылымданған мәліметтерді деректерді тіркеу процедурасына
қолдану" (Information technology - Procedure for Achieving Data
Registry Content Consistency - XML Structured Data). XML тілі
web-серверларда серверларда орналасқан жіне тіркейтін
дескриптарды сипаттау тілі ретінде пайдаланылып жүргені белгілі;

o 1.32.17.01.00.00 ISOIEC AWI 20944 "Ақпараттық технологиялар -
метамәліметтерді пайдалану сервистері (Information technology -
Metadata Access Service).
• WG03 – мәліметтер қорымен байланыс тілінің стандартын жасайтын топ.
WG03 қарастыратын мәселелердің біріне көпқолданушы және көпсервисті
орталарда деректер қорының құрылымы мен мазмұнын сипаттау үшін тілді
дамыту кіреді. Қарастыратын спецификациялар стандартты деректер қорын
анықтайды, жаңа деректер қорын құру мехнизмін қарастырады. Сонымен
қатар жұмысшы топ өңделуші тілдің басқа программалау тілдерімен
интерфейсін стандарттау мәселесімен айналысады, сонымен қатар
мәліметтер түрін, мәліметтерді өңдеу мен ұсынуды стандарттаумен
айналысады. Аталған топтың үлкен жобалары ретінде келесілерді атауға
болады:
o 1.32.03.05.09.00 ISOIEC CD 9075-9 "АТ- SQL тілі: Сыртықы
мәліметтерді басқару" (Information technology - Database
Languages - SQL - Part 9: Management of External Data
(SQLMED));
o 1.32.03.05.14.00 ISOIEC WD 9075-14 " АТ- SQL тілі: SQL мен ХМL
арақатынасы" (Information technology - Database Language SQL -
Part 14: SQLXML (for SQL:200n)).
• WG04 – түрлі қолданбалы аумақтарды қолдануға арналған мәліметтердің
абстракты түрі паекттерін стандарттайтын топ.
• WG05 – қосымшалар мен деректер қоры арақатынасын аумағындағы
стандартты жасаушы топ, соымен қатар мәліметтерге жеке қолжетім мен
мәліметтерді жіберу хаттамаларын стандарттау. Аталған топтың үлкен
жобалары ретінде келесілерді атауға болады:
o 1.32.05.04.00.00 ISOIEC CD 9579 ed 4 "АТ – SQL мәліметтерге
меншіктік қолжетім" (Information technology - Remote Database
Access for SQL: (RDASQL). Edition 4).
Соңғы кездерде мәліметтерді алмастыру жіне ақпарат ұсыну үшін көбінесе XML
(eXtensible Markup Language) тілін пайдаланады. Бұл тіл қандайда бір нақты
платформаға немесе өндірушіге бекітілмеген. XML 1.0 тілінің бірінші
спецификациясы 1998 жылы W3C консорциумында ұсыным статусын алды. Ары қарай
W3C консорциумы XML (Extensible Markup Language (XML) Version 1.0 (Edition
2): http:www.w3.orgTRREC-xml) тілімен байланысты стандарттар тобын
жасап және жариялады, XLink мен Xpointer байланыс мехнаизміне стандарт қоса
отырып, (Recommendation) XML Schema Part 1: Structures, 2 May, 2001,
(Recommendation) XML Schema Part 2: Datatypes, 2 May, 2001:
http:www.w3.orgTR2001REC-xmlsc hema-1-20010502,
http:www.w3.orgTR2001REC-xmlsc hema-2-20010502) мәліметтер сызбасы
синтаксисін стандарттау, (Namespaces in XML, 14 January, 1999:
http:www.w3.orgTRREC-xml-names) атаулар кеңістігін қолдану мен анықтау
бойынша спецификациясы.
W3C консорциумы XML стандарттауды жалғастыра отырып, DOM XML – объектінің
XML құжаты түрінде ұсынатын құжаттың объектілі моделі бойынша ұсынымдарды
баспаға шағарды.
XML стандарттау мәселесімен OASIS - Organization for the Advancement of
Structured Information Standards: http:www.oasis-open.org та айналысады.
IETF инженерлі тобы мәліметтердә алмасу тілі сияқты XML тілі пайдаланатын
SOAP (Simple Object Access Protocol) стандарты жасалды. Іс жүзінде SOAP
XML қолдану арқылы CORBA, EJB мен COM технологияларын біріктіру арқылы
мәліметтерге платформааралық қолжетім мүмкіндігін береді.
Қазіргі таңда W3C консорциумы жасап жатқан XQL (XML Query Language:
http:www.w3.orgTR2001WD-xquery -20011220) стандарты XML құжаттар
жиынына сұратулар әдісін жетілдірумен байланысты мәселелерді қарастырады.
WG3 32 қарсаңында JTC1 ішкі комитетінде XML тілін қолданумн байланысты
стандарт жасалуда: "АТ - SQL тілі – 14 бөлім: SQLXML спецификациясы " (
Information technology - Database languages - SQL - Part 14: XML-Related
Specifications (SQLXML)). Жазылып жатқан стандарт SQL тілінің құралдарымен
сипатталатын мәліметтерді XML тілі ұсынатын мәліметтерге түрлендіру, және
керісінше SQL кестелерінің сәйксті алгоритмін қоса отырып, SQL мәндерін
XML мәндеріне сәйестігі мехнизмін қарастырады, сонымен қатар SQLXML үшін
XML-сызба сипатын көрсетеді. Бұл стандарт бойынша Final Committee Draft
ISOIEC FCD 9075-14 жарық көрген.
Қазіргі таңда жасалып жатқан, мәліметтерді алмастыруға арналған белгілі
стандарттардың бірі ISOIEC WD 9579, Fourth Edition "АТ - SQL үшін
деректер қорына меншікті қолжетім" (Information Technology - Remote
Database Access for SQL with Extended Security).
RDASQL қарастырылып жатқан стандарты келесі белгілі стандарттар IETF (
http:www.internic.net) негізінде жасалады:
• RFC 791 Internet Protocol.
• RFC 793 Transmission Control Protocol.
• RFC 819 The Domain Naming Convention for Internet User Applications.
• RFC 1122 Requirements for Internet Hosts - Communication Layers.
• RFC 1123 Requirements for Internet Hosts - Application and Support.
• RFC 2246 The TLS Protocol.
RDASQL ISOIEC 9075 (Database Language SQL) стандартына сәйкес келетін
ДҚБЖ меншікті қолжетімді жүзеге асыру үшін қажет.
RDASQL стандарты коммуникациялық хаттамалар арқылы бір немесе бірнеше SQL-
клиенттермен қашықтықта қатынас моделін сипаттайды.
RDASQL RDA-хаттамасының TCPIP және TLS (Transport Layer Security)
стандартты хаттамасымен арақатынас моделін орнатады, RDA-хабар, RDA-
оператор, RDA-хаттама және RDA-жөнелту ұғымдарын енгізеді.
Стандартта SQL ортасының RDA-моделін анықтайды, RDA-клиент пен RDA-
сервер ортасын, функцоналды компоненттерді анықтайды (11. сурет)

Сурет. 1.1. SQL ортасының RDA-моделі
RDA-моделі RDA-клиент пен RDA-сервер қатынасын жүзеге асыратын көліктік
деңгейдегі провайдерларды анықтайды.
ISOIEC 9075-3 (SQLCLI) стандарты серверде анықталатын нәтижелік жиынды
спаттайды, RDASQL стандарты нәтижелі жиын мен SQLCLI сәйкес
шақырылуын арақатынасына арнаған RDA-операторын сипаттайды. RDA-
операторлармен бірге аталған стандарт атрибут кодтарын енгізеді. Қазіргі
күнге дейін WR5 жұмыс тобы RDASQL стандартының 4-ші басылымы жарық көрген.

2. SQL тілінің формалары
SQL құрылымданған сұратулар тілі келесі формаларда жүзеге асады:
• Интерактивті SQL.
• Статистикалық SQL.
• Динамикалық SQL.
• Ішкі SQL.
Интерактивті SQL ақырлы қолданушыға интерактивті режимде SQL-операторларды
орындауға мүмкіндік береді. Барлық ДҚБЖ интерактивті режимде деректер
қорымен жұмыс инструментальды құралдарын ұсынады. Мысалы, Oracle деректер
қорын басқару жүйесі SQL*Plus утилитасын қосады, соңғысы жолдық режимде
SQL операторларының көбін орындауға мүмкіндік береді.
Статистикалық SQL ішкі SQL немесе модульды SQL ретінде жүзеге асады.
Статистикалық SQL операторлары программаны компиляциялау уақытында алдын
ала анықталып қояды. SQL.
Динамикалық SQL программаны орындау уақытында SQL операторларын орындауға
мүмкіндік береді.
Ішкі SQL басқа программалау тілдерінде программа кодына SQL операторларын
қосуға мүмкіндік береді.
SQL операторлар тобы
SQL тілі:
• Кейде SQL тілі командалары деп аталатын, тіл операторлары;
• Мәліметтер типі;
• Ішкі функциялар жиыны.
Өздерінің логикалық мәндері бойынша SQL тілі операторлары келесі топтарға
бөлінеді:
• DDL мәліметтерді анықтау тілі (Data Definition Language);
• мәліметтерді басқару тілі DML (Data Manipulation Language).
Мәліметтерді анықтау тілі деректер қорының обьектілерін басқаратын
операторлардан тұрады. Соңғыларға индекстер, кестелер және ұсыныстар
жатады. Әр нақты бір деректер қоры үшін стандартта қарастырылған обектілер
жиынын кеңейтетін өз обьектілер жиыны бар. Кейбір ДҚБЖ, мысалы Oracle
сияқты, бір қолданушының меншігіндегі барлық обьектілер деректер қоры
схемасын құрады. Сонымен қатар, SQL92 стандартында схема терминімен
байланысқан кестелер тобын атай бастады.
Мәліметтерді басқару тілі деректер қоры кестелерінің мазмұнын басқаратын
және осы кестелерден ақпаратты алып шығу операторларынан тұрады.
DML тілі келесі операторларды анықтайды:
• SELECT – бір немес бірнеше кестеден мәліметтерді алу;
• INSERT – кестелерге жолды қосу;
• DELETE – кестелерден жолды алып тастау;
• UPDATE – кестедегі өрістер мәнін өзгерту.
SQL-операторларының орындалу фазалары
SELECT A,B,C, FROM X,Y WHERE A500 AND C='ASF'
parse Операторды синтаксистік талдау
validatҚолданушы привлегиясын тексеру, желілік каталогтар, кестелер мен
e өрістер атауларын тексеру
access Мәліметтерге қолжетім жоспарын генерациялау. Қолжетімділі
plan жоспары – деректер қорында сақталатын мәліметтерге қатысты
орындалатын кодтың екілік түрде берілуі.
optimiz
e Қолжетімділік жоспарын тиімділендіру. Мәліметтерді іздеу
жылдамдығын арттыру үшін индекстер пайдаланады. өзара байланысты
кестелерді пайдалануды тиімділендіру
executeОператорды орындау

SQL тілін пайдалану
ДҚБЖ қосылу
SQL операторларын тереңірек қарастыруға кіріспестен бұрын, қолданушының
ДҚБЖ жұмыс істеу сценариін қарастырайық.
Бастапқы қадам ретінде ДҚБЖ қосылуды орындаған дұрыс. Мысалы, CONNECT TO
MyDB1 USER User1Password1;.
TO жазбасы байланыс орындалатын мәліметтер қорын мамандандырады. USER
жазбасы деректер қорымен жұмыс істетйтін қолданушы аты мен паролін
анықтайды.
SQL тілінің операторлары мен функциялары жолдық мәндерге қарағанда
регистерге әсер етпейді. Бірақ SQL тілінің стандартындағы сияқты дәрісте
операторлар үлкен әріптермен жазылып отырады, ал өрістер, кестелер және
жалған аттар кіші ріптермен белгіленеді.
Мәліметтермен жұмыс істеместен бұын келесі әрекеттер орындалуы қажет:
• Деректер қоры моделін жасалады және аоның негізінде деректер қоры
схемасы құрылады – барлық байланысқан кестелер.
Кесте құру
Кестені құру үшін CREATE TABLE операторы қолданылады, SQL92 стандартында
келесі түрде жазылады:
CREATE [ { GLOBAL LOCAL } ] TEMPORARY]
TABLE кесте аты
( { column [table_constraint] } . , ..
[ ON COMMIT { DELETE PRESERVE} ROWS ] );

column келесідегідей анықталады
өріс_аты {domain datatype [size]}
[column_constraint:]
[ DEFAULT default_value ]
[ COLLATE collate_value ]

GLOBAL TEMPORARY немесе LOCAL TEMPORARY жазбалары уақытша кестенің
құрылуын көрсетеді
ON COMMIT жазбасы тек қана уақытша кестелер үшін пайдаланылады. Уақытша
кестелер үшін ағым бойынша ON COMMIT DELETE ROWS жазбасы қарастырылады.
Кестенің атынан кейін доға жақшалардың ішіне үтір арқылы, өрістер (бағандар
деп аталатын) мен шектеулер тізімі көрсетіледі. әр өрістің аты мен типі бар
(datatype). Тип домен ретінде немесе SQL операторының кез келген типі
ретінде анықталады. Мысалы, SQL тілі келесі типтерге ие : integer, char
(символдар_саны), varchar (символдар_саны), int, smallint, float, date.
DEFAULT жазбасы ағымдағы мәнді анықтайды. Бұл доменде көрсетілген ағымдағы
мәнге қарағанда жоғары приоритетке ие (егер деректер типінің орына домен
пайдаланған болса).
Кесте үшін шектеу (table_constraint) және баған үшін шектеу
(column_constraint), бүтінділік шектеуі деп те атала береді, кестеге
енгізілетін мәліметке белгілі бір шарт қояды.
Бағанға қойылатын шектеулер бағанды сипаттағаннан кейін ғана көрсетіледі,
ал кестеге арналған шектеулер – кез келген баған сипатталған соң үтір
арқылы жазылады.
В стандарте SQL92 ограничения должны иметь имена, которые генерируются
СУБД. В наиболее продвинутых БД, в частности Oracle, доступ к ограничениям
возможен посредством служебных таблиц словаря базы данных и дополнительного
набора команд языка SQL.
Бағанға қойылатын шектеулер келесі жазбалармен берілуі мүмкін:
• NOT NULL – кез келген қосылатын немесе өзгертілетін баған мәні NULL
ден өзгеше болуы керек..
• UNIQUE – бағанның барлық мәндері уникалды болу керек.
• PRIMARY KEY – бір бағанды бастапқы кілт ретінде орнатады, біруақытта
бағанның барлық мәндері уникалды болады.
• CHECK (condition) – жақшада берілетін шартты баған мәндерін салыстыру
үшін қолданады және келесі мәндердә қайтарады, TRUE, FALSE немесе
UNKNOWN. Егер SQL-операторын орындау барысында FALSE мәні қайтарылатын
болса, онда оператор орындалмайды.
• REFERENCES table (fields_list) – берілген кесте бағандарының
мәндерінің ата – аналық кесте бағандарының мәндеріне сәйкес болуын
талап етеді.
Кестелерге қойылатын шектеулер келесі жазбалармен көрсетідуі мүмкін:
• CHECK (condition) - жақшада берілетін шартты баған мәндерін салыстыру
үшін қолданады және келесі мәндердә қайтарады, TRUE, FALSE немесе
UNKNOWN. Егер SQL-операторын орындау барысында FALSE мәні қайтарылатын
болса, онда оператор орындалмайды.
• FOREIGN KEY (fields_list) – бұл шектеу чыртқы кілті бойынша бағандарға
арналған REFERENCES ұқсайды, және сыртқы кілтте көрсетілген барлық
мәндер ата–аналық кілтте көрсетілген барлық мәндерге сәйкестігіне
кепілдік береді, сілтемелік бүтіндікті қамтамасыз етеді. Осы
шектеулерде қолданылатын бағандар деректерінің типтері сәйкес келу
керек, ал ата–аналық және сыртқы кілт бір–біріне сәйкес келу
керек(тұрақты базалық кесте, глобаоьды уақытша кесте, локальды уақытша
кесте) .
SQL92 стандарты әр SQL-операторды орындау алдында және ағымдағы транзакция
аяқталғанда шектеулерді баұылау режимін орнатады. Соңғы жағдайда
транзакция ішінде бүтіндікті сақтау бүлінуіне жол береді.Бұл режим
REFERENCES қатысты кестелерге мәліметтерді енгізуге өте тиімді.
Кестелер үшін шектеулерді анықтау
Шектеулерді сипаттау SQL92 стандартында келесі формальды сипаттауға ие:
table_constraint анықталады
[ CONSTRAINT constraint_name ]
{ PRIMARY KEY (аты_өріс .,:) }
{ UNIQUE (аты_өріс .,:) }
{ FOREIGN KEY (аты_өріс .,:) }
{ REFERENCES аты_кесте [(аты_өріс .,:)]
[ref_specification] }
{ CHECK (condition) }
[[ NOT ] DEFFERABLE ]

column_constraint анықталады
[ CONSTRAINT constraint_name ]
{ NOT NULL } { PRIMARY KEY } UNIQUE
{ REFERENCES аты_кесте [(аты_өріс .,:) ]
[ref_specification]}
{ CHECK (condition) }
[ INITIALLY DEFFERED INITIALLY IMMEDIATE ]
[[ NOT ] DEFFERABLE ]

ref_specification определяется как
[ MATCH {FULL PARTIAL } ]
[ ON UPDATE
{ CASCADE SET NULL SET DEFAULT
NO ACTION } ]
[ ON DELETE
{ CASCADE SET NULL SET DEFAULT
NO ACTION } ]

REF_SPECIFICATION келесі шектеулерге ата–аналық кестелерде өзгерістерді
орындау барысындағы әрекеттер мен сәйкестік типтерін анықтайды, FOREIGN
KEY және REFERENCES. Сәйкестік MATCH FULL (толық сәйкестік) болып анықталуы
мүмкін немесе MATCH PARTIAL (бөлшектік сәйкестік).
Толық сәйкестікте атан аналық кілт пен сыртқы кіл мәндері толығымен
сәйкесуі қажет, немесе сыртқы кілттің барлық мәндері NULL болу керек.
Бөлшектік сәйкестікте сыртқы кілттің кейбір мәндері NULL тең болуы мүмкін
және сыртқы кілттің әр жолының мәні NULL өзгеше болуы қажет, ата аналық
кілт мәндерәне сәйкес болуы қажет.
Егер сәйкестік типі көрсетілмеген болса, онда сыртқы кілттің кез келген
мәні ата аналық кілтте бар деп болжанады, бірақ сонымен бірге сыртқа кілтте
NULL мәні болуы мүмкін (бөлшектік немесе толық).
tbl1 кестесін қарайық, атан аналық кілттері f2 және f3 для бағандары
ретінде анықталған, tbl2 кестесі сыртқы кілттері және c1 және c2
қарастырайық. Егер tbl1 tbl2 кестелері келесі мәндерге ие болса:
tbl1 tbl2
f1 f2
SOME ANY All
Жол мәндерінің конструкторының ішкі сұрату TRUE TRUE TRUE
ретінде алынған жолдар жиыны әр жолымен салыстыру
нәтижесі, TRUE
Ішкі сұратуды орындау нәтижесі салыстыратын FALSEFALSETRUE
долдарға ие
Жол мәндерінің конструкторының ішкі сұрату FALSEFALSEFALSE
ретінде алынған жолдар жиыны әр жолымен салыстыру
нәтижесі, FALSE
Жол мәндерінің конструкторының ішкі сұрату TRUE TRUE UNKNOWN
ретінде алынған жолдар жиыны әр жолымен салыстыру
нәтижесі жоқ дегенде біреуі TRUE

Мысал ретінде сұрату жолын жақша ішінде, ал ішкі сұрату жолын пробелмен
белгілейік. Келес предикат TRUE мәнін қайтарады:
(10, 1) ANY (12, 2 0, NULL 5, 20),
Ішкі сұратудың бірінші жолы шартты қанағаттандырады.. Ал
(NULL, NULL) = ANY (12, 2 NULL, NULL 5, 20)
предикаты UNKNOWN мәнін қайтарады, себебі NULLді NULLмен салыстыру
UNKNOWN ибереді.
(10, 1) ALL (12, 0 0, NULL 5, 20)
Предикаты FALSE мәнін қайтарады, себебі (10,1) жолын ішкі сұрату әр
жолымен салыстырған кезде FALSE мәнін қайтарады.

Агрегациялау функциясы

SELECT операторының GROUP BY жазбасы агрегациялау функциясы орындалатын
жолдар тобын анықтауға пайдаланады. Егер SELECT операторында GROUP BY
жазбасы көрсетілген болса онда нәтижелік жиынды анықтау тізіміндегі
бағандар аты барлығы агрегациялау функцияларымен көрсетілуі қажет, себебі
нәтижелік жиынға әр топ үшін берілген жолдар тобын агрегациялау
нәтижесінде алынған мәнге ие тек қана бір жол қосылады.
Агрегациялау функцияларына SQL тілінің келесі функциялары жатады:
• COUNT - ALL немесе DISTINCT жазбасын ескере отырып және NULL
көрсеткішін ескерместен барлық бағандар мәнін есептеу.
• COUNT (*) – топтағы барлық бағандар санан есептеу.
• AVG – орта мәнін анықтау.
• SUM – топтың барлық міндерінің қосындысын есептеу. Егер алынған мән
қосылатын мәліметтер типі шектеуінен асып кеткен болса, онда SQL-
операторының орындалу қатесі көрсетіледі
• MAX – топтаға ең үлкен мәнді анықтау.
• MIN – топтағы ең кіші мәнді анықтау.
SELECT операторының HAVING жазбасы WHERE ұқсас предикатты анықтайды,
агрегациялау функциясы нәтижесінде алынған жолдарға қолданылады.
Топтарды пайдалану арқылы таңдау мысалын көрсетейік. dno бағаны тек қана
үш мәнге ие 11, 22 және 33. Әр үш топ үшін f2 бағанының минималды және
максималды мәні бар:
SELECT dno, MIN(f2), MAX(f2)
FROM tbl1
GROUP BY dno;
Бұл SQL-операторының орындалу нәтижесі келесі жолдардың құрылуы болады:

DNO MIN(f2) MAX(f2)

11 125 200
22 200 2300
33 100 150

Топтарды пайдаланып және қосымша шектеулер қолданып таңдағанда MAX(f2)
бағаны мәндері:

SELECT dno, MIN(f2), MAX(f2)
FROM tbl1
GROUP BY dno
HAVING MAX(f2) 1000;
Бұл SQL-операторының орындалу нәтижесінде екі жолға ғана қайтарылады -
бірінші және соңғы:
DNO MIN(f2) MAX(f2)

11 125 200
33 100 150

Нәтижелік жиынды реттеу

ORDER BY жазбасы ORDER BY жазбасынан кейінгі тізімді көрсетілген бағандар
мәніне сәйкес орындалатын нәтижелік жиынды ретке келтіруге арналған.
Бастапқыда бірінші көрсетілге баған, кейңн екінші т.с.с. ретке келтіріледі.
Ретке келтіруде ASC (өсу ретімен) немесе DESC (кему ретімен) опциясын
көрсетуге болады.
Мысалы:
SELECT f1,f2 FROM tbl1 ORDER BY f2;

Үлгі бойынша кесте құру

SQL-99 стандарты үлгі бойынша кесте құруға мүмкіндік береді, кесте құрамын
көшіруп жаңа кесте құру, бағандар саны мен тимптері бастапқы кестеге
толығымен сәйкес келеді. Үлгі бойынша құрылатын кесте LIKE жазбасымен
көрсетіледі.
Мысалы:
CREATE TABLE tbl2 LIKE tbl1;.

Кестелерді қосу

Бірдей кестелерді қосу

Аттары бірдей бағандары бар кестелерді немесе кестені өз өзімен
байланыстыру үшін алиастар қолданылады, FROM жазбасында кесте атынан кейін
пробелден кейін көрсетіледі.
Мысалы:
select t1.f1, t1.f2, t2.f1, t2.f2
from tbl1 t1, tbl1 t2
where t1.f1= t2.f2;

Қиылысқан байланыстыру (CROSS JOIN)

Егер FROM жазбасы бірден көп кесте немесе ішкі сұрату анықтайтын болса
ондар олар барлығы байланысады. Ғым бойынша біріккен кесте қиылысқан
байланысуды ұсынады (CROSS JOIN), сонымен қата декарттық көбейтінді деп
аталады (Cartesian product).
Келесі екі оператор эквивалентті:
SELECT tbl1.f1, tbl2.f1 FROM tbl1, tbl2;
SELECT tbl1.f1, tbl2.f1
FROM tbl1 CROSS JOIN tbl2;
tbl1 және tbl2 кестелері SELECT операторымен бейнеленетін жолдарға ие
болсын 3.2 суретіндегі:

Сурет. 3.2.  tbl1 және tbl2 кестелер жолдары
tbl1 және tbl2 кестелерінің SELECT операторымен қиылысып байланысуы 3.3
суретте көрсетілген нәтижелік жиын ұсынады.

Сурет 3.3. қиылысып байланысу (cross JOIN)
Осылай қиылысып байланысу барлық жолдар мүмкін комбинацияларымен нәтижелік
жиын құрайды.
Біріктіру схемада көрсетілмеген мәліметтерді уақытша біріктеруге мүмкіндік
береді (атан аналық және сыртқы кілттермен).
SELECT операторының FROM жазбасында байланысатын кестелер үтір арқылы
жазлады.
FROM жазбасында келесі біріктіру операторларын пайдалануға болады:
• CROSS JOIN – қиылыстырып біріктіру.
• NATURAL JOIN- шынайы біріктіру. SQL стандарты бұл біріктіруді барлық
бір есімді бағандар бойынша кестелерді байланыстыру нәтидесі ретінде
анықтайды:
o INNER JOIN – ағымда қолданылатын ішкі бірігу.
o LEFT JOIN [OUTER] – сол сыртқы бірігу.
o RIGHT JOIN [OUTER] – оң сыртқы бірігу.
o FULL JOIN [OUTER] – толық сыртқы бірігу.
• UNION JOIN – бірігуді байланысьыру.

Ішкі бірігу (INNER JOIN)

Ішкі табиғи байланыста біріктірілетін бағандар мәні сәйкес келетін жолдар
,ана топтастырылады. Екі кестенің ішкі бірігу нәтижесі 3.4 суретте
көрсетілген

Сурет 3.4. ішкі біріктірілу (INNER JOIN)

Сыртқы сол біріктірілу LEFT JOIN [OUTER]

Сыртқы сол біріктірілуде нәтижелік жиынға сол кестенің барлық жолдары
таңдалады (бірінші көрсетілетін). Біріктірулер кезінде бағандар мәндер
сәйкескен жағдайда екінші кестенің мәндері сәйкес жолдағы нәтижелік
жиынға қосылады. Сәйкестіктер болмаған жағдайда екінші кетенің мәні ретінде
NULL көрсетіледі.

Сурет 3.5. Сыртқы сол бірігу LEFT JOIN [OUTER]

Сыртқы оң бірігу RIGHT JOIN [OUTER]

Сыртқы сол біріктірілуде нәтижелік жиынға оң кестенің барлық жолдары
таңдалады (екінші көрсетілетін). Біріктірулер кезінде бағандар мәндер
сәйкескен жағдайда бірінші кестенің мәндері сәйкес жолдағы нәтижелік
жиынға қосылады. Сәйкестіктер болмаған жағдайда бірінші кетенің мәні
ретінде NULL көрсетіледі.

Сурет. 3.6.  сыртқы оң бірігу RIGHT JOIN [OUTER]

Толық сыртқы бірігу FULL JOIN [OUTER]

Сыртқы толық біріктірілуде нәтижелік жиынға оң және сол кестенің барлық
жолдары таңдалады (екінші көрсетілетін). Біріктіруші мәндер сәйкескен
жағдайда жол оң жақтағы және сол жақтағы кестелердің мәніне ие болады. Кері
жағдайда кестелер бағандарында жоқ мәндер орнына NULL қайтарылады.

Сурет 3.7. Толық ысртқы бірігу FULL JOIN [OUTER]

Көрсетілген бағандар бойынша біріктіру

USING жазбасы көрсетілген бағандар бойынша табиғи біріктірулерді орындайды,
бірнеше бір есімді бағандары бар кестені дұрыс түрде қосуға мүмкіндік
береді. Біріктірулер жүретін бағандар тізімі USING. Кейін көрсетіледі.
Мысалы:
select t1.f1, t1.f2, t2.f1
from tbl1 t1 join tbl2 t2 using f2;

Предикат бойынша біріктіру

Көрсетілген предикат бойынша табиғи бірігу ON жазбасының көмегімен
орындалады. Нәтижелік жиынға берілген шартты қанағаттандыратын жолдар
жазылады. Бұл біріктіру
Мысалы:
select t1.f1, t1.f2, t2.f1, t2.f2
from tbl1 t1 join tbl2 t2
on t1.f1= t2.f2;

4. Сұратуларды біріктіру
SQL тілі кестелерді біріктірудің екі әдісін ұсынады:
• Байланыстырылушы кестелерді SELECT операторының FROM жазбасында
көрсетеді. Бастапқыда кестелерді біріктіру жүреді, содан кейін WHERE
жазбасында көрсетілген GROUP BY жазбасымен анықталатын агрегациялау,
мәліметтерді реттеу т.с.с. шарттар алынған жиынға қолданылады.
• SELECT операторын орындаумен алынған нәтижелік жиындар бірігуін
анықтай отырып. Бұ жағдайда екі SELECT операторлары UNION ,
INTERSECT , EXCEPT немесе CORRESPONDING жазбаларымен біріктіріледі.
UNION-бірігу
UNION жазбасы екі сұрату нәтижесін біріктіреді:
• Біроіктірілетін сұратулардың әрқайсысы бірдей бағандар санына ие болу
керек;
• Жұптасып біріктірілетін бағандар мәндері бірдей немесе бір мәнге
келтірілетін болу керек. integer интежер типті баған мен varchar
типті баған мәндерін біріктіруге болмайды;
• Нәтижелік жиыннан автоматты түрде сәйкес жолдар алынып тасталады (
сурет. 4.1);

Сурет 4.1. Сәйкес жолдарды алыптастау арқылы UNION-бірігуінің
орындалуы.
• Егер жолға сұратуда қосатын қандай да бір тұрақты қосылатын болса,
онда оның мәні жол идентивтілігіне әсер етеді ( сурет. 4.2).

Сурет 4.2. қолданылға өрнектің UNION- бірігуінің орындалуы.
Стандарт нәтижелік жиында жолдарды реттеуге ешқандай шектеу қоймайды.
Кейбір ДҚБЖ бастапқыда бірінші сұрату нәтижесін шығарады да, содан кейін
екінші сұрату нәтижесін шығарады. Oracle ДҚБЖ бірінші көрсетілген бағанның
мәндерін оған индекс құрылмаған жағдайда да автоматты түрде реттейді.
Қажетті реттеу ретін көрсету үшін ORDER BY жазбасын қолданады. Сонымен
қатар баған атын да, номерін де қолдануға болады ( сурет. 4.3).

Сурет 4.3. Нәтижелік жиынды реттеумен UNION- бірігуінің орындалуы.

UNION ALL жазбасы UNION жазбасындағыдай, екі ішкі сұрату біріктіруін
орындайды, келесі жайттар ескерілмейді:
• Құрылатын нәтижелік жиыннан сәйкес жолдар жойылмайды;
• біріктірілуші сұратулар нәтижелік жиынға реттелместен тізбектеліп
ұсынылады.
Екі сұратудан көп біріктірген жағдайда операцияның орындалу ретін өзгерту
үшін жақшалар пайдалануға болады ( сурет. 4.4).

Сурет 4.4. Үш сұрату үшін UNION- бірігуінің орындалуы
INTERSECT-бірігуі
INTERSECT жазбасы әр біріктірілуші нәтижелік жиында бар жолдарды ғана
таңдауға мүмкіндік береді. 4.5 суретте қиылысатын жиындар ретінде
сұратулардың бірігу мысалы көрсетілген.

Сурет 4.5.  INTERSECT-бірігуінің орындалуы
EXCEPT-бірігу
EXCEPT жазбасы бірінші біріктіруші нәтижелік жиында бар, екіншісінде жоқ
жолдарды ғана таңдауға мүмкіндік береді.
INTERSECT және EXCEPT жазбалары SQL-92 толығымен сәйкестік деңгейінде
ғана орындалады. Кейбір ДҚБЖ EXCEPT жазбасының орнына MINUS опциясын
алады ( сурет. 4.6).

Сурет 4.6.  MINUS(EXCEPT)-біріктірілудің орындалуы
EXCEPT- біріктіруді орындаған жағдайда сұратуларды біріктірудің басқа
түрлері үшін де сәйкес жолдар нәтижелік жиынға қосылмайды, көрсетілген
суретте жақсы байқалады.
Егер INTERSECT ALL немесе EXCEPT ALL жазбалары қолданса, онда жиындар
қиылысында немесе жиындарды азайтуда қайталанушы жол нәтижелік жиыннан,
біріктірілуші нәтижелік жиындарда неше рет қайталанса, сонша рет аллынып
тасталады. то при пересечении множеств или вычитании множеств повторяемая
строка удаляется
CORRESPONDING BY жазбасы біріктірілуші жиындарда ьүрлі бағандар санын
қолдануға мүмкіндік береді: нәтижелік жиынға тізімді көрсетілген бағандар
ғана қосылады. Бұл тізім сонымен бірге нәтижелік жиынға бағандардың қосылу
ретін анықтайды.

5. Ішкі сұратулар
SQL тілі DML тілінің басқа операторларында ішкі сұратуларды пайдалануға
мүмкіндік береді, SELECT операторымен анықталатын ішкі сұратулар болып
табылады.
Ішкісұрату- SQL тілінің өте қуатты құралы. Ол нәтижелік жиындарды құру
процесінде немесе мәліметтерді өзгерту (DELETE , INSERT , UPDATE )
операторларының бірін орындайтын сұратулардың күрделі иерархиясын құруға
мүмкіндік береді.
Шартты түрде ішкі сұратуларды үшке бөледі, олардың әрқайсысы алдынғысының
салдары болып табылады:
• кестелік ішкі сұрату, бағанадар немес жолдар жиынын қайтарады;
• жол ішкі сұрату, тек бір ғана жол қайтаратын, бірақ бірнеше баған да
қайтаруы мүмкін (мұндай ішкі сұратулар ішкі SQL да кездеседі);
• скалярлы ішкі сұрату, бір жолда бір бағанның мәнін қайтаратын .
ішкі сұрату келесі мәселерді шешуге мүмкіндік береді:
• INSERT операторының бір орындалуында кестеге қосылатын жолдар жиынын
көрсеиеді ;
• CREATE VIEW операторымен құрылатын ұсынымдарға қосылатын мәліметтерді
анықтайды;
• UPDATE операторымен модификацияланатын мәнді анықтау ;
• SELECT операторының WHERE және HAVING жазбаларында бір немесе
бірнеше мән көрсетеді;
• FROM жазбасында кестелерді ішкі сұрату орындалу нәтижесі ретінде
анықтайды;
• Корреляцияланған ішкі сұратуларды қолдану. Егер предикаттағы сұрату
аталған предикаттың салдарынан тексерілетін кесте мәніне сілтемеге ие
болса (берілген сұратуға сыртқы) ішкі сұрату корреляцияланған деп
аталады.
Кейбір ДҚБЖ (мысалы Oracle ДҚБЖ) ішкі сұрату негізінде CREATE TABLE
операторының көмегімен жаңа кестелер құруға мүмкіндік береді.
Ішкі сұратуы қолданудың қарапайым мысалы ретінде келесі операторды
қарастыруға болады:
SELECT * from tbl1
WHERE f2=(SELECT f2 FROM tbl2
WHERE f1=1);
Берілге операторда ішкі сұрату предикатта қайталанатын жалғаз мәнді қайтару
керек. Егер ішкі сұрату бір мәннен көп қайтарса, онда ДҚБЖ SQL-оператордың
қатесі туралы хабар шығарады.
Егер ішкі сұрату бірді бір жолды таңдамаса, онда предикат UNKNOWN тең
болады, ДҚБЖ көбінде FALSE деп көрсетіледі.
Стандарт предикаттың жазылуын ішкі сұрату операторының мәні түрінде
предикаттың жазылуын анықтайды.
Мысалы:
SELECT * from tbl1 WHERE
(SELECT f2 FROM tbl2 WHERE f1=1) = f2;
Көбінесе ішкі сұратулармен бірге агрегацияланатын функциялар қолданылады,
олар шартты топ бойынша ортадан жоғары типінде анықтауға мүмкіндік
береді.
Мысалы:
SELECT f1,f2,f3 FROM tbl1
WHERE f2 (SELECT AVG(f2) FROM tbl1);
Егер ішкі сұрату нәтижесі жолдар тобы (предикат тексеретін ішкі сұратудың
мәнін жалғыздығына шарт кепілдік бермеген жағдайда) болса, онда
көрсетілген жиындардан бір мәнді таңдауға мүмкіндік беретін IN операторын
қолданған дұрыс.
Мысалы:
SELECT * from tbl1 WHERE
f2 IN (SELECT f2 FROM tbl2 WHERE f1=1);
Бұл жағдайда предикат TRUE мәніне ие болады, егер ішкі сұрату қайтаратын
мәндердің біреуін қабылдайтын болса, онда шарт орындалады.
Бірақ IN операторының қолдануының кейбір мағыналық жетіспеушіліктері бар:
сұратуда нәтижесінде қанша жол болу керектігі нақты анықталмаған. Шынайы
мәліметтер моделін құру кезде бұл қандайда бір бірмәнсәздікке немесе
мәліметтердің өзіне тәуелділікке әкелуі мүмкін. Кері жағдайда егер
мәліметтер моделі сқраудысқраудың нәтижесі ретінде бір ғана жолды болжайтын
болса, сәйкесәнше слыстыру = операторы қолданылатын болса, сұрату нәтижесі
бірнеше жол болғанда мәліметтер құрылымы мәндерді енгізуге мүмкіндік берген
кезде, онда осындай SQL-операторын қолданған кезде қате көрсетуі мүмкін.
Егер сұратуда екі кестеден көп кезіксе, өрістердің аттары көрнектірек болу
үшін нүктеден кейін кестенің аты беріледі. Стандартта өріс атын кесте
атымен бекітуді қажет етпейді, егер бірмәнділік тумаса (өріс бірінші
ағымдағы сұратудың FROM жазбасы бар кестеден ізделеді де, кейін сыртқы
сұратудан ізделеді).
Көбінесе сұратуды пайдалану арқылы SELECT операторының жазбасының орнына
біріктіруді қолданады. Бірақ тәжірибеде ДҚБЖ көбі сұратуды тиімді
пайдаланады. Жылдам әрекет бойынша критикалық талаптары бар кешендік
программаларды жобалауда, өндіруші нақты бір ДҚБЖ үшін SQL-операторды
орындау жоспарын сұрыптау қажет.
Неғұрлым алдыңғы қатардағы ДҚБЖ Oracle сияқты, SQL тілінің нақты
операторларын орындалу өнімділігін бағалауға мүмкіндік беретін SQL-
операторлар қатарын ұсынады.
Ішкі сұрату WHERE жазбасымен анықталатын предикатта көрсетілгендей, HAVING
жазбасымен анықталатын топтар бойынша предикатта да көрсетіледі.
Мысалы:
SELECT avg_f1, COUNT (f2) from tbl1
GROUP BY avg_f1
HAVING avg_f1 (SELECT f1 FROM tbl1
WHERE f3='a1');

Корремирленген ішкі сұратулар

SELECT операторында ішкі сұратудан онда көрсетілген сыртқы бағандарға
сілтеме жасауға болады. Мұндай ішкі сұрату кестенің әр жолы үшін құрылатын
нәтижелік жиынға оның кіру шартын анықтай отырып орындалады.
Мысалы:
SELECT * from tbl1 t1
WHERE f2 IN (SELECT f2 FROM tbl2 t2
WHERE t1.f3=t2.f3);
Келтірілген жағдайда tbl1 кестесінің әр жолы үшін келесі шарт тексеріледі:
f2 өрісінің мәні tbl2 кестесінің жолының мәнімен сәйкес келуі керек,
мұндағы f3 өрісінің мәні (tbl1) сыртқы кестесінің f3 өрісінің мәніне тең
болу қажет. Бұл коррелирленген ішкіссұратудың қарапайым мысалы.
Көбінесе ішкі сұрату сыртқы кестенің деректерін қолдануы талап етіледі. Бұл
жаідайда алиастарды мүндетті түрде қолдану керек.
Мысалы:
SELECT * from tbl1 t_out
WHERE f2 (SELECT AVG(f2) FROM tbl1 t_in
WHERE t_out.f1= t_in.f1);
Коррелирленген ішкі сұрату жағдайында HAVING жазбасында тек қана
агрегацияланатын кестелерді ғана пайдалану қажет. Себебі әр ішкі сұратудың
огрындалу кезінде тексеруші жол санатында, оның мәндеріне ішкі сұрату
қолжетімге ие, негізгі сұратудың агрегацияланатын функциясы негізіндегі
жолдарды топтастыру нәтижесі алынады.
Мысалы:
SELECT f1, COUNT(*), SUM(f2) from tbl1 t1
GROUP BY f1
HAVING SUM(f2) (SELECT MIN(f2)*4
FROM tbl1 t1_in
WHERE t1.f1=t1_in.f1);

Бірнеше жол қайтаратын ішкі сұрату үшін предикатты құру.

Егер преликатта мәнді қандайда бір жиынмен салыстыру үшін жоғарыда
көрсетілгендей IN операторын қолдануға болады.
Ішкі сұратудың нақты бір шартын қанағаттандыратын жол барлығын тексеру
үшін, EXISTS операторы қолданылады.
Мысалы:
SELECT f1,f2,f3 from tbl1
WHERE EXISTS (SELECT * FROM tbl1
WHERE f4='10112003');
Бұл сұрату бос емес нәтижелік жиын тек қана кестенің f4 бағанының қандайда
бір мәніне мерзім енгізілген жағдайда ғана құрады, мысалы: '10112003'.

Ішкі сұрату нәтижелерімен EXISTS операторын қолданудың жетістіктері ішкі
сұрату жолдар жиыны сияқты, бағандар жиынында қайтара алады.
Коррелирленген ішкі сұратуда EXISTS операторы сыртқы сұратудың әр жолы үшін
әр кез есептеліп отырады.
SQL-92 стандартында EXISTS операторы қолданылатын ішкі сұратуларда
агрегациялық функцияларды қолдану қарастырылмаған. Бірақ кейбір ДҚБЖ ішкі
сұратулардың мынандай түрлері кездеседі.
Ішкі сұрату нәтижесін предикатт қолдану үшін сонымен қатар алдыңғы
дәрістерде тереңінек қарастырылған ANY және ALL операторлары қолданылады.

ANY операторын қолдану мысалын көрсетейік:
SELECT f1,f2,f3 from tbl1
WHERE f3 = ANY (SELECT f3 FROM tbl2);
Аталаған оператор нәтижелік жиынға f3 бағандарының мәндері tbl2
кестесінде кездесетін барлық жолдар қосылады.

Мәліметтерді өзгерту операторларында ішкі сұратуларды қолдану

DML тілінің операторларына, SELECT операторынан басқа, кестелерді
деректерді өзгертуге мүмкіндік беретін операторлар жатады. Бұл INSERT
операторы, кестеге бір немес бірнеше жол қосады, DELETE операторы,
кестеден бір немес бірнеше жолды алып тастайды, UPDATE операторы, кестенің
бағандарының мәндерін өзгертеді.

INSERT операторы

INSERT операторы SQL-92 стандартында келесі формальды жазбаға ие:
INSERT INTO table_name
[ (field .,:) ]
{ VALUES (value .,:) }
subquery
{DEFAULT VALUES};
INSERT операторы кестеге бір немесе бірнеше жол қоса алады. Өрістер тізімі
(field .,:) өрістер атауларын көрсетеді немесе VALUES жазбасымен
анықталатын мәндер тізімі арасынан оларға мән егізу реті, немесе ішкі
сұратудың орындалу нәтижесін дер көрсетеді.
VALUES жазбасымен анықталатын тізім кесте мәндерінің конструкторы деп
аталады, үтіри арқылы жақшаларға алынады.
Егер (field .,:) өрістер тізімі түсірілген болса, онда мәндерді енгізу реті
берілген кестені құру кезінде CREATE TABLE операторындат көрсетілген
бағандар ретіне сәйкес болады.
Егер NOT NULL шектелуі қойылған бағандар үшін қосылатын деректер
көрсетілмеген болса, онда ДҚБЖ SQL-операторының орындалуындағы қатені
көрсетеді.
Келесі INSERT операторы ішкі сұрату негізінде орындалатын tbl2 кестесінің
жолдарын көшірілуін көрсетеді
INSERT ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
SQL сұраныстар тілі. Мәліметтер қорын жобалау
Мәліметтер базасы объектілері. Мәліметтер базасының объектілері
Мәліметтер базасына арналған SQL сұраныстарын әзірлеу
Берілгендер қорындағы кестеледі біріктірудің теориялық негіздері
Деректер қорын жасау
ТІЛДЕР КУРСЫ АҚПАРАТТЫҚ ЖҮЙЕЛЕР ЖАСАУ
Ғылыми жаратылыстану бағытындағы сыныптарда delphi ортасындағы мәліметтер қоры туралы түсініктерді қалыптастыру
TSQL мәліметтерімен жұмыс істеу негіздері
Кадрлар бөлімінің функциялары
Қалыпқа келтіру. мәліметтерді сақтаудың теориялық негіздері
Пәндер