Spec-Zone .ru
спецификации, руководства, описания, API

3.3.4.9. Используя больше чем одну Таблицу

pet таблица отслеживает, из которых домашних животных Вы имеете. Если Вы хотите записать другую информацию о них, такую как события в их жизнях как посещения ветеринара или когда мусор рождается, Вы нуждаетесь в другой таблице. На что должна быть похожей эта таблица? Это должно содержать следующую информацию:

Уделенный это внимание, CREATE TABLE оператор для event таблица могла бы быть похожей на это:

mysql> CREATE TABLE event (name VARCHAR(20), date
        DATE,    -> type VARCHAR(15), remark
        VARCHAR(255));

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

имя дата ввести комментарий
Пушистый 1995-05-15 мусор 4 котенка, 3 розеточный, 1 штекерный
Желтый 1993-06-23 мусор 5 щенков, 2 розеточный, 3 штекерный
Желтый 1994-06-19 мусор 3 щенка, 3 розеточный
Веселый 1999-03-21 ветеринар необходимый клюв выправился
Тонкий 1997-08-03 ветеринар поврежденное ребро
Теплозаправщик 1991-10-12 конура
Клык 1991-10-12 конура
Клык 1998-08-28 день рождения Дал ему, новое жует игрушку
Когти 1998-03-17 день рождения Дал ему новое неприметное кольцо
Whistler 1998-12-09 день рождения Первый день рождения

Загрузите записи как это:

mysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE
        event;

Основанный на том, что Вы узнали из запросов, что работали pet таблица, следует быть в состоянии выполнить извлечения на записях в event таблица; принципы являются тем же самым. Но когда event таблица, отдельно недостаточная, чтобы ответить на вопросы, Вы могли бы спросить?

Предположите, что Вы хотите узнать возрасты, в которых у каждого домашнего животного был свой мусор. Мы видели ранее, как вычислить возрасты с двух дат. Дата мусора родительского элемента находится в event таблица, но вычислить ее возраст на ту дату, Вы нуждаетесь в ее дате рождения, которая сохранена в pet таблица. Это означает, что запрос требует обеих таблиц:

mysql> SELECT
        pet.name,    -> (YEAR(date)-YEAR(birth)) - (RIGHT(date,5)<RIGHT(birth,5))
        AS age,    -> remark    -> FROM pet INNER JOIN event    -> 
        ON pet.name = event.name    -> WHERE event.type =
        'litter';+--------+------+-----------------------------+| name   | age  | remark                      |+--------+------+-----------------------------+| Fluffy |    2 | 4 kittens, 3 female, 1 male || Buffy  |    4 | 5 puppies, 2 female, 3 male || Buffy  |    5 | 3 puppies, 3 female         |+--------+------+-----------------------------+

Есть несколько вещей отметить об этом запросе:

У Вас не должно быть двух различных таблиц, чтобы выполнить соединение. Иногда полезно соединить таблицу с собой, если Вы хотите сравнить записи в таблице к другим записям в той же самой таблице. Например, чтобы найти родительские пары среди Ваших домашних животных, можно присоединиться pet таблица с собой, чтобы произвести пар кандидата мужчин и женщин подобных разновидностей:

mysql> SELECT p1.name, p1.sex, p2.name, p2.sex,
        p1.species    -> FROM pet AS p1 INNER JOIN pet AS
        p2    ->  ON p1.species = p2.species AND p1.sex = 'f' AND
        p2.sex = 'm';+--------+------+--------+------+---------+| name   | sex  | name   | sex  | species |+--------+------+--------+------+---------+| Fluffy | f    | Claws  | m    | cat     || Buffy  | f    | Fang   | m    | dog     || Buffy  | f    | Bowser | m    | dog     |+--------+------+--------+------+---------+

В этом запросе мы определяем псевдонимы для имени таблицы, чтобы обратиться к столбцам и сохранить прямо, с каким экземпляром таблицы каждая ссылка столбца связывается.