Toda ferramente ORM geralmente possui uma linguagem ou ferramentas próprias para realização de consulta a banco de dado.
A JPQL é parecida com a SQL, porém é adaptado para modelo de acesso a dados JPA.
Exemplo 1
SQL:
SELECT *
FROM tb_employee
WHERE UPPER(name) LIKE 'MARIA%'
JPQL
SELECT obj
//não escrevemos a tabela e sim Entidade + obj
FROM Employee obj
//obj.name pois estamos acessando o atributo
WHERE UPPER(obj.name) LIKE 'MARIA%'
Exemplo 2
SQL:
SELECT tb_employee.*
FROM tb_employee
INNER JOIN tb_department ON tb_department.id = tb_employee.department_idWHERE tb_department.name = 'Financeiro'
JPQL:
SELECT obj
//não escrevemos a tabela e sim Entidade + obj
FROM Employee obj
//obj.department (para acessar dep dentro de employee) + .name para acessar o nome de department
WHERE obj.department.name = 'Financeiro'