• Prezados usuários,

    Por questões de segurança, a partir de 22/04/2024 os usuários só conseguirão logar no fórum se estiverem com a "Verificação em duas etapas" habilitada em seu perfil.

    Para habilitar a "Verificação em duas etapas" entre em sua conta e "Click" em seu nick name na parte superior da página, aparecerá opções de gestão de sua conta, entre em "Senha e segurança", a primeira opção será para habilitar a "Verificação em duas etapas".

    Clicando alí vai pedir a sua senha de acesso ao fórum, e depois vai para as opções de verificação, que serão as seguintes:

    ***Código de verificação via aplicativo*** >>>Isso permite que você gere um código de verificação usando um aplicativo em seu telefone.

    ***Email de confirmação*** >>>Isso enviará um código por e-mail para verificar seu login.

    ***Códigos alternativos*** >>>Esses códigos podem ser usados para fazer login se você não tiver acesso a outros métodos de verificação.

    Existe as 3 opções acima, e para continuar acessando o fórum a partir de 22/04/2024 você deverá habilitar uma das 03 opções.

    Tópico para tirar dúvidas>>>>https://forum.adrenaline.com.br/threads/obrigatoriedade-da-verificacao-em-duas-etapas-a-partir-de-24-04-2024-duvidas.712290/

    Atencionamente,

    Administração do Fórum Adrenaline

Ajuda em bd - Interbase

Tase

EeP
Registrado
Boa tarde amigos foristas!
Estou me matando para tentar terminar um pequeno trabalhinho em sq, para entregar amanhã, e um exercício maldito está me deixando muito perturbado.
Segue a consulta:

update empregado
set empregado.salario = empregado.salario + (empregado.salario*0.10)
where empregado.matEmp = alocacao.matEmp and
alocacao.codProjeto = projeto.codProjeto and
projeto.nome = 'Eco Turismo'

Agora a dúvida: em qual local declaro as tabelas que serão usadas? Pois a cláusula where não é capaz disto, e a from não consigo usar... Alguém mais experiente poderia ajudar?
 
Em oracle da pra fazer desses 2 modos, acho que no interbase não deve ser diferente.

Faz um teste ai que deve dar certo.

Código:
  UPDATE empregado 
  SET empregado.salario = (salario * 100) 
  WHERE EXISTS
    (SELECT * FROM 
        empregado, alocacao, projeto
      WHERE 
        empregado.matEmp = alocacao.matEmp and
        alocacao.codProjeto = projeto.codProjeto and
        projeto.nome = 'Eco Turismo');

Ou pode fazer assim tbm.
Código:
      UPDATE empregado 
      SET empregado.salario = (empregado.salario * 100) 
      WHERE empregado.matEmp in 
      (SELECT empregado.matEmp FROM 
        empregado, alocacao, projeto
      WHERE 
        empregado.matEmp = alocacao.matEmp and
        alocacao.codProjeto = projeto.codProjeto and
        projeto.nome = 'Eco Turismo')
 
Em oracle da pra fazer desses 2 modos, acho que no interbase não deve ser diferente.

Faz um teste ai que deve dar certo.

Código:
  UPDATE empregado 
  SET empregado.salario = (salario * 100) 
  WHERE EXISTS
    (SELECT * FROM 
        empregado, alocacao, projeto
      WHERE 
        empregado.matEmp = alocacao.matEmp and
        alocacao.codProjeto = projeto.codProjeto and
        projeto.nome = 'Eco Turismo');

Ou pode fazer assim tbm.
Código:
      UPDATE empregado 
      SET empregado.salario = (empregado.salario * 100) 
      WHERE empregado.matEmp in 
      (SELECT empregado.matEmp FROM 
        empregado, alocacao, projeto
      WHERE 
        empregado.matEmp = alocacao.matEmp and
        alocacao.codProjeto = projeto.codProjeto and
        projeto.nome = 'Eco Turismo')

Valeu, muito obrigado! A minha professora deixou de ensinar muitos comando necessários para a gente.
Só mais uma perguntinha JEDI, esse comando EXISTS, ele indica onde estão as tabelas (substituto do comum from)? Se não for, qual sua função real?
 
Valeu, muito obrigado! A minha professora deixou de ensinar muitos comando necessários para a gente.
Só mais uma perguntinha JEDI, esse comando EXISTS, ele indica onde estão as tabelas (substituto do comum from)? Se não for, qual sua função real?

