1 / 15

SQL

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák. A select utasítás általános alakja (ISM.). SELECT [ DISTINCT ] megjelenítendő oszlopok FROM táblá (k direkt szorzata ) [ WHERE feltétel ] [ GROUP BY csoportosítási szempont ] [ HAVING csoportok szűrése ]

nishan
Télécharger la présentation

SQL

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. SQL Táblákösszekapcsolásalekérdezéskor Aliasok Allekérdezések Nézettáblák

  2. A select utasításáltalánosalakja (ISM.) SELECT [DISTINCT] megjelenítendőoszlopok FROMtáblá(k direktszorzata) [WHEREfeltétel] [GROUPBYcsoportosításiszempont] [HAVINGcsoportokszűrése] [ORDERBYrendezésiszempont];

  3. Természetesösszekapcsolás SQL-ben Dolgozó SELECT Dolgozó.Név, Fizetés, Osztály.Név FROM Dolgozó, Osztály WHERE Dolgozó.OsztályId = Osztály.ID; vagy SELECT Dolgozó.Név, Fizetés, Osztály.Név FROM Dolgozó INNER JOIN Osztály ON Dolgozó.OsztályId = Osztály.ID; Osztály

  4. Term. ÖSSZEKAPCSOLÁS SQL-ben • Mindkétjelölésnélképződik a táblákdirektszorzata, ésprojekcióvalkiválasztódnakazáltalunkmegjelenítenikívántoszlopok • Aholnévütközéstőlkelltartanunk a direktszorzatban, a tábláknevét is kiírjukazoszlopnévelé (pl. Dolgozó.Név) • azelsőmódszernél a WHERE feltételbenkellmegadniazt, hogy a külsőkulcsokmenténegyezősorokmaradjanak meg azeredménytáblában Példa. Határozzuk meg azelőzőtáblákesetén, hogyhányfődolgozikazegyesosztályokon. SELECT Osztály.Név, COUNT(Dolgozó.Név) FROM Dolgozó, Osztály WHERE Dolgozó.OsztályId = Osztály.ID GROUP BY Osztály.Név;

  5. TERM. Összekapcsolás SQL-BEN • A kapotteredmény a következőlenne: • Vegyükészre, hogy a Pénzügyiosztálynálnemjelenik meg, hogy 0 fődolgozikott • Ennekoka: Egydolgozósincsazosztályon => a direktszorzategyiksorábansemleszegyezés a külsőkulcsmentén ‘4’ értékesetén => nemfogjatartalmazniazeredménytábla a pénzügyiosztályt => nem fog összesítéskorszerepelni

  6. Külsőösszekapcsolás • A látottproblémakiküszöbölésérelétezik a külsőösszekapcsolás: a “lógó” sorok is megmaradhatnakazösszekapcsolttáblában • LEFT OUTER JOIN – baloldalikülsőösszekapcsolás; a baloldalitáblalógósoraimaradnak meg, a nembaloldalitáblábólszármazóoszlopokazilyensorokban NULL értéketkapnak • RIGHT OUTER JOIN – jobboldalrólua. • FULL OUTER JOIN – mindkéttáblanempárosítottsoraimegőrződnek • Észrevétel. Természetesen – bármilyenösszekapcsolásról is legyenszó – kettőnéltöbbtábla is összekapcsolható.

  7. KÜLSŐ összekapcsolás • Így a korábbiprobléma – azösszes (akárnullalétszámú) osztályhoztartozódolgozóilétszámokkiíratása – már meg is oldható: SELECT Osztály.Név, COUNT(Dolgozó.Név) FROM Dolgozó RIGHT OUTER JOIN Osztály ON Dolgozó.OsztályId = Osztály.Id GROUP BY Osztály.Név;

  8. Aliasok • A SELECT utasításutánadandóoszloplistanemcsakoszlopneveket, hanemkifejezéseket is tartalmazhat, amiket el lehetnevezni – ezazaliasokegyikszerepe; szintaxis: kifejezés AS alias_név • Példa. Országnépsűrűsége. SELECT név, lakosság/terület AS népsűrűség FROM ország; • Alias használandóakkor is, ha egy SQL utasításonbelüladotttábláratöbbszörösenhivatkozunk, példáulazonosnevűdolgozóklekérése: SELECT d1.Név FROM Dolgozó AS d1, Dolgozó AS d2 WHERE d1.Név = d2.Név AND d1.id < d2.id;

  9. Allekérdezések • Korábbanláttunkmárpéldátrájuk – tulajdonképpenarról van szó, hogyegyadott SQL utasításonbelülelhelyezünkegy SELECT-tet. Példa. Allekérdezésselelőállítotthalmaz IN után: SELECT Név FROM Dolgozó WHERE Dolgozó.OsztályId IN ( SELECT Osztály.Id FROM Osztály WHERE Osztály.Id > 5 );

  10. Allekérdezések • Allekérdezéstperszehasználhatunk a FROM parancsután is: Példa. Adottaz Employee(id, name, salary, address) reláció. Állítsunkebbőlelőegyolyantáblát, amibenmagyaroszlopnevekvannak a következőadatokkal: név, azonosító, évesbér. Csak a $4000-nál többetkereső “Smith” családnevűdolgozókjelenjenek meg. SELECT altabla.nev, altabla.id, altabla.eves_ber FROM ( SELECT name AS nev, id, salary*12 AS eves_ber, address FROM Employee WHERE salary > 4000 ) AS altabla WHERE altabla.nev LIKE ‘% Smith’; • Sőt, mégakár INSERT-en belül is elhelyezhetőalkérdés: INSERT INTO tábla SELECT …

  11. Allekérdezések • Halmazműveleteknél– UNION, INTERSECT, EXCEPT –jellemzőenkétalkérdésállazutasításoldalán: (SELECT nevFROM oktatok) UNION (SELECT nevFROM hallgatok); • Ilyenkor a UNION-nál– mint aztmártudjuk– a többszörösenszereplőértékekcsakegyszerjelennek meg. Ha aztakarjuk, hogy a duplikáltsoroktöbbszörmegjelenjenek, UNION ALL használandó • A táblákkompatibilitásáraügyelnikell!

  12. Allekérdezések • Nemmindenesetbentudunk a korábbiakbanlátottakhozhasonlómegoldástadni a problémáinkra Példa. Növeljük meg azon dolgozók fizetését 10%-al, akik az átlagfizetésnél kevesebbet keresnek: UPDATE Dolgozo AS d1 SET d1.fizetes = 1.1 * d1.fizetes WHERE (SELECT AVG(d2.fizetes) FROM Dolgozo AS d2 ) > d1.fizetes; A MySQL nemengedi meg, hogymódosítsunkegytáblátúgy, hogy a WHERE feltételbenugyanezentábláravonatkozóalkérdés van! Szinténnemjó, ha INSERT utánpróbálkozunkhasonlóan.

  13. Nézettáblák • Nemvalóditáblák, feladatukazadatbázisbanlévőadatokbemutatásaegyadotttranszformációvégrehajtásaután • Tulajdonképpenmegadunkegy “formulát”, ami a mármeglévőadatokalapjánlétrehozegynézettáblát • Létrehozása: CREATE VIEW táblanév [(oszloplista)] AS SELECT …; • Törlése: DROP VIEW táblanév; • A nézettáblákon is végrehajthatókugyanazonműveletek, mint a tárolttáblákon, azaz pl. azértékekaktualizálhatók–ésilyenkor a forrástáblába is bekerülnek a módosítások • Nyilván a forrástáblamódosítása is automatikusanlátszik a nézettáblában

  14. Nézettáblák • Van néhányeset, amikorazonban a nézettáblamódosításanemlehetséges: Példa. Raktár(cikkszám, név, egységár, mennyiség) CREATE VIEW Keszlet(aru, ertek) AS SELECT nev, egysegar*mennyiseg FROM raktar; • Nem lehet módosítani a nézettáblát, ha • nem lehet egyértelmű a végrehajtás (pl. fent), vagy ha • DISTINCT opciót, • valamilyen összekapcsolást, • GROUP BY alparancsot tartalmaz a definíció.

  15. FELADATOK • Honlapon: sqlfolyt.sql–tábláklétrehozásáttartalmazza 8.1 HányfőslengyelkisebbségélFranciaországban? 8.2 MennyiEurópában a GDP-k átlaga? 8.3 Listázd az egyes országok neveit és népességét, de csak a 1200000-nél népesebb országok jelenjenek meg! 8.4 Mennyi Svájc összlakossága? 8.5 Adj meg lekérdezést, ami megmutatja, hogy egy adott országban melyik a legnagyobb lélekszámú nép!

More Related