Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая работа / bd / базы данных2222.rtf
Скачиваний:
241
Добавлен:
17.02.2014
Размер:
19.41 Mб
Скачать

Порядок выполнения многотабличных запросов

Всё вышесказанное определяет следующий формальный порядок выполнения многотабличных запросов в SQL:

1. Сформировать произведение таблиц, перечисленных в предложении FROM. Если в предложении FROM указана только одна таблица, то произведением будет она сама.

2. Если в предложении FROM явно указаны условия объединения для каждой строки таблиц-источников, проверить эти условия и исключить строки, им не удовлетворяющие (только для стандарта SQL2).

3. Если имеется предложение WHERE, применить заданное в нём условие отбора к каждой строке таблицы произведения и оставить в ней только те строки, для которых это условие выполняется.

4. Для каждой из оставшихся строк вычислить значение каждого элемента в списке возвращаемых столбцов и создать одну строку таблицы результатов запроса. При любой ссылке на столбец берётся значение столбца для текущей строки.

Согласно стандарту SQL1, условия объединения можно задать только в предложении WHERE. Стандартом SQL2 определяется расширенный синтаксис предложения FROM, позволяющий задавать условия объединения явно и отдельно от условий отбора в предложении WHERE. Данные расширения появились в результате необходимости обработки внешних объединений (в частности правым внешним объединением двух таблиц называют такую результирующую таблицу, в которой содержатся все строки «внешней» таблицы и только такие строки «внутренней» таблицы, которые удовлетворяют условию объединения). Противоречие заключалось в том, что для таблиц, участвующих во внешнем объединении, условие отбора строк может не быть условием объединения и наоборот.

Виды объединений

Существует несколько видов объединений, вот их основные различия на примере двух таблиц, одна из которых содержит m строк, а другая – n строк:

  • внутреннее объединение вернёт таблицу, состоящую из некоторого числа строк r, причём r < m*n. Внутреннее объединение является подмножеством декартового произведения. Оно образуется путём удаления тех строк из таблицы произведения, которые не удовлетворяют условию отбора;

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

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

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

  • расширенный запрос на объединение вернёт таблицу, содержащую все колонки из обеих таблиц и содержащую m+n строк, расширенных значениями null для отсутствующих колонок в таблицах.

Предложение where.

Это предложение служит для того, чтобы указать, какие строки нужно отобрать для результирующей таблицы. Предложении WHERE состоит из ключевого слова WHERE, за которым следует условие отбора строк. Например, нам необходимо выбрать только те строки, название города в которых «Москва», в таком случае условие отбора будет выглядеть так:

WHERE City='Москва'

Работа условия отбора начинается после того, как произведены все операции, касающиеся объединения таблиц в предложении FROM. Для каждой строки объединения берётся значение столбца City и сравнивается с заданным значением. Все строки, удовлетворяющие условию отбора, попадают в результирующую таблицу, остальные отбрасываются. Для каждой из строк условие отбора может принимать одно из трёх значений:

  • TRUE (истина) - в таком случае эта строка попадёт в результирующую таблицу;

  • FALSE (ложь) - в таком случае это строка будет отброшена;

  • NULL (не определено) – в таком случае строка также будет отброшена. Данное значение появляется, когда один или оба операнда оператора сравнения имеют значение NULL;

Соседние файлы в папке bd