O exist serve pra validar a subquery.

Tu vai colocar uma subquery depois do exist e é nela que vem o join com as tabelas.

Código:
    WHERE EXISTS
    (SELECT * FROM 
        [B]empregado, alocacao, projeto[/B]
      WHERE 
        [B]empregado.matEmp = alocacao.matEmp [/B]and
        alocacao.codProjeto = projeto.codProjeto and
        projeto.nome = 'Eco Turismo');
 
O exist serve pra validar a subquery.

Tu vai colocar uma subquery depois do exist e é nela que vem o join com as tabelas.

Código:
    WHERE EXISTS
    (SELECT * FROM 
        [B]empregado, alocacao, projeto[/B]
      WHERE 
        [B]empregado.matEmp = alocacao.matEmp [/B]and
        alocacao.codProjeto = projeto.codProjeto and
        projeto.nome = 'Eco Turismo');

Poxa, valeu mesmo hein! Muito obrigado! Agora é só preparar o trabalho, e me ferrar na prova de BD amanhã. kkkk
:D
 
Não querendo abusar muito, mas lembrei de um problema que tive na construção de outro exercício. Anunciado:
22. Obter todos os nomes de empregados que tenham o sobrenome Fernandes

Existe alguma espécie de comando que tenha a capacidade de resolver isso? Pensei e pesquisei tanto sobre este exercício que já estava quase desistindo dele.
Obrigado desde já!
 
Código:
select nome from empregados where sobrenome like '%Fernandes%'

O % significa que o Fernandes pode estar acompanhado por caracteres antes e depois.

ex. '%ana' vai pegar joana , fabiana.
'%ana%' vai pegar janaina
'ana' só pega a palavra exata.

Eu costumo sempre colocar um upper no campo e pesquisar o nome em maisculo, pois assim evita de erros como pesquisar por 'ana' e não pegar o 'Ana'.

Com upper a consulta fica assim.

Código:
Select nome from empregados where upper(sobrenome) like 'ANA';

Agora se o nome e o sobre nome estiverem num mesmo campo a consulta vai ficar um pouco maior, mas da pra fazer tranquilamente.

Código:
Select nome from empregados where 
    [B]upper(substr(nome,instr(nome,' ')))[/B]like 'FERNANDES';

A unica diferença ficou por conta do upper(substr(nome,instr(nome,' '))), que significa:

Quero uma substring da string nome que começa depois do primeiro espaço ' ' (Estou levando em conta de que tudo que venho depois do primeiro espaço é sobrenome).

Essas consultas foram feitas no oracle e funcionam perfeitamente, provavelmente no interbase deve ter algo semelhante.
 
Código:
select nome from empregados where sobrenome like '%Fernandes%'

O % significa que o Fernandes pode estar acompanhado por caracteres antes e depois.

ex. '%ana' vai pegar joana , fabiana.
'%ana%' vai pegar janaina
'ana' só pega a palavra exata.

Eu costumo sempre colocar um upper no campo e pesquisar o nome em maisculo, pois assim evita de erros como pesquisar por 'ana' e não pegar o 'Ana'.

Com upper a consulta fica assim.

Código:
Select nome from empregados where upper(sobrenome) like 'ANA';

Agora se o nome e o sobre nome estiverem num mesmo campo a consulta vai ficar um pouco maior, mas da pra fazer tranquilamente.

Código:
Select nome from empregados where 
    [B]upper(substr(nome,instr(nome,' ')))[/B]like 'FERNANDES';

A unica diferença ficou por conta do upper(substr(nome,instr(nome,' '))), que significa:

Quero uma substring da string nome que começa depois do primeiro espaço ' ' (Estou levando em conta de que tudo que venho depois do primeiro espaço é sobrenome).

Essas consultas foram feitas no oracle e funcionam perfeitamente, provavelmente no interbase deve ter algo semelhante.

Nossa cara, valeu mesmo! Agora sim, acho que consigo uma notinha boa em BD... foda que a professora vai cobrar algebra tbm, e isso passou mto em branco. :/
Dureza, negócio é estudar amanhã, e relembrar. ^^
Abraço, e muito obrigado mesmo pelas dicas!
 

Users who are viewing this thread

Voltar
Topo