Справочное руководство по Delphi

       

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


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

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

Пример.

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

  1. Гайка 4х-угольная - 50 штук
  2. Вентиль - 1 штука
  3. А некто Сидорчук Ю.Г. 8 декабря 1994г. заказал:

    1. М/схема КР580 ИК80 - 10 штук
    2. Транзистор КТ315 - 15 штук
    3. Моток провода - 1 штука
    4. В ситуации подобной этой, иногда проще всего "соединить" данные из таблиц ORDERS и ITEMS так, чтобы результирующий DataSet содержал информацию из обеих таблиц:

      Иванов Ф.П. 1 мая 1995г Гайка 4х-угольная 50 штук

      Иванов Ф.П. 1 мая 1995г Вентиль 1 штука



      Сидорчук Ю.Г. 8 декабря 1994г М/схема КР580 ИК80 10 штук

      Сидорчук Ю.Г. 8 декабря 1994г Транзистор КТ315 15 штук

      Сидорчук Ю.Г. 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.  


        2. Выражение Select определяет, что Вы хотите получить - курсор, содержащий некоторую форму DataSet.


        3.  


        4. Затем идет список полей которые Вы хотите включить в dataset. Этот список включает поля CustNo, OrderNo, SaleDate, PartNo и Qty. Первые три поля из таблицы ORDERS, а два других - из таблицы ITEMS.


        5.  


        6. Выражение from объявляет, что Вы работаете с двумя таблицами, одна называется ORDERS, а другая ITEMS. Для краткости, в запросе используется особенность SQL, которая позволяет Вам ссылаться на таблицу ORDERS буквой O, а на таблицу ITEMS буквой I.


        7.  


        8. Выражение where жизненно важно потому, что оно определяет поля связи для двух таблиц. Некоторые серверы могут вернуть DataSet, даже если Вы не включите выражение where в запрос, но почти всегда результирующий набор записей будет не тем, что Вы хотели видеть. Чтобы получить нужный результат, убедитесь что Вы включили выражение where.









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