Relational equivalence of SQL algebra "NOT IN"

Is there an equivalent to relational algebra SQL expressions NOT IN?

For example, if I have a relationship:

A1  |  A2
----------
x   |  y
a   |  b
y   |  x

I want to delete all tuples in a relation for which A1 is in A2. In SQL, I can query:

SELECT
    *
FROM
    R
WHERE
    R.A1 NOT IN
        (
        SELECT
            A2
        FROM
            R
        )
/

What really throws me away is like a subquery inside a relational algebra select statement, is this possible ?:

σ some subquery here R

+5
source share
2 answers

In relational algebra, you can do this using a card product. Sort of:

R - p a1, a2a11, a21A11 = A22a11, a21 (R) x ρ a12, a22 (R))))

  • rename columns R, fe from a1 to a11 (left hand) and a12 (right hand)
  • take cross product R with renamed columns
  • , a11 a22
  • a12 a22 a11 a21
  • a1 a2

, . R, , .

+6

. :

SQL R WHERE ... [NOT] IN S?

( , - , - .)

: , () JOIN, bowtie .

, , SQL-. , A1 NOT IN A2. . SQL NOT where. SQL :

SELECT * FROM R
WHERE NOT (A1 IN (SELECT A2 AS A1 FROM R) )

. ( NOT MINUS .) , RA :

R - (R ⋈ ρ < > A1/A2 > < > 2 > (R)))

, D:

R MINUS (R JOIN (R {A2} RENAME A2 AS A1))

SQL. SQL WHERE . contra Codd 7, set-at-time.

SQL WHERE RA σ (Natural) JOIN set-at-time. (, , Date Darwen A .)

+2

All Articles