Presentation is loading. Please wait.

Presentation is loading. Please wait.

COMP 430 Intro. to Database Systems

Similar presentations


Presentation on theme: "COMP 430 Intro. to Database Systems"— Presentation transcript:

1 COMP 430 Intro. to Database Systems
Joins

2 A bit of review Slides copied from earlier in course

3 Joining tables SELECT * FROM Product, Company
p_name price manufacturer Gizmo 19.99 GizmoWorks Powergizmo 39.99 Widget WidgetsRUs HyperWidget 203.99 Hyper c_name address city state GizmoWorks 123 Gizmo St. Houston TX WidgetsRUs 20 Main St. New York NY Hyper 1 Mission Dr. San Francisco CA SELECT * FROM Product, Company WHERE manufacturer = c_name; Join condition p_name price manufacturer address city state Gizmo 19.99 GizmoWorks 123 Gizmo St. Houston TX Powergizmo 39.99 Widget WidgetsRUs 20 Main St. New York NY HyperWidget 203.99 Hyper 1 Mission Dr. San Francisco CA

4 Joining tables Product Company p_name price manufacturer Gizmo 19.99 GizmoWorks Powergizmo 39.99 Widget WidgetsRUs HyperWidget 203.99 Hyper c_name address city state GizmoWorks 123 Gizmo St. Houston TX WidgetsRUs 20 Main St. New York NY Hyper 1 Mission Dr. San Francisco CA This is simplest & most common kind of join – an inner join. See other kinds later. p_name price manufacturer address city state Gizmo 19.99 GizmoWorks 123 Gizmo St. Houston TX Powergizmo 39.99 Widget WidgetsRUs 20 Main St. New York NY HyperWidget 203.99 Hyper 1 Mission Dr. San Francisco CA

5 Joins – forgetting the join condition
SELECT * FROM Product, Company; p_name price manufacturer c_name address city state Gizmo 19.99 GizmoWorks 123 Gizmo St. Houston TX WidgetsRUs 20 Main St. New York NY Hyper 1 Mission Dr. San Francisco CA Powergizmo 39.99 Widget All combinations of records! – Cross-product of tables.

6 Selection & Projection
SELECT p_name FROM Product, Company WHERE manufacturer = c_name AND state = ‘TX’; Join condition Filter condition p_name price manufacturer address city state Gizmo 19.99 GizmoWorks 123 Gizmo St. Houston TX Powergizmo 39.99 Selection p_name Gizmo Powergizmo Projection

7 So what else is there?

8 Inner join syntax Old style: Current, preferred style: SELECT *
FROM Product, Company WHERE manufacturer = c_name; SELECT * FROM Product INNER JOIN Company ON manufacturer = c_name; SELECT * FROM Company INNER JOIN Product ON manufacturer = c_name; Shorter Easier to find tables Equal status for tables – symmetry Can’t forget join condition Join condition separated from filter conditions Consistent with other joins

9 Two versions equivalent
SELECT * FROM Product, Company WHERE manufacturer = c_name; SELECT * FROM Product INNER JOIN Company ON manufacturer = c_name; Product (p_name, price, manufacturer) Company (c_name, address, city, state) Result (p_name, price, manufacturer, c_name, address, city, state) Previously lied a little. Both fields present.

10 Inner join – special case
Both tables use the same attribute name. Product (p_name, price, c_name) Company (c_name, address, city, state) SELECT * FROM Product INNER JOIN Company ON Product.c_name = Company.c_name; Join condition is simple equality. Equi-join Result (p_name, price, Product.c_name, Company.c_name, address, city, state) SELECT * FROM Product INNER JOIN Company USING (c_name); Can list multiple attributes. Result (p_name, price, c_name, address, city, state)

11 Inner join – another special case
Product (p_name, price, c_name) Company (c_name, address, city, state) Considered dangerous, since it constraint is implicit, and attribute name sets can change. Don’t use. SELECT * FROM Product INNER JOIN Company USING (c_name); Result (p_name, price, c_name, address, city, state) SELECT * FROM Product NATURAL INNER JOIN Company; Assumes equality of same-named attributes. Equi-join Result (p_name, price, c_name, address, city, state)

12 What about dangling tuples?
Company Product c_name state GizmoWorks TX WidgetsRUs NY Hyper CA NewCo p_name manufacturer Gizmo GizmoWorks Powergizmo Widget WidgetsRUs HyperWidget Hyper c_name state p_name manufacturer GizmoWorks TX Gizmo Powergizmo WidgetsRUs NY Widget Hyper CA HyperWidget NewCo is forgotten in join, since it has no products. SELECT * FROM Company INNER JOIN Product ON manufacturer = c_name;

