La sintaxis básica del OQL de Matisse es una sentencia SELECT
de la forma: SELECT... FROM... WHERE...;
Por ejemplo, para recuperar el valor de todos los atributos de los objetos tipo Profesor, escribiríamos la siguiente sentencia OQL:
SELECT * FROM Profesor;
Y para recuperar del atributo nombre de los objetos tipo Profesor cuyo año de ingreso es anterior al 1990, escribiríamos la siguiente sentencia :
SELECT nombre FROM Profesor WHERE ingreso <= 1990;
Las siguientes son algunas consideraciones y ejemplos sobre las consultas con SELECT
:
- Toda sentencia
SELECT
finaliza en punto y coma.
Además de la cláusula WHERE
, que permite establecer un criterio de selección se pueden utilizar las cláusulas de agrupamiento GROUP BY
, y de ordenación ORDER BY
, entre otras. También se pueden asignar alias mediante AS
, realizar búsquedas por patrones de caracteres con LIKE
.
Ejemplo: título y tema de las tesis cuyo tema contien la palabra Objeto, ordenadas por tema.
SELECT titulo AS "Tesis", tema FROM Tesis
WHERE tema LIKE '%Objeto%' ORDER BY tema;
- Al recuperar todos los atributos de una clase mediante
SELECT *
, la consulta retornará el OID de cada objeto recuperado, así como las interrelaciones o relaciones definidas para esa clase. El OID y la interrelación son del tipostring
y se representan mediante un número hexadecimal. Realmente el identificador recuperado para la interrelación, hace referencia al primer objeto relacionado, incluso aunque la interrelación incluya a más de un objeto.
Se pueden hacer JOIN
de clases, y por ejemplo esto puede permitir obtener todos los objetos relacionados con otro objeto en una consulta asociativa.
Ejemplo: nombre de cada profesor y título y tema de las tesis que dirige con JOIN
SELECT p.nombre, t.titulo, t.tema
FROM Profesor p JOIN Tesis t ON t.es_dirigida = p.OID;
Mediante
SELECT
se pueden realizar consultas navegacionales haciendo referencia a las interrelaciones entre objetos.
Ejemplo: nombre de cada profesor y título y tema de las tesis que dirige, navegacional
SELECT t.titulo AS "Tesis", tema, t.es_dirigida.nombre
AS "Profesor " FROM Tesis t;
- También se pueden realizar consultas navegacionales a través de la referencia de los objetos (
REF()
).
Ejemplo: tesis que dirigen los profesores con ingreso el 1990 o posterior
SELECT REF(p.dirige) FROM Profesor p
WHERE p.ingreo >= 1990;