Exercícios de sql resolvidos básicos e avançados

Para mandar bem em provas, exames e concursos treine e aprenda gratuitamente com esta lista de exercícios resolvidos básicos e avançados de SQL.

Exercício 1 de 10

Ano: 2019 Banca: FUNDATEC Órgão: Prefeitura de Gramado - RS Cargo: Técnico em Informática

📌 Os comandos DTL são responsáveis por gerenciar diferentes transações ocorridas dentro de um Banco de dados. Ele é dividido em três comandos, quais sejam:

Parte 1 da resolução

O subgrupo DTL (Data Transaction Language ou Liguagem de Transação de Dados) da sql é composto pelos comandos:

  • COMMIT - Instrução SQL usada para finalizar uma transação e tornar permanentes o resultado de uma query de modificação, inclusão ou alteração de dados.
  • ROLLBACK - Instrução SQL usada para desfazer o resultado de uma transação de uma query de modificação, inclusão ou alteração de dados.
  • BEGIN - Instrução SQL usada para indicar um bloco de transação, ou seja, indica onde a transaçã começa ou qual parte de uma query será controlada por transação.

Por eliminação chega-se a resposta Letra A, lembrando que o comando BEGIN sofre variações dependendo do fabricante de banco de dados.

  • Oracle - Usa-se BEGIN ... END;
  • Postgres - Usa-se BEGIN [WORK,TRANSACTION] as palavras WORK e TRANSACTION são opcionais e sem efeito.
  • MySQL/MariaDB - BEGIN [NOT ATOMIC] ... END; as palavras NOT ATOMIC são usadas quando estão fora de uma stored procedure.
  • SQL Server - BEGIN [TRAN, TRANSACTION]
  • Informix - BEGIN [WORK] a palavra WORK é opcional.
  • DB2 - Usa-se BEGIN ... END;

💡 A linguagem SQL é subdivida em conjuntos de acordo com a operação que se deseja executar. Os subconjuntos principais são DML, DDL, DCL, DTL e DQL.

Exercício 2 de 10

Ano: 2019 Banca: FCC Órgão: SEFAZ-BA Cargo: Auditor Fiscal - Administração Tributária

📌 Em uma tabela chamada Contribuinte de um banco de dados padrão SQL aberto e em condições ideais há o campo idContribuinte do tipo inteiro e chave primária. Há também o campo nomeContribuinte que é do tipo varchar. Nessa tabela, um Auditor Fiscal deseja alterar o nome do contribuinte de id 1 para 'Marcos Silva'. Para isso, terá que utilizar o comando

Parte 1 da resolução

No enunciado do exercício foi dito que em uma tabela o usuário do banco de dados deseja atualizar os dados de uma tupla(registro ou linha da tabela), ou seja, será usado usado o comando DML(Data Manipulation Language) UPDATE.

Como a instrução ALTER TABLE é do subgrupo DDL(Data Definition Language) da linguagem SQL, as alternativas A e D serão descartadas, já que o enunciado da questão pede um comando DML.

Analisando-se as alternativas B, C e D sabemos que a alternativa correta é a Letra B pois a Letra E e C estão errada visto que a sintaxe do comando UPDATE não admite as palavras TABLE, FIELD, FROM e TO. A sintaxe correta da instrução UPDATE é:

  • UPDATE [nome da tabela] SET [campo=valor] WHERE [condições];

💡 As instruções DML(Data Manipulation Language ou Linguagem de Manipulação de dados) são INSERT, UDPATE e DELETE, sendo que a instrução SELECT se enquadra como DQL(Data Query Language ou Linguagem de Consulta de Dados)

Exercício 3 de 10

Ano: 2018 Banca: UFES Órgão: UFES Cargo: Técnico em Tecnologia da Informação

📌 A expressão em SQL padrão descrita no quadro abaixo realiza uma consulta em um banco de dados que contém, pelo menos, duas tabelas, sendo uma denominada FUNCIONARIO e outra denominada DEPENDENTE, que armazenam informações sobre funcionários de uma empresa e seus dependentes, respectivamente.

