VR
Virtual Reality On-line   SQL
Новости   |     Журнал    |    Хаkер   |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]
[ Download  ]
[  Конкурс  ]
[  Анекдоты ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Язык запросов SQL.
Объединения
:

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

Представим, что у нас есть две таблицы User1 и User2:

User1.db
Key1  OC        LastName
-------------------------
1     Win       Иванов
2     Unix      Петров
3     Win       Яковлев
4     Win       Сидоров
5     Win       Ковалёв
6     Unix      Амаров

User2.db
Key1  OC        LastName
-------------------------
2     Unix      Богров
3     Win       Сидоров
4     OS2       Ковалёв

Мы хотим получить список всех пользователей Unix из двух таблиц сразу. Для этого нужно выполнить запрос выбора к первой таблице, а потом ко второй. Результатом будет две выходные таблицы. А если мы хотим получить одну? Для этого можно воспользоваться объединением - оператор UNION. Вот как это будет выглядеть:

SELECT *
FROM User1.db
WHERE OC LIKE 'Unix'
 UNION
  SELECT *
  FROM User2.db
  WHERE OC LIKE 'Unix';

результатом будет одна таблица:

User1.db
Key1  OC        LastName
-------------------------
2     Unix      Петров
6     Unix      Амаров
2     Unix      Богров

Не плохо?

Чтобы запрос не завершился ошибкой, он должен удовлетворять следующим условиям:

  • Количество и типы полей должны быть одинаковыми.
  • Символьные поля должны иметь одинаковое число символов.

    Если одного поля в одном из запросов нет, то его можно заменить. Например:

    SELECT Key1, OC, LastName
    FROM User1.db
    WHERE OC LIKE 'Unix'
     UNION
      SELECT Key1, OC, 'NO FOUND'
      FROM User2.db
      WHERE OC LIKE 'Unix';
    

    результатом будет одна таблица:

    User1.db
    Key1  OC        LastName
    -------------------------
    2     Unix      Петров
    6     Unix      Амаров
    2     Unix      NO NAME
    

    Здесь мы вместо поля LastName подсовываем текст 'NO FOUND', чтобы количество и тип полей совпадали.

    Таким образом можно украсить запрос вот до такого вида:

    SELECT Key1, OC, LastName, 'Table 1'
    FROM User1.db
    WHERE OC LIKE 'Unix'
     UNION
      SELECT Key1, OC, 'NO FOUND', 'Table 2'
      FROM User2.db
      WHERE OC LIKE 'Unix';
    

    Результатом будет одна таблица:

    User1.db
    Key1  OC        LastName
    ---------------------------------
    2     Unix      Петров    Table 1
    6     Unix      Амаров    Table 1
    2     Unix      NO NAME   Table 2
    

    И на последок упорядочим наш вывод:

    SELECT Key1, OC, LastName, 'Table 1'
    FROM User1.db
    WHERE OC LIKE 'Unix'
     UNION
      SELECT Key1, OC, 'NO FOUND', 'Table 2'
      FROM User2.db
      WHERE OC LIKE 'Unix';
       ORDER BY 3
    

    ORDER BY 3 - говорит, что надо упорядочить вывод по третьему столбцу. Результатом будет одна таблица:

    User1.db
    Key1  OC        LastName
    ---------------------------------
    2     Unix      NO NAME   Table 2
    6     Unix      Амаров    Table 1
    2     Unix      Петров    Table 1
    

    На сегодня всё. В следующий раз я познакомлю тебя с изменением таблицы. До сих пор мы только получали данные, пора научиться и модифицировать их. Удачи!!!


  • Copyright©: Horrific aka Флёнов Михаил
    Design by FMk group©