
- •1. Реализация баз данных
- •1.1. Обзор существующих систем управления базами данных
- •1.1.1. Основные функции субд
- •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. Совершенствование методов защиты данных
- •10. In-memory субд реального времени как кэш для коммерческих субд
- •11. Облачные вычисления (Cloud computing)
- •12. Машины баз данных
- •1.5.5. Заключение
- •2. Эксплуатация баз данных
- •2.1. Настройка и администрирование субд
- •2.1.1. Администрирование MySql
- •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.13. Повторяющиеся строки (предикат distinct)
Если в списке возвращаемых столбцов запроса на выборку указать первичный ключ таблицы, то каждая строка результатов запроса будет уникальной (из-за того, что значения первичного ключа во всех строках разные). Если первичный ключ не указан, результаты запроса могут содержать повторяющиеся строки. Предположим, например, что был выполнен следующий запрос: вывести список идентификаторов всех менеджеров офисов.
SELECT MGR FROM OFFICES
MGR
108
106
104
105
108
Таблица результатов запроса содержит пять строк (по одной для каждого офиса), однако две из них совпадают. Почему? Потому что Ларри Фитч (Larry Fitch) является менеджером двух офисов: в Лос-Анджелесе и в Денвере. Поэтому его идентификатор (108) содержится в двух строках таблицы OFFICES. Это не совсем те результаты, которых мы ожидали. Если в фирме работают четыре менеджера, то, вероятнее всего, мы ожидали, что результаты запроса будут содержать четыре строки.
Повторяющиеся строки из таблицы результатов запроса можно удалить, если в инструкции SELECT перед списком возвращаемых столбцов указать предикат DISTINCT. Ниже приведён вариант предыдущего запроса, возвращающий те результаты, которых мы ожидали:
SELECT DISTINCT MGR FROM OFFICES
MGR
106
104
105
108
Этот запрос выполняется следующим образом. Вначале генерируются все строки таблицы результатов (пять строк), а затем удаляются те из них, которые в точности повторяют другие. Предикат DISTINCT можно указывать независимо от содержимого списка возвращаемых столбцов инструкции SELECT. Если предикат DISTINCT не указан, повторяющиеся строки не удаляются. Можно также задать предикат ALL, явно показывая, что повторяющиеся строки следует оставить, однако делать это не обязательно, поскольку предикат ALL используется по умолчанию.
1.3.14. Отбор строк (предложение where)
SQL-запросы, извлекающие из таблицы все строки, полезны при просмотре базы данных и создании отчётов, однако редко применяются для чего-нибудь ещё. Обычно требуется выбрать из таблицы несколько строк и включить в результаты запроса только их. Чтобы указать, какие строки нужно отобрать, следует воспользоваться предложением WHERE. Ниже показано несколько запросов, в которых встречается это предложение.
Перечислить офисы, в которых фактические объёмы продаж превысили плановые.
SELECT CITY, SALES, TARGET FROM OFFICES WHERE SALES > TARGET
Вывести имя, объёмы фактических и плановых продаж служащего с идентификатором 105.
SELECT NAME, SALES, QUOTA FROM SALESREPS WHERE EMPL_NUM = 105
Вывести список всех служащих, менеджером которых является Боб Смит (идентификатор 104).
SELECT NAME, SALES FROM SALESREPS WHERE MANAGER = 104
Предложение WHERE состоит из ключевого слова WHERE, за которым следует условие отбора, определяющее, какие именно строки требуется извлечь. В предыдущем запросе, например, условием отбора являлось выражение MANAGER = 104.
На рисунке изображено, как работает предложение WHERE. Все строки в таблице SALESREPS просматриваются одна за другой, и к каждой из них применяется условие отбора. Если в условии отбора встречается имя столбца (как, например, имя MANAGER в предыдущем примере), то используется значение этого столбца из текущей строки.
Рисунок 1.3.14.1 – Предложение WHERE
Для каждой из строк условие отбора может иметь одно из трёх перечисленных ниже значений.
1) Если условие отбора имеет значение TRUE, строка будет включена в результаты запроса. Например, значение столбца MANAGER в строке для Билла Адамса (Bill Adams) соответствует условию отбора, поэтому строка для него включается в результаты запроса.
2) Если условие отбора имеет значение FALSE, строка исключается из результатов запроса. Например, значение столбца MANAGER в строке для Сью Смит (Sue Smith) не соответствует условию отбора, поэтому строка для неё исключается из результатов запроса.
3) Если условие отбора имеет значение NULL, строка исключается из результатов запроса. Например, значение столбца MANAGER в строке для Сэма Кларка (Sam Clark) имеет значение NULL, поэтому строка для него исключается из результатов запроса.
Можно сказать, что условие отбора служит фильтром для строк таблицы. Строки, удовлетворяющие условию отбора, проходят через фильтр и становятся частью результатов запроса. Строки, не удовлетворяющие условию отбора, отфильтровываются и исключаются из результатов запроса.