Spec-Zone .ru
спецификации, руководства, описания, API
|
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 |+--------+------+-----------------------------+
Есть несколько вещей отметить об этом запросе:
FROM
пункт присоединяется к двум таблицам, потому что
запрос должен вытянуть информацию от них обоих.
Комбинируя (присоединяющуюся) информацию от многократных таблиц, Вы должны
определить, как записи в одной таблице могут быть соответствующими к записям в другом. Это легко, потому
что у них обоих есть a name
столбец. Запрос использует ON
пункт, чтобы подойти записи в этих двух таблицах, основанных на name
значения.
Запрос использует INNER JOIN
объединить таблицы. INNER
JOIN
строки разрешений от любой таблицы, чтобы появиться в результате, если и только если обе
таблицы удовлетворяют условиям, определенным в ON
пункт. В этом примере,
ON
пункт определяет что name
столбец в
pet
таблица должна соответствовать name
столбец в event
таблица. Если имя появится в одной таблице, но не
другом, то строка не будет появляться в результате потому что условие в ON
сбои пункта.
Поскольку name
столбец происходит в обеих таблицах,
следует быть определенными, о которой таблице Вы имеете в виду, обращаясь к столбцу. Это делается,
предварительно ожидая имя таблицы к имени столбца.
У Вас не должно быть двух различных таблиц, чтобы выполнить соединение. Иногда полезно соединить таблицу с
собой, если Вы хотите сравнить записи в таблице к другим записям в той же самой таблице. Например, чтобы найти
родительские пары среди Ваших домашних животных, можно присоединиться 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 |+--------+------+--------+------+---------+
В этом запросе мы определяем псевдонимы для имени таблицы, чтобы обратиться к столбцам и сохранить прямо, с каким экземпляром таблицы каждая ссылка столбца связывается.