inf 280 database systems sql:join
Post on 08-Jan-2018
216 Views
Preview:
DESCRIPTION
TRANSCRIPT
D. Christozov INF 280 Database Systems SQL:Join
1
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!
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)
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
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
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
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
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
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
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
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
D. Christozov INF 280 Database Systems SQL:Join
12
SQL: Join
Exercises
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;
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;
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’;
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;
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’;
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
top related