תרגול זה מסתמך על מאגר הנתונים ACDB. לתרגולים נוספים בנושאים שונים ניתן להשתמש במדריך ה SQL.

Inner Join

1. א. הציגו טבלה המתבססת על טבלאות: Customers , Packagesאשר מציגה את שמו הפרטי של הלקוח, שם משפחתו, מספר חבילתו ומהירות הגלישה שלו.

ב. סננו את הנתונים עבור הלקוחות הנמצאים בחבילת גלישה 27 ו-22 בלבד ומיינו לפי שמות המשפחה שלהם (סדר עולה).

2. א. הציגו טבלה המתבססת על טבלאות: Packages, Sectors אשר מציגה את מס' החבילה, מהירות הגלישה, מחירה החודשי, ושם הסקטור אליו היא משוייכת.

ב. הוסיפו לטבלה את שמות הלקוחות (מתוך טבלת Customers)

ג. הציגו את הנתונים רק עבור הלקוחות העסקיים

3. הציגו טבלה המתבססת על טבלאות : Packages, Sectors ו- Customers

הטבלה תציג את שם משפחתו של הלקוח, שמו הפרטי , תאריך הצטרפותו, מספר החבילה שלו, מהירות הגלישה, שם הסקטור אליו הוא משוייך רק עבור הלקוחות הפרטיים אשר הצטרפו לחברה בשנת 2006.

Non Equi Join

4. הציגו טבלה המתבססת על טבלאות Packages , Pack_Gradesאשר תציג את מספר החבילה, מהירות הגלישה, מחירה החודשי של החבילה, ודרגת התשלום החודשי.

5. א. הציגו טבלה המתבססת על טבלאות: Customers , Packages אשר מציגה את שמו הפרטי של הלקוח, שם משפחתו, מהירות הגלישה שלו, ומחירה החודשי של החבילה (Inner)

ב. חזרו על השאילתה פעם נוספת, הפעם הציגו את כל הלקוחות, גם אלו אשר לא מעודכנת להם חבילת גלישה

ג. חזרו על השאילתה פעם נוספת, הפעם הציגו את כל החבילות, גם אלו אשר לא משוייכים אליהן לקוחות.

ד. חזרו על השאילתה פעם נוספת, הפעם הציגו את כל החבילות ואת כל הלקוחות.

Self Join

6. הציגו טבלה המתבססת על טבלת Customers אשר מציגה את שמות הלקוחות ומספר החבילה עבור אותם לקוחות אשר נמצאים באותה החבילת גלישה עם הלקוח ששמו 'Amado Taylor'

7. הציגו טבלה המתבססת על טבלת Customers אשר מציגה את הלקוחות אשר סכום ההנחה החודשית שלהם נמוך יותר משל לקוח מספר 103.

8. הציגו טבלה המתבססת על טבלת Packages אשר מציגה את מספר החבילה ומהירות הגלישה, עבור החבילות אשר מהירות הגלישה שלהן שווה לזו של חבילה מס' 10

פתרונות

-- 1
-- A
SELECT cust.last_name , cust.first_name , cust.pack_id , pack.speed
FROM customers cust JOIN packages pack
ON      cust.pack_id = pack.pack_id 

-- B
SELECT cust.last_name , cust.first_name , cust.pack_id , pack.speed
FROM customers cust JOIN packages pack
ON      cust.pack_id = pack.pack_id
WHERE cust.pack_id IN (27, 22)
ORDER BY cust.last_name  

-- 2
-- A
SELECT pack.pack_id , pack.speed, pack.monthly_payment, sect.sector_name
FROM packages pack JOIN sectors sect
ON      pack.sector_id = sect.sector_id

-- B
SELECT cust.last_name , cust.first_name , pack.pack_id , pack.speed, pack.monthly_payment, sect.sector_name
FROM packages pack JOIN sectors sect
ON      pack.sector_id = sect.sector_id
									JOIN customers cust
ON     cust.pack_id = pack.pack_id

-- C
SELECT cust.last_name , cust.first_name , pack.pack_id , pack.speed, pack.monthly_payment, sect.sector_name
FROM packages pack JOIN sectors sect
ON      pack.sector_id = sect.sector_id
									JOIN customers cust
ON     cust.pack_id = pack.pack_id
WHERE sect.sector_name = 'Business'

-- 3
SELECT cust.last_name , cust.first_name , cust.join_date, pack.pack_id , pack.speed ,sect.sector_name
FROM packages pack JOIN sectors sect
ON      pack.sector_id = sect.sector_id
									JOIN customers cust
ON     cust.pack_id = pack.pack_id
WHERE sect.sector_name = 'Private' AND year(cust.join_date) = 2006 

-- 4
SELECT pack.pack_id ,  pack.speed, pack.monthly_payment , grd.grade_name
FROM packages pack JOIN pack_grades grd
ON      pack.monthly_payment BETWEEN grd.min_price AND grd.max_price 

-- 5
-- A
SELECT cust.last_name , cust.first_name ,  pack.speed , pack.monthly_payment
FROM customers cust JOIN packages pack
ON      cust.pack_id = pack.pack_id 

-- B
SELECT cust.last_name , cust.first_name ,  pack.speed , pack.monthly_payment
FROM customers cust LEFT OUTER JOIN packages pack
ON      cust.pack_id = pack.pack_id 

-- C
SELECT cust.last_name , cust.first_name ,  pack.speed , pack.monthly_payment
FROM customers cust RIGHT OUTER JOIN packages pack
ON      cust.pack_id = pack.pack_id 

-- D
SELECT cust.last_name , cust.first_name ,  pack.speed , pack.monthly_payment
FROM customers cust FULL OUTER JOIN packages pack
ON      cust.pack_id = pack.pack_id 

-- 6
SELECT cust1.last_name , cust1.first_name , cust1.pack_id
FROM customers cust1 JOIN customers cust2
ON cust2.last_name = 'Taylor' AND cust2.first_name = 'Amado'
AND      cust2.pack_id = cust1.pack_id

-- 7
SELECT cust1.last_name , cust1.first_name , cust1.pack_id , cust1.monthly_discount
FROM customers cust1 JOIN customers cust2
ON cust2.Customer_Id = 103
AND cust1.monthly_discount < cust2.monthly_discount

-- 8
SELECT pack1.pack_id , pack2.speed
FROM    packages pack1 JOIN packages pack2
ON         pack2.pack_id = 10
AND       pack1.speed = pack2.speed