- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Учреждение образования
- •«Белорусский государственный университет
- •Информатики и радиоэлектроники»
- •Пояснительная записка
- •Содержание дисциплины
- •1. Название тем лекционных занятий, их содержание, объем в часах.
- •2 Перечень тем ипр их наименование и объем в часах
- •3 Перечень тем контрольных работ их наименование и объем в часах
- •4. Курсовая работа, ее характеристика
- •Перечень тем курсовых работ
- •5. Литература
- •5.1 Основная
- •5.2 Дополнительная
- •6. Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •7. Учебно-методическая карта дисциплины
- •1.1.2. Классификация субд
- •1.2. Субд начального уровня – MySql
- •1.2.1. Введение в MySql
- •1.2.2. Подготовка к работе с MySql
- •1.2.3. Создание базы данных, основы работы с таблицами MySql
- •1.2.4. Типы данных столбцов MySql
- •1.2.5. Работа с таблицами MySql
- •1.2.6. Логические операторы MySql
- •1.2.7. Команды обработки данных MySql
- •1.2.8. Математические функции MySql
- •1.2.9. Работа с датой и временем в MySql
- •1.2.10. Работа со строками в MySql
- •1.2.11. Дополнительные функции MySql
- •1.3. Субд корпоративного уровня – ms sql Server
- •1.3.1. Общая теория запросов sql
- •1.3.2. Имена в sql
- •1.3.3. Типы данных
- •1.3.4. Константы
- •1.3.5. Выражения
- •1.3.6. Встроенные функции
- •1.3.7. Отсутствующие значения (значения null)
- •1.3.8. Простые запросы sql на выборку данных
- •1.3.9. Предложение select
- •1.3.10. Предложение from
- •1.3.11. Вычисляемые столбцы
- •1.3.12. Выборка всех столбцов (инструкция select *)
- •1.3.13. Повторяющиеся строки (предикат distinct)
- •1.3.14. Отбор строк (предложение where)
- •1.3.15. Условия отбора
- •1.3.16. Составные условия отбора (операторы and, or и not)
- •1.3.17. Сортировка результатов запроса (предложение order by)
- •1.3.18. Правила выполнения однотабличных запросов
- •1.3.19. Сложные запросы
- •1.3.20. Запросы на объединение и повторяющиеся строки
- •1.3.21. Запросы на объединение и сортировка
- •1.3.22. Вложенные запросы на объединение
- •1.3.23. Многотабличные запросы на выборку
- •1.3.24. Запросы с использованием отношения предок/потомок
- •1.3.25. Запросы на выборку к трём и более таблицам
- •1.3.26. Объединение таблиц по неравенству
- •1.3.27. Особенности многотабличных запросов
- •1.3.28. Самообъединения
- •1.3.29. Производительность при обработке многотабличных запросов
- •1.3.30. Умножение таблиц
- •1.3.31. Правила выполнения многотабличных запросов на выборку
- •1.3.32. Внешнее объединение таблиц
- •1.3.33. Левое и правое внешние объединения
- •1.4. Способы взаимодействия программных средств в субд
- •1.4.1. Доступ к базе данных на стороне сервера
- •1.4.2. Доступ к базе данных на стороне клиента
- •1.5. Современные тенденции развития субд
- •1.5.1. Введение
- •1.5.2. Как предсказать тенденции развития субд
- •1.5.3. Эволюционный подход
- •1.5.4. Тенденции развития
- •1. Виртуализация ресурсов и grid-технологии
- •2. Встраивание Information Life Cycle Management (ilm) в субд
- •3. Самоуправление, самодиагностика, самолечение
- •4. Real Application Testing – механизмы промышленного тестирования версий и изменений
- •5. Совершенствование архитектур максимальной доступности
- •6. Включение измерения времени в субд
- •7. Поддержка новых типов данных (xml, rfid, Semantic Web, геном, медицина, быстрые lob и т.Д.)
- •8. Умные механизмы сжатия и дедублирования
- •9. Совершенствование методов защиты данных
- •11. Облачные вычисления (Cloud computing)
- •12. Машины баз данных
- •2.1.2. Администрирование ms sql Server
- •2.2. Повышение надёжности баз данных
- •2.2.1. Обеспечение сохранности данных в MySql
- •2.2.2. Обеспечеие сохранности данных в ms sql Server
- •2.3. Повышение производительности баз данных
- •2.3.1. Повышение производительности MySql
- •2.3.2. Повышение производительности ms sql Server
- •2.4. Повышение безопасности бд
- •2.4.1. Безопасность MySql
- •2.4.2. Безопасность ms sql Server
- •2.5. Модернизация бд в процессе эксплуатации
- •2.5.1. Расширение возможностей MySql
- •2.5.2. Распределённые базы данных
- •Указания по выбору варианта
- •Курсовое проектирование Методические указания по выполнению
- •Цель проектирования
- •Теоретические положения Основные понятия баз данных
- •Этапы проектирования базы данных
- •Модели данных
- •Нормальные формы отношений
- •Задания к выполнению курсового проекта
- •Указания по выбору варианта
- •Правила оформления выполненных заданий
- •Пример проектирования базы данных
1.3.32. Внешнее объединение таблиц
Операция объединения в SQL соединяет информацию из двух таблиц, формируя пары связанных строк из этих двух таблиц. Объединённую таблицу образуют пары тех строк из различных таблиц, у которых в связанных столбцах содержатся одинаковые значения. Если строка одной из таблиц не имеет пары, то объединение может привести к неожиданным результатам. Это иллюстрируют следующие далее запросы.
Вывести список служащих и офисов, где они работают:
SELECT NAME, REP_OFFICE FROM SALESREPS
Вывести список служащих и городов, где они работают:
SELECT NAME, CITY FROM SALESREPS, OFFICES WHERE REP_OFFICE = OFFICE
На первый взгляд, эти два запроса должны давать одинаковое количество строк, но это не так. Почему? Потому что может быть сотрудник, который в настоящий момент ещё не получил назначение ни в один офис и его строка имеет значение NULL в столбце REP_OFFICE (это связанный столбец для данного объединения). Значение NULL не совпадает ни с одним идентификатором офиса в таблице OFFICES, поэтому строка для такого служащего в таблице SALESREPS остаётся без пары. В результате она "исчезает" из объединения. Таким образом, стандартное SQL-объединение может привести к потере информации, если объединяемые таблицы содержат несвязанные строки.
Опираясь на словесную версию второго запроса, можно предположить, что требуется получить результаты, которые возвращает следующий запрос.
Вывести список служащих и городов, где они работают:
SELECT NAME, CITY FROM SALESREPS, OFFICES WHERE REP_OFFICE *= OFFICE
Такие результаты запроса получаются с помощью другой операции объединения, называемой внешним объединением таблиц (в предложении WHERE оно обозначается символами *=). Внешнее объединение является расширением стандартного объединения, описанного выше, и иногда называемого внутренним объединением таблиц. В стандарте SQL1 дано определение только внутреннего объединения; понятие внешнего объединения в нём отсутствует. Ранние СУБД фирмы также поддерживают только внутреннее объединение. Однако внешнее объединение является понятной и полезной частью реляционной модели базы данных и реализовано во многих СУБД, включая SQL Server, Oracle, Sybase и Informix. Как показано ниже, внешнее объединение – это наиболее естественный способ для выражения запросов определённого типа.
Чтобы понять смысл внешнего объединения, будет полезно рассмотреть две простые таблицы, изображённые на рисунке.
Рисунок 1.3.32.1 – Внешнее объединение
В таблице GIRLS находится список пяти девочек и городов, в которых они живут; в таблице BOYS содержится список пяти мальчиков и их городов. Чтобы найти пары девочек и мальчиков, живущих в одном и том же городе, можно использовать следующий запрос, формирующий внутреннее объединение двух таблиц:
SELECT * FROM GIRLS, BOYS WHERE GIRLS.CITY = BOYS.CITY
Внутреннее объединение даёт четыре строки в таблице результатов запроса. Обратите внимание, что две девочки (Анна (Anne) и Нэнси (Nancy)) и два мальчика (Джеймс (James) и Джордж (George)) не представлены в таблице результатов запроса. Эти строки не имеют пары в другой таблице и поэтому отсутствуют в таблице результатов внутреннего объединения.
Две несвязанные строки (Анна и Джеймс) имеют действительные значения в столбцах CITY, НО ОНИ не совпадают ни с одним городом в противоположной таблице. Две другие несвязанные строки (Нэнси и Джордж) имеют в столбцах CITY значение NULL, а по правилам SQL значение NULL не равно никакому другому значению (даже другому значению NULL).
Предположим, что вы хотите вывести список пар девочка/мальчик, живущих в одних и тех же городах, и включить в него девочек и мальчиков без пары. Этот результат даёт внешнее объединение таблиц GIRLS и BOYS. Схема формирования внешнего объединения изображена на рисунке. Вот инструкция SQL, дающая в результате внешнее объединение:
SELECT * FROM GIRLS, BOYS WHERE GIRLS.CITY *=* BOYS.CITY
Внешнее объединение двух таблиц содержит восемь строк. Четыре строки идентичны строкам внутреннего объединения этих таблиц. Две другие строки, для Анны и Нэнси, являются несвязанными строками таблицы GIRLS. Эти строки были расширены значениями NULL, т.е. приравнены к воображаемой строке таблицы BOYS, содержащей только значения NULL, и добавлены в результаты запроса. Две последние строки, для Джеймса и Джорджа, являются несвязанными строками таблицы BOYS. Эти строки также были расширены значениями NULL (приравнены к воображаемой строке таблицы GIRLS, содержащей только значения NULL) и добавлены в результаты запроса.
Как видно из этого примера, внешнее объединение является объединением, "сохраняющим информацию". Каждая строка таблицы BOYS представлена в таблице результате запроса (некоторые – более одного раза). Аналогично, каждая строка таблицы GIRLS представлена в таблице результатов (некоторые, опять-таки, более одного раза)
Рассмотрим логику построения внешнего объединения:
1. Создать внутреннее объединение двух таблиц обычным способом.
2. Каждую строку первой таблицы, которая не имеет связи ни с одной строкой второй таблицы, добавить в результаты запроса, присваивая всем столбцам второй таблицы значение NULL.
3. Каждую строку второй таблицы, которая не имеет связи ни с одной строкой первой таблицы, добавить в результаты запроса, присваивая всем столбцам первой таблицы значение NULL.
4. Результирующая таблица является внешним объединением двух таблиц.