Página 24
Você também podia escrever a pergunta prévia usando "{n}":
mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
Contando filas
Bancos de Dados são freqüentemente utilizados para responder a pergunta, "quantas vezes faz um certo tipo de dados ocorrer em uma tabela?" Por exemplo, você pôde querer saber quantos animais de estimação você tem, ou quantos animais de estimação cada dono tem, ou você pôde desejar desempenhar várias espécies de censos em seus animais. Contando o número total de animais você faz a mesma pergunta de "quantas filas tem na tabela de animal de estimação?" porque há um registro, por cada animal de estimação.
A função COUNT() conta o número de resultados não NULOS, assim a pergunta para contar seus de animais é:
mysql> SELECT COUNT(*) FROM pet;
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+
Mais, você recuperou os nomes das pessoas que possuíam animais de estimação. Você pode usar COUNT() se você deseja descobrir quantos animais de estimação cada dono tem:
mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
+--------+----------+
| owner | COUNT(*) |
+--------+----------+
| Benny | 2 |
| Diane | 2 |
| Gwen | 3 |
| Harold | 2 |
+--------+----------+
Note o uso de GROUP BY para agrupar juntamente todos os registros de cada dono. Sem isto, você obtém uma mensagem de erro:
mysql> SELECT owner, COUNT(owner) FROM pet;
ERROR 1140 at line 1: Mixing of GROUP columns (MIN(),MAX(),COUNT()...)
with no GROUP columns is illegal if there is no GROUP BY clause
COUNT() e AGROUP BY são úteis para caracterizar seus dados em vários caminhos. Os seguintes exemplos mostram caminhos diferentes para desempenhar operações de censo animais.
Número de animais por espécie:
mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;
+---------+----------+
| species | COUNT(*) |
+---------+----------+
| bird | 2 |
| cat | 2 |
| dog | 3 |
| hamster | 1 |
| snake | 1 |
+---------+----------+
Número de animais por sexo:
mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;
+------+----------+
| sex | COUNT(*) |
+------+----------+
| NULL | 1 |
| f | 4 |
| m | 4 |
+------+----------+
(Nesta saída, NULL indica "sexo desconhecido.")
Número de animais por combinação de espécie e sexo:
mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
+---------+------+----------+
| species | sex | COUNT(*) |
+---------+------+----------+
| bird | NULL | 1 |
| bird | f | 1 |
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
| hamster | f | 1 |
| snake
|