Модул 6. Бази данни
Съдържание
1. Въведение в базите данни
Базата данни е организирана колекция от информация, като налага правила на съдържащите се данни. Системата за Управление на Релационна База от Данни (СУРДБ) предоставя инструменти за управление на база данни. Релационно съхранение, първо предложено от Едгар Код през 1970 г.
Инсталация
http://dev.mysql.com/downloads/windows/installer/
MySQL Community Server
MySQL Workbench
Типове данни
https://dev.mysql.com/doc/refman/5.5/en/storage-requirements.html
Numeric
TINYINT
1 byte
SMALLINT
2 bytes
MEDIUMINT
3 bytes
INT, INTEGER
4 bytes
BIGINT
8 bytes
FLOAT(p)
4 bytes if 0 <= p <= 24, 8 bytes if 25 <= p <= 53
FLOAT
4 bytes
DOUBLE [PRECISION], REAL
8 bytes
DECIMAL(M,D), NUMERIC(M,D)
Varies; see following discussion
BIT(M)
approximately (M+7)/8 bytes
Date and Time
DATE
3 bytes
TIME
3 bytes
DATETIME
8 bytes
TIMESTAMP
4 bytes
YEAR
1 byte
String
CHAR(M)
The compact family of InnoDB row formats optimize storage for variable-length character sets. See COMPACT Row Format Storage Characteristics. Otherwise, M × w bytes, <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set.
BINARY(M) M bytes
0 <= M <= 255
VARCHAR(M), VARBINARY(M)
L + 1 bytes if column values require 0 − 255 bytes
TINYBLOB, TINYTEXT
L + 1 bytes, where L < 2^8
BLOB, TEXT
L + 2 bytes, where L < 2^16
MEDIUMBLOB, MEDIUMTEXT
L + 3 bytes, where L < 2^24
LONGBLOB, LONGTEXT
L + 4 bytes, where L < 2^32
ENUM('value1','value2'...)
1 or 2 bytes depending on the number of enumeration values (65,535 values maximum)
SET('value1','value2'...)
1,2,3,4 or 8 bytes depending on the number of set members (64 members maximum)
Упражнение
2. Моделиране на релационни бази от данни
Връзка: едно към едно [1..1]
Едно към много [1..N]
Много към много [N..M]
Релационна схема (Entity/Relationship)
softuni

geography

diablo

