Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие СУБД 2011.pdf
Скачиваний:
68
Добавлен:
10.06.2015
Размер:
2.75 Mб
Скачать

41

Псевдонимы таблиц

Вместо того, чтобы в запросе SQL указывать полное имя таблицы при каждой ссылке на неё в команде SELECT можно определить для неё сокращённое название и далее пользоваться этим псевдонимом.

SELECT W.Surname, B.Book FROM Book B, Writer W WHERE W.Wrt_Key=B.Wrt_Key

Псевдоним указывается в конструкции FROM сразу за полным именем таблицы. В приведённом выше примере для таблицы Book назначен псевдоним B, а для Writer – W.

Объединение нескольких таблиц

Вывод данных из одной таблицы представляет собой частный случай. Значительно чаще возникает задача объединения данных из различных таблиц. Для этого используют ряд синтаксических структур, позволяющих соединять таблицы. Простейшим способом объединения двух и более таблиц является использование предиката WHERE с определением полей, применяемых для соединения таблиц. Кроме того, для выполнения объединения после ключевого слова FROM необходимо через запятую перечислить имена объединяемых таблиц. Например, мы хотим соединить таблицы писателей (Writer) и таблицу книг (Book). Данные таблицы объединяются полями Wrt_Key обеих таблиц.

SELECT Surname, FName, LName, Book FROM Writer, Book

WHERE Book.Wrt_Key=Writer.Wrt_Key

Результат запроса будет выглядеть следующим образом:

Сразу разберёмся в терминологии. При объединении таблиц зачастую оперируют терминами внутренняя и внешняя таблица. Таблица, описанная слева от знака равенства, называется внешней, справа – внутренняя. Кроме того, эти таблицы ещё называют левой и правой. Тип представленного ранее объединения называют внутренним. Это один из наиболее распространенных способов объединения в реляционных базах данных.

Большее распространение для организации объединения двух и более таблиц получил синтаксис ANSI с использованием оператора JOIN. При этом различают пять типов соединений: внутренне, левое, правое, полное и перекрёстное.

 

Основные типы соединений. Таблица 6.2

Тип соединения

Синтаксис

 

таблица1 CROSS JOIN таблица2

CROSS

Перекрёстное

Это прямое декартово произведение, обеспечивающее все воз-

 

 

можные объединения строк из каждой таблиц

 

таблица1 [NATURAL] [тип соединения] JOIN таб-

NATURAL

Естественное

лица2

 

Соединение внешнего ключа со связанным с ним родительским

 

ключом.

 

таблица1 UNION JOIN таблица2

UNION

Объединение

Соединение, в которое входят те строки каждой из таблиц, для

 

 

которых совпадения не были установлены.

 

таблица1 [тип соединения] JOIN таблица2 ON

ON

Ставропольский государственный университет, кафедра КБ

 

 

 

 

 

 

 

 

 

 

 

42

 

 

 

 

 

 

 

 

 

 

 

 

Объединение

посред-

предикат

|

LEFT

|

RIGHT

|

FULL

|

 

ством предиката

 

где тип соединения {INNER

 

 

 

 

OUTER}

 

 

 

 

 

 

 

 

 

 

таблица1 [тип соединения] JOIN таблица2 USING

 

{INNER | LEFT

|

 

RIGHT |

FULL

|

(имя столбца .,…)

|

LEFT

|

RIGHT

|

FULL

|

 

OUTER}

 

 

где тип соединения {INNER

 

USING

 

 

OUTER}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Объединение

посред-

 

 

 

 

 

 

 

 

 

ством имён столбцов

 

 

 

 

 

 

 

 

 

Аналог объединения WHERE на синтаксисе ANSI обязательно содержит оператор JOIN и выглядит примерно так:

SELECT Writer.Surname, Writer.FName, Writer.LName, Book.Book FROM Writer

INNER JOIN Book ON Writer.Wrt_Key=Book.Wrt_Key

Такое объединение называют внутренним.

Коренное отличие применения оператора JOIN от оператора WHERE в операциях объединения таблиц заключается в том, что после слова FROM нет необходимости указывать перечень всех таблиц.

Для того, чтобы осуществить левое объединение таблиц (другими словами заставить вывести все записи из левой таблицы вне зависимости от того есть ли у них подчинённые записи в правой таблице) конструкция незначительно изменится:

