150 likes | 396 Views
SQL sakiniai. Lentelių jungimas (2). Lentelės sujungimas su savimi. Kategorijos_ID Pavadinimas Parent_ID. SELECT lentele .Pavadinimas AS `vaikas`, parent.Pavadinimas AS `tevas` FROM `lentele` LEFT JOIN `lentele` AS `parent` ON lentele.parent_ID = parent.kategorijos_ID.
E N D
Lentelės sujungimas su savimi • Kategorijos_IDPavadinimasParent_ID • SELECT lentele.Pavadinimas AS `vaikas`, parent.Pavadinimas AS `tevas`FROM `lentele` LEFT JOIN `lentele` AS `parent` ON lentele.parent_ID = parent.kategorijos_ID
RIGHT JOIN • Analogiškas LEFT JOIN, tik dėmesys šiuo atveju skiriamas dešiniajai lentelei • `lentle A` LEFT JOIN `lentle B`=`lentle B` RIGHT JOIN `lentle A`
FULL JOIN • Veikia tarsi ir LEFT ir RIGHT JOIN kartu – lentelėje atsiranda visi įrašai tiek iš vienos, tiek iš kitos lentelės.
UNION • Asmens_kodasVardasPavardeTelefonas... • Asmens_kodasVardasPavardeTelefonas... Darbuotojai Klientai
UNION Bendras klientų ir darbuotojų vakarėlis, reikia sąrašo su telefonais. SELECT * FROM `darbuotojai`UNIONSELECT * FROM `klientai`
UNION ALL Nuo UNION skiriasi tuo, kad jei įrašas kartojasi tiek vienoje, tiek kitoje lentelėje, isspausdins juos abu (pvz. asmuo – tiek darbuotojas, tiek klientas) SELECT * FROM `darbuotojai`UNION ALLSELECT * FROM `klientai`
Subqueries • SELECT * FROM `orders` | WHERE day_of_order =(SELECT MAX(day_of_order) FROM orders)
Pavyzdys • ID • Vardas • Pavardė • Pašto kodas • Pašto kodas • Miestas/rajonas • Užduotis: • Atrinkti visus klientus, kurių pašto kodai – Kauno mieste • SELECT * FROM `klientai` WHERE `Pasto_kodas` IN (SELECT `Pasto_kodas` FROM `pasto_kodai` WHERE `Miestas` = 'Kaunas' ) Klientai Pašto kodai
Pavyzdys II • Atrinkti numerius užsakymų, kuriuose yra modeliukų iš ‘Ships’ serijos • SELECT DISTINCT `orderNumber` FROM `orderdetails` WHERE `productCode` IN (SELECT `productCode` FROM `products` WHERE `productLine`=‘Ships’)
Užduotis • Parsisiųskite pavyzdinę duomenų bazę: • tiny.lt/sql1 • Importuoti DB į savo MySQL serverį • Suformuoti užklausas duomenų išgavimui ‘classicmodels’ DB • Užklausas surašyti MS Word faile • Apmokėjimai, gauti paskutiniais duomenų bazėje saugomais metais • Darbuotojai, dirbantys biuruose esančiuose ‘USA’ arunas@tiny.lt arunas@tiny.lt