Каскадни операции
3. Заявки за извличане и промяна на данни
Примери
Псевдоними
Kонкатенация
Филтриране на колони
Сравняване
NULL
Вмъкване на данни
Създаване на таблици
Изтриване на данни
Актуализиране на данни
4. Сложни заявки за извличане на данни
Форматиране
Псевдонимите служат за именуване на колони и таблици
Клаузата ORDER BY се ползва за сортиране на редовете, във възходящ ASC (по подразбиране) или в низходящ DESC ред.
Клаузата LIMIT ни помага да ограничим броя на извежданите записи.
Подзаявки
Заявките могат да бъдат вложени една в друга
SELECT изразите може да бъдат влагани в WHERE клаузата
Всички върхове в България
Покажете списък с имената на всички върхове в България
Намерете планините в България
После покажете върховете от тези планини
Сортирайте резултата по височина, в намаляващ ред
Оператори ALL, ANY и SOME
ALL = дали условието е в сила за всички стойности
ANY = дали условието е в сила за поне една от стойностите
SOME = синоним на ANY
Таблична подзаявка
Взаимосвързани заявки
Таблиците от външния SELECT може да бъдат споменати във вътрешния SELECT чрез псевдоними и използвани в неговите условия. Такива заявки наричаме взаимосвързани.
При други подзаявки вътрешния SELECT не ползва външния и може да бъде ползван самостоятелно. Такива заявки наричаме необвързани.
EXISTS
При EXISTS условието е вярно, ако подзаявката връща записи
NOT EXISTS
Намерете най-високата заплата на служител извън отдел Финанси и работника, който я получава
Обединяване на заявки
Да се изведе списък с имената на всички планини и реки
Броят на колоните в двете заявки трябва да е един и същ
За имена на колони в резултата се взимат имената на колоните от първата заявка
Типът на колони от двете таблици не е нужно да е един и същ
Може да дадете друго име на колоните чрез псевдоними
В резултата няма да присъстват повтарящи се редове
5. Съединения на таблици
JOIN
INNER JOIN
OUTER JOIN (LEFT and RIGHT)
FULL JOIN (LEFT JOIN UNION RIGHT JOIN) and CROSS JOIN
JOIN
Декартово произведение
Декартово произведение получаваме, когато JOIN условието липсва или е невалидно.
293 employee x 16 departmens = 4688
Връзки между таблици
Релациите между таблици са полезни, когато са съчетани с връзки JOIN. Така можем да извлечем данни едновременно от две таблици.
Бележка: връзките с JOIN са по-производителни от вложените SELECT
Задача: Върхове в Рила
Използвайте базата данни Geography. Изведете справка за всички върхове в планината Rila. Справката да включва имената на планината, на върха и височината на върха. Върховете да са сортирани по височина, в намаляващ ред.
INNER JOIN
Ако се използва само JOIN, се подразбира INNER JOIN.
Задача: Адреси с градове
Покажете информация за адреса на всички служители в базата данни SoftUni. Изберете първите 5 служителя. Подредете ги по first_name, после по last_name (възходящо). Съвет: Използвайте връзка (JOIN) между три таблици.
Задача: Служители по продажбите
Намерете всички служители, които са в отдел Sales. Използвайте базата данни SoftUni. Следвайте специфичния формат. Подредете ги по employee_id низходящо.
Задача: Служители наети след дата
Покажете всички служители, които:
Са наети след 1/1/1999.
Са в някой от отделите Sales или Finance.
Сортирайте по hire_date (възходящо).
5.3. OUTER JOIN
LEFT OUTER JOIN
Тази връзка връща записите, отговарящи на свързващото условие и също така несъвпадащите записи от лявата таблица.
RIGHT OUTER JOIN
Тази връзка връща записите, отговарящи на свързващото условие и също така несъвпадащите записи от дясната таблица.
Задача: Страни, в които няма планини
Изведете броя на страните, в които няма планини. Използвайте базата данни Geography.
5.4. FULL JOIN AND CROSS JOIN
FULL JOIN обединява LEFT JOIN и RIGHT JOIN.
CROSS JOIN комбинира всеки ред от първата таблица с всеки ред от втората.
FULL JOIN
Тази връзка връща записите, отговарящи на свързващото условие и също така несъвпадащите записи от лявата и от дясната таблица.
CROSS JOIN
При тази връзка всеки ред от първата таблица е комбиниран с всеки ред от втората.
6. Агрегация и групиране на данни
GROUP BY
COUNT, SUM, MAX, MIN, AVG
HAVING
Групиране
С GROUP BY можете да извлечете всяка отделна група и да използвате "агрегираща" функция върху нея (AVG, MIN, MAX):
С DISTINCT ще получите всички уникални стойности:
Агрегации
Агрегиращите функции се използват, за да се извършват операции върху една или повече групи елементи, извършвайки анализ върху тях.
COUNT брои всички стойности (които не са NULL) в една или повече колони, според даден критерий.
SUM сумира всички стойности в колоната
MAX дава максималната стойност в колоната.
MIN връща минималната стойност в колоната.
AVG изчислява средната стойност в колона.
Филтриране
Клаузата HAVING се използва, за да се филтрира информация според стойностите от агрегирането. Това значи, че не можем да използваме HAVING без да сме извършили групиране преди това. За разлика от HAVING, WHERE извършва филтриране преди да се случи агрегирането.
7. Скаларни функции, работа с дати, транзакции
CREATE PROCEDURE
CREATE FUNCTION
START TRANSACTION + ROLLBACK + COMMIT
CREATE TRIGGER (BEFORE|AFTER + INSERT|UPDATE|DELETE)
Функции
Винаги връщат стойност
Могат да приемат параметри
Могат да са вложени
**Деклариране на функция
Изпълнение на функция
Транзакции
Транзакцията е поредица от действия (операции в базата данни) изпълнявани като цялост или всички се изпълняват заедно успешно или нито едно от тях не се изпълнява.
Транзакциите гарантират пълнотата и цялостността на базата данни.
Всички промени в транзакцията са временни.
Промените се съхраняват едва след изпълнението на COMMIT.
По всяко време всички промени могат да се отменят чрез ROLLBACK.
Всички операции се изпълняват като едно цяло.
Съхранени процедури
Съхранените процедури:
Капсулират повтаряща се програмна логика.
Могат да приемат входни параметри.
Могат да връщат изходни резултати.
Създаване на съхранена процедура
Изпълняване на съхранени процедури
Изтриване на съхранени процедури
Дефиниране на параметризирани процедури
Връщане на стойности
Тригери
Тригерите много приличат на съхранените процедури. Извикват се в случай на дадено събитие. Не извикваме тригерите изрично.
Тригерите се прикрепят към таблицата.
Тригерите се изпълняват, когато определена SQL заявка се изпълнява върху съдържанието на таблицата.
Например при добавяне на нов ред в таблицата.
8. Подготовка за изпит
[Buhtig Source Control]((08.%20Exam%20Preparation/Buhtig%20Source%20Control)
[Colonial Journey Management System]((08.%20Exam%20Preparation/Colonial%20Journey%20Management%20System)
[Plant Service]((08.%20Exam%20Preparation/Plan%20Service)
Last updated