inf 280 database systems sql:join

18
D. Christozov INF 280 Database Systems SQL:Join 1 SQL:Join

Upload: marcus-richard

Post on 08-Jan-2018

216 views

Category:

Documents


0 download

DESCRIPTION

The two NULL values do not match! SQL: join Used for the following purposes: to combine data from two or more tables to select data from one table based on a search condition involving columns from from an other table; to reintegrate data, separated during normalization to combine information about separate entities to explore relationships between tables. Matching the related values in columns of the two tables is based on the foreign key mechanism or the rule of having columns from the two tables with the same names. The two NULL values do not match! D. Christozov INF 280 Database Systems SQL:Join

TRANSCRIPT

Page 1: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

1

SQL:Join

Page 2: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

2

SQL: join

Used for the following purposes:to combine data from two or more tablesto select data from one table based on a search condition involving columns from from an other table;to reintegrate data, separated during normalizationto combine information about separate entitiesto explore relationships between tables.Matching the related values in columns of the two tables is based on the foreign key mechanism or the rule of having columns from the two tables with the same names.

The two NULL values do not match!

Page 3: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

3

SQL: join

Syntax:FROM A [type] [JOIN] B [condition]

Equijoins: the join condition is based on comparison for equality and the join columns are included in the final result Natural join – only one of the corresponding join columns is included in the result.

FROM A [type] B ON A.b = B.d (the corresponding columns have different names)

FROM A [type] B USING b (the corresponding columns have equal names b)

Page 4: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

4

SQL: join

Using foreign key constrainsFROM A [type] B (the corresponding columns

are defined as foreign key reference)

Theta joins any join in which the condition is given in the form:qualifier_1.column_1 relational_operator qualifier_2.column_2

where relational_operator can be any of the following: =, <>, <, >, <=, >=

Equijoin is a special case of theta join

Page 5: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

5

SQL: join – categories of natural/equijoins

Built in specified in FROM clauseCROSS a Cartesian product: all combinations of rowsINNER the default join type: only matched rows are retainedLEFT(OUTER) all rows from table A, plus the matched values from table BRIGHT(OUTER) all rows from table B, plus the matched values from table AFULL(OUTER) all rows from both tables, merged where matches were found,or filled with NULLs in the columns from other tableUNION opposite of the INNER: retains only no matched rows

Defined specified as filter-condition in WHERE clause

Page 6: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

6

SQL: cross join

a b1334 CCC

1399 GGG1208 MMM

b cCCC 8554

GGG 5223GGG 9111

WWW 7894

A

B

A.a A.b B.b B.c1334 CCC CCC 85541399 GGG CCC 85541208 MMM CCC 85541334 CCC GGG 52231399 GGG GGG 52231208 MMM GGG 52231334 CCC GGG 91111399 GGG GGG 91111208 MMM GGG 91111334 CCC WWW 78941399 GGG WWW 78941208 MMM WWW 7894

A cross join B

Page 7: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

7

SQL: inner join

a b1334 CCC

1399 GGG1208 MMM

b cCCC 8554

GGG 5223GGG 9111

WWW 7894

A

B

A inner join B (A.b = B.b)

A.a A.b B.c

1334 CCC 8554

1399 GGG 5223

1399 GGG 9111

Page 8: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

8

SQL: left outer join

a b1334 CCC

1399 GGG1208 MMM

b cCCC 8554

GGG 5223GGG 9111

WWW 7894

A

B

A left outer join B (A.b = B.b)

A.a B.b B.c

1334 CCC 8554

1399 GGG 5223

1399 GGG 9111

1208 MMM NULL

Page 9: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

9

SQL: right outer join

a b1334 CCC

1399 GGG1208 MMM

b cCCC 8554

GGG 5223GGG 9111

WWW 7894

A

B

A right outer join B (A.b = B.b)

A.a A.b B.c

1334 CCC 8554

1399 GGG 5223

1399 GGG 9111

NULL WWW 7894

Page 10: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

10

SQL: full outer join

a b1334 CCC

1399 GGG1208 MMM

b cCCC 8554

GGG 5223GGG 9111

WWW 7894

A

