Введение в DELPHI

Выполнение соединения нескольких таблиц.


Вы видели что таблицы CUSTOMERS и ORDERS связаны в отношении один-ко-многим, основанному на поле CustNo. Таблицы ORDERS и ITEMS также связаны отношении один-ко-многим, только через поле OrderNo.

Более конкретно, каждый заказ который существует в таблице ORDERS будет иметь несколько записей в таблице ITEMS, связанных с этим заказом. Записи из таблицы ITEMS определяют тип и количество изделий, связанных с этим заказом.

Пример.

Некто Иванов Ф.П. 1 мая 1995г. заказал следующее:

  1. Гайка 4х-угольная - 50 штук
  2. Вентиль - 1 штука

А некто Сидорчук Ю.Г. 8 декабря 1994г. заказал:

  1. М/схема КР580 ИК80 - 10 штук
  2. Транзистор КТ315 - 15 штук
  3. Моток провода - 1 штука

В ситуации подобной этой, иногда проще всего "соединить" данные из таблиц ORDERS и ITEMS так, чтобы результирующий DataSet содержал информацию из обеих таблиц:



Иванов Ф.П.1 мая 1995гГайка 4х-угольная50 штук
Иванов Ф.П.1 мая 1995гВентиль1 штука
Сидорчук Ю.Г.8 декабря 1994гМ/схема КР580 ИК8010 штук
Сидорчук Ю.Г.8 декабря 1994гТранзистор КТ31515 штук
Сидорчук Ю.Г.8 декабря 1994гМоток провода1 штука

Слияние этих двух таблиц называется "соединение" и это одно из фундаментальных действий, которые Вы можете выполнить на наборе двух или больше таблиц.

Взяв таблицы ORDERS и ITEMS из подкаталога DEMOS\DATA, их можно соединить их таким путем, что поля CustNo, OrderNo и SaleDate из таблицы ORDERS будут "слиты" с полями PartNo и Qty из таблицы ITEMS и сформируют новый DataSet, содержащий все пять полей. Grid содержащий результирующий DataSet показан на рис.5

Рис.5: Соединение таблиц ORDERS и ITEMS может быть сделано так, что формируется новый DataSet содержащий поля из каждой таблицы.

Имеется существенное различие между связанными курсорами и соединенными таблицами. Однако они имеют две общие черты:

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

Соединение таблиц ORDERS и ITEMS может быть выполнено единственным SQL запросом, который выглядит так: select O.CustNo, O.OrderNo, O.SaleDate, I.PartNo, I.Qty from Orders O, Items I where O.OrderNo = I.OrderNo

Этот запрос состоит из четырех различных частей:

  1. Выражение Select определяет, что Вы хотите получить - курсор, содержащий некоторую форму DataSet.
  2. Затем идет список полей которые Вы хотите включить в dataset. Этот список включает поля CustNo, OrderNo, SaleDate, PartNo и Qty. Первые три поля из таблицы ORDERS, а два других - из таблицы ITEMS.
  3. Выражение from объявляет, что Вы работаете с двумя таблицами, одна называется ORDERS, а другая ITEMS. Для краткости, в запросе используется особенность SQL, которая позволяет Вам ссылаться на таблицу ORDERS буквой O, а на таблицу ITEMS буквой I.
  4. Выражение where жизненно важно потому, что оно определяет поля связи для двух таблиц. Некоторые серверы могут вернуть DataSet, даже если Вы не включите выражение where в запрос, но почти всегда результирующий набор записей будет не тем, что Вы хотели видеть. Чтобы получить нужный результат, убедитесь что Вы включили выражение where.



Содержание раздела