Бақылау сұрақтары:
1) Бірнеше кестеден деректерді таңдау қалай жүргізіледі?
2) Байланыстың қандай түрлері бар?
3) SELECT инструкциясында қандай функция бір сұрау блогын көпрет
қолдануға мүмкіндік береді?
4) MERGE операторы е үшін қолданылады?
5) Көбейтуреген не үшін операциялар қолданылады?
40
5.2 Зертханалық жұмысты орындауға арналған әдістемелік
нұсқаулар
Жұмыстың орындалу реті.
1) Ішкі сұраулар.
a) орташа жалақы мөлшерінен аз жалақы алатын барлық
қызыметкерлер аты-жөнін енгізіңіз.
SELECT
last_name, job_id, salary
FROM
employees
WHERE
salary < (SELECT AVG(salary)
FROM employees)
b) 141 номерінде қызмет атқаратын қызметкерлерді еңгізіңіз және 143
номерінде қызмет атқаратындардан оклады көп қызметкерледі енгізіңіз.
Мысал сұраудың үш блогынан тұрады: бір сыртқы және екі ішкі. Алдымен
ішкі блоктарды орындап алған дұрыс. Олардың нәтижелері ST_CLERK және
2600. Содан соң сыртқа блоктарды орындау керек. екі ішкі блокта бір мәнге
ие болады ST_CLERK және 2600, сондықтанда ол команда біржолақты
подзапрос деп аталыд.
Ескерту: ішкі және сыртқы сұйық сұраулар деректерді әр түрлі
кестелерден таңдай алады.
SELECT last_name, job_id, salary
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141)
AND salary >
(SELECT salary
FROM employees
WHERE employee_id = 143)
c) hr.employees кестесінің ақпараттары негізінде қызметкерлердің
аттары мен тегін қайтаратын сұрау жызыңыз. Жазбалар тек менеджерлік
функция атқаратын қызметкерлер үшін ғана қайтуы керек (олардың
нөмірлері бір кестенің employee_id сол manager_id бағанында болатын). Осы
тапсырманы көпжолды ішкі сұрау арқылы шешіңіз.
SELECT first_name As "Имя", last_name As "Фамилия"
FROM hr.employees
WHERE employee_id = ANY (SELECT manager_id
FROM hr.employees)
d) Коррелирленген ішкі сұраулар. Жұмыс орындары минимум екі рет
ауыстырылған қызметкерлердің деректерін көрсетіңіз.
SELECT e.employee_id, last_name,e.job_id
FROM employees e
WHERE 2 <= (SELECT COUNT(*)
FROM job_history
WHERE employee_id = e.employee_id)
41
2) Байланыс.
Қызметкерлердің тізімі мен олар жұмыс істейтін бөлімнің атауларын
жазыңыз.
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id
FROM employees e JOIN departments d
ON e.department_id = d.department_id
WHERE last_name = 'Matos'
3) MERGE операторы арқылы сұрауларды орындау. Жолдардың
үйлесуін орындау - COPY_EMP кестесінде EMPLOYEE_ID сәйкес және
EMPLOYEES кестесінде EMPLOYEE_ID сәйкес жүред. Егер сәйкестік
табылса, COPY_EMP кестесінің жолы EMPLOYEES кестесінің жолына
сәйкес модификацияланады. Егер жол табылмаса, ол COPY_EMP кестесіне
қойылады.
MERGE INTO copy_emp AS c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name, c.last_name = e.last_name,
c.email = e.email, c.phone_number = e.phone_number,
c.hire_date = e.hire_date, c.job_id = e.job_id,
c.salary = e.salary, c.commission_pct = e.commission_pct,
c.manager_id = e.manager_id, c.department_id = e.department_id
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id, e.department_id)
Ішкі сұраулар.
Ішкі сұраулар – бұл басқа команданың SELECT сөйлемінде қосылған,
SELECT командасы. Ішкі сұраулардың көмегімен қарапайым командалардан
өте мыықты командалар жасауға болады. Олар, егер кестедегі жолдарды
таңдау кестенің өзіндегі деректерге тәуелді шарт бойынша жүргзілетін
жағдайларда өте пайдалы.
Ішкі сұрауды SQL тілінің WHERE, HAVING және FROM
сөйлемдерінде пайдалануға болады.
Синтаксис:
оperator
салыстыру операторы – мысалы, > , = немесе IN
Ішкі сұрауды көбіне SELECT ішкі командасына қосылған SELECT
командасының салындысы деп атайды. Әдетте ішкі сұрау бірінші болып
орындалады, және де оның нәтижесі басты немес ішкі сұрауды шартты
анықтау үшін пайдаланылады.
Ішкі сұрауларды пайдалануға қатысты көрсетілімдер:
1)
Ішкі сұраулар жақшаға алыну керек.
42
2)
Ішкі сұраулар теңестіру операторының оң жағында жатуы керек.
3)
Oracle8
i
релизіне дейін ішкі сұрауларда ORDER BY сөйлемі
болмаған. Егер ORDER BY сөйлемі пайдаланылған болса, онда ол SELECT
басты командасында соңғы болуы керек еді. Oracle8
i
релизінен бастап,
ORDER BY көрсеткіші ішкі сұрауларда
top-n
талдауды орындау үшін
қолданылуы мүмкін.
Достарыңызбен бөлісу: |