Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

Duplicidade

Nessa aula, quando coloquei. <> Diogo duplicou todos os nomes na base, sabem me explicar o pq?

SELECT nome,
idade,
matriculado_em AS quando_se_matriculou
FROM aluno;

INSERT INTO aluno (nome) VALUES ('Vincius Dias');
INSERT INTO aluno (nome) VALUES ('Nico Steppat');
INSERT INTO aluno (nome) VALUES ('Joao Roberto');
INSERT INTO aluno (nome) VALUES ('Diego');

SELECT *
from aluno
WHERE nome <> 'Diogo'

2 respostas

Tamnbém quando coloquei NOT LIKE Diogo apareceu ele na listagem SELECT *
from aluno
WHERE nome not LIKE 'Di_iogo'

Oi, Camila! Como vai você?

A duplicidade no PostgreSQL, está ligado à diferença entre inserir dados e filtrar dados.

Cada INSERT adiciona um novo registro na tabela. Se o mesmo comando for executado novamente, o PostgreSQL poderá inserir o mesmo nome outra vez, desde que não exista uma restrição de unicidade.

INSERT INTO aluno (nome) VALUES ('Vincius Dias');
INSERT INTO aluno (nome) VALUES ('Nico Steppat');
INSERT INTO aluno (nome) VALUES ('Joao Roberto');
INSERT INTO aluno (nome) VALUES ('Diego');

Esse código adiciona quatro registros. Se ele for executado novamente, serão adicionados mais quatro.

Já esta consulta:

SELECT *
FROM aluno
WHERE nome <> 'Diogo';

não altera a tabela. O operador <>; significa diferente de, então serão exibidos todos os alunos cujo nome seja diferente de Diogo.

No caso do NOT LIKE, o detalhe está no _:

SELECT *
FROM aluno
WHERE nome NOT LIKE 'Di_iogo';

No LIKE, _ representa um único caractere. O padrão Di_iogo não corresponde exatamente a Diogo. Como o NOT LIKE seleciona o que não corresponde ao padrão, Diogo aparece no resultado.

Se você quer apenas excluir Diogo, use:

SELECT *
FROM aluno
WHERE nome <> 'Diogo';

Para descobrir se existem nomes realmente duplicados, você também pode usar GROUP BY:

SELECT nome, COUNT(*)
FROM aluno
GROUP BY nome
HAVING COUNT(*) > 1;

Esse código mostra apenas os nomes que aparecem mais de uma vez.

Você consegue testar esse último comando e verificar quais nomes estão duplicados na sua tabela?

Espero ter ajudado e conte sempre consoco!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!
```

Oi, Camila! Tudo bem? Sobre duplicidade no PostgreSQL, o que aconteceu está ligado à diferença entre inserir dados e filtrar dados.

Cada INSERT adiciona um novo registro na tabela. Se o mesmo comando for executado novamente, o PostgreSQL poderá inserir o mesmo nome outra vez, desde que não exista uma restrição de unicidade.

INSERT INTO aluno (nome) VALUES ('Vincius Dias');
INSERT INTO aluno (nome) VALUES ('Nico Steppat');
INSERT INTO aluno (nome) VALUES ('Joao Roberto');
INSERT INTO aluno (nome) VALUES ('Diego');

Esse código adiciona quatro registros. Se ele for executado novamente, serão adicionados mais quatro.

Já esta consulta:

SELECT *
FROM aluno
WHERE nome <> 'Diogo';

não altera a tabela. O operador <> significa diferente de, então serão exibidos todos os alunos cujo nome seja diferente de Diogo.

No caso do NOT LIKE, o detalhe está no _:

SELECT *
FROM aluno
WHERE nome NOT LIKE 'Di_iogo';

No LIKE, _ representa um único caractere. O padrão Di_iogo não corresponde exatamente a Diogo. Como o NOT LIKE seleciona o que não corresponde ao padrão, Diogo aparece no resultado.

Se você quer apenas excluir Diogo, use:

SELECT *
FROM aluno
WHERE nome <> 'Diogo';

Para descobrir se existem nomes realmente duplicados, você também pode usar GROUP BY:

SELECT nome, COUNT(*)
FROM aluno
GROUP BY nome
HAVING COUNT(*) > 1;

Esse código mostra apenas os nomes que aparecem mais de uma vez.

Você consegue testar esse último comando e verificar quais nomes estão duplicados na sua tabela?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!