DQL
DQL (Data Query Language) é uma parte da linguagem SQL (Structured Query Language) usada para consultar dados de um banco de dados. O objetivo principal do DQL é recuperar ou consultar informações armazenadas nas tabelas do banco de dados.
Consultas que serão utilizadas
scripts/jogo/combate
main.py
Habilidades do estudante
SELECT he.id_habilidade,
th.tipo_habilidade,
COALESCE(a.nome, c.nome, d.nome) AS nome,
COALESCE(a.nivel, c.nivel, d.nivel) AS nivel,
COALESCE(a.coolDown, c.coolDown, d.coolDown) AS cooldown,
a.danoCausado,
c.vidaRecuperada,
d.danoMitigado,
t.nome AS tema
FROM habilidade_estudante he
JOIN tipoHabilidade th ON he.id_habilidade = th.id_habilidade
LEFT JOIN Ataque a ON he.id_habilidade = a.id_habilidade
LEFT JOIN Cura c ON he.id_habilidade = c.id_habilidade
LEFT JOIN Defesa d ON he.id_habilidade = d.id_habilidade
JOIN tema t ON COALESCE(a.id_tema, c.id_tema, d.id_tema) = t.id_tema
WHERE he.id_estudante = %s
Habilidades da criatura
SELECT hc.id_habilidade,
th.tipo_habilidade,
COALESCE(a.nome, c.nome, d.nome) AS nome,
COALESCE(a.nivel, c.nivel, d.nivel) AS nivel,
COALESCE(a.coolDown, c.coolDown, d.coolDown) AS cooldown,
a.danoCausado,
c.vidaRecuperada,
d.danoMitigado,
t.nome AS tema
FROM habilidade_criatura hc
JOIN tipoHabilidade th ON hc.id_habilidade = th.id_habilidade
LEFT JOIN Ataque a ON hc.id_habilidade = a.id_habilidade
LEFT JOIN Cura c ON hc.id_habilidade = c.id_habilidade
LEFT JOIN Defesa d ON hc.id_habilidade = d.id_habilidade
JOIN tema t ON COALESCE(a.id_tema, c.id_tema, d.id_tema) = t.id_tema
WHERE hc.id_criatura = %s
Vida atual do estudante
SELECT vida FROM estudante WHERE id_estudante = %s
Vida máxima da criatura (Monstro ou Boss)
SELECT vida_max FROM monstro_simples WHERE id_criatura = %s
UNION
SELECT vida_max FROM boss WHERE id_criatura = %s
scripts/jogo/map
dungeon.py
Detalhes da dungeon na sala
SELECT s.tem_dungeon, d.id_dungeon, d.nome, d.descricao, d.id_tema, t.nome
FROM sala_comum s
JOIN dungeon_academica d ON d.id_dungeon = s.id_sala
JOIN tema t ON d.id_tema = t.id_tema
WHERE s.id_sala = %s
Detalhes do boss e sua relíquia
SELECT b.id_criatura, b.nome, b.descricao, b.nivel, b.vida_max, b.id_reliquia, r.nome
FROM boss b
JOIN reliquia r ON b.id_reliquia = r.id_reliquia
WHERE b.id_criatura = %s
Verificar posse de relíquia pelo estudante
SELECT 1
FROM instancia_de_item ii
JOIN reliquia r ON ii.id_item = r.id_reliquia
WHERE ii.id_estudante = %s AND r.id_reliquia = %s
LIMIT 1
Listar monstros instanciados na dungeon
SELECT m.id_criatura, m.nome, m.descricao, m.nivel, m.vida_max,
ic.vida_atual, m.qtd_moedas, m.xp_tema
FROM instancia_de_criatura ic
JOIN monstro_simples m ON ic.id_criatura = m.id_criatura
WHERE ic.id_dungeon = %s
loja.py
Consumíveis disponíveis na loja
SELECT i.id_item, c.nome, c.descricao, c.preco
FROM loja_item li
JOIN tipo_item i ON li.id_item = i.id_item
JOIN consumivel c ON i.id_item = c.id_item
WHERE li.id_sala = %s
Habilidades disponíveis na loja
SELECT
th.id_habilidade,
COALESCE(a.nome, c.nome, d.nome) AS nome,
th.tipo_habilidade,
COALESCE(a.preco, c.preco, d.preco) AS preco,
t.nome AS nome_tema,
COALESCE(a.nivel, c.nivel, d.nivel) AS nivel_req,
t.id_tema
FROM habilidade_loja hl
JOIN tipoHabilidade th ON hl.id_habilidade = th.id_habilidade
LEFT JOIN Ataque a ON hl.id_habilidade = a.id_habilidade
LEFT JOIN Cura c ON hl.id_habilidade = c.id_habilidade
LEFT JOIN Defesa d ON hl.id_habilidade = d.id_habilidade
LEFT JOIN tema t ON COALESCE(a.id_tema, c.id_tema, d.id_tema) = t.id_tema
WHERE hl.id_loja = %s
Nível de afinidade do estudante
SELECT nivel_atual FROM afinidade WHERE id_estudante = %s AND id_tema = %s
Verificar se estudante já possui a habilidade
SELECT 1 FROM habilidade_estudante WHERE id_estudante = %s AND id_habilidade = %s
Verificar se a sala possui loja
SELECT tem_loja FROM sala_comum WHERE id_sala = %s
sala.py
Sala atual do estudante
SELECT id_sala FROM estudante WHERE id_estudante = %s
Salas adjacentes (anterior / próxima)
SELECT s.id_sala, s.nome, s.descricao, c.nome as campus
FROM sala_comum s
JOIN setor st ON s.id_setor = st.id_setor
JOIN campus c ON st.id_campus = c.id_campus
WHERE s.id_sala IN (
SELECT id_prevSala FROM sala_comum WHERE id_sala = %s
UNION
SELECT id_proxSala FROM sala_comum WHERE id_sala = %s
)
ORDER BY s.id_sala
Nome do estudante e da sala
SELECT e.nome, s.nome
FROM Estudante e
JOIN Sala_Comum s ON e.id_sala = s.id_sala
WHERE e.id_estudante = %s
Nome da sala
SELECT nome FROM Sala_Comum WHERE id_sala = %s
Verificar presença de dungeon ou loja na sala
SELECT tem_dungeon, tem_loja FROM sala_comum WHERE id_sala = %s
Itens disponíveis na sala (não coletados)
SELECT
ii.id_instanciaItem,
COALESCE(c.nome, e.nome, m.nome) AS nome_item
FROM instancia_de_item ii
JOIN tipo_item ti ON ii.id_item = ti.id_item
LEFT JOIN consumivel c ON ti.id_item = c.id_item
LEFT JOIN equipavel e ON ti.id_item = e.id_item
LEFT JOIN monetario m ON ti.id_item = m.id_item
WHERE ii.id_sala = %s AND ii.id_estudante IS NULL
setor.py
Sala atual do estudante
SELECT id_sala FROM estudante WHERE id_estudante = %s
Setor da sala
SELECT id_setor FROM sala_comum WHERE id_sala = %s
Setores adjacentes do setor atual
SELECT id_prevsetor, id_proxsetor FROM setor WHERE id_setor = %s
Informações de múltiplos setores
SELECT id_setor, nome, descricao FROM setor WHERE id_setor = ANY(%s)
Primeira sala do setor
SELECT id_sala, nome FROM sala_comum WHERE id_setor = %s ORDER BY id_sala LIMIT 1
scripts/jogo/monster
boss.py
Boss instanciado na dungeon (detalhes completos)
SELECT
b.id_criatura,
b.nome,
b.descricao,
b.nivel,
b.vida_max,
r.id_reliquia,
r.nome AS nome_reliquia,
r.descricao AS desc_reliquia,
r.tipo_reliquia,
ic.id_instanciaCriatura,
ic.vida_atual
FROM instancia_de_criatura ic
JOIN boss b ON b.id_criatura = ic.id_criatura
JOIN reliquia r ON r.id_reliquia = b.id_reliquia
WHERE ic.id_dungeon = %s
LIMIT 1
monster.py
Habilidades da criatura (genéricas)
SELECT
hc.id_habilidade,
th.tipo_habilidade,
COALESCE(a.nome, c.nome, d.nome) AS nome,
COALESCE(a.nivel, c.nivel, d.nivel) AS nivel,
COALESCE(a.coolDown, c.coolDown, d.coolDown) AS cooldown,
a.danoCausado,
c.vidaRecuperada,
d.danoMitigado,
COALESCE(a.id_tema, c.id_tema, d.id_tema) AS id_tema
FROM habilidade_criatura hc
JOIN tipoHabilidade th ON hc.id_habilidade = th.id_habilidade
LEFT JOIN Ataque a ON hc.id_habilidade = a.id_habilidade
LEFT JOIN Cura c ON hc.id_habilidade = c.id_habilidade
LEFT JOIN Defesa d ON hc.id_habilidade = d.id_habilidade
WHERE hc.id_criatura = %s
scripts/jogo/player
afinidade.py
Afinidades do estudante
SELECT a.id_tema, t.nome AS nome_tema, a.nivel_atual, a.xp_atual
FROM afinidade a
JOIN tema t ON a.id_tema = t.id_tema
WHERE a.id_estudante = %s
ORDER BY a.id_tema
consumir.py
Efeito do consumível instanciado
SELECT c.efeito
FROM instancia_de_item ci
JOIN consumivel c ON ci.id_item = c.id_item
WHERE ci.id_instanciaItem = %s
AND ci.id_estudante = %s
habilidades.py
Habilidades do estudante
SELECT
he.id_habilidade,
th.tipo_habilidade,
COALESCE(a.nome, c.nome, d.nome) AS nome,
COALESCE(a.nivel, c.nivel, d.nivel) AS nivel,
COALESCE(a.coolDown, c.coolDown, d.coolDown) AS cooldown,
a.danoCausado,
c.vidaRecuperada,
d.danoMitigado,
tm.nome AS nome_tema
FROM habilidade_estudante he
JOIN tipoHabilidade th ON he.id_habilidade = th.id_habilidade
LEFT JOIN Ataque a ON he.id_habilidade = a.id_habilidade
LEFT JOIN Cura c ON he.id_habilidade = c.id_habilidade
LEFT JOIN Defesa d ON he.id_habilidade = d.id_habilidade
LEFT JOIN tema tm ON COALESCE(a.id_tema, c.id_tema, d.id_tema) = tm.id_tema
WHERE he.id_estudante = %s
inventario.py
Consumíveis do estudante
SELECT ci.id_instanciaItem,
c.nome AS nome_item,
c.descricao,
c.efeito,
c.preco
FROM instancia_de_item ci
JOIN consumivel c ON ci.id_item = c.id_item
WHERE ci.id_estudante = %s
Equipáveis do estudante
SELECT ei.id_instanciaItem,
e.nome AS nome_item,
e.descricao,
e.efeito,
e.preco,
ei.equipado
FROM instancia_de_item ei
JOIN equipavel e ON ei.id_item = e.id_item
WHERE ei.id_estudante = %s
Relíquias do estudante
SELECT ri.id_instanciaItem,
r.nome AS nome_reliquia,
r.descricao,
r.tipo_reliquia
FROM instancia_de_item ri
JOIN reliquia r ON ri.id_item = r.id_reliquia
WHERE ri.id_estudante = %s
Itens monetários do estudante
SELECT mi.id_instanciaItem,
m.nome AS nome_item,
m.descricao,
m.valor
FROM instancia_de_item mi
JOIN monetario m ON mi.id_item = m.id_item
WHERE mi.id_estudante = %s
menu.py
Status do estudante e sua sala
SELECT e.nome, e.vida, e.estresse, e.total_dinheiro, s.nome AS nome_sala, e.id_sala
FROM estudante e
JOIN sala_comum s ON e.id_sala = s.id_sala
WHERE e.id_estudante = %s
scripts/jogo
debug_menu.py
Salas com dungeon
SELECT s.id_sala, s.nome, st.nome AS nome_setor
FROM sala_comum s
JOIN setor st ON s.id_setor = st.id_setor
WHERE s.tem_dungeon = TRUE
ORDER BY s.id_sala
Salas com loja
SELECT s.id_sala, s.nome, st.nome AS nome_setor
FROM sala_comum s
JOIN setor st ON s.id_setor = st.id_setor
WHERE s.tem_loja = TRUE
ORDER BY s.id_sala
Salas com itens disponíveis (quantidade)
SELECT s.id_sala, s.nome, COUNT(ii.id_instanciaItem) AS quantidade_itens
FROM sala_comum s
JOIN instancia_de_item ii ON s.id_sala = ii.id_sala
WHERE ii.id_estudante IS NULL
GROUP BY s.id_sala, s.nome
ORDER BY s.id_sala
Estudantes e suas localizações
SELECT
e.nome AS nome_jogador,
s.nome AS nome_sala,
st.nome AS nome_setor
FROM estudante e
JOIN sala_comum s ON e.id_sala = s.id_sala
JOIN setor st ON s.id_setor = st.id_setor
ORDER BY e.id_estudante
Relacionar salas que possuem dungeon
SELECT
s.id_sala,
s.nome AS nome_sala,
d.nome AS nome_dungeon,
t.nome AS nome_tema
FROM
sala_comum s
JOIN
dungeon_academica d ON d.id_dungeon = s.id_sala
JOIN
tema t ON d.id_tema = t.id_tema
ORDER BY
s.id_sala
scripts
app.py
Listar todos os estudantes
SELECT id_estudante, nome FROM estudante ORDER BY id_estudante
Status do estudante e sua sala
SELECT e.nome, e.vida, e.estresse, e.total_dinheiro, s.nome AS nome_sala, e.id_sala
FROM estudante e
JOIN sala_comum s ON e.id_sala = s.id_sala
WHERE e.id_estudante = %s
temp.py
Todas as dungeons e suas salas
SELECT s.id_sala, s.nome AS nome_sala, d.nome AS nome_dungeon, d.descricao
FROM sala_comum s
JOIN dungeon_academica d ON s.id_sala = d.id_dungeon
ORDER BY s.id_sala
Histórico de Versões
| Versão | Data | Descrição | Autor |
|---|---|---|---|
1.0 |
12/06/2025 | Criação das consultas | Ludmila Nunes & Isaque Camargos |
2.0 |
07/07/2025 | Consultas finais | Ludmila Nunes & Isaque Camargos |