La pregunta de apertura nos está enviando por el pensamiento equivocado. Debería ser:
¿Hay un equivalente de álgebra relacional de la expresión SQL R WHERE ... [NOT] IN S
?
(Es decir, la respuesta es una operación entre dos relaciones, no algún tipo de filtro.)
la respuesta es sí, es (Natural) JOIN
también conocido como el operador de pajarita ⋈
.
Para ver por qué, primero arreglemos la solución de SQL dada. Como se muestra, está buscando el atributo A1 NOT IN
relacionado con el atributo único A2
. Eso es realmente una falta de coincidencia en los nombres de los atributos. SQL también permite NOT
dentro de la condición where. Este SQL hace que la estructura lógica clara:
SELECT * FROM R
WHERE NOT (A1 IN (SELECT A2 AS A1 FROM R))
Ahora podemos ver una proyección y un cambio de nombre. (El NOT
circundante podemos implementar como un conjunto MINUS, según la primera respuesta.) Así que la RA es equivalente:
R - (R ⋈ ρ
A1/A2(π
A2(R)))
Por interés, el Tutorial D es:
R MINUS (R JOIN (R {A2} RENAME A2 AS A1))
En la forma en que se hizo la pregunta, hay una resaca del pensamiento SQL. El WHERE
de SQL lo fuerza al "modo" a nivel de fila. Esta es la regla 7 de contra Codd que requiere operadores de set-at-a-time.
En general, de SQL WHERE
y RA de σ
con sus filtros de fila se pueden implementar de forma más sucinta como (Natural) JOIN
con la lógica set-en-un-tiempo. (Por ejemplo, esto es lo que & Fecha Darwen hacer en su Un álgebra.)
puede usted explicar cómo funciona ... y tal vez ampliar los puntos suspensivos. Tengo problemas para entender el resultado del producto cruzado, solo hay dos campos en R entonces, ¿cómo se puede poner el operador pi en él con más de dos argumentos? – jsj
Si solo hay dos columnas, puede omitir los puntos suspensivos. La respuesta también usó PI donde debería haber usado RHO, no estoy seguro si eso estaba en la edición o en la respuesta original. – Andomar
@Andomar: También estoy teniendo problemas en la pregunta de álgebra relacional. He publicado mi pregunta [aquí] (http://stackoverflow.com/questions/18997845/how-to-convert-sql-to-relational-algebra-in-case-of-sql-joins). ¿Puedes ayudarme aquí? Gracias. –