2010-01-15 11 views
6

Sí, esta es una pregunta de tarea, pero los nombres han sido cambiados para proteger a los inocentes. Es decir, no estoy haciendo la tarea por sí misma, sino una pequeña parte para que pueda entender el todo.Álgebra relacional: ¿cuál es la forma correcta de representar una cláusula 'teniendo'?

Digamos que usted tiene una consulta SQL como esto:

--La consulta enumeraría precios de los automóviles que se producen más de una vez.

select car_price from cars 
group by car_price 
having count (car_price) > 1; 

La forma general de este en el álgebra relacional es Y (gl, al) R donde Y es el símbolo griego, GL está la lista de atributos a grupo, AL está la lista de agregaciones

Así que la el álgebra relacional se vería así:

Y (count(car_price)) cars 

Entonces, ¿cómo se escribe la cláusula "having" en esa declaración? ¿Hay una taquigrafía? Si no, ¿solo necesito seleccionar de esa relación? Algo como esto tal vez?

SELECT (count(car_price) > 1) [Y (count(car_price)) cars] 

he buscado en Internet en esto por horas y no han encontrado ejemplos de conversión de HAVING para el álgebra relacional. ¡Gracias por la ayuda!

+2

1 por ser honesto acerca de la tarea. – hobodave

+1

Heh, creo que cualquier cosa con "álgebra relacional" en su título es por defecto la tarea. –

+0

No sé nada sobre álgebra relacional, pero "tener" es lo mismo que "dónde", excepto que puede aplicarse a un agregado de un conjunto. ¿Hay alguna razón por la cual el álgebra relacional sería diferente? – BobMcGee

Respuesta

3

seleccionar recuento (*) de (seleccione * de los automóviles donde el precio> 1) como automóviles;

también conocido como cierre relacional.

0

Para una respuesta más o menos precisa a la pregunta real, "álgebra relacional: ¿cuál es la forma correcta de representar una cláusula 'teniendo'?", Primero debe indicarse que la pregunta parece sugerir, o supongamos que existe algo así como "EL" álgebra relacional, ¡pero esa presunción es simplemente falsa!

Un álgebra es un conjunto de operadores, y cualquiera puede definir cualquier conjunto de operadores que le guste, ¡lo que significa que cualquiera puede definir cualquier álgebra que le guste! En su publicación más reciente, Hugh Darwen menciona que RESTRICT no es un operador fundamental del álgebra, aunque muchos otros lo consideran como tal.

Especialmente con respecto a agregaciones y resúmenes, hay poco consenso sobre cómo se deben incorporar en un álgebra relacional. Definir operadores como COUNT() (que toman una relación como un valor de argumento y devuelven un entero) como parte del álgebra, podría ser problemático con la propiedad de cierre del álgebra, precisamente porque dichos operadores no devuelven una relación ...

Así que la siento, pero sin embargo más apropiado, responder aquí parece ser que una respuesta concluyente a esta pregunta es casi imposible dar ...

Cuestiones relacionadas