Dúvida em exercício de concurso

Estou com uma dúvida em uma questão discursiva de banco de dados de um concurso. Tenho as seguintes tabelas:

GRAVADORA com os atributos CodGravadora, NomeGravadora e UFGravadora.
CD com os atributos CodCD, NomeCD, PrecoCD e DataLancamentoCD.
MUSICA com os atributos CodMusica, NomeMusica e DuracaoMusica.
AUTOR com os atributos CodAutor e NomeAutor.
CDGRAVADORA com os atributos CodCD e CodGravadora.
MUSICACD com os atributos CodCD e CodMusica.
MUSICAAUTOR com os atributos CodMusica e CodAutor.

A questão pede: Depois da morte do autor Maicol Diequison, todos os CDs com suas músicas tiveram um aumento no preço em torno de 10%. Nesse caso penso que devo fazer um update na tabela CD. Minha dúvida é se eu posso botar um WHERE com um select fazendo os JOINS nas tabelas que vão sendo utilizadas no decorrer do script. Fiz o seguinte (mas nem rodei por dúvidas):

  • Depois da morte do autor Maicol Diequison, todos os CDs com suas músicas tiveram um aumento no preço em torno de 10%

    update CD set PrecoCD = cd.PrecoCD*0.1 where (
    select CodCd, CodMusica from MUSICACD mcd
    INNER JOIN MUSICAAUTOR ma ON
    ma.CodMusica = mcd.CodMusica
    INNER JOIN AUTOR au ON
    au.CodAutor = ma.CodAutor AND au.NomeAutor = 'Maicol Diequison’
    INNER JOIN CD cd ON
    cd.CodCd = mcd.CodCd)

Não quero código pronto, pois estou estudando pra concurso, quero apenas a luz de como resolver esse exercícios. Gracias!

O SQL Server suporta update com joins pesquise a respeito, na minha opinião melhor que usar subquery, algo nesse sentido…

update tab1 set tab1.campo = tab2.valor
from tab1 inner join tab2 on ....

Bons estudos e sorte na prova!

Deu certo meu amigo. Meu muito obrigado, bora seguir na caminhada! Segue minha solução:

`update CD set PrecoCD = cd.PrecoCD+(cd.PrecoCD*0.1) 

from CD cd
inner join MUSICACD mcd ON
cd.CodCD = mcd.CodCd
inner join MUSICAAUTOR ma ON
ma.CodMusica = mcd.CodMusica
inner join AUTOR au ON
au.CodAutor = ma.CodAutor
inner join CD cd2 ON
cd2.CodCD = mcd.CodCd

where au.NomeAutor in (select NomeAutor from AUTOR where NomeAutor = ‘Maicol Diequison’)`

Abraços!

Essa linha usando subquery é completamente desnecessária

Lhe indiquei o join justamente para você não depender da subquery e você pode encurta-la assim…

where au.NomeAutor = 'Maicol Diequison'

Tirei aqui hehe. Valeu demais !!!

1 curtida

Evite ao máximo usar subqueries, elas afetam a performance nas consultas…

Só por curiosidade e estudos, o SQL server tem uma ferramenta de monitoramento que aponta onde as consultas podem ser melhoradas, qual “gargalo” está “travando” a consulta, etc, dá uma pesquisada que vale a pena!

Sucesso na prova e nos estudos!