A tabela FUNCIONARIO possui pelo menos três atributos: nome_func, sobrenome_func e cpf_func, que armazenam, respectivamente, o nome, o sobrenome e o número de CPF dos funcionários.

A tabela DEPENDENTE possui pelo menos quatro atributos: nome_depen, sobrenome_depen e cpf_depen, que armazenam, respectivamente, o nome, o sobrenome e o número de CPF dos dependentes, e cpf_func_resp, que armazena o número do CPF do funcionário responsável pelos dependentes.

SELECT nome_func, sobrenome_func
FROM FUNCIONARIO
WHERE NOT EXISTS (
SELECT * FROM DEPENDENTE
WHERE cpf_func = cpf_func_resp
);

Com base nas informações apresentadas, a consulta em SQL padrão acima descrita recupera :

Parte 1 da resolução

Para solucionar o exercícios vamos supor que as tabelas FUNCIONARIO e DEPENDENTE estão preenchidas conforme ilustrado abaixo:

  • Tabela FUNCIONARIO
    • nome_funcsobrenome_funccpf_func
      JoãoAlemeida111.111.111-11
      PedroSilva111.111.111-12
      PatriciaAlves111.111.111-13
      PietraOliveira111.111.111-14
  • Tabela DEPENDENTE
    • nome_depensobrenome_depencpf_depencpf_func_resp
      CarlaSilva222.222.222-21111.111.111-12
      RicardoSilva222.222.222-22111.111.111-12
      EmanuelSilva222.222.222-23111.111.111-12
      EnricoOliveira222.222.222-24111.111.111-14
      LunaOliveira222.222.222-25111.111.111-14

Parte 2 da resolução

Apesar de a subquery SELECT * FROM DEPENDENTE WHERE cpf_func = cpf_func_resp informada no exercício, somente retornar os registros da tabela DEPENDENTE que estejam relacionados com a tabela FUNCIONARIO pela foreign key cpf_func_resp, a instrução externa NOT EXISTS é usada somente para retornar os registro que não foram encontrados no subselect.

Observação: O comando EXISTS é usado para testar se algum registro é localizado, e sendo utilizado com a instrução NOT a ideia é verificar se um registro não foi localizado na subquery.

Já pela query externa SELECT nome_func, sobrenome_func FROM FUNCIONARIO sabemos que o que será encontrado são os dados de nome e sobrenome dos funcionários da tabela FUNCIONARIO, podendo-se eliminar as alternativas B, D e E.

Por fim, entre as alternativas A e C, chega-se a resolução alternativa A, já que as restrições constantes na cláusula WHERE, conforme explicado acima e continuando a ilustração da parte 1 abaixo, irão retornar os dados de funcionários que não possuem dependentes.

  • Tabela FUNCIONARIO
    • nome_funcsobrenome_func
      JoãoAlemeida
      PatriciaAlves

💡 Na linguagem SQL uma subconsulta, subquery ou subselect é uma instrução SELECT utilizada dentro de outra instrução SELECT. Um subselect pode retornar somente um valor ou um conjunto de valores que serão usados por alguma cláusula do SELECT mais externo.

Exercício 4 de 10

Ano: 2018 Banca: CESPE Órgão: TCE-MG Cargo: Analista de controle externo - Ciência da computação

📌 Julgue os próximos itens, no que diz respeito a comandos SQL de consulta.

  • I Subqueries de múltiplas colunas retornam várias colunas em uma mesma linha.
  • II A função UNION apresenta as linhas que existam simultaneamente em duas ou mais tabelas.
  • III A função EXISTS garante que o resultado de uma subquery somente seja mostrado se retornar uma ou mais linhas.
  • IV A função EXTRACT retorna uma das informações de um campo do tipo data (dia, mês, ano, hora, minuto ou segundo).

Assinale a opção correta.

Parte 1 da resolução

A afirmativa do item I "Subqueries de múltiplas colunas retornam várias colunas em uma mesma linha" está errada, pois as subqueries de múltiplas colunas retornam várias colunas em colunas distintas, conforme demonstrado no exemplo abaixo.

  • Suponha que a consulta SELECT * FROM tabelaum retorne o resultado da tabela abaixo :
    • campo_umcampo_dois
      11
      22
      31
      42
      51
  • Já a consulta SELECT * FROM tabelaumWHERE (campo_um, campo_dois) IN (SELECT campo_um, campo_dois FROM tabelaum WHERE campo_dois IN (1)); é executada corretamente e retorna uma tupla de dados fazendo uma comparação de duas colunas na subquery, conforme o resultado abaixo :
    • campo_umcampo_dois
      11
      31
      51

