Pular para conteúdo

Versão 1.0

Data Query Language

Conceito:

A Data Query Language (DQL), ou Linguagem de Consulta de Dados, é um subconjunto do SQL voltado especificamente para a recuperação de informações armazenadas no banco de dados. Seu principal comando é o SELECT, que permite realizar consultas para buscar dados com base em critérios definidos, podendo incluir filtros, ordenações, agrupamentos e junções entre tabelas. A DQL é essencial para exibir os dados de forma útil e significativa dentro das aplicações, como páginas de perfil, dashboards, rankings ou qualquer tela que dependa de dados dinâmicos.

Apesar de possuir apenas um comando principal, a DQL é extremamente poderosa quando combinada com cláusulas como WHERE, JOIN, GROUP BY, HAVING e ORDER BY. Essas cláusulas aumentam a flexibilidade e a precisão das consultas, permitindo desde buscas simples até relatórios complexos.


Declarações DQL essenciais para funcionamento do jogo:

Atenção!

O conteúdo deste tópico poderá sofrer alterações ao longo da Disciplina de Sistema de Banco de Dados 1. Portanto, à medida que novas inserções forem necessárias, o arquivo atual sempre sempre se manterá atualizado com a nova versão.

1. Consultas na Tabela personagem

1.1. Listar todos os personagens

Para obter uma lista completa de todos os personagens cadastrados no jogo, desde NPCs e jogadores até criaturas, podemos usar uma consulta simples que retorna todos os registros da tabela.

SELECT * FROM personagem;

1.2. Encontrar personagens poderosos

Se quisermos encontrar apenas os personagens mais fortes e de nível elevado, para uma missão especial, por exemplo, podemos filtrar por vida_maxima e level, ordenando do maior nível para o menor.

SELECT nome, vida_maxima, level
FROM personagem
WHERE vida_maxima > 100 AND level > 10
ORDER BY level DESC;

2. Consulta de Cenários e suas Conexões

Para que o sistema possa exibir o mapa do jogo e as opções de navegação para o jogador, ele precisa entender como os cenários se conectam. A consulta a seguir busca um cenário e mostra informações sobre os locais adjacentes (norte, sul, leste, oeste).

SELECT 
    c.id_cenario,
    c.sol,
    c.dia,
    norte.sol AS sol_norte,
    leste.sol AS sol_leste,
    oeste.sol AS sol_oeste,
    sul.sol AS sol_sul
FROM cenario c
LEFT JOIN cenario norte ON c.norte_id = norte.id_cenario
LEFT JOIN cenario leste ON c.leste_id = leste.id_cenario
LEFT JOIN cenario oeste ON c.oeste_id = oeste.id_cenario
LEFT JOIN cenario sul ON c.sul_id = sul.id_cenario;

3. Busca de Dados Combinados do Jogador

Quando o jogador entra no jogo, o sistema precisa carregar suas informações básicas (como o nome, que está na tabela personagem) e sua localização atual (que está na tabela cenario). A consulta a seguir une essas três tabelas para obter um resumo completo.

SELECT
    j.ID_personagem,
    p.nome AS nome_personagem,
    j.tipo_equipamento,
    c.id_cenario,
    c.sol AS clima_atual,
    c.dia AS periodo_dia
FROM jogador j
INNER JOIN personagem p ON j.ID_personagem = p.ID_personagem
INNER JOIN cenario c ON j.cenario = c.id_cenario;

4. Visualizar o Inventário de um Personagem

Para exibir a tela de inventário de um personagem, precisamos buscar os dados do inventário, as informações do personagem e a lista de todos os itens que ele carrega.

SELECT 
    i.id_inventario,
    p.nome AS nome_personagem,
    i.pods AS capacidade_inventario,
    it.nome AS nome_item,
    it.peso,
    it.durabilidade
FROM inventario i
INNER JOIN personagem p ON i.id_personagem = p.ID_personagem
LEFT JOIN item it ON it.id_inventario = i.id_inventario
WHERE p.nome = 'Roric, o Guia'; -- Exemplo para um personagem específico

5. Detalhar um Item Específico (Arma ou Armadura)

Quando o jogador clica em um item, o sistema precisa mostrar se é uma arma, uma armadura ou um item comum, exibindo seus atributos específicos (dano ou defesa).