B

A full outer join B (A.b = B.b)

A.a A.b B.c

1334 CCC 8554

1399 GGG 5223

1399 GGG 9111

NULL WWW 7894

1208 MMM NULL

Page 11: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

11

SQL: union join

a b1334 CCC

1399 GGG1208 MMM

b cCCC 8554

GGG 5223GGG 9111

WWW 7894

A

B

A union join B (A.b = B.b)A.a A.b B.c

1208 MMM NULL

NULL WWW 7894

Page 12: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

12

SQL: Join

Exercises

Page 13: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

13

BookingHotelNo RoomNo GuestNo DateFrom DateTo

H01 R01 G01 20050305 20050310

H01 R02 G02 20050305 20050328

H01 R01 G03 20050311 20050426

H02 R02 G04 20050310 20050328

H02 R02 G05 20050601 20050830

H02 R03 G06 20050228 20050502

H03 R01 G07 20050410 20050430

H04 R02 G08 20050412 20050508

GuestNo Name AddressG01 Peter USA

G02 John Scapto2

G03 Alice UK

G04 Barry BG

G05 Vern AUBG

G06 Simeon Skapto1

G07 Mark Kchuka

G08 Julia Sofia

Guests

RoomNo HotelNo Type PriceR01 H01 Single 67.00

R02 H02 Double 76.00

R03 H03 Apartment 102.00

R01 H04 Single 72.00

R02 H01 Single 75.00

R03 H02 Double 92.00

R01 H03 Double 88.00

R02 H04 Apartment 134.00

Rooms HotelNo Name AddressH01 Lessvenor San Francisco

H02 Grosvenor New York

H03 Alen Mak Blagoevgrad

H04 Sheraton Sofia

Hotel

SELECT Room_No, Type, PriceFROM Room INNER JOIN Booking USING (HotelNo, Room_No) UNION JOIN Guest USING GuestNo;

Page 14: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

14

BookingHotelNo RoomNo GuestNo DateFrom DateTo

H01 R01 G01 20050305 20050310

H01 R02 G02 20050305 20050328

H01 R01 G03 20050311 20050426

H02 R02 G04 20050310 20050328

H02 R02 G05 20050601 20050830

H02 R03 G06 20050228 20050502

H03 R01 G07 20050410 20050430

H04 R02 G08 20050412 20050508

GuestNo Name AddressG01 Peter USA

G02 John Scapto2

G03 Alice UK

G04 Barry BG

G05 Vern AUBG

G06 Simeon Skapto1

G07 Mark Kchuka

G08 Julia Sofia

Guests

RoomNo HotelNo Type PriceR01 H01 Single 67.00

R02 H02 Double 76.00

R03 H03 Apartment 102.00

R01 H04 Single 72.00

R02 H01 Single 75.00

R03 H02 Double 92.00

R01 H03 Double 88.00

R02 H04 Apartment 134.00

Rooms HotelNo Name AddressH01 Lessvenor San Francisco

H02 Grosvenor New York

H03 Alen Mak Blagoevgrad

H04 Sheraton Sofia

Hotel

SELECT RoomNo, Type, GuestNoFROM Room Left Outer Join Booking Using (RoomNo, HotelNo)WHERE Date_from <= 03/24/2003 AND Date_to >= 03/24/2003;

Page 15: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

15

BookingHotelNo RoomNo GuestNo DateFrom DateTo

H01 R01 G01 20050305 20050310

H01 R02 G02 20050305 20050328

H01 R01 G03 20050311 20050426

H02 R02 G04 20050310 20050328

H02 R02 G05 20050601 20050830

H02 R03 G06 20050228 20050502

H03 R01 G07 20050410 20050430

H04 R02 G08 20050412 20050508

GuestNo Name AddressG01 Peter USA

G02 John Scapto2

G03 Alice UK

G04 Barry BG

G05 Vern AUBG

G06 Simeon Skapto1

G07 Mark Kchuka

G08 Julia Sofia

Guests

RoomNo HotelNo Type PriceR01 H01 Single 67.00

R02 H02 Double 76.00

R03 H03 Apartment 102.00

R01 H04 Single 72.00

