1 / 17

Adatbázisok 1.

Adatbázisok 1. SQL ( alkérdések ). 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:.

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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?

More Related