SELECT 
    it.id_item,
    it.nome,
    it.peso,
    it.durabilidade,
    a.mãos AS empunhadura_arma,
    a.dano,
    ar.defesa
FROM item it
LEFT JOIN arma a ON it.id_item = a.id_item
LEFT JOIN armadura ar ON it.id_item = ar.id_item;

6. Consultas de NPCs Especializados

O jogo precisa buscar informações específicas dependendo do tipo de NPC com que o jogador interage.

6.1. Informações de um Guia

Para buscar as informações de um Guia, incluindo seu nome e o custo de sua orientação.

SELECT 
    p.nome,
    g.custo_orientacao
FROM guia g
INNER JOIN personagem p ON g.ID_personagem = p.ID_personagem;

6.2. Informações de um Comerciante

Para exibir a janela de comércio, mostrando o que um Comerciante compra e vende.

SELECT 
    p.nome,
    c.venda_item,
    c.compra_item
FROM comerciante c
INNER JOIN personagem p ON c.ID_personagem = p.ID_personagem;

7. Consultas de Criaturas e Inimigos

Para preparar um encontro de combate, o sistema busca os dados da criatura que o jogador irá enfrentar.

7.1. Detalhes de um Ork

Busca os dados de um Ork, incluindo sua Fúria.

SELECT 
    p.nome,
    cr.XP,
    o.Raiva
FROM ork o
INNER JOIN criatura cr ON o.ID_personagem = cr.ID_personagem
INNER JOIN personagem p ON o.ID_personagem = p.ID_personagem;

7.2. Detalhes de um Chefe (Boss)

Busca os dados de um Chefe, incluindo suas imunidades e a fase atual da batalha.

SELECT 
    p.nome,
    cr.XP,
    b.faseAtual,
    b.imunidades
FROM boss b
INNER JOIN criatura cr ON b.ID_personagem = cr.ID_personagem
INNER JOIN personagem p ON b.ID_personagem = p.ID_personagem;

8. Histórico de Confrontos

Para exibir um histórico de batalhas, mostrando quem lutou contra quem e qual foi o resultado.

SELECT
    con.Unique_ID,
    jog2.nome AS nome_jogador,
    cri2.nome AS nome_criatura,
    con.vencedor
FROM confronta con
LEFT JOIN criatura cri ON con.criatura_id = cri.ID_personagem
LEFT JOIN personagem cri2 ON cri.ID_personagem = cri2.ID_personagem
LEFT JOIN jogador jog ON con.jogador_id = jog.ID_personagem
LEFT JOIN personagem jog2 ON jog.ID_personagem = jog2.ID_personagem;

9. Análise de Dados de Batalha

Para balanceamento do jogo, um desenvolvedor pode querer analisar as médias de dano causado e sofrido em cada ambiente de batalha.

SELECT 
    Ambiente_batalha,
    AVG(Dano_causado) AS media_dano_causado,
    AVG(Dano_sofrido) AS media_dano_sofrido
FROM batalha
GROUP BY Ambiente_batalha
ORDER BY media_dano_causado DESC;

10. Buscar Habilidades e Características de um Jogador

Para exibir a "Ficha de Personagem" do jogador, o sistema busca suas habilidades (skill) e suas afinidades elementais (caracteristicas).

SELECT 
    p.nome,
    s.atq,
    c.fogo,
    c.agua,
    c.terra,
    c.ar
FROM jogador j
INNER JOIN personagem p ON j.ID_personagem = p.ID_personagem
LEFT JOIN skill s ON j.ID_personagem = s.ID_jogador
LEFT JOIN caracteristicas c ON j.ID_personagem = c.ID_jogador;

11. Listar Personagens por Classe

Para encontrar todos os personagens que pertencem a uma classe específica, como "Guerreiro".

SELECT 
    p.nome,
    p.level,
    gw.atq_Fisico,
    gw.bloquear_Dano
FROM guerreiro gw
INNER JOIN personagem p ON gw.id_personagem = p.ID_personagem;

Tabela de Versionamento

Versão Data Descrição Autor(es) Revisor(es)
1.0 15/06/2025 Todos os integrantes desenvolveram esse artefato Todos os Integrantes Todos os Integrantes