DQL - Data Query Language
Linguagem para consulta de dados: São comandos que utilizamos para realizar consultas no banco de dados e extrair informações armazenadas.
Na prática, o comando SELECT é o principal representante dessa categoria. Alguns dos principais comandos usados para a consulta são:
- SELECT: Seleciona dados de uma tabela.
- FROM: Especifica a tabela da qual se deseja selecionar dados.
- WHERE: Define critérios para filtrar os resultados.
- GROUP BY: Agrupa os resultados com base em uma ou mais colunas.
- HAVING: Define condições para grupos criados pelo GROUP BY.
- ORDER BY: Classifica os resultados em ordem crescente ou decrescente.
Exemplos de Consultas DQL
1. Listar todas as armas disponíveis no jogo e seus atributos:
SELECT *
FROM arma;
2. Buscar o nome das armas com dano maior que 50(exemplo):
SELECT nome, dano
FROM arma
WHERE dano > 50;
3. Listar as salas disponíveis e os mapas a que pertencem:
SELECT numero, nome, nome_mapa
FROM sala;
4. Encontrar os NPCs hostis no jogo:
SELECT n.id_entidade, n.tipo,
COALESCE(c.nome, z.nome, cz.nome, p.nome) AS nome_npc
FROM npc n
LEFT JOIN chefe c ON n.id_entidade = c.id_entidade
LEFT JOIN zumbi z ON n.id_entidade = z.id_entidade
LEFT JOIN cachorro_zumbi cz ON n.id_entidade = cz.id_entidade
LEFT JOIN plaga p ON n.id_entidade = p.id_entidade
WHERE n.tipo <> 'vendedor';
5. Exibir as entidades que estão em uma sala específica (ex.: sala 12):
SELECT i.idinstancianpc, i.fk_sala_numero, s.nome AS nome_sala,
n.id_entidade, n.tipo,
c.nome AS nome_chefe, z.nome AS nome_zumbi,
cz.nome AS nome_cachorro, p.nome AS nome_plaga
FROM instancianpc i
JOIN sala s ON i.fk_sala_numero = s.numero
JOIN npc n ON i.id_entidadenpc = n.id_entidade
LEFT JOIN chefe c ON n.id_entidade = c.id_entidade
LEFT JOIN zumbi z ON n.id_entidade = z.id_entidade
LEFT JOIN cachorro_zumbi cz ON n.id_entidade = cz.id_entidade
LEFT JOIN plaga p ON n.id_entidade = p.id_entidade
WHERE i.fk_sala_numero = 12;
6. Consultar os itens que estão no inventário específico (ex.: inventário 1):
SELECT ii.idinstanciaitem, i.iditem, i.tipo,
COALESCE(a.nome, e.nome, c.nome, d.nome, 'Desconhecido') AS nome_item
FROM instanciaitem ii
JOIN item i ON ii.id_item = i.iditem
LEFT JOIN arma a ON i.iditem = a.id_item
LEFT JOIN equipamento e ON i.iditem = e.id_item
LEFT JOIN consumivel c ON i.iditem = c.id_item
LEFT JOIN dinheiro d ON i.iditem = d.id_item
WHERE ii.id_inventario = 1;
7. Listar os itens e as salas em que estão disponíveis:
SELECT isala.fk_sala, s.nome AS nome_sala, i.iditem, i.tipo,
COALESCE(a.nome, e.nome, c.nome, d.nome) AS nome_item
FROM item_sala isala
JOIN sala s ON isala.fk_sala = s.numero
JOIN item i ON isala.id_item = i.iditem
LEFT JOIN arma a ON i.iditem = a.id_item
LEFT JOIN equipamento e ON i.iditem = e.id_item
LEFT JOIN consumivel c ON i.iditem = c.id_item
LEFT JOIN dinheiro d ON i.iditem = d.id_item;
8. Listar todas as missões e se estão completas:
SELECT a.nome, a.completa
FROM assassinato a
UNION ALL
SELECT r.nome, r.completa
FROM recuperacao r;
9. Exibir todas as salas que tem um chefe em um possível caminho:
SELECT DISTINCT c.sala_atual, s.nome AS sala_atual_nome, c.prox_sala, s2.nome AS prox_sala_nome
FROM caminho c
JOIN sala s ON c.sala_atual = s.numero
JOIN sala s2 ON c.prox_sala = s2.numero
JOIN instancianpc i ON c.prox_sala = i.fk_sala_numero
JOIN npc n ON i.id_entidadenpc = n.id_entidade
WHERE n.tipo = 'chefe';
10. Exibir todos os mercados e os itens disponíveis neles:
SELECT s.numero AS id_mercado,
COALESCE(a.nome, e.nome, c.nome, d.nome, 'Desconhecido') AS nome_item,
i.tipo
FROM vendedor v
JOIN instancianpc i_npc ON v.id_entidade = i_npc.id_entidadenpc
JOIN sala s ON i_npc.fk_sala_numero = s.numero
JOIN inventario inv ON i_npc.idinstancianpc = inv.id_instancianpc
JOIN instanciaitem ii ON inv.idinventario = ii.id_inventario
JOIN item i ON ii.id_item = i.iditem
LEFT JOIN arma a ON i.iditem = a.id_item
LEFT JOIN equipamento e ON i.iditem = e.id_item
LEFT JOIN consumivel c ON i.iditem = c.id_item
LEFT JOIN dinheiro d ON i.iditem = d.id_item;
Histórico de Versões
Versão | Descrição | Autor(es) | Data |
---|---|---|---|
1.0 | Criação | Bruno Cruz e Breno Yuri | 08/01/2025 |
2.0 | Acrescentando o DQL | Breno Yuri | 13/01/2025 |
2.1 | Ajuste | Bruno Cruz | 02/02/2025 |
3.0 | DQL Final | Bruno Cruz e Anne de Capdeville | 03/02/2025 |