SELECT Writer.Surname, Writer.FName, Writer.LName, Book.Book FROM Writer

LEFT JOIN Book ON Writer.Wrt_Key=Book.Wrt_Key

Для создания правого объединения замените в предыдущем примере ключевое сло-

во LEFT на RIGHT.

SELECT Writer.Surname, Writer.FName, Writer.LName, Book.Book FROM Writer

RIGHT JOIN Book ON Writer.Wrt_Key=Book.Wrt_Key

Теперь запрос возвратит все записи из правой таблицы (Book) и соответствующие ей записи левой таблицы. Так как в правой таблице не указаны книги Достоевского, то в результирующей таблице опять Вы не увидите записей с его фамилией.

Полное объединение требует использования ключевого слова FULL.

SELECT Writer.Surname, Writer.FName, Writer.LName, Book.Book FROM Writer

FULL JOIN Book ON Writer.Wrt_Key=Book.Wrt_Key

Такое объединение позволит вернуть все записи как из левой, так и из правой таблиц. Если бы, например, в таблице книг оказалась ещё одна запись о книге без автора (другими словами ключ автора Wrt_Key был установлен в Null).

Редко используемый тип перекрёстного объединения CROSS заставит запрос возвратить все возможные комбинации строк из объединяемых таблиц.

SELECT Writer.Surname, Writer.FName, Writer.LName, Book.Book FROM Writer

CROSS JOIN Book

Ценность, сформированной таким образом, выходной таблицы весьма условна, но, тем не менее, если такая возможность существует, то о ней надо помнить.

Ставропольский государственный университет, кафедра КБ

43

Далее приведён пример запроса SQL формирующий единую результирующую таблицу из четырёх.

SELECT Writer.Surname, Writer.FName, Writer.LName, Writer.Born, Publisher.Publisher, Book.Book

FROM Base

LEFT JOIN Publisher ON Publisher.Pbl_Key=Base.Pbl_Key LEFT JOIN Book ON Book.Bk_Key=Base.Bk_Key

RIGHT JOIN Writer ON Writer.Wrt_Key=Book.Wrt_Key

Порядок соединения нескольких таблиц имеет критическое значение. Если таблицы соединяются в правильном порядке, то общее число обрабатываемых строк будет меньше. Описывая запрос, следует выполнять сначала максимально ограничивающий поиск, чтобы отфильтровать как можно большее число строк на ранних фазах выполнения запроса с соединениями.

Построение запросов в среде Microsoft Access

Среда Microsoft Access значительно упрощает процесс создания запросов на выборку данных. Для этих целей в ней существует два режима (см. рис. 6.1):

1.Создание запроса в режиме конструктора.

2.Создание запроса с помощью мастера.

Рисунок 6.1. – Окно объектов БД Access с активной страницей “Запросы”

Однако в своей практической деятельности мы постараемся отстраниться от помощников, и ограничится услугами обычного редактора. Для этого необходимо сделать следующие шаги:

1.Дважды щелкните левой кнопкой мышки по строке “Создание запроса в режиме конструктора”.

2.Нажав кнопку “Закрыть” откажитесь от услуг окна “Добавление таблицы”.

3.На панели инструментов найдите кнопку “SQL”, вызовите её меню и выберите пункт “Режим SQL” (см. рис. 6.2).

Ставропольский государственный университет, кафедра КБ

44

Рисунок 6.2. – Переход в режим SQL

В результате этих действий перед нами окажется окно редактора, в котором мы и станем записывать команды на языке SQL. Для выполнения инструкции воспользуйтесь пунктом главного меню: “Запрос – Запуск”.

Задание

С помощью оператора SELECT разработайте группу запросов к своей базе данных. В результате работы у вас должны быть созданы запросы позволяющие:

1.сортировать данные во всех отдельных таблицах БД;

2.отбирать данные из отдельных таблиц;

3.объединяющие все пары таблиц, состоящие в отношении “один ко многим”;

4.объединяющие все таблицы, состоящие в отношении “многие ко многим”;

5.суммарный запрос, отображающий все данные из всех таблиц БД.

Ставропольский государственный университет, кафедра КБ