Is there set division in SQL?

后端 未结 3 1580
清酒与你
清酒与你 2021-01-19 11:19

I\'m fully aware that set division can be accomplished through a series of other operations, so my question is:

Is there a command for set division in SQL?

相关标签:
3条回答
  • 2021-01-19 11:38

    http://vadimtropashko.files.wordpress.com/2007/02/ch3.pdf

    From Page 32:

    Relational Division is not a fundamental operator. It can be expressed in terms of projection, Cartesian product, and set difference.

    So, no. :)

    0 讨论(0)
  • 2021-01-19 11:43

    Related question: Database Design for Tagging

    And relevant part of answer is this article

    So in short, no, there is no set division in SQL.

    0 讨论(0)
  • 2021-01-19 11:44

    Here is a nice explanation using relational algebra syntax.

    Given tables sailors, boats and reserves (examples from Ramakrishnan & Gehrke's "Database Management Systems") you can compute sailors who have reserved all boats with the following query:

    SELECT name FROM sailors
    WHERE Sid NOT IN (
        -- A sailor is disqualified if by attaching a boat,
        -- we obtain a tuple <sailor, boat> that is not in reserves
        SELECT s.Sid
        FROM sailors s, boats b
        WHERE (s.Sid, b.Bid) NOT IN (
            SELECT Sid, Bid FROM reserves
        )
    );
    
    -- Alternatively:
    SELECT name FROM sailors s
    WHERE NOT EXISTS (
        -- Not reserved boats
        (SELECT bid FROM boats)
        EXCEPT
        (SELECT r.bid FROM reserves r
        WHERE r.sid = s.sid)
    );
    
    0 讨论(0)
提交回复
热议问题