Em Fevereiro colocamos aqui um post com algumas questões de SQL que poderiam ser colocadas numa entrevista.
Vamos tornar a abordar o problema, com a seguinte tabela:
mysql> select * from e;
+-------+-------+
| nome | valor |
+-------+-------+
| josé | 20 |
| joão | 10 |
| rui | 5 |
| pedro | 3 |
| josé | 5 |
| pedro | 10 |
| luís | 25 |
+-------+-------+
7 rows in set (0.00 sec)
Algo que costuma ser feito já depois das queries é perguntar aos candidatos quais os tipos de dados das duas colunas.
Para efeitos deste post, vamos assumir uma base de dados MySQL com uma tabela definida da seguinte forma:
create table e (
nome varchar(50),
valor int
) ENGINE=InnoDB;
INSERT INTO e (nome, valor) VALUES
('josé', 20),
('joão', 10),
('rui', 5),
('pedro', 3),
('josé', 5),
('pedro', 10),
('luís', 25)
;
Vamos analisar as queries que propusemos no nosso post anterior.
mysql> select sum(valor) from e;
+------------+
| sum(valor) |
+------------+
| 78 |
+------------+
1 row in set (0.40 sec)
É das queries mais simples e quase todos os candidatos a escrevem correctamente.
mysql> select nome, sum(valor) from e group by nome;
+-------+------------+
| nome | sum(valor) |
+-------+------------+
| joão | 10 |
| josé | 25 |
| luís | 25 |
| pedro | 13 |
| rui | 5 |
+-------+------------+
5 rows in set (0.04 sec)
Quase todas as pessoas sabem como se faz, mas já se encontra alguns candidatos que trocam a ordem de algumas cláusulas, que se esquecem do group by, etc.
mysql> select nome from e group by nome having count(1) > 1;
+-------+
| nome |
+-------+
| josé |
| pedro |
+-------+
2 rows in set (0.00 sec)
Neste ponto sim, já começamos a perder muito boa gente.
mysql> select group_concat(distinct nome) from e;
+-----------------------------+
| group_concat(distinct nome) |
+-----------------------------+
| josé,joão,rui,pedro,luís |
+-----------------------------+
1 row in set (0.00 sec)
Tipicamente já só acerta estas queries quem tem experiência intensiva com bases de dados.
Faz sentido, porque é perfeitamente viável trabalhar com bases de dados sem usar extensivamente tudo o que elas nos oferecem.
Não será de facto por não saber algo deste género que um candidato ficará pelo caminho, mas são perguntas como esta que permitem ir discernindo o tipo de uso que a pessoa dá à base de dados.
Perguntas como esta e não só: perguntas sobre as perguntas.
Numa entrevista não declaramos a base de dados, apenas a desenhamos num quadro ou numa folha de papel.
Depois de termos abordado várias queries, aí sim, abordam-se outras temáticas:
Há sempre mais qualquer coisa que a conversa traz, como por exemplo o entrevistado sugerir que o tipo de dados do valor deveria ser um INT(3)...