13 Left outer join Company Product c_name state GizmoWorks TX WidgetsRUs NY Hyper CA NewCo p_name manufacturer Gizmo GizmoWorks Powergizmo Widget WidgetsRUs HyperWidget Hyper c_name state p_name manufacturer GizmoWorks TX Gizmo Powergizmo WidgetsRUs NY Widget Hyper CA HyperWidget NewCo NULL “LEFT” because result includes dangling tuples from the left table.. Original tables have no data. SELECT * FROM Company LEFT OUTER JOIN Product ON manufacturer = c_name;

14 Right outer join Company Product c_name state GizmoWorks TX WidgetsRUs NY Hyper CA p_name manufacturer Gizmo GizmoWorks Powergizmo Widget WidgetsRUs HyperWidget Hyper c_name state p_name manufacturer GizmoWorks TX Gizmo Powergizmo WidgetsRUs NY Widget Hyper CA HyperWidget Useless in this example. Referential integrity guarantees Product has no dangling tuples. SELECT * FROM Company RIGHT OUTER JOIN Product ON manufacturer = c_name;

15 Assume no referential integrity now.
Right outer join Company Product c_name state GizmoWorks TX WidgetsRUs NY Hyper CA p_name manufacturer Gizmo GizmoWorks Powergizmo Widget WidgetsRUs HyperWidget Hyper NewThing NULL c_name state p_name manufacturer GizmoWorks TX Gizmo Powergizmo WidgetsRUs NY Widget Hyper CA HyperWidget NULL NewThing Assume no referential integrity now. SELECT * FROM Company RIGHT OUTER JOIN Product ON manufacturer = c_name;

16 Includes dangling tuples from both sides.
Full outer join Company Product c_name state GizmoWorks TX WidgetsRUs NY Hyper CA NewCo p_name manufacturer Gizmo GizmoWorks Powergizmo Widget WidgetsRUs HyperWidget Hyper NewThing NULL c_name state p_name manufacturer GizmoWorks TX Gizmo Powergizmo WidgetsRUs NY Widget Hyper CA HyperWidget NewCo NULL NewThing Includes dangling tuples from both sides. SELECT * FROM Company FULL OUTER JOIN Product ON manufacturer = c_name;

17 Cross join SELECT * FROM Product
CROSS JOIN Company; CROSS JOIN doesn’t have join condition. p_name price manufacturer c_name address city state Gizmo 19.99 GizmoWorks 123 Gizmo St. Houston TX WidgetsRUs 20 Main St. New York NY Hyper 1 Mission Dr. San Francisco CA Powergizmo 39.99 Widget All combinations of records! – Cross-product of tables.

18 A few notes There are various short-hands, e.g., JOIN = INNER JOIN, LEFT JOIN = LEFT OUTER JOIN. Outer joins also allow NATURAL, USING. Left outer join of tables A,B = Right outer join of tables B,A. SQLite doesn’t implement Right & Full outer joins. These “joins” describe semantics. Other “joins” describe implementation.

19 Visual summary Of inner & outer joins
Examples adapted from Coding Horror.

20 Records matching both A and B.
id data 1 A 2 B 3 C 4 D id A.data B.data 2 B W 4 D X B id data 2 W 4 X 6 Y 8 Z SELECT * FROM A INNER JOIN B ON A.id = B.id; Records matching both A and B.

21 FULL OUTER JOIN B ON A.id = B.id; Records matching A or B.
data 1 A 2 B 3 C 4 D id A.data B.data 1 A 2 B W 3 C 4 D X 6 Y 8 Z B id data 2 W 4 X 6 Y 8 Z SELECT * FROM A FULL OUTER JOIN B ON A.id = B.id; Records matching A or B.

22 Records matching either A or B, but not both.
id data 1 A 2 B 3 C 4 D id A.data B.data 1 A 3 C 6 Y 8 Z B id data 2 W 4 X 6 Y 8 Z SELECT * FROM A FULL OUTER JOIN B ON A.id = B.id WHERE A.data IS NULL OR B.data IS NULL; Records matching either A or B, but not both.

23 LEFT OUTER JOIN B ON A.id = B.id; Records matching A.
data 1 A 2 B 3 C 4 D id A.data B.data 1 A 2 B W 3 C 4 D X B id data 2 W 4 X 6 Y 8 Z SELECT * FROM A LEFT OUTER JOIN B ON A.id = B.id; Records matching A.

24 Records matching only A.
id data 1 A 2 B 3 C 4 D id A.data B.data 1 A 3 C B id data 2 W 4 X 6 Y 8 Z SELECT * FROM A LEFT OUTER JOIN B ON A.id = B.id WHERE B.data IS NULL; Records matching only A.


Download ppt "COMP 430 Intro. to Database Systems"

Similar presentations


Ads by Google