R02 H01 Single 75.00

R03 H02 Double 92.00

R01 H03 Double 88.00

R02 H04 Apartment 134.00

RoomsHotelNo Name AddressH01 Lessvenor San Francisco

H02 Grosvenor New York

H03 Alen Mak Blagoevgrad

H04 Sheraton Sofia

Hotel

SELECT GuestNo, Guest.Name, Hotel.NameFROM Guest, Booking, Hotel WHERE DateFrom <= ’03/25/2003’ and DateTo >= ‘03/25/2003’;

Page 16: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

16

BookingHotelNo RoomNo GuestNo DateFrom DateTo

H01 R01 G01 20050305 20050310

H01 R02 G02 20050305 20050328

H01 R01 G03 20050311 20050426

H02 R02 G04 20050310 20050328

H02 R02 G05 20050601 20050830

H02 R03 G06 20050228 20050502

H03 R01 G07 20050410 20050430

H04 R02 G08 20050412 20050508

GuestNo Name AddressG01 Peter USA

G02 John Scapto2

G03 Alice UK

G04 Barry BG

G05 Vern AUBG

G06 Simeon Skapto1

G07 Mark Kchuka

G08 Julia Sofia

Guests

RoomNo HotelNo Type PriceR01 H01 Single 67.00

R02 H02 Double 76.00

R03 H03 Apartment 102.00

R01 H04 Single 72.00

R02 H01 Single 75.00

R03 H02 Double 92.00

R01 H03 Double 88.00

R02 H04 Apartment 134.00

RoomsHotelNo Name AddressH01 Lessvenor San Francisco

H02 Grosvenor New York

H03 Alen Mak Blagoevgrad

H04 Sheraton Sofia

Hotel

SELECT HotelNo, NameFROM Hotel Left Outer Join Booking Using HotelNo;

Page 17: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

17

BookingHotelNo RoomNo GuestNo DateFrom DateTo

H01 R01 G01 20050305 20050310

H01 R02 G02 20050305 20050328

H01 R01 G03 20050311 20050426

H02 R02 G04 20050310 20050328

H02 R02 G05 20050601 20050830

H02 R03 G06 20050228 20050502

H03 R01 G07 20050410 20050430

H04 R02 G08 20050412 20050508

GuestNo Name AddressG01 Peter USA

G02 John Scapto2

G03 Alice UK

G04 Barry BG

G05 Vern AUBG

G06 Simeon Skapto1

G07 Mark Kchuka

G08 Julia Sofia

Guests

RoomNo HotelNo Type PriceR01 H01 Single 67.00

R02 H02 Double 76.00

R03 H03 Apartment 102.00

R01 H04 Single 72.00

R02 H01 Single 75.00

R03 H02 Double 92.00

R01 H03 Double 88.00

R02 H04 Apartment 134.00

RoomsHotelNo Name AddressH01 Lessvenor San Francisco

H02 Grosvenor New York

H03 Alen Mak Blagoevgrad

H04 Sheraton Sofia

Hotel

SELECT Type, SUM(Price)FROM Room, Booking, GuestsWHERE DateFrom <= ’03/25/2003’ and DateTo >= ‘03/25/2003’;

Page 18: INF 280 Database Systems SQL:Join

D. Christozov INF 280 Database Systems SQL:Join

18

Write queryConsider ‘Hotel’s Chain Data Base

1. Write a query to list all guests (name) currently (March 24, 2003) stay in Grosvenor Hotel. (Tip: Grosvenor is the hotel name)

2. Write a query to calculate the today’s (March 24, 2003) income (sum of prices of occupied rooms) of all bookings for Grosvenor Hotel.

3. Write a query to list today’s (March 24, 2003) unoccupied rooms (Room_No, Type, Price) in Grosvenor Hotel.

4. Write a query to count American (Tip: address like ‘%USA%’) guests booked single rooms for May for Grosvenor Hotel.

Booking: HotelNo; RoomNo; GuestNo; DateFrom;DateTo Guests: GuestNo; Name; AddressHotel: HotelNo; Name; AddressRooms: RoomNo; HotelNo; Type; Price