Parte 2 da resolução

A afirmativa do item 2 "A função UNION apresenta as linhas que existam simultaneamente em duas ou mais tabelas." está errada pois a instrução UNION retorna a diferença de registros entre duas tabelas mais uma linha por registro que seja igual. O texto item 2 se refere ao comando UNION ALL.

  • Suponha que a consulta SELECT * FROM tabelaum retorne o resultado da tabela abaixo :
    • campo_umcampo_dois
      11
      22
      31
  • Suponha que a consulta SELECT * FROM tabeladois retorne o resultado da tabela abaixo :
    • campo_umcampo_dois
      11
      22
      42
  • Com a query select campo_um, campo_dois from tabelaum union select campo_um, campo_dois from tabeladois é feito o union entre as tabelaum e tabeladois e o resultado é demonstrada abaixo :
    • campo_umcampo_dois
      22
      11
      31
      42
  • Com a query select campo_um, campo_dois from tabelaum union all select campo_um, campo_dois from tabeladois é feito a união sem descarte de registros entre as tabelaum e tabeladois e o resultado é demonstrada abaixo :
    • campo_umcampo_dois
      11
      22
      31
      11
      22
      42

Observação : Perceba que a query que usa UNION retorna 4 linhas enquanto que a query que usa UNION ALL retorna 6 linhas, ou seja, 3 linhas da tabela 1 com as 3 linhas da tabela 2.

Parte 3 da resolução

Já que os itens I e II estão errados, por eliminação sabe-se que as alternativas A, B, C e E não são a resposta, sobrando a Letra D como resposta correta.

💡 Procedimento armazenado ou Stored Procedure é uma coleção de comandos em SQL que encapsula tarefas repetitivas podendo ou não aceitar parâmetros de entrada e retornar dados de saída ou um valor de status (para indicar aceitação ou falha na execução).

Exercício 5 de 10

Ano: 2018 Banca: FCC Órgão: SEFAZ-SC Cargo: Analista de controle externo - Ciência da computação

📌 Para calcular o número de produtos com nomes que terminam com a letra B, o Auditor testou os comandos abaixo.

  • I. SELECT COUNT(nomePro)
    FROM Produto
    WHERE nomePro BEGIN '%B';
  • II. SELECT COUNT(*)
    FROM PRODUTO
    WHERE SUBSTR(nomePro, -1)='B';
  • III. SELECT COUNT(*)
    FROM Produto
    WHERE nomePro LIKE '%B';
  • IV. SELECT COUNT(nomePro)
    FROM Produto
    WHERE SUBSTR(nomePro, 0)='B';

Mostrará o resultado desejado o que consta APENAS em:

Parte 1 da resolução

Para iniciar a resolução deste exercício é importante entender que COUNT é uma das funções de agregação disponibilizadas pela linguagem SQL que tem com objetivo contabilizar a quantidade de linhas de um determinado grupo de dados.

Entre as alternativas há duas formas corretas de se utilizar a instrução COUNT, o comando COUNT(*) realizará a contabilização do número de linhas retornado pela query e COUNT(nomePro) realizará a contabilização do números de linhas retornado somente para a coluna nomePro. Supondo que a quantidade de registros seja igual em ambos os casos, COUN(*) e COUNT(nomePro) terão o mesmo resultado.

A partir desta primeira análise da instrução COUNT ainda não é possível identificar qual a alternativa correta.

Parte 2 da resolução

Verificando a cláusula WHERE das alternativas é possível eliminar a Letra B e D pois o comando BEGIN é um tipo de comando DTL(Data Transaction Language ou Linguagem de Transação de Dados) e no exercício cabe somente comandos DML(Data Manipulation Language ou Linguagem de Manipulação de Dados)

