adatb zisok 1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Adatbázisok 1. PowerPoint Presentation
Download Presentation
Adatbázisok 1.

Loading in 2 Seconds...

play fullscreen
1 / 17
neve-rowland

Adatbázisok 1. - PowerPoint PPT Presentation

75 Views
Download Presentation
Adatbázisok 1.
An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Adatbázisok 1. SQL (alkérdések)

  2. Az IN használata SELECT nev FROM szeret WHERE LOWER(gyumolcs) IN ('alma','korte'); SELECT felavatva FROM hajok WHERE nev IN (SELECT hajo FROM kimenetelek WHERE eredmeny = 'elsullyedt'); Emlékezzünk vissza: Az IN után szereplő multihalmaz elemei lekérdezéssel is megadhatók

  3. Mi a különbség? SELECT felavatva FROM hajok WHERE nev IN (SELECT hajo FROM kimenetelek WHERE eredmeny = 'elsullyedt'); SELECT felavatva FROM hajok, kimenetelek WHERE nev = hajo AND eredmeny = 'elsullyedt';

  4. És itt? SELECT datum FROM csatak WHERE nev IN (SELECT csata FROM kimenetelek); SELECT felavatva FROM csatak, kimenetelek WHERE nev = csata;

  5. Az IN és az = közötti különbség • Szintaktikailag az alábbi lekérdezés is helyes SELECT datum FROM csatak WHERE nev= (SELECT csata FROM kimenetelek); • Futási időben azonban hibát kapunk • egy érték és multihalmaz egyenlőségét csak abban az esetben vizsgálhatjuk, ha a multihalmazpontosan egy értéket tartalmaz • azaz, az = jobboldalán szereplő lekérdezésnek pontosan egy sort kellene visszaadnia

  6. A többi aritmetikai művelet • Hasonló mondható el a többi aritmetikai összehasonlítás esetében is SELECT nev FROM hajok WHERE felavatva > (SELECT TO_CHAR(datum, 'YYYY') FROM csatak WHERE nev = 'DenmarkStrait'); • Helyes SELECT nev FROM hajok WHERE felavatva > (SELECT TO_CHAR(datum, 'YYYY') FROM csatak WHERE datum > DATE '1943-01-01'); • Helytelen

  7. Az ALL és az ANY használata • Alkérdések esetén az aritmetikai összehasonlításokat általában az ALL vagy ANY műveletekkel alkalmazzuk • az ALL a minden kvantornak felel meg • míg az ANY a létezik kvantornak

  8. Példák SELECT osztaly FROM hajoosztalyok WHERE whereagyukSzama >= ALL (SELECT agyukSzama FROM hajoosztalyok); SELECT nev FROM hajok WHERE felavatva > ANY (SELECT TO_CHAR(datum, 'YYYY') FROM csata);

  9. Mi az alábbi lekérdezés jelentése? SELECT agyukSzama FROM hajoosztalyok MINUS SELECT agyukSzama FROM hajoosztalyok WHERE agyukSzama < ANY (SELECT agyukSzama FROM hajoosztalyok);

  10. Az IN és az = ANY • Vegyük észre SELECT nev FROM hajo WHERE nev IN (SELECT hajo FROM kimenetelek WHERE eredmeny = 'elsullyedt'); SELECT nev FROM hajo WHERE nev = ANY (SELECT hajo FROM kimenetelek WHERE eredmeny = 'elsullyedt'); • A két lekérdezés ekvivalens egymással

  11. Az EXISTS használata SELECT nev FROM hajo h WHERE EXISTS (SELECT * FROM kimenetelek WHERE hajo = h.nev); • A hajó tábla minden sorára kiértékeljük a jobboldali lekérdezést, ahol az eredmény nem üres, a sor bekerül a végeredménybe.

  12. Vegyük észre SELECT nev FROM hajok WHERE EXISTS (SELECT * FROM kimenetelek WHERE eredmeny = 'elsullyedt'); • Mivel az alkérdésnek "semmi köze" a fő kérdéshez, az ilyen lekérdezések mindig vagy nem adnak vissza sort, vagy a teljes tábla lesz az eredmény.

  13. Korrelált alkérdések • Korrelált alkérdésesetén a fő kérdés egy táblájának legalább egy attribútuma összehasonlításra kerül az alkérdés egy táblájának attribútumával SELECT nev FROM hajo h WHERE EXISTS (SELECT * FROM kimenetelek WHERE hajo = h.nev); • Az EXISTS használata esetén tehát mindig korrelált alkérdést kell használnunk

  14. NOT EXISTS: példa • Mit ad vissza az alábbi lekérdezés SELECT osztaly, agyukSzama FROM hajoosztalyok h1 WHERE NOT EXISTS (SELECT * FROM hajoosztalyok h2 WHERE h1.agyukSzama < h2.agyukSzama);

  15. MINUS, NOT IN és NOT EXISTS SELECT nev FROM hajo MINUS SELECT hajo FROM kimenetelek; SELECT nev FROM hajo WHERE nev NOT IN (SELECT hajo FROM kimenetelek); SELECT nev FROM hajo WHERE NOT EXISTS (SELECT * FROM kimenetelek WHERE nev = hajo);

  16. Feladatok I. • Melyek azok az amerikai hajók, amelyek részt vettek 1942 utáni csatában? (Használjatok IN-t.) • Mi azon hajó neve, amelyik ABC sorrendben a legutolsó? • Adjátok meg a 'H' betűvel kezdődő hajók közül az ABC sorrendben legelsőt. • Adjátok meg azon hajók nevét, amelyekhez létezik olyan másik hajó, melyet korábban avattak fel. • Adjátok meg azon hajók nevét, amelyekhez két olyan hajó is létezik, melyeket korábban avattak fel.

  17. Feladatok II. • Melyik az a hajó, amelyet a második legkorábban avattak fel? • Melyek azok a csaták, amelyekben nem vett részt japán hajó? (Használjatok NOT IN-t!) • Melyek azok a nemzetek, amelyeknek egy hajója sem süllyedt el? (Használjatok NOT EXISTS-et!) • Mely nemzeteknek süllyedt el az összes hajója? • Kik szeretnek minden gyümölcsöt? • Kik szeretik legalább azokat a gyümölcsöket, mint Ferenc?