Considere uma tabela relacional com uma coluna, intitulada ...

Próximas questões
Com base no mesmo assunto
Q1933258 Banco de Dados
Considere uma tabela relacional com uma coluna, intitulada Cidade, que contém as strings
“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:
Alternativas

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