10 exercícios de sql resolvidos básicos e avançados para aprender sobre banco de dados relacionais e muito mais!
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.
#Índice
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 palavrasWORK
eTRANSACTION
são opcionais e sem efeito. - MySQL/MariaDB -
BEGIN [NOT ATOMIC] ... END;
as palavrasNOT ATOMIC
são usadas quando estão fora de uma stored procedure. - SQL Server -
BEGIN [TRAN, TRANSACTION]
- Informix -
BEGIN [WORK]
a palavraWORK
é 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.
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
eDELETE
, sendo que a instruçãoSELECT
se enquadra como DQL(Data Query Language ou Linguagem de Consulta de Dados)
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_func sobrenome_func cpf_func João Alemeida 111.111.111-11 Pedro Silva 111.111.111-12 Patricia Alves 111.111.111-13 Pietra Oliveira 111.111.111-14 - Tabela DEPENDENTE
-
nome_depen sobrenome_depen cpf_depen cpf_func_resp Carla Silva 222.222.222-21 111.111.111-12 Ricardo Silva 222.222.222-22 111.111.111-12 Emanuel Silva 222.222.222-23 111.111.111-12 Enrico Oliveira 222.222.222-24 111.111.111-14 Luna Oliveira 222.222.222-25 111.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_func sobrenome_func João Alemeida Patricia Alves
Na linguagem SQL uma subconsulta, subquery ou subselect é uma instrução
SELECT
utilizada dentro de outra instruçãoSELECT
. Um subselect pode retornar somente um valor ou um conjunto de valores que serão usados por alguma cláusula doSELECT
mais externo.
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_um campo_dois 1 1 2 2 3 1 4 2 5 1 - Já a consulta
SELECT * FROM tabelaum WHERE (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_um campo_dois 1 1 3 1 5 1
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_um campo_dois 1 1 2 2 3 1 - Suponha que a consulta
SELECT * FROM tabeladois
retorne o resultado da tabela abaixo : -
campo_um campo_dois 1 1 2 2 4 2 - 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_um campo_dois 2 2 1 1 3 1 4 2 - 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_um campo_dois 1 1 2 2 3 1 1 1 2 2 4 2
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).
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:
ID | NOME |
---|---|
1 | Afonso Pereira Najib |
2 | Breno 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
.
Gatilho ou trigger é um recurso presente nos bancos de dados que é executado sempre que um evento ocorre, como uma modificação de dados de uma tabela ou alteração de estrutura de uma tabela. É muito utilizada para ajudar a manter a consistência dos dados ou para propagar alterações em um determinado dado de uma tabela para outras. Em SQL, para se criar um trigger utiliza-se o comando
CREATE TRIGGER
, e para removê-lo deve-se usarDROP TRIGGER
. Entre os modos de disparo de uma trigger, temos aquela que é disparada após a execução de algum comando sql(AFTER
) e temos as que são executadas no lugar da query SQL(INSTEAD OF
).
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
Parte 1 da resolução
Para exemplificar a resolução deste exercício, vamos supor que a tabela A e B possuam somente uma coluna chamada NOME_BANCO, que armazena nomes de bancos de dados, conforme ilustrado abaixo:
- TabelaA
-
NOME_BANCO PostgresSQL MySQL Oracle - TabelaB
-
NOME_BANCO Oracle SQLServer MongoDB
Parte 2 da resolução
A Letra A está correta pois ao utilizar o instrução SQL Outer Excluding Join, o resultado serão todos os registros que estão na tabela B, mas que não estejam na tabela A, e todos os registros que estão na tabela A, mas que não estejam na tabela B.
- SQL
SELECT A.NOME_BANCO, B.NOME_BANCO
FROM TabelaA as A
FULL OUTER JOIN TabelaB as B on A.NOME_BANCO = B.NOME_BANCO
WHERE A.NOME_BANCO is null or B.NOME_BANCO is null- Resultado
-
NOME_BANCO NOME_BANCO PostgresSQL MySQL SQLServer MongoDB
Observação: O Outer Join(não confundir com Outer Excluding Join), tem como resultado todos os registros que estão na tabela A e todos os registros da tabela B.
- SQL
SELECT A.NOME_BANCO, B.NOME_BANCO
FROM TabelaA as A
FULL OUTER JOIN TabelaB as B on A.NOME_BANCO = B.NOME_BANCO- Resultado
-
NOME_BANCO NOME_BANCO PostgresSQL MySQL Oracle Oracle SQLServer MongoDB
Parte 3 da resolução
A Letra B está errada pois o comando SQL Right Excluding Join, terá como resultado todos os registros que estão na tabela B e que não estejam na tabela A.
- SQL
-
SELECT A.NOME_BANCO, B.NOME_BANCO
FROM TabelaA as A
RIGHT JOIN TabelaB as B on A.NOME_BANCO = B.NOME_BANCO
WHERE a.NOME_BANCO is null
- Resultado
-
NOME_BANCO NOME_BANCO SQLServer MongoDB
Observação: O Right Join(não confundir com Right Excluding Join), tem como resultado os registros que estão na tabela B e os registros da tabela A que são comuns à tabela B.
- SQL
-
SELECT A.NOME_BANCO, B.NOME_BANCO
FROM TabelaA as A
RIGHT JOIN TabelaB as B on A.NOME_BANCO = B.NOME_BANCO
- Resultado
-
NOME_BANCO NOME_BANCO Oracle Oracle SQLServer MongoDB
Parte 4 da resolução
A Letra C está errada pois o SQL Left Excluding Join retorna como resultado todos os registros que estão na tabela A e que não estejam na tabela B.
- SQL
-
SELECT A.NOME_BANCO, B.NOME_BANCO
FROM TabelaA as A
LEFT JOIN TabelaB as B on A.NOME_BANCO = B.NOME_BANCO
WHERE B.NOME_BANCO is null
- Resultado
-
NOME_BANCO NOME_BANCO PostgresSQL MySQL
Observação: O Left Join(não confundir com Left Excluding Join), tem como resultado todos os registros que estão na tabela A e os registros da tabela B que são comuns à tabela A.
- SQL
-
SELECT A.NOME_BANCO, B.NOME_BANCO
FROM TabelaA as A
LEFT JOIN TabelaB as B on A.NOME_BANCO = B.NOME_BANCO
- Resultado
-
NOME_BANCO NOME_BANCO PostgresSQL MySQL Oracle Oracle
Parte 5 da resolução
A Letra D está errada pois não foi encontrado nenhuma referência ao comando Middle Excluding Join.
Na linguagem SQL são operadores lógicos os comandos
AND, OR e NOT
, sendo que o operadorAND
indica que duas condições devem ser verdadeiras para se exibir os dados, o operadorOR
indica que pelo menos uma das n condições deve ser verdadeira para se exibir os dados e o operadorNOT
realiza a inversão do resultado de uma operação lógica. Essas operações lógicas são as mesmas presentes na montagem de tabelas verdades para análise de proposições lógicas.
Considere a sintaxe SQL básica do comando para a criação de gatilhos:
CREATE TRIGGER
Nesse comando, as opções corretas do
- Parabéns!
O gatilho(trigger) é sempre associado a uma tabela e a um ou mais eventos que possam ocorrer na tabela. O gatilho pode ser criado para o evento de inclusão(INSERT), alteração(UPDATE) e/ou exclusão(DELETE), o que faz a Letra A, a resposta correta deste exercício.
Veja abaixo a sintaxe de criação de um gatilho SQL utilizando o banco de dados Oracle.
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER } triggering_event ON table_name
[FOR EACH ROW]
[FOLLOWS | PRECEDES another_trigger]
[ENABLE / DISABLE ]
[WHEN condition]
DECLARE
declaration statements
BEGIN
executable statements
EXCEPTION
exception_handling statements
END;
Observação: na sintaxe SQL acima, em um caso real de criação de um script SQL o trecho triggering_event seria substituído por INSERT, UPDATE, e/ou DELETE
- Errou?
As Letras B, C, D e E estão erradas pois os únicos eventos disparadores aceitáveis de uma Trigger são o INSERT, UPDATE e DELETE, ou seja, Select, Group By, Inner Join, Commit, Rollback, Savepoint, First, Last One e All não podem ser eventos disparadores de uma trigger.
Supondo que uma tabela X que possui somente uma linha e uma coluna Y tenha três valores numéricos 25, 50, 32. A query
SELECT SUM(Y) FROM X
irá retornar o resultado 107 correspondente a soma de todos os valores da coluna Y.
Usando a linguagem SQL, um fiscal escreveu corretamente, em uma consulta, a expressão WHERE Nome-Contribuinte LIKE 'p%o'. Com isso ele obteve nomes de contribuintes como, por exemplo,
- Parabéns!
Para exemplificar, vamos imaginar uma tabela chamada 'Contribuinte', que possua somente uma coluna chamada 'Nome-Contribuinte', conforme ilustrado abaixo:
Nome-Contribuinte |
---|
Paulo |
Pedro |
Augusto |
Jordão |
Paula |
Álvaro |
Patricio |
Agora imagine a consulta SQL abaixo para complementar e exemplificar a expressão 'WHERE Nome-Contribuinte LIKE 'p%o'' que foi dada no enunciado da questão.
SELECT *
FROM Contribuinte
WHERE Nome-Contribuinte LIKE 'p%o'
Veja abaixo o resultado da query acima:
Nome-Contribuinte |
---|
Paulo |
Pedro |
Patricio |
De acordo com SQL acima e seu resultado, serão localizados todos os registros da tabela cujo nome dos contribuintes começam com a letra 'p', contenham qualquer variação de letras e números no meio da palavra e terminam com a letra 'o', ou seja, os nomes Paulo, Pedro e Patrício serão localizados, o que torna a letra A a alternativa correta, visto que é única opção com registros válidos.
Observação: Para fins didáticos, ignora-se a questão das letras serem maiúsculas ou minúsculas.
- Errou?
A letra B está errada pois o nome Augusto começa com a letra ‘A’ e Jordão começa com a letra ‘J’, ou seja, os nomes Augusto e Jordão atendem a regra Nome-Contribuinte LIKE 'p%o' somente parcialmente, visto que não começam com a letra ‘p’, mas terminam com a letra ‘o’.
A letra C está errada pois apesar do nome Paulo atender a regra Nome-Contribuinte LIKE 'p%o', o nome Paula termina com a letra ‘a’, e não com a letra ‘o’, conforme solicitado.
A letra D está errada pois os nomes Álvaro e Augusto, terminam com a letra ‘o’, mas começa com a letra A, ou seja, para atender a cláusula Nome-Contribuinte LIKE 'p%o' os nomes deveriam começar com a letra ‘p’.
A letra E está errada pois apesar do nome Patrício atender a cláusula Nome-Contribuinte LIKE 'p%o', o nome Paula termina com a letra ‘a’, e não com a letra ‘o’, conforme solicitado.
O comando
UNION
é usado para combinar o resultado de duas ou mais consultas SQL, retornando somente dados distintos. Já o comandoUNION ALL
também é usado para combinar o resultado de duas ou mais consultas SQL, sendo que o resultado final poderá conter dados duplicados quando presentes nos resultados das queries.
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
- Parabéns!
O enunciado da questão informou que as colunas idItemFatura e idFatura compõe a chave primária(primary key), e que na deleção da chave estrangeira(foreign key) a exclusão de uma fatura será cascateada para os itens que compõe a fatura.
A letra C é a alternativa correta pois a sintaxe da primary key está correta, seguido da declaração da foreign key referenciado o campo idFatura da tabela Fatura e finalizando com a declaração do cascateamento da deleção de Itens no caso de deleção de uma Fatura.
PRIMARY KEY (idItemFatura, idFatura),
FOREIGN KEY (idFatura) REFERENCES Fatura(idFatura) ON DELETE CASCADE
- Errou?
A letra A está errada pois a sintaxe de criação da primary key está incorreta, ou seja, a declaração da foreign key deveria ser após a declaração da PK e não dentro conforme o enunciado da alternativa.
A letra B está errada pois a sintaxe de criação da foreign key está incorreta. As instruções FROM e WITH não fazem parte da sintaxe de criação da FK.
A letra D está errada. Apesar da sintaxe "PRIMARY KEY (idItemFatura, idFatura), FOREIGN KEY(idFatura) REFERENCES Fatura(idFatura)" estar correta, foi dito no enunciado do exercício "que se uma fatura for excluída, automaticamente serão excluídos todos os seus itens", ou seja, a alternativa está incompleta pois está faltando a declaração da instrução de cascateamento quando houver deleção de uma fatura.
A letra E está errada pois a sintaxe de criação da foreign key está incorreta. A instrução FROM não faz parte da sintaxe de criação da FK, ou seja, a cláusula FROM deveria ter sido substituída pela cláusula REFERENCES para que a alternativa E fosse considerada correta.
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
Perguntas e Respostas
2. O que é uma SQL ANSI ?
3. O que é uma query e como é escrita ?
4. Quem criou o SQL ?
5. Como excluir um banco de dados ?
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.