- •Лекция №1 Введение. Основные понятия.
- •Субд ms Access
- •Лекция 2. Системы управления бд
- •1. Файловые системы.
- •2. История развития.
- •3. Функции субд
- •4. Типовая организация современной субд
- •5. Архитектура многопользовательских субд.
- •Лекция №3 Процесс разработки бд.
- •Логическая структура бд преобразуется в физическую с учетом аспектов производительности. Элементы модели "сущность-связь"
- •Основные понятия er-диаграмм
- •Пример разработки простой er-модели
- •Концептуальные и физические er-модели
- •Лекция №4 Реляционная модель данных
- •Аномалии отношений
- •Лекция №5 Нормализация отношений
- •4Нф (Четвертая Нормальная Форма)
- •Лекция №6 Реляционная алгебра.
- •Типы данных.
- •Создание таблиц.
- •Команды модификации.
- •Встроенные функции
- •Группировка и агрегаты.
- •Связи между таблицами.
- •Операторы работы с множествами
- •Подзапросы.
- •Условная логика
- •Представления и хранимые процедуры и триггеры.
- •Конструкция while
- •Транзакции и типы хранилищ бд.
- •Тестирование производительность InnoDb и MyIasm
- •Применение
- •Индексы.
- •1. Чтение данных с диска
- •2. Поиск данных в MySql
- •3. Сортировка данных
- •4. Выбор индексов в MySql
- •Уникальные индексы
- •5. Составные индексы
- •Устройство составного индекса
- •Поиск по диапазону
- •Сортировка
- •6. Использование explain для анализа индексов
- •Когда создавать индексы?
- •Администрирование сервера.
- •Разделение прав пользователей;
Операторы работы с множествами
Язык SQL включает три оператора работы с множествами, позволяющие осуществлять всевозможные операции над множествами. Кроме того, у каждого из этих операторов есть две разновидности: первая включает дублирующие данные, а вторая удаляет их (но необязательно все).
Оператор union
Операторы union (объединить) и union all (объединить все) позволяют комбинировать несколько таблиц. Разница в том, что если требуется объединить две таблицы, включая в окончательный результат все их строки, даже дублирующие значения, нужно использовать оператор union all. Благодаря оператору union all в конечной таблице всегда будет столько строк, сколько во всех исходных таблицах в сумме. Эта операция – самая простая из всех операций работы с множествами (с точки зрения сервера), поскольку серверу не приходится проверять перекрывающиеся данные. Следующий пример демонстрирует применение оператора:
Добавим к нашей базе Lessons таблицу Студенты:
CREATE TABLE IF NOT EXISTS `Lessons`.`students` (
`idstudent` INT NOT NULL,
`FIO` VARCHAR(100) NULL,
`DATA` DATE NULL,
PRIMARY KEY (`idstudent`))
Добавим данные:
INSERT INTO `lessons`.`students` (`idstudent`, `FIO`, `DATA`) VALUES ('1', 'Фандорин Эраст Петрович', '1999-10-12');
INSERT INTO `lessons`.`students` (`idstudent`, `FIO`, `DATA`) VALUES ('2', 'Куприн Александр Иванович', '1999-12-12');
INSERT INTO `lessons`.`students` (`idstudent`, `FIO`, `DATA`) VALUES ('3', 'Солдатов Петр Игоревич', '1999-08-08');
INSERT INTO `lessons`.`students` (`idstudent`, `FIO`, `DATA`) VALUES ('4', 'Степанов Глеб Иванович', '1999-01-13');
Теперь объединим таблицы teachers и students, предположим, нужен список всех посетителей техникума для выдачи пропусков.
Запрос:
SELECT FIO
FROM teachers
UNION
SELECT FIO
FROM students;
Предположим, что у нас есть студент 4-го курса, который читает лекции на первом курсе. Этот студент будет находится и в таблице teachers и в таблице students. Что тогда произойдет?
Добавим:
INSERT INTO `lessons`.`students` (`idstudent`, `FIO`, `DATA`) VALUES ('5', 'Чуркин Петр Иванович', '1991-01-13');
И посмотрим на результат объединения. Видим, что наш студент-преподаватель встречается в результате только один раз. Таким образом, оператор UNION автоматически исключает повторяющиеся записи. Если же нам надо получить все записи, используем оператор UNION ALL
SELECT FIO
FROM teachers
UNION ALL
SELECT FIO
FROM students;
Допустимо объединять несколько запросов. Главное, чтобы количество столбцов совпадало.
SELECT FIO
FROM teachers
UNION ALL
SELECT FIO
FROM students
UNION ALL
SELECT title
FROM courses
Операции пересечения (INTERSECT) и операции разности (except) к сожалению MySQL не поддерживает.
Сортировка результатов запроса.
Если требуется отсортировать результат запроса, то это можно сделать в блоке ORDER BY команды SELECT. Этот блок добавляется в самом конце. Если у вас объединение двух запросов в один, то сортировать результат необходимо только в конце объединения:
SELECT FIO
FROM teachers
ORDER BY FIO;
Сортировка по убыванию desc, по возрастанию asc
SELECT FIO
FROM teachers
ORDER BY FIO desc;
Сортировка в объединении:
SELECT FIO
FROM teachers
UNION ALL
SELECT FIO
FROM students
ORDER BY FIO;
