Com relação ao código SQL acima, no SGBD MySQL, julgue o it...
Para mostrar todos os artigos publicados na revista RECEN, juntamente com seus autores, pode‑se utilizar o comando seguir.
SELECT Artigos.Titulo AS TituloArtigo, Autores.Nome AS NomeAutor FROM Artigos INNER JOIN Autores ON Autor_Artigo.AutorID = Autores.AutorID WHERE Artigos.RevistaID = (SELECT RevistaID FROM Revistas WHERE Nome = ‘NomeDaRevista‘);
- Gabarito Comentado (0)
- Aulas (3)
- Comentários (3)
- Estatísticas
- Cadernos
- Criar anotações
- Notificar Erro
Comentários
Veja os comentários dos nossos alunos
Vamos analisar o código SQL linha a linha:
```sql
SELECT Artigos.Titulo AS TituloArtigo, Autores.Nome AS NomeAutor
FROM Artigos
INNER JOIN Autores ON Autor_Artigo.AutorID = Autores.AutorID
WHERE Artigos.RevistaID = (SELECT RevistaID FROM Revistas WHERE Nome = 'NomeDaRevista');
```
### Linha por linha:
1. **`SELECT Artigos.Titulo AS TituloArtigo, Autores.Nome AS NomeAutor`**
- **`SELECT`**: Esta cláusula inicia a consulta SQL e indica quais colunas ou expressões queremos retornar no resultado.
- **`Artigos.Titulo AS TituloArtigo`**: Seleciona a coluna `Titulo` da tabela `Artigos` e a renomeia como `TituloArtigo` no resultado.
- **`Autores.Nome AS NomeAutor`**: Seleciona a coluna `Nome` da tabela `Autores` e a renomeia como `NomeAutor` no resultado.
2. **`FROM Artigos`**
- **`FROM`**: Especifica a tabela principal de onde estamos selecionando os dados.
- **`Artigos`**: O nome da tabela principal da qual os dados serão inicialmente selecionados.
3. **`INNER JOIN Autores ON Autor_Artigo.AutorID = Autores.AutorID`**
- **`INNER JOIN`**: Realiza uma junção interna entre duas tabelas. Esta cláusula combina registros de duas tabelas com base em uma condição de junção.
- **`Autores`**: O nome da tabela que está sendo juntada com a tabela `Artigos`.
- **`ON Autor_Artigo.AutorID = Autores.AutorID`**: Especifica a condição de junção. Aqui, estamos combinando registros onde `AutorID` na tabela `Autor_Artigo` é igual a `AutorID` na tabela `Autores`. Esta parte da consulta assume que há uma tabela intermediária `Autor_Artigo` que relaciona autores aos artigos.
4. **`WHERE Artigos.RevistaID = (SELECT RevistaID FROM Revistas WHERE Nome = 'NomeDaRevista')`**
- **`WHERE`**: Esta cláusula é usada para filtrar os registros que satisfazem uma condição específica.
- **`Artigos.RevistaID`**: A condição filtra os registros na tabela `Artigos` onde o valor da coluna `RevistaID` é igual ao resultado de uma subconsulta.
- **`(SELECT RevistaID FROM Revistas WHERE Nome = 'NomeDaRevista')`**: Esta é a subconsulta que retorna o `RevistaID` da tabela `Revistas` onde o `Nome` é igual a `'NomeDaRevista'`. A subconsulta é usada aqui para encontrar o `RevistaID` correspondente ao nome específico da revista fornecido.
Fonte: ChatGPT 3.5
SELECT
Artigos.Titulo AS TituloArtigo,
Autores.Nome AS NomeAutor
FROM Artigos
INNER JOIN Autores
ON Autor_Artigo.AutorID = Autores.AutorID <- Autor_Artigo Alias referenciando tabela não apontada no FROM/JOIN
WHERE Artigos.RevistaID = (SELECT
RevistaID
FROM Revistas
WHERE Nome = 'NomeDaRevista' );
Alternativa: Errado
O erro no código SQL fornecido está na tentativa de fazer a junção direta entre Artigos e Autores sem usar a tabela intermediária Autor_Artigo. O código incorreto está assim:
INNERJOIN**Autores ON Autor_Artigo.AutorID = Autores.AutorID**-- Erro: junção inadequada
A junção entre Artigos e Autores não deve ser feita diretamente. A relação entre essas duas tabelas é intermediada pela tabela Autor_Artigo, que contém as chaves ArtigoID e AutorID.
A forma correta seria usar a tabela Autor_Artigo para realizar as junções corretamente, como já discutido anteriormente. O código corrigido seria:
SELECT Artigos.Titulo AS TituloArtigo, Autores.Nome AS NomeAutor
FROM Artigos
INNER JOIN Autor_Artigo ON Artigos.ArtigoID = Autor_Artigo.ArtigoID
INNERJOIN Autores ON Autor_Artigo.AutorID = Autores.AutorID
WHERE Artigos.RevistaID = (SELECT RevistaID FROM Revistas WHERE Nome = 'RECEN');
Dessa forma, a junção entre Artigos e Autores passa a ser feita corretamente através da tabela Autor_Artigo, que contém os relacionamentos entre os autores e os artigos.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo