Робота з двома операторами select
В умові пошуку (після WHERE) можна використовувати інший SELECT оператор.
1) WHERE вираз [NOT] IN (SELECT що_відбирається FROM...)
IN-використовується для відбору в головному запиті тих рядків, які істять значення що=одному з отриманих у внутрішньому SELECTі.
Вираз=одному з отриманих значень
Приклад
Відібрати групи, в яких не було оцінок 2
SELECT shifr
FROM GRUPA
WHERE nom_gr NOT IN
(SELECT GRUPA nom_gr FROM OZENKA, STUDENT, GRUPA WHERE OZENKA. Oz=2 AND 2 ???? )
2) WHERE [NOT] EXISTS
(SELECT* FROM… )
EXISTS- використовується для відбору в головному запиті тих рядків, для яких внутрішній SELECT повертає хоча б одне значення.
NOT EXISTS-якщо внутрішний SELECT не повертає жодного значення.
Приклад:
Відібрати студентів, які хоча б 1 раз отримали „5”
SELECT fio FROM STUDENT
WHERE EXISTS
(SELECT* FROM OZENKA
WHERE OZENKA Oz=5 AND ??7);
Є ряд задач, які можна розв’язати тільки двома окремими операторами SELECT:
-Перший запит відбирає дані і заносить в якусь нову таблицю (Т1);
-Другий запит обробляє інформацію в створеній таблиці (Т1).
Приклад
Вибрати в нову таблицю дисципліни, по яким найбільша оцінка >35
1 запит: для кожної дисципліни знайти найбільшу оцінку
SELECT DISTINCTROW DIS. name, max (oz) As m_oz
INTO T1
FROM DIS, OZENKA
WHERE ???
GROUP BY name;
T1 | |
name |
M_oz |
математика |
28 |
фізика |
4 |
інформатика |
3 |
2 запит: відібрати з таблиці Т1 дисципліни
SELECT name
FROM Т1
WHERE M_oz>35;
В якій групі найбільше студентів
1 запит: к-ть студентів в кожній групі
SELECT DISTINCTROW GRUPA. shifr, count (*) AS[K]
INTO TABL
FROM GRU, STUDENT
WHERE ???
GROUP BY shifr;
TABL | |
shifr |
k |
2 запит: SELECT shifr FROM TABL
WHERE К=( SELECT max (к) FROM TABL);
Контрольна робота
1 Вибрати назви дисциплін з яких жоден студент не отримував жодної оцінки
2 Визначити в якій групі найбільша стипендія =40 гр.
3 Вилучити з таблиці студентів тих, хто навчається на 3 курсі.
1 Вибрати дисципліни по яким була отримана хоч одна оцінка 4 після 15.09.01
2 Отримати факультети, де к-ть 5 не менше 35
3 Зменшити стипендію в 1,5 рази для груп Е-10 і ЕК-11.
Оператори insert, delete, update
Оператор INSERT INTO
INSERT добавляє одну чи кілька рядків в існуючу таблицю. Можливі 2 варіанти запису оператора:
Запит на додання декількох записів:
INSERT INTO таблиця БД [(перелік полів таблиці)] SELECT [таблиця і поля, з якої відбираються дані].
В операторі SELECT потрібно вказати перелік полів, які будуть записано до таблиці.
Приклад
Додати для студента №8 оцінку 4 по дисципліні „Математика”
INSERT INTO OZENKA
SELECT 10 /12/99,nom_dis, 8,4 FROM DIS
WHERE name=”Математика”
Запит на додання одного запису:
INSERT INTO OZENKA таблиця БД [(перелік полів таблиці)]
VALUES (значення полів таблиці в відповідності з структурою таблиці)
Приклад
Додати нового студента в таблицю STUDENT:
INSERT INTO STUDENT
VALUES (0, „Іванов І.І.,””Ф-098787”,13,17)
Примітка: Номер строчки таблиці можна вказати самостійно, але так щоб він був унікальним, або як в даному випадку вказати 0, тоді автоматично буде встановлено черговий унікальний номер запису.
INSERT INTO
1 додає один рядок
INSERT INTO OZENKA (data, nom_st, nom_dis,oz)
Values (10-31-01,2,8,3);
2 додає декілька рядків
Для всіх студентів додати оцінку 5 по дисципліні №3
INSERT INTO OZENKA (nom_st, nom_dis,oz)
SELECT nom_st,3,5
FROM STUDENT;