Download presentation
Presentation is loading. Please wait.
Published byBasil McDowell Modified over 9 years ago
1
SQL: Sets UNION INTERSECT MINUS D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 1
2
Union Compatibility UNION compatible tables – the two SELECT lists must produce results, which are identical in respects of the columns: – The same number of columns. – Corresponding columns in the two lists must have exactly the same data types. – Corresponding CHAR columns must have exactly the same length; and corresponding numeric columns must have exactly the same precision and scale. – Corresponding column names may be different. – Corresponding columns must be either both NULL or NOT NULL. D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 2
3
Fancy Fruits Database (1) D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 3
4
Fancy Fruits Database (2) D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 4 Order_NoCust_IDItem_IDQuantity 001AAAI0110 002BBBI0220 003AAAI0330 004CCCI0140 005BBBI0550 006AAAI0460 007AAAI0370 008EEEI0720 009CCCI0140 010BBBI0560 Item_IDDescriptPriceOn_hand I01PLUMS1.00100 I02APPLES2.00200 I03ORANGES3.00300 I04PEARS4.00400 I05BANANAS5.00500 I06GRAPES6.00600 I07KIWI7.00700 Vendor_IDItem_IDCostRegion V01I010.50NE V02I021.00W V03I031.50NE V04I042.00S V05I052.50NE V06I063.00S V07I073.50W V08I021.50NE V09I076.50S V10I011.50NE Cust_IDCust_NameRegionPhone AAAALICENE(555) 111-1111 BBBBILLW(555) 222-2222 CCCCAITLINNE(555) 333-3333 DDDCOLINS(555) 444-4444 EEEELIZABETHW(555) 555-5555 LLLLAURANE(555) 666-6666 ORDERS VENDORS STOCK CUSTOMERS
5
UNION vs. UNION ALL (Oracle 11g/MySQL 5.6) ORDER BY clause should be specified only for the last SELECT statement Literal constants may be used in the SELECT list, which is useful to label the source. D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 5 SELECT Item_ID FROM Stock WHERE Price < 3.00 UNION SELECT Item_ID FROM Vendors WHERE Cost > 2.50 ORDER BY 1; SELECT Item_ID FROM Stock WHERE Price < 3.00 UNION ALL SELECT Item_ID FROM Vendors WHERE Cost > 2.50;
6
SELECT Item_ID FROM Orders WHERE Cust_ID = 'AAA' INTERSECT SELECT Item_ID FROM Vendors WHERE Vendor_ID = 'V03'; SELECT Item_ID FROM Orders O WHERE Cust_ID = 'AAA' AND EXISTS (SELECT * FROM Vendors V WHERE Vendor_ID = 'V03' AND O.Item_ID= V.Item_ID); INTERSECT (Oracle 11g) INTERSECT can be easily simulated by using EXISTS D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 6
7
INTERSECT is not implemented in MySQL INTERSECT can be simulated by INNER JOIN in MySQL D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 7 SELECT Item_ID FROM Orders WHERE Cust_ID = 'AAA' INTERSECT SELECT Item_ID FROM Vendors WHERE Vendor_ID = 'V03'; SELECT DISTINCT Item_ID FROM Orders INNER JOIN Vendors USING (Item_ID) WHERE Cust_ID = 'AAA' AND Vendor_ID = 'V03';
8
MINUS (Oracle 11g) MINUS (difference between two UNION compatible tables): all rows, which are in A, but not in B. MINUS can be easily simulated by using NOT EXISTS D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 8 SELECT Item_ID FROM Orders WHERE Cust_ID = 'AAA' MINUS SELECT Item_ID FROM Vendors WHERE Vendor_ID = 'V03'; SELECT DISTINCT Item_ID FROMOrders O WHERE Cust_ID = 'AAA' AND NOT EXISTS (SELECT * FROM Vendors V WHERE Vendor_ID = 'V03' AND O.Item_ID= V.Item_ID);
9
MINUS is not implemented in MySQL MINUS can be easily simulated by SubQueryes in MySQL D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 9 SELECT Item_ID FROM Orders WHERE Cust_ID = 'AAA' MINUS SELECT Item_ID FROM Vendors WHERE Vendor_ID = 'V03'; SELECT DISTINCT Item_ID FROMOrders WHERE Cust_ID = 'AAA' AND Item_ID NOT IN (SELECT Item_ID FROM Vendors WHERE Vendor_ID = 'V03');
10
CCPO Database Query Example D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 10 Write query to list products ordered by a client (client name is given), without knowing, whether the client is retailer or dealer.
11
D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 11 Products ordered by retailer ‘X’ SELECT Product.* FROM Product WHERE Product.P_code IN (SELECT P_code FROM Orders WHERE C_ID NOT IN (SELECT C_ID FROM Codes) AND C_ID = (SELECT C_ID FROM Client WHERE Client.name = ‘X’))) Products ordered by dealer ‘X’ SELECT Product.* FROM Product WHERE Product.P_code IN (SELECT P_Code FROM Codes WHERE C_Code IN (SELECT P_code FROM Orders WHERE C_ID IN (SELECT C_ID FROM Codes) AND C_ID = (SELECT C_ID FROM Client WHERE Client.name = ‘X’))) UNION ALL Write query to list products ordered by a client (client name is given), without knowing, whether the client is retailer or dealer. CCPO Database Query Example Solution P_CodeNameUnit PriceAvailable PRODUCT C_IdnameAddressPhoneCity CLIENT P_codeC_codeC_PriceC_Id CODES C_IdP_codeDateQuantity ORDERS
12
Result from slide 11 (MySQL 5.5) D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 12 SELECT Product.* FROM Product WHERE Product.P_code IN (SELECT P_code FROM Orders WHERE C_ID NOT IN (SELECT C_ID FROM Codes) AND C_ID = (SELECT C_ID FROM Client WHERE Client.name = 'AAAA')) UNION ALL SELECT Product.* FROM Product WHERE Product.P_code IN (SELECT P_Code FROM Codes WHERE C_Code IN (SELECT P_code FROM Orders WHERE C_ID IN (SELECT C_ID FROM Codes) AND C_ID = (SELECT C_ID FROM Client WHERE Client.name = 'AAAA')));
13
Slide 11 – Join solution (MySQL 5.5) D. Christozov / G.Tuparov INF 280 Database Systems: SQL - Sets 13 SELECT DISTINCT Product.* FROM ((Product INNER JOIN Orders ON (Product.P_Code=Orders.P_Code)) INNER JOIN Client USING (C_ID)) WHERE Client.name= 'AAAA' UNION ALL SELECT DISTINCT Product.* FROM (((Product INNER JOIN Codes ON (Product.P_Code=Codes.P_Code)) INNER JOIN Orders ON (Codes.C_Code=Orders.P_Code)) INNER JOIN Client ON (Orders.C_ID=Client.C_ID)) WHERE Client.name='AAAA';
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.