SóProvas


ID
1112929
Banca
FCC
Órgão
AL-PE
Ano
2014
Provas
Disciplina
Banco de Dados
Assuntos

Em um banco de dados há duas tabelas, departamento e funcionario, cujos campos são:

Departamento:

DepNo - int - primary key - not null

DNome - varchar(50) - not null

DLocal - varchar(40)

Funcionario:

FunNo - int - primary key - not null

DepNo - int - foreign key - not null

FNome - varchar(50) - not null

FCargo - varchar(40)

FSal - double

Ambas as tabelas possuem muitos registros cadastrados, que não incluem valores nulos. Considere as instruções SQL a seguir:

I. select funcionario.FunNo, funcionario.FNome, departamento.DNome from funcionario INNER JOIN departamento ON funcionario.DepNo = departamento.DepNo;

II. select funcionario.FunNo, funcionario.FNome, departamento.DNome from funcionario, departamento where funcionario.DepNo = departamento.DepNo;

III. select f.FunNo, f.FNome, d.DNome from (select departamento.DepNo, departamento.DNome from departamento) as d, funcionario as f where d.DepNo = f.DepNo;

IV. select DISTINCT f.FunNo, f.FNome, d.DNome from funcionario f, departamento d;

Para excluir todos os funcionários que tenham o cargo (FCargo) iniciados por 'An' e salário (FSal) menor ou igual a 800, utiliza-se a instrução:

Alternativas
Comentários
  • Fiquei na dúvida entre os itens A, B e  E. Alguém poderia comentar?

  • Na alternativa a) o erro está na atribuição de equivalência "=" que procura o termo exato ao que foi descrito (por exemplo se o comando fosse ... ="AN" ... ele somente retornaria aqueles registros cujo cargo fosse exatamente "AN"), para a seleção de termos parciais o operador que deve ser usado é o like e dentro do parâmetro o simbolo "%" (Ex:"XYZ%" para valores que começam com o termo, "%XYZ" para valores q terminar com o termo e "%XYZ%" para valores que contém o termo) ;

    A alternativa b) é a resposta;

    Já a alternativa e) o erro está na inserção do comando "*" que só é utilizado em seleções (SELECT) para determinar que todos os campos daquela seleção deverão ser exibidos, no caso do delete como irá se apagar a linha em sua totalidade o comando não permite o uso do "*" uma vez que já é implícito que são todos os campos;

  • Guilherme,

    Segundo o site w3schools, é possível utilizar o * ou não.

    Delete All Data

    It is possible to delete all rows in a table without deleting the table. This means that the table structure, attributes, and indexes will be intact:

    DELETE FROM table_name;

    or

    DELETE * FROM table_name;

    fonte:http://www.w3schools.com/sql/sql_delete.asp

  • Esclarecendo para futuros candidatos, o comentário do colega Gustavo N está correto:

    Podemos usar DELETR FROM TABLE, ou DELETE * FROM TABLE;

    PORÉM, quando usamos o WHERE o correto será sem o *. Um colega do QCONCURSOS comentou a dica abaixo e nunca mais esqueci, pena que perdi a questão  onde ele explica a mesma para dar os créditos a ele;

     

    Se usarmos o DELETE * FROM  sala_aula WHERE nome='Luiz', estaremos dizendo  para o banco de dados:

    "Apague todos os registros, delete * from sala_aula,, NÃO NÃO perai! apaga só os registro que o aluno é igual a Luiz,where nome='Luiz', isso deixará nosso banco de dados maluco!!! Ueé é para apagar todos os registros da tabela sala_aula ou só os registros que  o nome é Luiz?

    Por isso usamos " DELETE FROM sala_aula WHERE nome='Luiz', o SQL interpretará da forma correta: deleta todos os registros que tenham como nome=Luiz.

    Isso explica a diferença entre as alternativas B e E;

    GABARITO LETRA B