Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДКБЖ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
503.3 Кб
Скачать

Қосымша әдебиет:[9] с.1025-1040.

Бақылау сұрақтары:

1. Арнайы стандартты функцияларды (SQL-функцияларды) және олардың жұмысын айтыңыз.

2. Қалай SELECT командасын бірнеше кестеден деректерді алу үшін қолданады?

3. JOIN операторының қандай типтері бар?

9 дәріс

SQL бағыныңқы сұраныстары

SELECT командасында бағыныңқы сұраныстарды қолдану басқа әдіспен шешілмейтін, есептерді шешетін күрделі сұраныстарды құруға мүмкіндік береді.

Бағыныңқы сұраныс дөңгелек жақшаға алынады және қабаттасқан SELECT командасы ретінде белгіленеді, бағыныңқы сұраныстардың қабаттасуы шектелмеген. Негізгі сұраныс және онда қолданылатын бағыныңқы сұраныс бірдей немесе түрлі дерекқор кестелеріне қатынауы мүмкін. Бағыныңқы сұраныста SELECT командасының ORDER BY және INTO опцияларынан басқа барлық опцияларын қолдануға болады.

Бағыныңқы сұраныс WHERE шартының өрнегінде қолданылады. Бағыныңқы сұраныстар басқа кестедегі шарттарға қарап бір кестедегі деректерді алуға мүмкіндік береді. Олардың арқасында WHERE шартында SQL агрегатты функцияларын қолдануға болмайды, өйткені предикаттар бір жол терминінде бағаланады, ал агрегатты функциялар- жол топтарының терминінде. Бағыныңқы сұраныстар шартта кестенің бір өрісінің мәндерін бір бірімен салыстыруға мүмкіндік береді.

Бағыныңқы сұраныстарды қолданғанда бағыныңқы сұраныс нәтижесі қайтарылатын типті ойластыру қажет. SELECT операторы бір мәнді қайтаратыны белгілі болса, онда барлық салыстырылатын барлық арифметикалық операторларды қолдануға болады. (мысалы, теңдікке тексеру). SELECT операторы көптік мәндер қайтаратыны белгілі болса, онда қайтарылатын көптік мәндерге кірістікке (IN) тексеру және кірмейтінге (NOT IN) тексеру қолданылады.

Сұраныс бағыныңқы сұраныспен корреляцияланбаған және корреляцияланған болуы мүмкін. Корреляцияланбаған бағыныңқы сұраныс бірінші кезекте орындалады, содан соң алынған нәтиже шартқа қойыладыжәне сыртқы сұраныс орындалады.

Мысалы, KADR кестесінен жалақысы (ZARP өрісі) орташадан жоғары қызметкерлар тегін (FAM өрісі) таңдау үшін бағыныңқы сұранысымен сұраныс қолдануға болады (KADR кестесі үшін S1 локалды псевдоним қолданылады):

SELECT S1.FAM FROM KADR S1 WHERE ZARP >

(SELECT AVG(ZARP) FROM KADR)

Корреляцияланған бағыныңқы сұраныста ішкі сұраныс сыртқы сұранысқа сілтеледі және сыртқы сұраныстың әр жолына кезек ретімен орындалады (көп рет). Сыртқы сұраныста бірінші жол таңдалады, ол үшін ішкі сұраныс орындалады, содан соң екінші жол және әрі қарай. Бұл конструкция корреляцияланбаған бағыныңқы сұраныстың сұранысына қарағанда ұзақ орындалады.

Мысалы, KADR кестесінен жалақысы орташадан жоғары әр зертхана үшін қызметкерлердің тегін (FAM өрісі) және жалақысын (ZARP өрісі) таңдау үшін бағыныңқы сұранысымен сұраныс қолдануға болады (KADR кестесі үшін локалды псевдонимдер қолданылады, S1 сыртқы сұраныста және S2 бағыныңқы сұраныста салыстырымды қамтамасыз ету үшін):

SELECT FAM, ZARP FROM KADR S1 WHERE ZARP >=

(SELECT AVG(ZARP) FROM KADR S2 WHERE S2.LAB=S1.LAB)

Көп ДҚБЖ бағыныңқы сұраныстармен сұраныстарда EXISTS логикалық операцияны қолдануға болады, ол «бар» математикалық кванторға сәйкес. EXISTS логикалық операциясы арқылы SELECT операторы (бағыныңқы сұраныс) мәндері қайтаратынын тексеруге болады. Сонымен қатар, шартта ақпарат бар (немесе жоқ -NO EXISTS) жазбаларды анықтауға болады.

SELECT операторы EXISTS логикалық операция ішінде қандай өрістер қайтаратыны қажет емес. Табылған мәндер саныда қажет емес. Тек қана бір мәлімет қажет, ол бағыныңқысұраныста SELECT операторына қанағаттандырылатын бір мән табылса.

EXISTS логикалық операциясының пішімі: EXISTS (SELECT бағыныңқы сұраныс). EXISTS операциясын IN операциясымен салыстырғанда, бірдей сұраныстарды түрлі құралдар арқылы көрсетуге болатыны анық (EXISTS немесе IN). Соңғысы өзімен қатар, жүзеге асыруына байланысты және түрлі фирмалардың SQL – серверлері үшін принципиалды түрде айырмашылығы болуы мүмкін.

Бағыныңқы сұранысымен сұраныста «барлық үшін» математикалық кванторға сәйкес ALL логикалық операциясын қолдануға болады. ALL операциясы «ақиқат» мәнін қайтарады, егер ALL операциясы алдында белгіленген салыстырмалы операциясы бағыныңқы сұраныста SELECT операторымен қайтарылатын әр мәнге ақиқат болса. ANY кілтті сөз орнына SOME сөзін қолдануға болады.

Көп ДҚБЖ (барлығы емес) INSERT SQL командасын бағыныңқы сұраныспен SELECT қабаттасқан командасын қолдануға болады, егер көп қосымша деректер сұраныс нәтижесі болып табылса:

INSERT INTO <кесте_аты> [(<өріс1_аты> [, <өріс2_аты> …])] <бағыныңқы сұраныс>

Мысалы, STUD1 кестесіне студенттер тегін (FAM өрісі) қосымша STUD2 кестесінен қосу келесі команда арқылы орындалады:

INSERT INTO STUD1 (FAM) VALUES SELECT DISTINCT FAM FROM STUD2

Деректерді модификациялау кезінде операнд шартын қалыптастыратын – бағыныңқы сұраныс қабаттасқан SELECT командасын қолдануға болады:

UPDATE <кесте_аты> SET <өріс аты>=<өрнек>

[WHERE <операнд_шарты> <оператор_шарты> (<бағыныңқы сұраныс>)]

SQL жазбаларды жою үшін операнд шартын қалыптастыратын бағыныңқы сұраныс – қабаттасқан SELECT командасын қолдануға болады:

DELETE FROM <кесте_аты>

[WHERE <операнд_шарты> <оператор_шарты> (<бағыныңқы сұраныс>)]

WHERE операциясынан кейін белгіленген шартқа сәйкес жазбалар жойылады.

Негізгі әдебиет: [1]с.122-128, [2] с.16-26, [5] с.12-19.