1. Бази от данни
Урок 4: Работа с обекта
„заявка“- част 2
Юлиана Пенева
Департамент “Информатика”,НБУ
july_peneva@abv.bg
2. Съдържание
1. Видове съединение.
2. Агрегатни функции.
3. Групиране на данните.
4. Общ вид на SQL заявка.
5. Обновяване на данните.
Юлиана Пенева Бази от данни - урок 4 2
3. Видове съединение
Преговор
1. Операцията „съединение“ комбинира свързани помежду
си редове от две таблици в един ред
2. Особености на съединението:
за да се извличат данни от няколко таблици се изисква
таблиците да са свързани;
таблиците се свързват по ключови полета, имащи общи
значения (външен ключ-главен ключ).
3. Видове съединение в Access:
вътрешно (inner join);
външно (outer join);
рекурсивно (self join) – няма да го разглеждаме.
Юлиана Пенева Бази от данни - урок 4 3
4. Видове съединение
Вътрешно съединение
1. При вътрешното съединението условието се дефинира по следния
начин:
<име на колона от Таблица1> = <име на колона от Таблица2>
2. Резултатът съдържа записите от Таблица2, чиито стойности
съвпадат със свързаните им полета в Таблица1 (съдържа външен
ключ).
3. При вътрешното съединение в резултата участват само онези
данни от Таблица 1, за които има съответни данни в Таблица 2.
4. По премълчаване когато се създава съединение Access приема, че
то е вътрешно съединение.
5. Вътрешното съединение позволява комбинирането на данни от две
и повече таблици.
6. Вътрешните съединения се задават в SQL след ключовата дума
FROM по следния начин:
FROM Таблица1 INNER JOIN Таблица2 ON Таблица1.Поле1 =
Таблица2.Поле2
Илюстрация с Access
Юлиана Пенева Бази от данни - урок 4
4
5. Видове съединение
Външно съединение
1. При външното съединение резултатът съдържа:
• записите от Таблица2, чиито стойности съвпадат със
свързаните им полета в Таблица1 (съдържа външен
ключ);
• записите от Таблица 1, за които няма съответен запис в
Таблица 2 (или обратно).
2. Външното съединение бива ляво и дясно.
3. Външните съединения се задават в SQL след ключовата
дума FROM по следния начин:
FROM Таблица1 [Left|Right] JOIN Таблица2 On Таблица1.Поле1 =
Таблица2.Поле2
Юлиана Пенева Бази от данни - урок 4 5
6. Видове съединение
Ляво външно съединение
Участват всички записи от Таблица1 (таблицата вляво),
независимо дали имат съответен запис в Таблица2 и
записите от Таблица2, в които свързващото поле
съдържа стойности, които са общи за двете таблици.
Юлиана Пенева Бази от данни - урок 4 6
7. Видове съединение
Дясно външно съединение
Участват всички записи от Таблица2 (таблицата вдясно),
независимо дали имат съответен запис в Таблица1 и
записите от Таблица2, в които свързващото поле
съдържа стойности, които са общи за двете таблици.
Илюстрация с Access.
Юлиана Пенева Бази от данни - урок 4 7
8. Агрегатни функции
Юлиана Пенева Бази от данни - урок 4 8
1. В SQL са предвидени основните агрегатни функции:
• COUNT – връща броя на стойностите в дадена колона
или броя на редовете в таблицата;
• SUM – връща сумата от стойностите на посочената
колона;
• MIN – връща най-малката стойност в посочената
колона;
• MAX – връща най-голямата стойност в посочената
колона;
• AVG – изчислява средна стойност в посочената
колона.
2. Агрегатните функции се прилагат само върху
единствена колона.
9. Агрегатни функции
Юлиана Пенева Бази от данни - урок 4 9
3. COUNT, MIN и MAX могат да се прилагат върху
числови или нечислови полета.
4. SUM и AVG се прилагат само върху числови полета.
5. Всички функции първо изключват стойностите Null и
работят върху останалите стойности.
6. COUNT(*) представлява специален начин на
използване на COUNT и връща броя на редовете в
указана таблица, независимо от наличните стойности
Null.
10. Агрегатни функции
Заявка 1: Да се изчислят сумата от заплатите на всички
служители, максималната и минималната заплати в
предприятието.
SELECT SUM(Salary), MAX(Salary), MIN(Salary)
FROM EMPLOYEE
Заявка 2: Да се изчислят средната, максималната и
минималната заплати на служителите от отдел 'Маркетинг'.
SELECT MAX (Salary), MIN (Salary), AVG(Salary)
FROM EMPLOYEE, DEPARTMENT
WHERE Dno=Dnumber AND Dname='Маркетинг'
Юлиана Пенева Бази от данни - урок 4 10
EMPLOYEE (Fname, Lname, Ssn, Bdate, Address, Sex, Salary, Superssn, Dno)
DEPARTMENT (Dname, Dnumber, Mgrssn, Mgrstartdate)
PROJECT (Pname, Pnumber, Plocation, Dnum)
WORKS_ON (Essn, Pno, Hours)
11. Агрегатни функции
Заявка 3 : Да се намери общия брой на служителите в
предприятието.
SELECT COUNT(*)
FROM EMPLOYEE
Заявка 4 : да се намери общия брой на служителите,
работещи в отдел 'Изследователски'.
SELECT COUNT(*)
FROM EMPLOYEE, DEPARTMENT
WHERE Dno=Dnumber AND Dname =
'Изследователски’
Илюстрация с Access.
Юлиана Пенева Бази от данни - урок 4 11
12. Агрегатни функции
Заявка 5: да се преброят различните стойности на
колоната SALARY в базата (колко различни заплати има
в предприятието).
SELECT COUNT(DISTINCT Salary)
FROM EMPLOYEE.
Юлиана Пенева Бази от данни - урок 4 12
13. Групиране на данните
1. Групиране = разделяне на редовете в дадена таблица по
стойностите на някоя от колоните и прилагането на агрегатна
функция в рамките на всяка група
2. Групирането е възможно чрез използуването оператора
GROUP BY.
3. След него се изброяват колоните, по чиито стойности
таблицата ще се дели на групи. Тези колони се изброяват
задължително и след SELECT.
SELECT <списък от колони>
FROM <списък от таблици>
[WHERE <условие>]
[GROUP BY <колони на групиране>]
Юлиана Пенева Бази от данни - урок 4 13
14. Групиране на данните
Заявка 6: за всеки отдел да се изведат номерът му, броят на
служителите и средната им заплата.
SELECT DNO, COUNT(*), AVG(Salary)
FROM EMPLOYEE
GROUP BY Dno
Юлиана Пенева Бази от данни - урок 4 14
15. Групиране на данните
Заявка 7: за всеки проект да се изведат номер, име и
брой на служителите, които работят по него.
SELECT Pnumber,Pname,COUNT(*)
FROM PROJECT, WORKS_ON
WHERE Pnumber=Pno
GROUP BY Pnumber, Pname
При съвместната употреба на операцията
съединение с GROUP BY групиращата функция се
прилага след като се изпълни съединението!
Юлиана Пенева Бази от данни - урок 4 15
16. Групиране на данните
Задаване на условие върху групите
1. Използува се оператора HAVING, след който
се формулира необходимото условие
2. Агрегатните функции се изчислят само
групите, които отговарят на указаното условие.
Юлиана Пенева Бази от данни - урок 4 16
17. Групиране на данните
Заявка 8: за всеки проект, в който са ангажирани повече
от двама души, да се изведат номер, име и брой
на служителите, които работят по него.
SELECT Pnumber, Pname, COUNT (*)
FROM PROJECT, WORKS_ON
WHERE Pnumber=Pno
GROUP BY Pnumber, Pname
HAVING COUNT (*) > 2
Юлиана Пенева Бази от данни - урок 4 17
18. Групиране и сортиране
1. Сортирането на резултатната таблица по
стойностите на една или няколко колони,
възходящо или низходящо е възможно чрез
оператора ORDER BY.
2. След него се изброяват колоните, по чиито
стойности таблицата ще се сортира.
3. По подразбиране сортирането се извършва
възходящо. Ключовата дума DESC позволява
низходяща подредба.
Илюстрация с Access
Юлиана Пенева Бази от данни - урок 4 18
19. Общ вид на SQL заявка
SELECT <списък от колони>
FROM <списък от таблици>
[WHERE <условие>]
[GROUP BY <колони на групиране>]
[HAVING <условие за групиране>]
[ORDER BY <списък от колонии>]
Юлиана Пенева Бази от данни - урок 4 19
20. Обновяване на базата
В SQL има три операции за обновяване на базата:
1. INSERT – въвежда редове в указаната таблица.
2. DELETE – премахва редове от указаната таблица.
3. UPDATE – модифицира данни в указаната
таблица.
Всяка команда за обновяване важи само за
единствена таблица.
Юлиана Пенева Бази от данни - урок 4 20
21. Обновяване на базата
INSERT
1. Позволява добавянето на един или няколко реда в
указаната таблица. Има няколко варианта.
2. Задават се стойностите на всяка колона, като се спазва
редът, наложен при дефинирането на таблицата.
3. Общ вид на командата:
INSERT INTO име на таблица [(списък с имена на колони)] VALUES
(стойности);
Пример 1: да се добавят данни за новоназначен служител.
INSERT INTO EMPLOYEE
VALUES('Стоян','Маринов','653298653','30-DEC-92',
'Люлин,бл.744,Вх.А,София','M',3700,'987654321',4)
Юлиана Пенева Бази от данни - урок 4 21
22. Обновяване на базата
Пример 2: да се въведат имената и номера на новоназначен
служител.
INSERT INTO EMPLOYEE (Fname,Lname,Ssn)
VALUES ('Стоян','Маринов',653298653).
Юлиана Пенева Бази от данни - урок 4 22
23. Обновяване на базата
DELETE
1. Позволява премахването на онези редове от указаната
таблица, които удовлетворяват зададеното условие.
2. Ако не е зададено явно условие всички редове се
изтриват и таблицата остава празна.
3. Окончателното премахване на таблица от базата става с
командата DROP.
4. Общ вид на командата:
DELETE FROM име на таблица WHERE условие за избор;
Юлиана Пенева Бази от данни - урок 4 23
24. Обновяване на базата
Пример 3: Да се изтрият данните за служителя с указаното име.
DELETE FROM EMPLOYEE
WHERE LNAME = 'Петров'
Пример 4: Да се изтрият данните за служителя с указания номер.
DELETE FROM EMPLOYEE
WHERE SSN = '123456789'
Пример 5: Да се изтрият данните за всички служители.
DELETE FROM EMPLOYEE
Юлиана Пенева Бази от данни - урок 4 24
25. Обновяване на базата
UPDATE
1. Променя стойностите на указаните колони,
удовлетворяващи зададеното условие.
2. Имената на колоните, подлежащи на
актуализация се указват след ключовата дума
SET.
3. Общ вид на командата:
UPDATE име на таблица SET име на колона=стойност1, …
WHERE условие за избор;
Юлиана Пенева Бази от данни - урок 4 25
26. Обновяване на базата
Пример 6: Да се промени местоположението и номера на
указания отдел (с номер 10).
UPDATE PROJECT
SET Plocation = 'Варна', Dnum = 5 WHERE Pnum = 10
Пример 7: Да се повишат с 10% заплатите на служителите от
указания отдел.
UPDATE EMPLOYEE
SET Salary = Salary*1.1
WHERE Dno = 5
Илюстрация с Access
Юлиана Пенева Бази от данни - урок 4 26