Caderno de Prova

O Que É SQL Select? (com exemplos)

CEBRASPE (2019):

QUESTÃO CERTA: No modelo apresentado no texto 9A1-I, um cliente pode ser responsável por vários clientes (seus dependentes, por exemplo). Com base nisso, assinale a opção que indica o comando, em linguagem SQL, capaz de produzir uma listagem de todos os clientes (dependentes) cujos responsáveis estejam cadastrados, seguidos de seus respectivos responsáveis, exatamente nessa sequência (dependentes e responsáveis).

“Neste caso, a query está selecionando o responsável do ALIAS “a” com o código do cliente do ALIAS “b”, ou seja, está relacionando todos os dependentes (responsáveis diferente de vazio) com seus respectivos responsáveis (b.CodCliente).

A questão não é trivial. Vamos tentar entender a resposta.

Um Exemplo:

CodCliente,EnderecoCliente,TelefoneCliente,NomeCliente,Responsavel

1, , , JOSE DA SILVA,null

2, , , MARIA DA SILVA,null

3, , , RICARDO SILVA,null

4, , , ZEZINHO,1

5, , , MARIAZINHA,2

6, , , JOAOZINHO,2

1) FROM CLIENTE A, CLIENTE B – Imaginemos aqui duas tabelas criadas A e B de conteúdos idênticos. Certo que o select desse from será o produto cartesiano de CLIENTE com ele mesmo resultando em uma quantidade de registro igual a n x n (onde n é o total de registros na tabela cliente). No nosso exemplo teríamos 36 registros no select * from cliente A, cliente B;

2) WHERE B.codCliente = A.Responsavel – aqui estamos filtrando a tabela “virtual” B. O resultado desse filtro fará com que B tenha apenas responsáveis por algum outro cliente. Como assim? Ora, estou querendo apenas os clientes B (codCliente) em que na tabela A esteja com o campo Responsavel (o código) preenchido (que são exatamente os responsáveis por alguém). Quem tiver com Responsavel = NULL não será usado no filtro visto que estamos tratando de um filtro de campo chave (CodCliente – obrigatório); Ao final CLIENTE B só terá Clientes responsáveis por outro cliente.

TABELA CLIENTE B:

CodCliente,EnderecoCliente,TelefoneCliente,NomeCliente,Responsavel

1, , , JOSE DA SILVA,null

2, , , MARIA DA SILVA,null

3) Tabela A continua como estava originalmente? Não também. Ela será afetada por WHERE B.codCliente = A.Responsavel. A será filtrada considerando B.codCliente. Mas B nesse momento B já está filtrada com apenas os responsáveis. Com isso a tabela A possuirá apenas os clientes que possuem os responsáveis que estão na tabela B.

TABELA CLIENTE A NO FINAL (A.Responsavel in (1,2)):

CodCliente,EnderecoCliente,TelefoneCliente,NomeCliente,Responsavel

4, , , ZEZINHO,1

5, , , MARIAZINHA,2

6, , , JOAOZINHO,2

4) agora ficou mais fácil. SELECT A.NomeCliente, B.NomeCliente – Resultará em

(4) ZEZINHO, (1) JOSE DA SILVA

(5) MARIAZINHA, (2) MARIA DA SILVA

(6) JOAOZINHO, (2) MARIA DA SILVA”

CEBRASPE (2016)

QUESTÃO ERRADA: Para obter a quantidade de linhas que atendem a determinada instrução SQL, o processo mais eficiente e rápido é executar o comando SELECT e aplicar uma estrutura de loop para contar as linhas resultantes.

“A forma mais eficiente e rápida seria usar o count(*)”.

CEBRASPE (2016)

QUESTÃO ERRADA: Em uma mesma base de dados, uma instrução de SELECT com união de duas tabelas (INNER JOIN) e uma instrução de SELECT em uma tabela utilizando um SELECT interno de outra tabela (subquery) produzem o mesmo resultado e são executadas com o mesmo desempenho ou velocidade.

“… não são necessariamente executadas com o mesmo desempenho ou velocidade”.

CEBRASPE (2008):

QUESTÃO ERRADA: SELECT, COUNT e DISTINCT são instruções mutuamente exclusivas em SQL e, dessa maneira, não podem ser utilizadas em uma mesma sentença SQL.

“Muito pelo contrário, COUNT e DISTINCT só poderão ser utilizadas dentro de instruções SELECT. Ou seja, pode existir SELECT sem COUNT nem DISTINCT, ou com uma das duas, ou até mesmo com as duas”.

Advertisement
Sair da versão mobile