- •Мова sql
- •Компоненти sql
- •Insert Використовується для пакетного завантаження в базу
- •Пропозиції sql
- •Операції sql
- •Приклади запитів
- •Пропозиція order by (сортування результатів)
- •Застосування агрегатних функцій в інструкції select
- •15. Знайти максимальну і мінімальну кількість проданих товарів за одну покупку.
- •Пропозиція group by
- •Пропозиція having
- •18. Вибрати тих клієнтів загальна кількість покупок яких більше 20.
- •Пропозиція parameters (використання параметрів в запитах)
- •Вибірка даних з декількох таблиць
- •Пропозиція inner join (внутрішнє з'єднання)
- •Підпорядковані запити
- •Інструкція insert into
- •Інструкція select...Into
- •Інструкція update
- •Інструкція delete
- •Інструкція alter table
- •Інструкція create index
- •Інструкція drop
Пропозиція inner join (внутрішнє з'єднання)
Є альтернативним варіантом пропозицій FROM і WHERE для з'єднання таблиць по рівності:
SELECT Список полів
FROM Таблица1INNER JOIN Таблиця2
ON Умова з'єднання;
У результуючу таблицю потраплять тільки ті записи, які мають однакові значення в зв'язаних полях.
Для вибірки з 3-х таблиць використовується вкладений INNER JOIN:
SELECT Список полів
FROM Таблиця1 INNER JOIN (Таблиця2 INNER JOIN Таблиця3
ON Умова з'єднання Таблиці2 і таблиці3)
ON Умова з'єднання Таблиці1 і таблиці3;
Пропозиція LEFT JOIN (ліве з'єднання)
SELECT Список полів
FROM Таблиця1 LEFT JOIN Таблиця2
ON Умова з'єднання;
У результуючу таблицю входять всі рядки з таблиці1, а частини результуючих кортежів, для яких немає відповідних значень в таблиці2, доповнюються значеннями NULL(невизначено).
Пропозиція RIGHT JOIN (праве з'єднання)
SELECT Список полів
FROM Таблиця1 RIGHT JOIN Таблиця2
ON Умова з'єднання;
У результуючу таблицю входять всі рядки з таблиці2, а частини результуючих кортежів, для яких немає відповідних значень в таблиці1, доповнюються значеннями NULL(невизначено).
Пропозиції LEFT JOIN і RIGHT JOIN можуть бути вкладені в INNER JOIN, але не навпаки.
24. Видати прізвища клієнтів, найменування товару і суму заплачених грошей за ці товари.
SELECT прізвище, найменування, sum(продано*ціна) AS[Cумма]
FROM товари INNER JOIN (клієнти INNER JOIN продажі ON клієнти.код_клієнта = продажи.код_клієнта) ON товари.код_товара = продажи.код_товара
GROUP BY прізвище, найменування;
25. Вибрати список всіх товарів з вказівкою суми, на яку продані ці товари
SELECT найменування, sum(продано*ціна) AS [Сума]
FROM товари LEFT JOIN продажу ON товари.код_товара = продажи.код_товара
GROUP BY найменування;
У останніх двох запитах в пропозиції SELECT створені обчислювані поля. SQL дозволяє створювати такі поля в тексті запиту. У виразах застосовуються арифметичні і математичні операції.
Підпорядковані запити
Це SELECT - запити упроваджені в тіло іншого SELECT - запиту. Зовнішній оператор SELECT використовує результат виконання внутрішнього оператора для визначення змісту остаточного результату всієї операції. Внутрішні запити можуть бути поміщені в пропозиції WHERE і HAVING зовнішнього оператора SELECT - в цьому випадку вони одержують назву підзапитів або вкладених запитів. Крім того, внутрішні оператори SELECT можуть використовуватися в операторах INSERT, UPDATE, DELETE. Існує три типу підзапитів:
- скалярний підзапит; повертає єдине значення.
- строковий підзапит; повертає значення декількох стовпців таблиці, але у вигляді єдиного рядка.
- табличний підзапит; повертає значення одного або більше стовпців таблиці, розміщені в більш ніж одному рядку. Табличний підзапит може використовуватися скрізь, де допускається указувати таблицю - наприклад, як операнд предиката IN.
Правила запису:
1. Текст підзапиту записується в круглих дужках.
2. У підзапитах не можна використовувати пропозицію ORDER BY.
3. У основному запиті не можна використовувати BETWEEN.
4. Підзапити, що повертають більше одного запису, можуть використовуватися тільки з багатозначними функціями.
5. Якщо підзапит є одним з двох операндів, що беруть участь в операції порівняння, то запит указується в правій частині порівняння.
Приклади. Розглянемо відношення Співробітники (таб_номер, ФІО, оклад, номер_отдела)
1. Скласти список всіх співробітників, що мають оклад вище за середнє по підприємству.
SELECT ФІО
FROM Співробітники
WHERE Оклад>(SELECT AVG(оклад)
FROM співробітники);
2. Одержати список співробітників, одержуючих зарплату вище за хоч би одного співробітника відділу №1.
SELECT ФІО
FROM Співробітники
WHERE Оклад>ANY (SELECT оклад
FROM співробітники
WHERE номер_отдела=1);
3. Скласти список всіх співробітників, чия зарплата більше зарплати будь-якого співробітника отдела №2.
SELECT ФІО
FROM Співробітники
WHERE Оклад>ALL (SELECT оклад
FROM співробітники
WHERE номер_отдела=2);
З табличними підзапитами використовуються ключові слова EXISTS і NOT EXISTS. Результат їх обробки є логічним значенням TRUE або FALSE. Для ключового слова EXISTS результат рівний TRUE тільки в тому випадку, якщо в повертаному підзапитом результуючій таблиці присутній хоч би 1 рядок. Інакше - буде значення FALSE. Для NOT EXISTS - навпаки. Тобто за ключовими словами EXISTS і NOT EXISTS перевіряється наявність рядків в таблиці підзапиту( ця таблиця може містити довільне число стовпців).
