Considere a consulta escrita em SQL abaixo.
O resultado da execução dessa consulta será composto por registros da tabela Lista, exibindo o campo Item, com a condição de que seus valores devem
a) ter em sua formação a sequência A%S e ter número de caracteres variando entre 3 e o número máximo especificado para esse campo, quando da criação da tabela Lista.
b) ter pelo menos duas letras A e duas letras S e ter número de caracteres variando entre 5 e o número máximo especificado para esse campo, quando da criação da tabela Lista.
c) ter ou uma letra A, ou uma letra S e ter número de caracteres variando entre 3 e o número máximo especificado para esse campo, quando da criação da tabela Lista.
d) começar com a letra A, terminar com a letra S e ter número de caracteres variando entre 2 e o número máximo especificado para esse campo, quando da criação da tabela Lista.
e) começar com as letras A ou S e terminar também com uma dessas duas letras, além de ter número de caracteres variando entre 5 e o número máximo especificado para esse campo, quando da criação da tabela Lista.
RESOLUÇÃO:
O caractere %, usado dentro de uma cadeia de caracteres após o comando LIKE, indica “qualquer coisa”, ou seja, uma sequência de caracteres de qualquer tamanho, inclusive uma sequência vazia (que não contém nenhum caractere).
Dessa maneira, a consulta em tela irá retornar todas os valores de item que começam com A, terminam com S e têm qualquer coisa entre esses caracteres. O tamanho mínimo dessa cadeia será 2, se o % estiver representando a cadeia de caracteres vazia, caso em que o menor valor possível seria ‘AS`.
Já o tamanho máximo da cadeia irá depender do tamanho máximo definido para o campo Item quando a tabela Lista foi criada. Se esse atributo foi definido como sendo do tipo VARCHAR(30), o valor de Item só pode ter, no máximo, 30 caracteres.
13.
(FCC – Pref. de São Luís/MA – 2018)Um Auditor está executando operações em uma tabela chamada cidadao de um banco de dados aberto e em condições ideais. Para exibir os dados de todas as pessoas que possuem na segunda letra do campo nome a vogal a, deve-se utilizar a instrução SQL:
SELECT * FROM cidadao WHERE a) nome = '*a';
b) nome LIKE '_a%'; c) nome CONTAINS('a',2); d) nome LIKE '*a';
e) nome HAVE(2,'a'); RESOLUÇÃO:
O caractere %, usado dentro de uma cadeia de caracteres após o comando LIKE, indica “qualquer coisa”, ou seja, uma sequência de caracteres de qualquer tamanho, inclusive uma sequência vazia (que não contém nenhum caractere). Já o marcador _ indica a existência de somente um caractere qualquer naquela posição.
Assim, o padrão ‘_a%’ indica que a letra a estará na segunda posição da cadeia, depois de um caractere qualquer. Posteriormente ao a, há uma cadeia de zero ou mais caracteres. É isso que estamos procurando.
Gabarito: B
14.
(FCC – TRT2 – 2018)Em um banco de dados Oracle aberto e em condições ideais há uma tabela chamada func de onde se deseja exibir os nomes dos funcionários (campo nome) e os códigos de departamentos (campo codDep) de todos os funcionários dos departamentos 10 ou 20 em ordem alfabética crescente por nome. Para isso, utilizando PL/SQL, um Técnico de TI deve utilizar a instrução SELECT nome, codDep FROM func WHERE
a) codDep IN (10,20) ORDER BY nome ASC;
b) codDep CONTAIN(10 OR 20) ORDER BY nome ASC; c) codDep=10 OR codDep=20 ORDER ASC nome;
d) codDep BELONG(10 OR 20) ORDER BY nome ASCENDING; e) codDep BETWEEN(10,20) ORDER BY nome ASC;
RESOLUÇÃO:
Bom, temos duas possibilidades para trazer os funcionários dos departamentos 10 ou 20: codDep IN (10,20)
Dessa maneira, tanto a letra A quanto a letra C se encaixariam na nossa resposta. Vamos analisar agora a cláusula ORDER BY das duas alternativas:
a) ORDER BY nome ASC c) ORDER ASC nome
Veja que a letra C omitiu o termo “BY”, o que produziria um erro de sintaxe! Já o comando A satisfaz o que o examinador pediu, já que ordena os registros por ordem alfabética crescente do atributo nome. Note que se omitíssemos o comando ASC a consulta continuaria correta, já que os campos dentro do ORDER BY, por padrão, são ordenados de forma crescente (ascendente).
Gabarito: A
15.
(FCC – SABESP – 2018)O RH da empresa deseja emitir um relatório de todos os funcionários que ganham comissão. Deseja mostrar o nome, salário e comissão organizando os dados por salário de forma descendente. Considerando a existência de um banco de dados Oracle aberto e em condições ideais, que possui uma tabela chamada Funcionario com os campos nome, cargo, salario e comissao, a instrução SQL que deverá ser utilizada é
a) SELECT ALL nome, salario, comissao FROM funcionario WHERE comissao IS NOT EMPTY ORDER BY salario DESCENDING;
b) SELECT nome, salario, comissao FROM funcionario WHERE comissao IS NOT NULL ORDER BY salario DESC; c) SELECT nome, salario, comissao FROM funcionario WHERE NOT_EMPTY(comissao) ORDER BY salario DESC; d) SELECT * FROM funcionario WHERE comissao IS NOT NULL ORDER BY salario DESC;
e) SELECT ONLY nome, salario, comissao FROM funcionario WHERE NOT_NULL(comissao) ORDER BY salario DESC;
RESOLUÇÃO:
Se você leu atentamente a questão, viu que a tabela possui os campos nome, cargo, salario e comissao. Como o RH não está interessado no cargo dos funcionários, temos que nomear os campos que queremos através do seguinte comando:
SELECT nome, salario, comissao
Assim, já restringimos a nossa resposta às letras B e C. Veja que o RH quer exibir os funcionários que ganham comissão. Nesse caso, temos que produzir todos os registros que não possuem o valor NULL no atributo comissao. Isso é realizado através do seguinte comando:
WHERE comissao IS NOT NULL
Dessa maneira, só falta ordenar os salários de forma decrescente, o que pode ser feito através do comando: ORDER BY salario DESC
16.
(FCC – DPE/AM - 2018)Considere que exista uma tabela denominada TabProcessos que possui os seguintes campos: NroProcesso (tipo varchar), NroVara (tipo int), CPFAutor (tipo varchar). Para que seja feita uma consulta que resulte no total de processos em cada uma das varas, o comando SQL correto é
a) SELECT NroVara, COUNT (NroProcesso) FROM TabProcessos;
b) SELECT NroVara, COUNT (NroProcesso) FROM TabProcessos GROUP BY NroVara; c) SELECT SUM (NroProcesso) FROM TabProcessos GROUP BY NroVara;
d) SELECT COUNT (NroProcesso) FROM TabProcessos HAVING NroVara;
e) SELECT NroVara, SUM (NroProcesso) FROM TabProcessos GROUP BY NroVara; RESOLUÇÃO:
Bom, queremos o número total (ou seja, a contagem) de processos por vara. Assim, temos que utilizar a função de agregação COUNT e a cláusula GROUP BY. Veja que o atributo que indica qual é a vara é o NroVara, do tipo inteiro. Podemos fazer o agrupamento por esse atributo da seguinte maneira:
GROUP BY NroVara
Já no comando SELECT, precisamos colocar a contagem de processos, através do comando COUNT(NroProcesso). Então vamos testar o seguinte comando:
SELECT COUNT(NroProcesso) FROM TabProcessos
GROUP BY NroVara
O resultado dessa consulta seria algo como: (sem nome)
350 200 450
Veja que precisamos também colocar o NroVara no SELECT, para sabermos à qual vara pertence cada contagem, não é? Então o resultado ficaria assim:
SELECT NroVara, COUNT(NroProcesso) FROM TabProcessos
Gabarito: B
17.
(FCC – DPE/AM – 2018 – ADAPTADA)Considere as duas tabelas Tab1 e Tab2 de um banco de dados PostgreSQL 9 aberto e funcionando em condições ideais.
O comando utilizado pelo Técnico que produziu o resultado apresentado foi a) SELECT ∗ FROM Tab1 INNER JOIN Tab2 HAVING (cod);
b) SELECT ∗ FROM Tab1 INNER JOIN Tab2 ON Tab1.cod = Tab2.cod; c) SELECT ∗ FROM Tab1 RIGHT JOIN Tab2 IN Tab1.cod = Tab2.cod; d) SELECT ∗ FROM Tab1 FULL JOIN Tab2 IN Tab1.cod = Tab2.cod; e) SELECT ∗ FROM Tab1 CROSS JOIN Tab2;
RESOLUÇÃO:
Observe que o que ocorreu aí foi uma junção entre as duas tabelas, Tab1 e Tab2. Disso não há dúvidas! Vamos analisar qual foi o tipo de junção.
Observe que os dois valores em comum entre as duas do campo “cod” são 1 e 3, e são justamente eles que são retornados no resultado da consulta. Isso nos indica que se trata de um INNER JOIN, cuja sintaxe seria a seguinte: FROM Tab1 INNER JOIN Tab2 ON Tab1.cod = Tab2.cod
Por último, veja que todas as colunas de todas as tabelas envolvidas na junção são retornadas, então podemos
simplesmente usar um “SELECT *”. Assim, veja que o comando que construímos é exatamente o que consta na
letra B. Gabarito: B
18.
(FCC – TRT5 – 2017)Considere uma tabela chamada funcionarios que possui os campos id, nome e salario. Para exibir os nomes e os salários dos funcionários João e Maria utiliza-se a instrução PL/SQL
a) SELECT nome, salario FROM funcionarios WHERE nome IN ('João','Maria');
b) SELECT nome, salario FROM funcionarios WHERE nome LIKE ('%João%','%Maria%'); c) SELECT nome ['João','Maria'], salario FROM funcionarios;
d) SELECT nome, salario FROM funcionarios WHERE nome HAVING ('João','Maria'); e) SELECT nome, salario FROM funcionarios WHERE nome CONTAIN ('João' AND 'Maria'); RESOLUÇÃO:
Queremos exibir os atributos nome e salario dos registros da tabela funcionarios, então começaremos a nossa consulta com:
SELECT nome, salario FROM funcionarios
Agora precisamos filtrar a tabela para extrair somente os funcionários João e Maria. Veja que queremos que o nome do funcionário seja exatamente João ou Maria, então não precisamos utilizar o LIKE. Nossas opções são as seguintes:
WHERE nome = ‘João’ OR nome = ‘Maria’; ou então: WHERE nome IN (‘João’,‘Maria’)
Veja que a segunda hipótese se encaixa com a alternativa A. Gabarito: A
19.
(FCC – TRF5 – 2017)Para localizar os juízes cujos nomes começam pela letra p e têm pelo menos 3 caracteres de comprimento (incluindo p) utiliza-se a instrução SELECT * FROM juizes WHERE nome
a) LIKE 'p_%_%';
b) BEGINS WITH 'p' AND LENGTH>=3; c) HAS 'p' AND LENGTH>=3;
d) LIKE 'p%3%*'; e) HAS'p%3%*' RESOLUÇÃO:
A alternativa A é a única que possui a sintaxe correta, e, de quebra, garante que o tamanho do nome do juiz seja no mínimo 3. Isso se dá porque temos o seguinte padrão: 'p_%_%'. O p já é o primeiro caractere, enquanto que cada um dos _ também indica a presença de exatamente um caractere, totalizando no mínimo 3.
Os símbolos % podem ser qualquer cadeia composta por zero a múltiplos caracteres. Repare que o examinador poderia ter utilizado simplesmente 'p_ _%'. O primeiro ‘%’ é desnecessário porque não influencia no tamanho mínimo do nome, mas não deixa a alternativa incorreta.
Gabarito: A
20.
(FCC – TST – 2017) Um Programador:I. criou uma tabela e uma view em um banco de dados relacional. II. alterou a estrutura da tabela.
III. incluiu registros na tabela.
Os comandos SQL utilizados nas operações realizadas em I, II e III enquadram-se, correta e respectivamente, no âmbito da a) DDL − DML − DDL. b) DML − DML − DDL. c) DML − DDL − DDL. d) DDL − DML − DML. e) DDL − DDL − DML. RESOLUÇÃO:
Os comandos DDL criam, modificam ou removem objetos do banco de dados. Dessa maneira, tanto I como II são comandos desse tipo. Já os comandos DML são aqueles que inserem, removem ou alteram registros nas tabelas. Assim, temos que o item III é um comando desse segundo tipo. A resposta fica assim: DDL – DDL – DML.
Gabarito: E
21.
(FCC – TST – 2017)Um Programador pretende executar uma instrução SQL que recupere todos os dados da tabela produto cujos preços (preco) sejam maiores ou iguais R$ 100,00 e menores ou iguais a R$ 1.000,00. A expressão para isso é SELECT * FROM produto
a) WHEN preco GREATER 99 AND LESS 1000; b) WHERE preco BETWEEN 100 AND 1000; c) LIKE preco BETWEEN 100 AND 1000; d) WHERE preco IN (100, 1000);
Para delimitar os preços entre dois valores, poderíamos utilizar as seguintes sintaxes: SELECT * FROM Produto WHERE preco >= 100 AND preco <= 1000; ou então SELECT * FROM Produto WHERE preco BETWEEN 100 AND 1000
Assim, veja que a alternativa B se encaixa na nossa segunda possibilidade. Gabarito: B
22.
(FCC – DPE/RS – 2017)Seja a seguinte tabela de um banco de dados relacional: Objeto (ID, Nome, Peso, Descrição).
A consulta SQL para obter o Nome e o Peso dos objetos com a restrição do Peso estar entre os valores 2 e 18 é:
a) SELECT Nome AND Peso OF Objeto HAVING Peso IN (2; 18);
b) SELECT Nome, Peso FROM Objeto WHERE Peso IS BETWEEN 2 TO 18;
c) SELECT Objeto (Nome, Peso) HAVING Peso INSIDE (2; 18); d) SELECT Objeto (Nome, Peso) FOR Peso INSIDE (2;18); e) SELECT Nome, Peso FROM Objeto
WHERE Peso BETWEEN 2 AND 18; RESOLUÇÃO:
Veja que para obtermos os atributos Nome e Peso dos objetos de peso entre 2 e 18 temos duas opções: SELECT Nome, Peso FROM Objeto WHERE peso >= 2 AND peso <= 18; ou então
SELECT Nome, Peso FROM Objeto WHERE peso BETWEEN 2 AND 18
Observe que a alternativa E se encaixa perfeitamente na nossa segunda possibilidade. Gabarito: E
23.
(FCC – DPE/RS – 2017)Solicitou-se a um Técnico selecionar em um banco de dados padrão SQL todos os registros da tabela processo cujo conteúdo do campo cidade_origem não contenha os valores Brasília ou Campinas. Para isso, utilizou a instrução SELECT * FROM processo
b) WHERE cidade_origem NOT IN ('Brasília','Campinas'); c) LIKE cidade_origem IS NOT ('Brasília','Campinas'); d) WHERE cidade_origem NOT IN ('Brasília' OR 'Campinas'); e) WHERE cidade_origem IS NOT ('Brasília';'Campinas'); RESOLUÇÃO:
Queremos os registros cujo atributo cidade_origem não assume os valores Brasília ou Campinas. Podemos fazer de mais de uma maneira. A primeira é utilizando o operador lógico NOT para inverter o resultado da operação IN, obtendo.Veja:
SELECT * FROM processo WHERE cidade_origem NOT IN ('Brasília', 'Campinas')
Alternativamente, poderíamos utilizar o operador de diferença (<>), juntamente com a cláusula AND:
SELECT * FROM processo WHERE cidade_origem <> 'Brasília' AND cidade_origem <> 'Campinas'
Há mais possibilidades para obtermos o mesmo resultado. O importante, na hora da prova, é que você saiba reconhecer o que os comandos fazem e o resultado lógico de cada expressão. Não é tão difícil quando você adquire
uma certa prática. J Quanto à nossa resposta, veja que a nossa primeira consulta é igual à da letra B.
Gabarito: B
24.
(FCC – TRT24 – 2017)Em um banco de dados Oracle aberto e em condições ideais há uma tabela chamada funcionario com os campos idFuncionario (inteiro − primary key), nome (cadeia de caracteres) e salario (real). Para exibir o nome e o salário de todos os funcionários cujo valor de salário esteja fora do intervalo de 1000 a 12000 utiliza-se a instrução SQL SELECT nome, salario FROM funcionario WHERE
a) salario<1000 AND salario>12000; b) salario NOT BETWEEN 1000 OR 12000; c) 1000>salario>12000;
d) salario NOT BETWEEN 1000 AND 12000; e) salario BETWEEN 1000 AND 12000; RESOLUÇÃO:
WHERE salario NOT BETWEEN 1000 AND 12000
A alternativa A pode até ter te confundido, mas o erro dela foi colocar o AND no lugar do OR. Se houvéssemos
escolhido essa alternativa, a nossa consulta não iria retornar absolutamente nada, já que o valor de salario precisaria ser, ao mesmo tempo, menor que 1000 e maior que 12000.
Assim, nossa resposta é mesmo a letra D, pois é uma das alternativas que citamos logo acima. Gabarito: D
25.
(CESPE – EBSERH – 2018)Tendo como referência o modelo lógico precedente, julgue o item a seguir.
Após as tabelas serem implementadas, a inserção de um registro na tabela Universidade pode ser realizada corretamente por meio do comando a seguir.
INSERT INTO Universidade VALUES (00.038.174/0001-43, ‘Universidade de Brasília’, ‘Graduação e Pós-Graduação’);
RESOLUÇÃO:
Veja que o atributo CNPJ deveria ser um número, mas contém caracteres como . , / e -. Assim, o comando produiziria um erro a ser executado. Como solução, esse atributo deveria ter sido definido como uma cadeia de caracteres, ou então ser inserido como um número, assim: 00038174000143.
Gabarito: E
26.
(CESPE – EBSERH – 2018)Tendo como referência o modelo lógico precedente, julgue o item a seguir.
O comando SELECT nome FROM Hospital WHERE UF = ‘SP’; permite mostrar os nomes dos hospitais localizados na UF (unidade da federação) SP.
O WHERE delimita os registros cujo valor de UF é igual à cadeia de dois caracteres ‘SP` da tabela Hospital contida no FROM. O comando SELECT, por sua vez, faz com que a consulta retorne somente o atributo nome. Questão correta.
Gabarito: C
27.
(PUC/PR – TJ/MS – 2017)Considere o modelo relacional a seguir. A expressão em SQL que encontra os nomes, as idades e os países de residência de todos os jogadores que jogam no time 'ASTJ Sport Club', ganham mais de R$ 10.000,00 (dez mil reais) e que resultado deve gerar uma lista em que cada jogador aparece em um registro único.
jogador(nome-jogador, idade, pais) joga(nome-jogador, nome-time, salario) time(nome-time, pais)
a) SELECT jogador.nome-jogador, jogador.idade, jogador.pais FROM jogador, joga
WHERE jogador.nome-jogador=joga.nome-jogador and nome-time = 'ASTJ Sport Club' and salario > 10000) b) SELECT jogador.nome-jogador, jogador.idade, jogador.pais, joga.salario FROM jogador
WHERE jogador.nome-jogador=joga.nome-jogador and nome-time = 'ASTJ Sport Club' and salario > 10000) c)SELECT jogador.nome-jogador, jogador.idade, jogador.pais FROM jogador,joga, time
GROUP BY time.nome-time = 'ASTJ Sport Club' and joga.salario > 10000
d) SELECT jogador.nome-jogador, jogador.idade, jogador.pais, joga.salario, time.nome-time FROM jogador, time
WHERE joga.salario > 10000 and time.nome-time= 'ASTJ Sport Club'
e) SELECT jogador.nome-jogador, jogador.idade, jogador.pais FROM jogador, joga HAVING nome-time = 'ASTJ Sport Club' and salario > 10000)
RESOLUÇÃO:
Vamos lá! Primeira coisa que o examinador diz é que a consulta deve retornar nome, idade e país de residência de um determinado grupo de jogadores. Podemos começar a consulta com:
SELECT nome-jogador, idade, pais FROM jogador
Agora vamos ver quais são os critérios estabelecidos na consulta.
SELECT jogador.nome-jogador, jogador.idade, jogador.pais FROM jogador
INNER JOIN joga ON jogador.nome-jogador = joga.nome-jogador WHERE joga.nome-time = 'ASTJ Sport Club'
AND joga.salario > 1000
Contudo, veja que as alternativas disponíveis utilizam a sintaxe antiga das junções, através da cláusula WHERE. “Convertendo” a nossa consulta para esse formato, ficaria o seguinte:
SELECT jogador.nome-jogador, jogador.idade, jogador.pais
FROM jogador, joga
WHERE jogador.nome-jogador = joga.nome-jogador
AND joga.nome-time = 'ASTJ Sport Club' AND joga.salario > 1000
Observe que a consulta é muito parecida com a da assertiva A. A diferença é que nas cláusulas joga.nome-time = 'ASTJ Sport Club'
AND joga.salario > 1000
O examinador não utiliza o prefixo joga. Isso é possível porque a consulta utiliza somente as tabelas jogador e joga.
Sendo assim, como esses atributos nome-time e salario somente existem na tabela joga, podemos omitir a
informação da tabela a qual eles pertencem, já que atributos com esse não se repetem dentre as tabelas utilizadas. Se fôssemos também considerar a tabela time na consulta, contudo, precisaríamos especificar de qual tabela seria o atributo nome-time que estamos utilizando, pois este existe tanto em time quanto em joga.
Gabarito: A
28.
(UFPR – ITAIPU – 2017 - ADAPTADA)Observe o script SQL abaixo:
create table t1 (valor int not null);
insert into t1 values (1); insert into t1 values (2); insert into t1 values (3);
create table t2 (valor int not null);
insert into t2 values (2); insert into t2 values (3); insert into t2 values (6);
Assinale a alternativa que apresenta a operação de junção correspondente ao resultado apresentado em seguida. a) SELECT t1.valor FROM t1 LEFT JOIN t2 ON t1.valor=t2.valor; 1, 2, 3
b) SELECT t2.valor FROM t1 LEFT JOIN t2 ON t1.valor=t2.valor; 1, 2, 3
c) SELECT t1.valor FROM t1 INNER JOIN t2 ON t1.valor=t2.valor; 1, 2, 3, 6
d) SELECT t1.valor FROM t1 FULL OUTER JOIN t2 ON t1.valor=t2.valor; 2, 3
Se na sua prova vier uma questão parecida, o que acho bem provável, recomendo que você desenhe as tabelinhas para facilitar a sua vida, mais ou menos assim:
Feito isso, vamos avaliar cada uma das as expressões SQL e ponderar se os resultados são compatíveis com os apresentados.
a) Esse comando traz todos os valores d0 atributo valor de t1, após realizar uma junção à esquerda (LEFT JOIN) com t2 baseada no campo valor de cada uma das tabelas. Ora, já que é um left join, essa consulta irá retornar todos os registros de t1, tenham eles correspondência ou não em t2. O resultado da junção vai ser o seguinte:
T1.valor T2.valor
1 NULL
2 2
3 3
Veja que quando realizamos um SELECT em t1.valor baseado nessa junção, os valores retornados serão
justamente 1, 2 e 3. Essa é a nossa resposta. CERTA
b) Essa consulta trabalha em cima da mesma junção que foi realizada na anterior (LEFT JOIN), então a tabela resultante sobre a qual será realizado o SELECT vai ser a mesma. A diferença é que ela vai só retornar os valores de t2 no lugar dos valores de t1. Veja novamente a tabela resultante da junção:
T1.valor T2.valor
1 NULL
2 2
3 3
Assim, a consulta retornaria somente os valores válidos 2 e 3, além do valor NULL. ERRADA
c) Essa consulta utiliza um INNER JOIN, então só serão retornados os registros cuja correspondência entre t1.valor e t2.valor se efetivar. Veja:
T1.valor T2.valor
2 2
3 3
Assim, se fizéssemos nosso SELECT tanto em t1.valor quanto em t2.valor, o resultado seria 2, 3. ERRADA
d) O FULL OUTER JOIN retorna todos os valores das duas tabelas, sejam eles correspondentes entre as tabelas ou não. Veja: T1.valor T2.valor 1 NULL 2 2 3 3 NULL 6
Assim, se selecionássemos t1.valor, teríamos como resultado os valores 1, 2, 3, além do NULL. ERRADA
e) O RIGHT JOIN traz, além dos registros correspondentes entre as duas tabelas, aqueles registros da tabela da direita que não satisfizeram à igualdade. Veja:
T1.valor T2.valor
2 2
3 3
NULL 6
Assim, o select em t1.valor retornaria os valores 2, 3, além do NULL. ERRADA
Gabarito: A
a) select * from clientes where cidade like '_uritiba’ b) select * from clientes where cidade like '%uritiba’ c) select * from clientes where cidade like '*uritiba’ d) select * from clientes where cidade like '?uritiba’ e) select * from clientes where cidade like '[ ]uritiba'
RESOLUÇÃO:
Quando utilizamos o comando LIKE, podemos inserir um caractere especial que indica a presença de qualquer