Модул 6. Бази данни

Материалиarrow-up-right | Задачиarrow-up-right | Решенияarrow-up-right

Съдържание

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

Data Type
Storage Required

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

Data Type
Storage Required

DATE

3 bytes

TIME

3 bytes

DATETIME

8 bytes

TIMESTAMP

4 bytes

YEAR

1 byte

String

Data Type
Storage

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

softuni.png

geography

geography.png

diablo

diablo.png

Каскадни операции

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