A tabela pet
mantém informações de quais
animais você tem. Se você deseja gravar outras informações
sobre eles como eventos em suas vidas, tais como visitas ao
veterinário ou sobre suas crias, você necessitará de outra
tabela. Como esta tabela deve se parecer ? Ela precisa:
Conter o nome do animal para que você saiba a qual animal pertence o evento.
Uma data para que você saiba quando ocorreu o evento.
Um campo para descrever o evento.
Um campo com o tipo de evento, se você desejar classificá-los por categoria.
Dadas estas considerações, a instrução CREATE
TABLE
para a tabela event
deve se
parecer com isto:
mysql>CREATE TABLE event (name VARCHAR(20), date DATE,
->type VARCHAR(15), remark VARCHAR(255));
Como na tabela pet
, é mais fácil carregar
os registros iniciais criando um arquivo texto delimitado por
tabulações contendo a informação:
name | date | type | remark |
Fluffy | 1995-05-15 | litter | 4 kittens, 3 female, 1 male |
Buffy | 1993-06-23 | litter | 5 puppies, 2 female, 3 male |
Buffy | 1994-06-19 | litter | 3 puppies, 3 female |
Chirpy | 1999-03-21 | vet | needed beak straightened |
Slim | 1997-08-03 | vet | broken rib |
Bowser | 1991-10-12 | kennel | |
Fang | 1991-10-12 | kennel | |
Fang | 1998-08-28 | birthday | Gave him a new chew toy |
Claws | 1998-03-17 | birthday | Gave him a new flea collar |
Whistler | 1998-12-09 | birthday | First birthday |
Carregue os registros usando:
mysql> LOAD DATA LOCAL INFILE "event.txt" INTO TABLE event;
Baseado no que você já aprendeu com as consultas realizadas
na tabela pet
, você deve estar apto para
realizar pesquisas na tabela event
; os
princípios são o mesmo. Mas quando a tabela
event
, sozinha, é insuficiente para
responder às suas questões?
Suppose you want to find out the ages at which each pet had
its litters. We saw earlier how to calculate ages from two
dates. The litter date of the mother is in the
event
table, but to calculate her age on
that date you need her birth date, which is stored in the
pet
table. This means the query requires
both tables:
Suponha que você deseje descobrir as idades de cada animal
quando eles tiveram cria. Nós vemos logo que é possível
calcular a idade a partir das duas datas. A idade dos filhotes
está na tabela event
, mas para calcular a
idade da mãe, você precisará da data de nascimento dela,
que está armazenado na tabela pet
. Isto
significa que você precisará das duas tabelas para a
consulta:
mysql>SELECT pet.name,
->(YEAR(date)-YEAR(birth)) - (RIGHT(date,5)<RIGHT(birth,5)) AS age,
->remark
->FROM pet, event
->WHERE pet.name = event.name AND 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 | +--------+------+-----------------------------+
Existem várias coisas que devem ser percebidas sobre esta consulta:
A cláusula FROM
lista as duas tabelas
porque a consulta precisa extrair informação de ambas.
Quando combinar (unir) informações de múltiplas
tabelas, você precisa especificar como registros em uma
tabela podem ser coincididas com os registros na outra.
Isto é simples porque ambas possuem uma coluna
name
. A consulta utiliza a cláusula
WHERE
para coincidir registros nas duas
tabelas baseadas nos valores de name
.
Como a coluna name
ocorre em ambas
tabelas, você deve especificar qual a tabela a que você
está se referindo. Isto é feito usando o nome da tabela
antes do nome da coluna separados por um ponto
(.
).
Você não precisa ter duas tabelas diferentes para realizar
uma união. Algumas vezes é útil unir uma tabela a ela
mesma, se você deseja comparar registros em uma tabela com
outros registros na mesma tabela. Por exemplo, para encontrar
pares entre seus animais, você pode unir a tabela
pet
com ela mesma para produzir pares
candidatos de machos e fêmeas de acordo com as espécies:
mysql>SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
->FROM pet AS p1, pet AS p2
->WHERE 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 | +--------+------+--------+------+---------+
Nesta consulta, nós especificamos apelidos para os nomes das tabelas para conseguir referenciar às colunas e manter com qual instância da tabela cada coluna de referência está associdada.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.