Considere uma tabela relacional com uma coluna, intitulada ...
“São Paulo”, “Rio de Janeiro”, “Manaus”, “Sao Paulo”, “Manaus”, dispostas uma em cada linha.
A execução dos comandos SQL
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CI_AI in ('São Paulo','Rio de Janeiro', 'MANAUS')
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CI_AS in ('São Paulo','Rio de Janeiro', 'MANAUS')
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CS_AI in ('São Paulo','Rio de Janeiro', 'MANAUS')
no MS SQL Server produz resultados que, além da linha de títulos, contêm, respectivamente:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: E - 5, 4 e 3 linhas.
Para resolver esta questão, é necessário compreender o conceito de COLLATE no SQL Server, que é usado para definir regras de comparação de caracteres em operações como seleção e ordenação de dados. As opções de COLLATE especificadas determinam se as comparações são sensíveis à caixa (maiúsculas/minúsculas) e acentos.
Os sufixos utilizados, CI, AI, CS e AS, significam:
- CI: Case Insensitive (não sensível a maiúsculas e minúsculas)
- AI: Accent Insensitive (não sensível a acentos)
- CS: Case Sensitive (sensível a maiúsculas e minúsculas)
- AS: Accent Sensitive (sensível a acentos)
No primeiro SELECT com COLLATE Latin1_General_CI_AI, a busca é insensível tanto a maiúsculas e minúsculas quanto a acentos. Assim, as entradas "São Paulo", "Sao Paulo" e "MANAUS" (em diferentes combinações de caixa) são encontradas. No total, 5 linhas correspondem à condição.
No segundo SELECT com COLLATE Latin1_General_CI_AS, a busca é insensível a maiúsculas e minúsculas, mas sensível a acentos. Isso significa que "MANAUS" será encontrada independente da caixa, mas "Sao Paulo" não será considerada igual a "São Paulo" por causa do acento. Assim, 4 linhas correspondem à condição.
Já no terceiro SELECT com COLLATE Latin1_General_CS_AI, a busca é sensível a maiúsculas e minúsculas, mas insensível a acentos. "MANAUS" só será encontrada se estiver em caixa alta, e "São Paulo" será considerada igual a "Sao Paulo". Desse modo, 3 linhas correspondem à condição.
Portanto, a alternativa E - 5, 4 e 3 linhas está correta, porque reflete as quantidades de linhas encontradas pelos SELECTs de acordo com as regras de comparação de caracteres estabelecidas pelos três COLLATEs utilizados.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
COLLATE - especifica o conjunto de caracteres e regras que está sendo utilizado na consulta
LATIN1 - define o charset
CS - especifica como Case Sensitive
AI - especifica como accent insensitive
CI - case insensitive
AS - accent sensitive
BIN - ordem de classificação binária
A última retornará Manaus?? ele pesquisa MANAUS, e define CS (Case Sensitive)
Aplicando o que o Celso explicou acima:
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CI_AI in ('São Paulo','Rio de Janeiro', 'MANAUS') retorna todos os 5 registros, porque a consulta não é sensível a maiúsculas/minúsculas nem a acentos;
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CI_AS in ('São Paulo','Rio de Janeiro', 'MANAUS') retorna 4 registros: São Paulo, Rio de Janeiro, Manaus e Manaus. Não retorna Sao Paulo porque a consulta é sensível a acentos.
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CS_AI in ('São Paulo','Rio de Janeiro', 'MANAUS') retorna 3 registros: São Paulo, Sao Paulo e Rio de Janeiro. Não retorna Manaus e Manaus porque a consulta é sensível a maiúsculas/minúsculas.
GABARITO: E
Reparem que no enunciado a cidade de São Paulo aparece duas vezes, uma com São (com acento) outra com Sao (sem acento).
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo