Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование нескольких источниковСодержание книги
Поиск на нашем сайте
Прежде чем приступить к рассмотрению методов использования нескольких источников в запросах, разберем те задачи, которые могут возникать в данной ситуации, иначе нам будет непонятно, зачем вообще существуют эти методы и когда их использовать (постараюсь без математических премудростей и терминов). Можно сказать, что когда мы используем несколько источников для отображения данных в одной таблице, мы их суммируем: Рисунок 3.1 Но таблицы это не числа, которые можно просто сложить (2 + 3 = 5), и не строки, которые можно склеить ("2"+"3" = "23"). Каждая таблица состоит из: · набор колонок · набор записей И в связи с такой структурой наших источников, возникают сразу два вопроса: · Какие колонки попадут в результирующую таблицу? · Какие строки попадут в результирующую таблицу? И так, рассмотрим возможные варианты сложения таблиц с учетом наших вопросов: · соединение таблиц (объединяем колонки) – горизонтальна я склейка Рисунок 3.2 · объединение таблиц (объединяем записи) – вертикальная склейка Рисунок 3.3 В результате появляются два метода в языке запросов, позволяющие выполнять данные операции. Но у каждого способа существуют свои особенности. Рассмотрим теперь детали. Соединение таблиц (Join) Для соединения двух таблиц необходимо чтобы эти таблицы имели определенную структуру. И для понимания данной задачи рассмотрим ее на примере двух записей: Запись таблицы "А" (одна запись)
Запись таблицы "Б" (одна запись)
Нам нужна сводная информация в виде:
Наглядно все понятно, но компьютер не человек, и наглядность ему не поможет. В нашем случае в обеих записях нет единого уникального значения, по которому можно понять, что эти две записи относятся к одному сотруднику (действительно, Василькова и Василькова М.С. могут быть разными людьми). И так получается, главное правило: ДЛЯ СОЕДИНЕНИЯ ЗАПИСЕЙ НЕОБХОДИМО НАЛИЧИЕ ХОТЯ БЫ ОДНОГО КЛЮЧЕВОГО ПОЛЯ В КАЖДОЙ ЗАПИСИ Рисунок 3.4 Для реализации такой связи в языке запросов существует специальная конструкция, определяемая в конструкторе запросов на закладке Связи: Рисунок 3.5 Правило соединения в тексте запроса будет следующего содержания: Рисунок 3.6 Весь текст запроса для нашего примера будет следующим: Рисунок 3.7 Если в одной таблице по нашему ключевому значению 2 и более записей, то в результате может1 получиться несколько записей, например: Рисунок 3.8 Запись таблицы "А" (одна запись)
Записи таблицы "Б" (две записи)
Сводная информация будет следующего содержания:
Если мы соединяем таблицы, в которых более двух записей: Записи таблицы "А" (две запись)
Записи таблицы "Б" (две записи)
Сводная информация может содержать следующие данные:
Отображение записей с пустыми2 значениями в колонках, зависит от способа соединения. Существуют 4 варианта: Выбор варианта влияет и на количество записей в результирующей таблице при одинаковых источниках. [ВНУТРЕННЕЕ] СОЕДИНЕНИЕ означает, что из обеих исходных таблиц? источников данных в результат запроса необходимо включить только те комбинации записей, которые соответствуют указанному условию. Остальные записи в результат не попадают. Например:
ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отличие от внутреннего соединения, в результат запроса надо включить также еще и записи из первого (указанного слева от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из второго источника. Таким образом, в результат запроса будут включены все записи из первого источника; они будут соединены с записями из второго источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из второго источника, будут содержать NULL в полях, формируемых на основании записей из этого источника. Например:
ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и записи из второго (указанного справа от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из первого источника. Таким образом, в результат запроса будут включены все записи из второго источника; они будут соединены с записями из первого источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из первого источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.
ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и те записи из обоих источников, для которых не найдено соответствий. Таким образом, в результат запроса будут включены все записи из обоих источников; они будут соединены друг с другом при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из какого - либо источника, будут содержать NULL в полях, формируемых на основании записей из этого источника. Например:
Объединение таблиц (Union) При объединении таблиц, как и при соединении, есть свое главное правило. Чтобы выявить его посмотрим на процесс объединения (вертикальной склейки - как сложение в столбик): Рисунок 3.9 И так, главное правило: ДЛЯ ПОЛУЧЕНИЯ РЕЗУЛЬТАТ НАМ НЕОБХОДИМО НАЛИЧИЕ В ТАБЛИЦАХ ОДИНАКОВОГО КОЛИЧЕСТВА ПОЛЕЙ При настройке данного объединения, также необходимо определить соответствие колонок, т.е. указать, что данные из колонки 1 первой и второй таблицы будет отражать в колонке 1 результата: Рисунок 3.10 При настройке соответствий, мы видим, что для буквы 4 нет колонки в таблицеБ (отсутствует). Данное обстоятельство приведет к тому, что конструктор запроса сам создаст вычисляемое поле для второго источника с пустым значением NULL. И мы можем увидеть данный результат в полученном тексте запроса: Рисунок 3.11 Подстановка значения NULL имеет смысл, только если у нас в правилах соответствия в связке с вычисляемым полем находится поле, не ссылающееся на вложенную таблицу (как в нашем случае). Но, если в одной из таблиц используется ссылка на вложенную таблицу, а в другой ее не нет: Рисунок 3.12 Конструктор подставит в текст запроса уже вместо NULL значение другого типа: Рисунок 3.13 В общем случае, при объединении в запросе результатов нескольких запросов следует использовать конструкцию "ОБЪЕДИНИТЬ ВСЕ", а не "ОБЪЕДИНИТЬ". Поскольку во втором варианте, при объединении запросов полностью одинаковые строки заменяются одной, на что затрачивается дополнительное время, даже в случаях, когда одинаковых строк в запросах заведомо быть не может.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-02-07; просмотров: 123; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.119.34 (0.007 с.) |