O que é DQL?
DQL (Data Query Language) é um subconjunto da SQL (Structured Query Language) que é usado para consultar e recuperar dados de um banco de dados. A principal operação em DQL é a instrução SELECT, que permite buscar e retornar dados de uma ou mais tabelas.
Consultas e Atualizações para o Jogo
Este documento explica as consultas SQL usadas para interagir com o banco de dados de um jogo.
Consultas
Listar todas as regiões e suas capacidades
SELECT nomeRegiao, capacidade
FROM Regiao;
Obtém o nome e a capacidade de todas as regiões no banco de dados.
Mostrar onde o Joel está (em que sala)
SELECT Sala
FROM PC
WHERE idPC = 1;
Retorna a sala atual do personagem com ID 1 (Joel).
Ver localização de uma região
SELECT R.nomeRegiao, S.descricaoSala
FROM Regiao R
JOIN Sala S ON R.idRegiao = S.IdRegiao;
Mostra o nome da região e a descrição da sala correspondente.
Descrição de uma região de acordo com a sala em que ela está
SELECT r.descricaoRegiao
FROM Sala s
JOIN Regiao r
ON s.IdRegiao = r.idRegiao;
Retorna a descrição da região para cada sala.
Itens no inventário do Joel
SELECT I.nomeItem
FROM Item I
JOIN Inventario II ON I.IdInventario = II.idInventario
WHERE II.idInventario = 1;
Lista os itens no inventário com ID 1, que pertence ao Joel.
Ver armas do personagem
SELECT I.idItem AS nome, I.tipoItem AS mult_ataque
FROM Inventario INV
JOIN Item I ON INV.idInventario = I.idInventario
WHERE INV.idPersonagem = ${id_personagem} AND I.tipoItem = 1;
Exibe as armas (tipoItem = 1) do personagem com o ID fornecido.
Ver vestimentas do personagem
SELECT I.idItem AS nome, I.tipoItem AS mult_ataque
FROM Inventario INV
JOIN Item I ON INV.idInventario = I.idInventario
WHERE INV.idPersonagem = ${id_personagem} AND I.tipoItem = 2;
Mostra as vestimentas (tipoItem = 2) do personagem com o ID fornecido.
Ver consumíveis do personagem
SELECT I.idItem AS nome, I.tipoItem AS mult_ataque
FROM Inventario INV
JOIN Item I ON INV.idInventario = I.idInventario
WHERE INV.idPersonagem = ${id_personagem} AND I.tipoItem = 3;
Retorna os consumíveis (tipoItem = 3) do personagem com o ID fornecido.
Consultar todas as zonas de quarentena com segurança acima de um certo nível
SELECT idZona, seguranca, populacaoAtual
FROM ZonaQuarentena
WHERE seguranca > 5;
Lista as zonas de quarentena cuja segurança é maior que 5.
Quantas salas tem em cada região
SELECT S.idSala, R.nomeRegiao
FROM Sala S
JOIN Regiao R ON S.IdRegiao = R.idRegiao;
Mostra a quantidade de salas em cada região.
Selecionar apenas NPCs
SELECT idPersonagem
FROM Personagem
WHERE tipoPersonagem = 2;
Obtém todos os NPCs, onde tipoPersonagem
é 2.
Listar todas as regiões com seus detalhes
SELECT *
FROM Regiao;
Retorna todos os detalhes de cada região.
Consultar todos os locais abandonados em uma região específica
SELECT *
FROM LocalAbandonado a
JOIN Regiao r ON a.IdRegiao = r.idRegiao
WHERE r.tipo = 2; -- Cidade Abandonada
Lista todos os locais abandonados em regiões do tipo "Cidade Abandonada" (tipo = 2).
Obter detalhes importantes dos NPCs em uma sala específica
SELECT nomePersonagem, xp, vidaMax, vidaAtual
FROM NPC
WHERE Sala = 1;
Mostra detalhes dos NPCs localizados na sala com ID 1.
Verificar a capacidade e o uso atual do inventário de um NPC específico
SELECT I.descricao, I.capacidade, SUM(II.quantidade) AS uso_atual
FROM Inventario I
JOIN InventarioItem II ON I.idInventario = II.idInventario
WHERE I.idInventario = (SELECT IdInventario FROM NPC WHERE idNPC = 2)
GROUP BY I.descricao, I.capacidade;
Mostra a capacidade e o uso atual do inventário do NPC com ID 2.
Missões que utilizam um tipo específico de item
SELECT M.idMissao, M.tipoMis
FROM Itens I
JOIN Missao M ON I.IdMissao = M.idMissao
WHERE I.IdItem = 3; -- Por exemplo, uma bomba
Lista as missões que utilizam o item com ID 3.
Listar todas as zonas de quarentena e suas populações
SELECT ZQ.idRegiao, R.nomeRegiao, ZQ.populacaoAtual
FROM ZonaQuarentena ZQ
JOIN Regiao R ON ZQ.IdRegiao = R.idRegiao;
Mostra todas as zonas de quarentena e suas populações atuais.
Consultar todos os acampamentos com seu nível de defesa
SELECT A.IdRegiao, R.nomeRegiao, A.defesa
FROM Acampamento A
JOIN Regiao R ON A.IdRegiao = R.idRegiao;
Lista os acampamentos e seus níveis de defesa.
Encontrar todos os locais abandonados em regiões perigosas
SELECT LA.periculosidade, R.nomeRegiao
FROM LocalAbandonado LA
JOIN Regiao R ON LA.IdRegiao = R.idRegiao
WHERE LA.periculosidade > 7;
Obtém locais abandonados em regiões com periculosidade acima de 7.
Obter nome de todos os personagens que não são aliados
SELECT NPC.nomePersonagem
FROM NPC NPC
WHERE NPC.eAliado = false;
Lista todos os personagens que não são aliados.
Listar todos os itens em um inventário específico
SELECT II.nomeItem, I.capacidade, I.descricao
FROM Item II
JOIN Inventario I ON II.IdInventario = I.idInventario
WHERE I.idInventario = 1; -- 1 seria um inventário específico
Mostra todos os itens no inventário com ID 1.
Consultar as regiões que possuem mais de um tipo de estrutura
SELECT R.nomeRegiao, COUNT(DISTINCT ZQ.IdRegiao) AS ZonasQuarentena,
COUNT(DISTINCT A.IdRegiao) AS Acampamentos,
COUNT(DISTINCT LA.IdRegiao) AS LocaisAbandonados
FROM Regiao R
LEFT JOIN ZonaQuarentena ZQ ON R.idRegiao = ZQ.IdRegiao
LEFT JOIN Acampamento A ON R.idRegiao = A.IdRegiao
LEFT JOIN LocalAbandonado LA ON R.idRegiao = LA.IdRegiao
GROUP BY R.nomeRegiao
HAVING COUNT(DISTINCT ZQ.IdRegiao) > 0
AND COUNT(DISTINCT A.IdRegiao) > 0
AND COUNT(DISTINCT LA.IdRegiao) > 0;
Lista regiões com mais de um tipo de estrutura: zonas de quarentena, acampamentos e locais abandonados.
Encontrar as regiões com maior capacidade e listar suas zonas de quarentena e acampamentos
SELECT R.nomeRegiao, R.capacidade
FROM Regiao R
LEFT JOIN ZonaQuarentena ZQ ON R.idRegiao = ZQ.IdRegiao
LEFT JOIN Acampamento A ON R.idRegiao = A.IdRegiao
WHERE R.capacidade > 20;
Mostra regiões com capacidade maior que 20, junto com suas zonas de quarentena e acampamentos.
Conta quantos NPCs existem no banco de dados
SELECT COUNT(*) AS totalNPCs
FROM NPC;
Retorna a quantidade total de NPCs no banco de dados.
Soma total de XP ganho em missões de patrulha
SELECT SUM(xpMis) AS xpTotalPatrulha
FROM MissaoPatrulha;
Calcula a soma total de XP ganho em missões de patrulha.
Soma total de XP ganho em missões de exploração/obter item
SELECT SUM(xpMis) AS xpTotalExploracao
FROM MissaoExploracaoObterItem;
Calcula a soma total de XP ganho em missões de exploração/obter item.
Consulta que retorna todos os personagens com seus inventários associados
SELECT Personagem.nomePersonagem, Inventario.descricao
FROM Personagem
JOIN Inventario ON Personagem.idInventario = Inventario.idInventario;
Mostra todos os personagens e suas descrições de inventário.
Consulta que retorna os NPCs que estão em uma sala
SELECT nomePersonagem
FROM NPC
WHERE Sala = {$idSala};
Lista os NPCs localizados na sala especificada por ID.
Consulta que retorna quais NPCs estão na mesma sala que Joel
SELECT nomePersonagem
FROM NPC
WHERE Sala = (SELECT
Sala FROM PC WHERE IdPersonagem = 1);
Obtém os NPCs que estão na mesma sala que Joel (ID 1).
Retorna os itens que pode-se obter em uma missão de exploração
SELECT i.*
FROM Itens i
JOIN MissaoExploracaoObterItem m ON i.IdMissao = m.idMissao
JOIN Personagem p ON m.IdPersonagem = p.idPersonagem
JOIN PC pc ON p.idPersonagem = pc.IdPersonagem
WHERE pc.Sala = (
SELECT Sala
FROM PC
WHERE IdPersonagem = ${id_personagem}
);
Mostra itens que podem ser obtidos em missões de exploração baseadas na sala atual do personagem.
Retorna os itens que pode-se obter em uma missão de patrulha
SELECT i.*
FROM Itens i
JOIN MissaoPatrulha m ON i.IdMissao = m.idMissao
JOIN Personagem p ON m.IdPersonagem = p.idPersonagem
JOIN PC pc ON p.idPersonagem = pc.IdPersonagem
WHERE pc.Sala = (
SELECT Sala
FROM PC
WHERE IdPersonagem = ${id_personagem}
);
Mostra itens que podem ser obtidos em missões de patrulha baseadas na sala atual do personagem.
Consulta se a missão pré-requisito de obter item foi concluída
SELECT statusMissao
FROM MissaoExploracaoObterItem
WHERE IdMissao = (
SELECT IdMissaoPre
FROM MissaoExploracaoObterItem
WHERE IdMissao = ${id_missao}
) AND statusMissao = 'true';
Verifica se a missão pré-requisito para a missão de obter item foi concluída.
Consulta se a missão pré-requisito de patrulha foi concluída
SELECT statusMissao
FROM MissaoPatrulha
WHERE IdMissao = (
SELECT IdMissaoPre
FROM MissaoExploracaoObterItem
WHERE IdMissao = ${id_missao}
) AND statusMissao = 'true';
Verifica se a missão pré-requisito para a missão de patrulha foi concluída.
Atualizações
Dá update na vida de um PC
UPDATE PC SET vidaAtual = $valor
WHERE IdPersonagem = ${id_personagem};
Atualiza o valor da vida atual do PC com o ID fornecido.
Dá update na vida de um NPC
UPDATE NPC SET vidaAtual = $valor
WHERE IdPersonagem = ${id_personagem};
Atualiza o valor da vida atual do NPC com o ID fornecido.
Dá update em um inventário
UPDATE Inventario SET capacidade = capacidade - 1
WHERE IdPersonagem = ${id_personagem} AND IdItem = ${id_item};
Reduz a capacidade do inventário do personagem especificado pelo ID e item.
Dá update na missão patrulha falando que foi concluída
UPDATE MissaoPatrulha SET statusMissao = 'true'
WHERE idMissao = ${id_missao};
Marca a missão de patrulha como concluída.
Dá update na missão de exploração/obter item falando que foi concluída
UPDATE MissaoExploracaoObterItem SET statusMissao = 'true'
WHERE idMissao = ${id_missao};
Marca a missão de exploração/obter item como concluída.
Atualiza XP do jogador ao concluir missão de exploração
UPDATE PC SET xp = xp + (SELECT xpMis FROM MissaoExploracaoObterItem WHERE idMissao = ${id_missao})
WHERE IdPersonagem = ${idPersonagem};
Adiciona a XP da missão de exploração ao XP do personagem.
Atualiza XP do jogador ao concluir missão de patrulha
UPDATE PC SET xp = xp + (SELECT xpMis FROM MissaoPatrulha WHERE idMissao = ${id_missao})
WHERE IdPersonagem = ${idPersonagem};
Adiciona a XP da missão de patrulha ao XP do personagem.
Aumenta a vida de um personagem de acordo com o quanto de vida um consumível dá
UPDATE PC SET vidaAtual = vidaAtual + (SELECT aumentoVida FROM Consumivel WHERE IdItem = ${id_item})
WHERE IdPersonagem = ${idPersonagem};
Aumenta a vida atual do personagem com base na quantidade de vida fornecida pelo item consumível.