Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MySQL_лекции_2012.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
305.66 Кб
Скачать
    1. Объединение таблиц

Одна из наиболее важных особенностей запросов SQL – это их способность определять связи между различными таблицами и выводить информацию из них в терминах этих связей, всю внутри одной команды.

Этот вид операции называется объединением, которое является одним из видов реляционных операций в реляционных базах данных. Используя объединения, мы непосредственно связываем информацию с любым номером таблицы, и таким образом способны создавать связи между сравнимыми фрагментами данных.

Перечислим основные характеристики объединений:

  • операнды объединения (то есть те две таблицы, которые подаются на вход) обычно называют первой таблицей и второй, но для внешних объединений важен порядок, поэтому их называют левой и правой таблицей;

  • таблицы всегда объединяются построчно при выполнении всевозможных условий, определенных в запросе;

  • те строки, которые не соответствуют заданным условиям, могут быть как включены в объединение, так и исключены из него, в зависимости от типа этого объединения;

  • значения связанных столбцов обычно проверяют на равенство, но можно приманять и другие операторы сравнения;

  • связанные столбцы чаще всего являются связанными ключевыми столбцами, но, в общем-то, можно связать любые столбцы;

  • связанные столбцы должны быть определены на одинаковых доменах;

  • связанные столбцы не обязательно должны иметь одинаковые названия;

  • чтобы выполнить слияние более двух таблиц, объединения таблиц можно вкладывать друг в друга, выстраивать в цепочку и комбинировать, но при этом надо понимать, что СУБД проходит через ваш запрос шаг за шагом, выполняя объединения так, что за один раз всегда обрабатывается только две таблицы;

  • количество таблиц для объединений, в общем-то, не ограничивается, но чем больше объединений, тем медленнее будет выполняться запрос;

  • если связывающие столбцы содержат значения null, те строки, в которых эти значения оказываются, ни в какое объединение никогда не попадут (вспомните трехзначную логику); значения с null могут попасть только в результате перекрестного или внешнего объединения.

Объединение (JOIN) является одной из сильнейших операций реляционной алгебры. Формат команды выборки данных с нескольких таблиц имеет вид:

SELECT <имя таблицы.имя столбца>,…, <имя таблицы.имя столбца> FROM <перечень имен таблиц> [WHERE <предикат>].

После слова SELECT через запятую указывают список имен столбцов с указанием префиксов - имен таблиц, в которых находятся данные столбцы. Имена самих таблиц перечисляются через запятую после слова FROM.

Команда обрабатывается в следующей последовательности: сначала обрабатывается фраза FROM, при этом выполняется декартово произведение таблиц, что принимают участие в запросе. В результате образовывается таблица больших размеров с количеством столбцов равных сумме столбцов начальных таблиц, за исключением общих для них столбцов; количество строк равняется произведению количества строк таблиц, которые соединяются. Потом выполняется условие отбора, оглашенное после слова WHERE. Строки которые не соответствуют условию отбора, исключаются из рассмотрения – выполняется операция реляционной алгебры – селекция. К строкам, что остались, применяется операция – проецирование.

Если условие не указано, то результатом команды является декартово произведение.

В общем случае различают следующие типы объединений:

  • Полное или перекрестное объединение (CROSS JOIN) – группирует строки таблиц по правилу «каждая с каждой». В реляционной алгебре эта операция называется декартовым произведением.

  • Естественное объединение (NATURAL JOIN) – объединение по равенству. Связанными столбцами считаются те, которые в двух таблицах имею одинаковые имена. Объединяются те строки, в которых все значения связанных столбцов одной таблицы попарно совпадают с соответствующими значениями связанных столбцов другой таблицы. Остальные строки из объединения исключаются.

  • Внутреннее объединение (INNER JOIN) – тэта-объединение (можно использовать все операторы сравнения). Связанными столбцами считаются те, которые заданы условиями сравнения. Принцип объединения такой же, как и в естественном. Этот вид объединений используется чаще всего.

  • Левое внешнее объединение (LEFT OUTER JOIN) – сначала проводиться сравнение значений связанных столбцов. Но в результат объединения включаются все строки левой таблицы, а не только те для которой в правой таблице нашлись строки с удовлетворяющими сравнению значениями связанных столбцов. Если некоторой строке слева не нашлось ни одной строки справа, СУБД объединяет ее с искусственной строкой состоящей из значений null.

  • Правое внешнее объединение (RIGHT OUTER JOIN) – является зеркальным отображением левого внешнего объединения, но в результат включаются все строки правой таблицы.

  • Полное внешнее объединение (FULL OUTER JOIN) – включает все строки правой и левой таблиц. Если у какой-то из таблиц нет пары по связанным столбцам, СУБД объединяет ее с искусственной строкой, состоящей из значений null.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]