MySQL / 12. Использование нескольких таблиц

На некоторые запросы просто невозможно ответить, используя всего одну таблицу, к тому же реальная мощь реляционных баз данных проявляется тогда, когда вы начинаете связывать данные из одних таблиц с другими. Существует ряд причин использования нескольких таблиц: • Для соединения записей таблиц с целью получения более полной информации, чем та, которую можно извлечь из каждой отдельной таблицы. • Для хранения промежуточных результатов многоэтапной операции. • Для вставки, удаления или обновления записей одной таблицы на основе информации из другой.
Статьи раздела '12. Использование нескольких таблиц':
Вставка записей в таблицу, включающую значения из другой
Задача Вам нужно вставить запись в таблицу, требующую значение идентификатора. Вы же знаете только соответствующее идентификатору имя, но не сам идентификатор. Решение Если предположить, что у вас есть справочная таблица, соп...
Вывод списков для записей «главная-подчиненная» и итогов
Задача Две таблицы соотносятся как «главная-подчиненная» (master-detail), и вы хотите вывести список, который для каждой главной записи выводит соответствующие ей подчиненные, или список, в котором просуммированы подчиненные запи...
Вычисление разности между последовательными строками
Задача У вас есть таблица, строки которой содержат последовательные накапливаемые значения, и вы хотите вычислить разности между парами последовательных строк. Решение Используйте самосоединение, сопоставляющее пары соседних ...
Вычисление рейтинга команд
Задача Вы хотите вычислить рейтинг команд по записям об их победах и поражениях, включая значения «отставания в играх» (GB – games-behind). Решение Определите, какая команда занимает первое место, затем объедините результат с...
Выявление и удаление несвязанных записей
Задача У вас есть связанные таблицы (например, имеющие связь «главная-подчиненная»). Но вы подозреваете, что некоторые строки ни с чем не связаны и могут быть удалены. Решение Используйте LEFT JOIN для определения отсутствия ...
Заполнение пустых мест в списке с помощью соединения
Задача Вы хотите вывести итоги для каждой из нескольких категорий, но некоторые из них не представлены в обрабатываемых данных. Следовательно, в итогах будет не хватать категорий. Решение Создайте справочную таблицу, в которо...
Нарастающий итог и скользящее среднее
Задача У вас есть ряд наблюдений, сделанных на протяжении какого-то периода времени, и вы хотите вычислить сумму нарастающим итогом (cumulative sum) для каждой точки измерения. Или же хотите получить скользящее среднее (running a...
Нахождение строк одной таблицы, соответствующих строкам другой
Задача Вы хотите использовать строки одной таблицы для того, чтобы определить строки другой таблицы. Решение Используйте соединение с инструкцией WHERE для установления соответствия между строками разных таблиц. Обсуждение...
Нахождение строк с минимальным и максимальным значениями в группе
Задача Вы хотите определить, какая запись в каждой группе строк таблицы содержит максимальное или минимальное значение указанного столбца. Например, вы хотите узнать, какая из картин каждого художника оказалась наиболее дорогой. ...
Нахождение строк, которым не соответствуют никакие строки другой таблицы
Задача Вы хотите найти строки одной таблицы, которым не соответствуют никакие строки другой. Или хотите вывести список на основе соединения таблиц, новключить в него и записи, для которых не найдено соответствия в другой таблице....
Обновление одной таблицы на основе значений другой
Задача Вам нужно обновить существующие записи одной таблицы на основе содержимого записей другой таблицы, но MySQL еще не позволяет использовать соединения в инструкции WHERE предложений UPDATE. Так что у вас нет способа сопостав...
Одновременное использование нескольких серверов MySQL
Задача Вы хотите выполнить запрос, который использует таблицы в базах данных, расположенных на разных серверах MySQL. Решение Эту задачу невозможно решить средствами только SQL. Можно обойти ее, открывая отдельные соединения ...
Отношение «многие-ко-многим»
Задача Вы хотите вывести данные из таблиц, при этом записи любой таблицы могут соответствовать нескольким записям другой таблицы. Решение Это связь «многие-ко-многим». Необходимо использовать третью таблицу для сопоставления ...
Параллельный выбор записей из нескольких таблиц
Задача Вы хотите выбирать строки одну за другой из нескольких таблиц или выбирать несколько наборов строк из одной таблицы – все в одно результирующее множество. Решение Используйте операцию UNION для соединения нескольких ре...
Преобразование подзапросов в операции соединения
Задача Вы хотите использовать запрос, который включает в себя подзапрос, но MySQL будет поддерживать подзапросы только с версии 4.1. Решение Во многих случаях подзапрос можно переписать как соединение. Или вы можете написать ...
Соединение строк одной таблицы со строками другой
Задача Вы хотите написать запрос, который использует информацию более чем из одной таблицы. Решение Используйте соединение (join) – запрос, ссылающийся на несколько таблиц и указывающий MySQL на то, как сопоставлять их данные...
Соединение таблиц разных баз данных
Задача Вы хотите использовать таблицы в соединении, но они расположены в разных базах данных. Решение Используйте спецификатор имени базы данных, чтобы сообщить MySQL, где следует искать таблицы. Обсуждение Бывают ситуаци...
Создание справочной таблицы с помощью соединения
Задача Таблица хранит длинные описания в столбце идентификаторов. Вы хотите преобразовать этот столбец в короткие значения идентификаторов и использовать описания для создания справочной таблицы, сопоставляющей идентификаторы опи...
Сравнение таблицы с самой собой
Задача Вы хотите сравнить записи таблицы с другими записями той же самой таблицы. Например, вы хотите найти в вашей коллекции все картины автора, написавшего «Едоки картофеля». Или хотите узнать, какие штаты из таблицы states вст...
Ссылка на имена столбцов вывода соединения в программе
Задача Вам необходимо обработать результирующее множество соединения в программе, но столбцы вывода имеют неуникальные имена. Решение Используйте псевдонимы столбцов для присваивания уникальных имен всем столбцам или ссылайте...

Страницы: 1 2