A instrução LIKE é usada em cláusulas WHERE para localizar registros de acordo com um determinado padrão, padrão que é definido por meio dos wildcars '%' e '_' conforme exemplos abaixo utilizando o wildcard '%':

  • Encontrar qualquer registro que começa com a letra B.
    • SELECT coluna FROM tabela WHERE coluna LIKE 'B%'
  • Encontrar qualquer registro que termina com a letra B.
    • SELECT coluna FROM tabela WHERE coluna LIKE '%B'
  • Encontrar qualquer registro que contenha a letra B em qualquer posição.
    • SELECT coluna FROM tabela WHERE coluna LIKE '%B%'
  • Encontrar qualquer registro que contenha começa com a letra B e termina com a letra C.
    • SELECT coluna FROM tabela WHERE coluna LIKE 'B%C'

Com base na análise acima da instrução LIKE chega-se a conclusão que o item III está correto.

Parte 3 da resolução

Por fim, para se chegar a resposta Letra E itens II e III corretos, é necessário saber que SUBSTR é uma instrução que tem como finalidade extrair um trecho da string original tendo como parâmetro um início, um tamanho opcional e a string original. Se o tamanho que se deseja extrair não for informado como parâmetro de SUBSTR o comando terá como retorno uma substring a partir do início informado até o final da string.

Para exemplificar suponha a tabela PESSOA abaixo com os campo ID e NOME:

IDNOME
1Afonso Pereira Najib
2Breno da Costa Alves

Na query SELECT NOME, SUBSTR(NOME, -1) as SUB FROM PESSOA WHERE SUBSTR(NOME, -1)='B' temos como resultado "Afonso Pereria Najib, b" ,enquanto que na query SELECT NOME, SUBSTR(nomePro, 0) as SUB FROM PESSOA WHERE SUBSTR(nomePro, 0)='B' nenhum resultado foi exibido.

Observação: O exercício não especificou qual SGBD foi utilizado para realizar a consulta, mas pode sabe-se que no ORACLE e MySQL a sintaxe é SUBSTR e no SqlServer e PostgreSQL a sintaxe é SUBSTRING.

Exercício 6 de 10

Ano: 2019 Banca: CS-UFG Órgão: Prefeitura de Goianira Cargo: Técnico em Informática

📌 Na linguagem SQL, considerando duas tabelas A e B, para se obter o que está na Tabela A e não está na Tabela B, assim como o que está na Tabela B e não está na Tabela A é necessário usar o comando

Exercício 7 de 10

Ano: 2019 Banca: VUNESP Órgão: Prefeitura de Itapevi - SP Cargo: Analista em TIC

📌 Considere a sintaxe SQL básica do comando para a criação de gatilhos:

CREATE TRIGGER ON ...

Nesse comando, as opções corretas do

Exercício 8 de 10

Ano: 2019 Banca: FCC Órgão: SANASA Cargo: Analista - Suporte DBA

📌 Considere o código SQL abaixo, que gerou a tabela ItemFatura.

CREATE TABLE ItemFatura(
idItemFatura INT NOT NULL,
idFatura INT NOT NULL,
descItemFatura VARCHAR(45),
valorItemFatura DOUBLE,
..I..
);

Considerando que a tabela ItemFatura possui chave primária composta pelos campos idItemFatura e idFatura, e que se uma fatura for excluída, automaticamente serão excluídos todos os seus itens, a lacuna I deve ser preenchida corretamente por

Exercício 9 de 10

Ano: 2019 Banca: FCC Órgão: SANASA Cargo: Analista - Suporte DBA

📌 Considere o código SQL abaixo, que gerou a tabela ItemFatura.

CREATE TABLE ItemFatura(
idItemFatura INT NOT NULL,
idFatura INT NOT NULL,
descItemFatura VARCHAR(45),
valorItemFatura DOUBLE,
..I..
);

Considerando que a tabela ItemFatura possui chave primária composta pelos campos idItemFatura e idFatura, e que se uma fatura for excluída, automaticamente serão excluídos todos os seus itens, a lacuna I deve ser preenchida corretamente por

Exercício 10 de 10

Ano: 2019 Banca: FCC Órgão: Prefeitura de Manaus - AM Cargo: Assistente técnico de TI - Programador

📌 Um programador deseja definir uma query SQL para retornar os valores das colunas salario e job_id para determinado id de funcionário, de forma que ela seja executada de acordo com os parâmetros que receber. Considerando a existência da tabela e dos campos indicados, no Oracle PL/SQL digitou o bloco de comandos abaixo. Completa adequadamente a lacuna I a instrução: CREATE

Script SQL para definição de query parametrizada

🙋 Perguntas e Respostas

SQL, Structured Query Language ou Linguagem de Consulta Estruturada em português é uma linguagem procedural usada para manipulação de bancos de dados relacionais e dos próprios dados que os bancos armazenam.

  • O subgrupo denominado DML(Data Manipulation Language ou Linguagem de Manipulação de Dados em português) da linguagem SQL serve para realizar inclusão, exclusão, alteração e recuperação de dados de uma tabela.
  • O subgrupo denominado DDL(Data Definition Language ou Linguagem de Definição de Dados em português) da SQL serve para definir e manipular as estruturas de dados, ou seja, as tabelas, índices e constraints.
  • O subgrupo denominado DCL(Data Control Language ou Linguagem de Controle de Dados) da linguagem SQL serve para controlar as permissões do banco de dados.
  • O subgrupo denominado DTL(Data Transaction Language) da SQL é usada para controlar as transações de um banco de dados.

A DML, DDL, DCL, DTL, etc formam a linguagem SQL usada para a manipulação de bancos de dados, podendo ocorrer pequenas variações de sintaxe entre diferentes fabricantes de bancos de dados caso não implementem rigorasamente o padrão ANSI.

O padrão SQL ANSI é uma tentativa de padronização da linguagem SQL por organizações internacionais como o American National Standards Institute (traduz-se como "Instituto Nacional Americano de Padrões") ou ANSI.

Essa padronização ocorreu e foi necessária devido ao fato de terem surgidos vários dialetos de bancos que foram criados por diversos fabricantes.

Segue abaixo a listagem de como o padrão foi se desenvolvendo e melhorando com o tempo.

  • SQL-86 - Primeira versão da linguagem, lançada em 1986, consiste basicamente na versão inicial da linguagem criada pela IBM.
  • SQL-92 - Lançada em 1992, inclui novos recursos tais como tabelas temporárias, novas funções, expressões nomeadas, valores únicos, instrução CASE etc.
  • SQL:1999 (SQL3) - Lançada em 1999, foi a versão que teve mais recursos novos significativos, entre eles: a implementação de expressões regulares, recursos de orientação a objetos, queries recursivas, triggers, novos tipos de dados (boolean, LOB, array e outros), novos predicados etc.
  • SQL:2003 - Lançada em 2003, inclui suporte básico ao padrão XML, sequências padronizadas, instrução MERGE, colunas com valores auto-incrementais etc.
  • SQL:2006 - Lançada em 2006, não inclui mudanças significativas para as funções e comandos SQL. Contempla basicamente a interação entre SQL e XML

Fonte : www.fabioprado.net

Uma query é uma requisição de informação feita a um banco de dados relacional que pode ter como resposta informações contidas em uma ou mais tabelas ou até mesmo metadados do banco de dados. No geral as requisição de informações são escritas por meio da linguagem SQL, mas podem haver outras linguagens não muito usuais como o AQL, o Datalog e o DMX.

4.  
Quem criou o SQL ?

O SQL foi criado dentro dos laboratórios da IBM na década de 70 visando a viabilização do modelo relacional proposto por Edgar Frank Codd.

Entre as subdivisões da linguagem SQL, usa-se a DDL(Data Definition Language ou Linguagem de Definição de Dados) para se excluir um banco de dados de um SGBD(Sistema Gerenciador de Banco de Dados).

As instruções DDL são CREATE, ALTER, DROP, RENAME e TRUNCATE, sendo que para se excluir um banco de dados a query será escrita utilizando-se a instrução: DROP DATABASE [nome_do_banco];

🙂 Motive-se

Meus filhos terão computadores, sim, mas antes terão livros. Sem livros, sem leitura, os nossos filhos serão incapazes de escrever – inclusive a sua própria história.