|
|
1. sor: |
1. sor: |
| {{GlobalTemplate|Villanyalap|LaborBeugro20080326}}
| | Ez az oldal az [[Informatika 2]] című tárgy - SQL nyelv labor beugrókérdéseinek kidolgozását tartalmazza. |
|
| |
|
| Ha valaki kedvet érez megformázni, nyugodtan...
| | Jelenleg még elég hiányos a kidolgozás, továbbá évről évre kismértékben változhatnak beugrókérdések. A tanszéki honlapról mindig elérhető az aktuális mérési útmutató, mely az aktuális beugrókérdéseket tartalmazza. |
|
| |
|
| <pre>
| | '''Kérlek szerkesszétek, aktualizáljátok!''' |
| Pár megjegyzés, amiben ez a nyelv különbözik az eddigiektől:
| |
|
| |
|
| - itt szimpla egyenlőségjel az egyenlőségvizsgálat, nem dupla, mint a C-ben;
| | __TOC__ |
| - a sztringeket nem idézőjel ("), hanem aposztróf (') határolja;
| |
| - a WHERE-en belüli logikai kifejezésben nem && jelöli az és műveletet, hanem AND, és nem || a vagy, hanem OR;
| |
|
| |
|
|
| |
|
| 1. Milyen szintaktikájú SQL utasítással lehet létrehozni egy rekordot egy táblában?
| | == Milyen szintaktikájú SQL utasítással lehet létrehozni egy rekordot egy táblában? == |
|
| |
|
| CREATE TABLE létrehozandó_tábla_neve
| | a, insert into táblanév (oszlopok listája); values (értékek listája) |
| ( | |
| első_oszlop_neve első_oszlopban_lévő_adatok_típusa,
| |
| ...
| |
| ) | |
|
| |
|
| Példa:
| | b, insert into táblanév (oszlopok listája); select... |
|
| |
|
| CREATE TABLE tanszekek
| | Oszlopok listája elhagyható, select rész lekérdezést csinál, a visszaadott sorok kerülnek be. |
| (
| |
| id int primary key,
| |
| shortname varchar(5),
| |
| longname varchar(40),
| |
| teachers int
| |
| )
| |
|
| |
|
| Ez létrehoz egy táblát a tanszékeknek, amiben mindegyiknek van egy egyedi azonosítószáma (id, ez a tábla elsődleges kulcsa),
| | == Milyen szintaktikájú SQL utasítással lehet módosítani rekordokat? == |
|
| |
|
| tároljuk a legfeljebb 5 karakteres rövid nevét, és a legfeljebb 40 karakteres teljes nevét.
| | update táblanév |
|
| |
|
| 2. Milyen szintaktikájú SQL utasítással lehet módosítani rekordokat?
| | set oszlopnév1=érték1, oszlopnév2=érték2,… |
|
| |
|
| UPDATE módosítandó_tábla_neve
| | where logikai feltétel //where elhagyható |
| SET első_módosítandó_oszlop_neve = első_módosítandó_oszlopba_rakandó_érték,
| |
| ...
| |
| WHERE logikai_kifejezés_ami_azokra_a_sorokra_igaz_amiket_módosítani_akarunk
| |
|
| |
|
| Példa:
| | == Milyen szintaktikájú SQL utasítással lehet törölni rekordokat? == |
|
| |
|
| UPDATE tanszekek
| | delete from táblanév where logikai felétel |
| SET longname = 'Iszonyatos Info2 Tanszék'
| |
| WHERE shortname = 'IIT'
| |
|
| |
|
| Ez módosítja az IIT teljes nevét, már amennyiben szerepelt a táblában. Ha nem szerepelt, nem hozza létre (!).
| | vagy |
| | |
| 3. Milyen szintaktikájú SQL utasítással lehet törölni rekordokat?
| |
| | |
| DELETE FROM tábla_amiből_néhány_sort_törölni_akarunk
| |
| WHERE logikai_kifejezés_ami_azokra_a_sorokra_igaz_amiket_törölni_akarunk
| |
| | |
| vagy: | |
| | |
| DELETE tábla_amiből_minden_sort_törölni_akarunk
| |
| | |
| Példa:
| |
|
| |
|
| DELETE FROM tanszekek WHERE shortname = 'IIT'
| | delete táblanév <- így minden sort törlünk a táblából |
|
| |
|
| Ez törli a tanszékek közül az IIT-t (bár ilyen egyszerű lenne...).
| | == Hogyan lehet vizsgálni egy kifejezés nullitását? == |
|
| |
|
| 4. Hogyan lehet vizsgálni egy kifejezés nullitását?
| | kifejezés is null <- csak így lehet, a kifejezés = null értéke akkor sem lesz igaz, ha a kifejezés értéke egyébként null, mivel ha valamit null-al hasonlítunk össze, az mindig false |
|
| |
|
| Rossz:
| | pl: SELECT FROM tanszekek WHERE shortname is null |
| SELECT FROM tanszekek WHERE shortname = null
| |
| | |
| Ez azért rossz, mert ha valamit null-lal hasonlítunk össze, az összehasonlítás eredménye mindig false, még akkor is, ha
| |
| | |
| mindkettő null (hasonlít a lebegőpontos számításoknál a NaN-nal való összehasonlításhoz), mert a null az semmivel nem egyenlő
| |
| | |
| (még önmagával se).
| |
| | |
| Jó:
| |
| SELECT FROM tanszekek WHERE shortname is null | |
|
| |
|
| Ezt a külön nyelvi konstrukciót lehet a null-ság vizsgálatára használni. | | Ezt a külön nyelvi konstrukciót lehet a null-ság vizsgálatára használni. |
|
| |
|
| 5. Miképp mőködik a like operátor? Milyen joker karaktereket lehet használni?
| | == Miképp működik a like operátor? Milyen joker karaktereket lehet használni? == |
|
| |
|
| Valami reguláris kifejezés-szerű (de nem azonos vele! annak külön szintaxisa van) dolog, ami lehetőséget ad arra, hogy
| | kifejezés like string minta |
|
| |
|
| stringek egy csoportját kijelöljük, hogy megadjunk egy mintát, ami több sztringre is illeszkedhet. Pl. ha egy százalékjel (%)
| | String összehasonlító operátor, a kifejezésben keres a mintának megfelelően, és ha a minta illeszthető a kifejezésre, akkor az operátor igaz értékkel tér vissza. A mintaillesztés case sensitive, a használható joker karakterek: |
|
| |
|
| van benne, az tetszőleges (akár nulla hosszú) karaktersorozatot jelenthet, az aláhúzásjel egy akármilyen karaktert jelenthet,
| | _: egy betű helyettesítése |
|
| |
|
| a dupla aposztróf pedig egy szimpla aposztrófot jelent, és csak azért kell, mert egy szimpla aposztrófot leírva vége lenne a
| | %: tetszőleges hosszúságú szöveg helyettesítése |
|
| |
|
| sztringnek.
| | dupla aposztróf: szimpla aposztróf, mivel, a szimpla aposztróf jel önmagában a stringhatároló karakter |
|
| |
|
| Példa:
| | pl.: select * from termek where nev like ’%er%’ |
|
| |
|
| SELECT FROM tanszekek WHERE longname like '%barack_''alma'
| | azon termékek listája, amelyek neve tartalmazza az er karaktersorozatot |
|
| |
|
| Ez azokat a tanszékeket fogja visszaadni, amiknek a neve tartalmazza a barack karaktersorozatot, utána valamilyen karakter
| | == Hogyan működnek az oszlopfüggvények? == |
|
| |
|
| jön, utána egy idézőjel, és végül 'alma' a vége (nincs % a végén, ezért nem lehet az 'alma' után már semmi).
| | A lekérdezés eredményeként kapott rekordhalmazon lehet utólagos kalkulációt végezni velük: |
| | *sum: értékek összegzése |
| | *min: legkisebb érték megkeresése |
| | *max: legnagyobb érték |
| | *avg: átlag számítása |
| | *count: rekordok megszámolása |
|
| |
|
| 6. Hogyan működnek az oszlopfüggvények?
| | A kiszámítandó oszlopfüggvényeket a select listában kell megadni. Az adatbázis-kezelő szerver először lefuttatja a lekérdezést az oszlopfüggvények nélkül, majd az egyes rekordokat átadja az oszlopfüggvényeknek, az értékek kiszámítására. Az oszlopfüggvények a null értéket nem veszik figyelembe, kivéve a count(*) függvény. |
|
| |
|
| Előfordul, hogy nem a konkrét értékek érdekelnek, amik egy táblából kinyerhetőek, hanem pl. azok átlaga, vagy csak az, hogy
| | == Mire szolgál a having kulcsszó? == |
|
| |
|
| hány, a feltételnek megfelelő sor volt a táblában (pl. bejelentkezés: csak az az érdekes, hogy volt-e megadott nevet és
| | Ha az oszlopfüggvény eredményére teszünk megkötést, akkor ezt a where részben nem adhatjuk meg, mivel az kiértékelődik még az oszlopfüggvények kiszámítása előtt. Ezért ha az oszlopfüggvények kimenetére szeretnénk szűrni, akkor azt külön a having kulcsszó után lehet megadni. |
|
| |
|
| jelszót tartalmazó felhasználó a táblában, vagy nem). Ezeket a dolgokat el lehetne úgy is végezni a legtöbb esetben, hogy
| | == Írja fel a select utasítás általános szintaktikáját! == |
| | |
| lekérjük az összes lényeges sort a táblából, majd az adatbázison kívül kiszámítjuk, ami érdekel. Viszont ez azért nem a
| |
| | |
| legjobb, mert általában sok fölösleges pluszmunka ezt a rengeteg adatot az adatbázis és a külső feldolgozó közt átvinni - pl.
| |
| | |
| az átlagszámításhoz a legtöbb nyelvben külön ciklus kéne, lefoglalni az adatoknak sok memóriát, stb. Ezért a legtöbb
| |
| | |
| adatbázisengine képes pár ilyen dolgot maga is elvégezni. Pl. ha szeretnénk a tanárok átlagos számát kiszámítani azon
| |
| | |
| tanszékek közt, amiknek a nevében van 'SZ' (EVTSZ, SZIT, stb.), elküldhetjük a következő lekérést:
| |
| | |
| SELECT teachers FROM tanszekek WHERE longname like '%SZ%'
| |
| | |
| amivel lekérjük a megfelelő tanszékeken dolgozó tanárok számát, majd az adatbáziskezelőn kívül végigfuthatunk a kapott
| |
| | |
| sorokon, és kiszámíthatjuk az átlagot, de ez nem valami hatékony. Helyette az alábbi lekéréssel megmondhatjuk az engine-nek,
| |
| | |
| hogy ne a tanárok számát adja vissza, minden sorból egyet, hanem csak az összes sorban lévő teacher mező átlagát kérjük, és
| |
| | |
| nevezze ezt mondjuk average_teachers-nek:
| |
| | |
| SELECT avg(teachers) as average_teachers FROM tanszekek WHERE longnamelike '%SZ%'
| |
| | |
| Így az engine-től egyetlen sort kapunk majd vissza, és annak egyetlen, average_teachers mezője lesz, pont a kívánt értékkel.
| |
| | |
| A többi oszlopfüggvény, értelemszerű funkcióval, hasonló használattal és működéssel: max, min, sum, count.
| |
| | |
| 7. Mire szolgál a having kulcsszó?
| |
| | |
| Előfordul, hogy két táblából van szükségünk egyszerre adatra, és a két tábla közt valamiféle kapcsolat van. Pl. az elsőben
| |
| | |
| cégek adatai vannak, a másodikban pedig dolgozók adatai, és a második tábla egyik mezője azt tartalmazza, hogy melyik cégnél
| |
| | |
| dolgozik az adott ember (méghozzá a hellyel való spórolás miatt csak a cég azonosítószámát, nincs benne a teljes cégnév).
| |
| | |
| Tegyük fel, hogy statisztikai célokra szükségünk lenne az összes olyan cég nevére, ahol dolgozik Smith nevű alkalmazott. Ezt
| |
| | |
| megoldhatjuk úgy, hogy először lekérjük az összes Smith vezetéknevű emberhez tartozó sort a dolgozók táblából, majd ezekből
| |
| | |
| mind kivesszük a cégazonosítót, és egy ciklussal mindegyikhez lekérjük a hozzá tartozó nevet az első táblából. Ez, az előző
| |
| | |
| pontban leírtakhoz hasonló okok miatt nem hatékony. Helyette erre is van egy eszköz magában az engine-ben, és ez a JOIN.
| |
| | |
| Megtehetjük, hogy egy ilyen lekérést intézünk az engine-hez:
| |
| | |
| SELECT DISTINCT ceg_neve FROM cegek JOIN dolgozok ON dolgozok.ceg_azonosito = cegek.ceg_azonosito WHERE dolgozok.nev LIKE
| |
| | |
| '%Smith%'
| |
| | |
| Ez arra utasítja az engine-t, hogy fogja meg mindkét táblát, és kapcsolja össze őket. Konkrétan a két tábla
| |
| | |
| Descartes-szorzatát hozza létre; ez az összes lehetséges pár halmaza. Vagyis, ha az első táblában volt 5 elem, a másodikban
| |
| | |
| pedig 10, akkor a Descartes-szorzatnak 50 eleme lesz, lesz egy olyan, ahol a dolgozok első sora van párban a cegek első
| |
| | |
| sorával, egy olyan, ahol a dolgozok első sora van párban a cegek második sorával, stb. Ezek közül aztán kiválasztja azokat,
| |
| | |
| amikre az ON utáni kifejezés igaz, vagyis csak azokkal a cég-dolgó párosokkal dolgozik tovább, ahol a cég alkalmazottja a
| |
| | |
| dolgozó. Ezekből aztán kiválasztja azokat, ahol a dolgozó neve tartalmazza a 'Smith' szöveget, végül a maradék sorokból csak
| |
| | |
| a cégnevet szedi ki, azok közül is kiszórja azokat, amik kétszer vannak (DISTINCT ceg_neve), és végül a kívánt listával térr
| |
| | |
| vissza.
| |
| | |
| Ez egészen addig jó is, amíg a kiválasztási feltétel csak egyes sorokkal dolgozik, de ha pl. azok a cégek kellenének, ahol az
| |
| | |
| összes dolgozó átlagfizetése 200 ezer fölött van, azt nem lenne ilyen egyszerű. Ugyanis, használva az oszlopfüggvényeket, le
| |
| | |
| akarhatnánk írni valami ilyesmit:
| |
| | |
| Rossz:
| |
| SELECT ceg_neve FROM cegek JOIN dolgozok ON dolgozok.ceg_azonosito = cegek.ceg_azonosito WHERE avg(dolgozok.fizetes)>200000
| |
| | |
| Ez viszont nem működne, mert az avg() oszlopfüggvény csak a már elvégzett lekérésekből számít ki valamit, amíg még a
| |
| | |
| feltételek kiértékelése és a sorok kiválogatása zajlik, addig nem is létezik, és nem használható. Ezért ezt a feltételt nem a
| |
| | |
| WHERE után kell írni, hanem van egy külön kulcsszó, a HAVING:
| |
| | |
| Jó:
| |
| | |
| SELECT ceg_neve FROM cegek JOIN dolgozok ON dolgozok.ceg_azonosito = cegek.ceg_azonosito HAVING avg(dolgozok.fizetes)>200000
| |
| | |
| És ez már a kívánt dolgot csinálja.
| |
| | |
| Megjegyzés: bizonyos esetekben a JOIN-t nem kell kiírni, és a lekérés mégis azt csinálja, mintha írtunk volna bele (implicit
| |
| | |
| JOIN).
| |
| | |
| 8. Írja fel a select utasítás általános szintaktikáját!
| |
| | |
| A szögletes zárójelbeliek nem kötelezőek:
| |
| | |
| SELECT [DISTINCT] oszlopok_amiknek_az_értéke_kell
| |
| FROM táblák_amikből_adat_kell
| |
| [where logikai_kifejezés_ami_igaz_a_sorokra_amiket_ki_akarunk_választani]
| |
| [group by mi_szerint_akarjuk_csoportosítani_a_visszaadott_sorokat]
| |
| [having logikai_kifejezés_ami_JOINnál_használatos]
| |
| [order by mi_szerint_akarjuk_rendezni_a_visszaadott_sorokat]
| |
| | |
| 9. Mire szolgál az isnull függvény MS SQL Serveren?
| |
| | |
| Arra jó, hogy ilyen "elromlás-biztos" módon szedjem le egy változó értékét: sokszor van olyan, hogy egy változó (táblamező,
| |
| | |
| számított kifejezés) lehet, hogy null, és ha null, akkor helyette valami mással (pl. "üres mező" stringgel) akarok dolgozni.
| |
| | |
| Ezt az isnull(p1, p2) függvény teszi lehetővé: ha p1 nem null, akkor annak az értékét adja vissza, de ha null, akkor p2
| |
| | |
| értékét, ami lehet pl. ilyen helyettesítő érték, hibaüzenet, stb.
| |
| | |
| 10. Miképp lehet megadni két tábla outer joinját MS SQL Serveren?
| |
| | |
| A LEFT OUTER JOIN abban tér el a már leírt INNER JOIN-tól, hogy az INNER JOIN, ha mondjuk az első táblának volt olyan sora,
| |
| | |
| ami semmilyen módon nem került be a kiválasztott sorok közé (vagyis nem volt olyan második táblabeli sor, amivel
| |
| | |
| összepárosítva az ON-beli kifejezés igazzá vált volna), akkor egyszerűen nem kerül be. Itt viszont bekerül, és a hozzá
| |
| | |
| tartozó második táblabeli oszlopok értékei mind NULL-ok lesznek. A RIGHT OUTER JOIN ugyanez, csak a két tábla szerepe
| |
| | |
| felcserélve. A szintaktika pedig:
| |
| | |
| SELECT gyarto.*
| |
| FROM gyarto left OUTER JOIN termek ON gyartoid=gyarto.id
| |
|
| |
|
| | <pre> |
| | select [discint] oszloplista |
| | from táblalista |
| | [where logikai kifejezés] |
| | [group by oszloplista] |
| | [having logikai kifejezés] |
| | [order by oszloplista] |
| </pre> | | </pre> |
| -- [[KisGergelyG|G]] - 2008.03.25.
| |
| * {{InLineFileLink|Villanyalap|LaborBeugro20080326|SQL20nyelv.pdf|SQL20nyelv.pdf}}: A beugró maga
| |
|
| |
|
| | == Mire szolgál az isnull függvény MS SQL Serveren? == |
|
| |
|
| | Az isnull(kifejezés1,kifejezés2) Ha a kifejezés1 értéke nem null, akkor a kifejezés1-et adja vissza, ha null, akkor a kifejezés2-t. Néha van olyan, hogy egy változó értéke lehet, hogy null, és ha null, akkor lehet, hogy helyette valami mással szeretnék dolgozni. |
|
| |
|
| | == Miképp lehet megadni két tábla outer joinját MS SQL Serveren? == |
|
| |
|
| <pre>
| | A join művelet tulajdonsága, hogy a nem párosítható rekordokat nem tartalmazza az eredményhalmaz. A left outer join abban tér el ettől, hogy ha mondjuk az első táblának volt olyan sora, ami semmilyen módon nem került be a kiválasztott sorok közé, akkor nem kerül be, itt viszont bekerül, és a hozzá tartozó második táblabeli oszlopok értékei mind null-ok lesznek. A right outer join ugyanez, csak a két tábla szerepe felcserélve. |
| Itt van egy tömörebb változat, amit én csináltam, tényleg csak a kérdésre a válasz, semmi plusz rizsa.
| |
| Az első kérdésre a válasz az enyémben jobb szerintem, de az utolsóban nagyon nem vagyok biztos.
| |
| -szerkesztve: 10-es kérdést kaptam, és megkaptam rá a max pontot. - 2009.03.23.
| |
| Szóval itt van:
| |
|
| |
|
| 1. Milyen szintaktikájú SQL utasítással lehet létrehozni egy rekordot egy táblában?
| | select * |
| a, insert into táblanév (oszlopok listája)
| |
| values (értékek listája)
| |
| b, insert into táblanév (oszlopok listája)
| |
| select...
| |
| oszlopok listája elhagyható, select rész lekérdezést csinál, a visszaadott sorok kerülnek be
| |
| | |
| 2. Milyen szintaktikájú SQL utasítással lehet módosítani rekordokat?
| |
| update táblanév
| |
| set oszlopnév1=érték1, oszlopnév2=érték2,…
| |
| where logikai feltétel //where elhagyható
| |
| | |
| 3. Milyen szintaktikájú SQL utasítással lehet törölni rekordokat?
| |
| delete from táblanév where logikai felétel
| |
| vagy
| |
| delete táblanév <- így minden sort törlünk a táblából
| |
| | |
| 4. Hogyan lehet vizsgálni egy kifejezés nullitását?
| |
| kifejezés is null <- csak így lehet, a kifejezés = null értéke akkor sem lesz igaz, ha a
| |
| kifejezés értéke egyébként null, mivel ha valamit null-al hasonlítunk össze, az mindig false
| |
| | |
| 5. Miképp működik a like operátor? Milyen joker karaktereket lehet használni?
| |
| kifejezés like string minta
| |
| String összehasonlító operátor, a kifejezésben keres a mintának megfelelően, és ha a minta
| |
| illeszthető a kifejezésre, akkor az operátor igaz értékkel tér vissza. A mintaillesztés
| |
| case sensitive, a használható joker karakterek:
| |
| _: egy betű helyettesítése
| |
| %: tetszőleges hosszúságú szöveg helyettesítése
| |
| dupla aposztróf: szimpla aposztróf, mivel, a szimpla aposztróf jel önmagában a stringhatároló
| |
| karakter
| |
| pl.: select * from termek where nev like ’%er%’
| |
| azon termékek listája, amelyek neve tartalmazza az er karaktersorozatot
| |
|
| |
|
| | from termek right outer join gyarto on gyartoid=gyarto.id |
|
| |
|
| | select * |
|
| |
|
| 6. Hogyan működnek az oszlopfüggvények?
| |
| A lekérdezés eredményeként kapott rekordhalmazon lehet utólagos kalkulációt végezni velük:
| |
| sum: értékek összegzése
| |
| min: legkisebb érték megkeresése
| |
| max: legnagyobb érték
| |
| avg: átlag számítása
| |
| count: rekordok megszámolása
| |
| A kiszámítandó oszlopfüggvényeket a select listában kell megadni. Az adatbázis-kezelő szerver
| |
| először lefuttatja a lekérdezést az oszlopfüggvények nélkül, majd az egyes rekordokat átadja
| |
| az oszlopfüggvényeknek, az értékek kiszámítására. Az oszlopfüggvények a null értéket nem
| |
| veszik figyelembe, kivéve a count(*) függvény.
| |
|
| |
| 7. Mire szolgál a having kulcsszó?
| |
| Ha az oszlopfüggvény eredményére teszünk megkötést, akkor ezt a where részben nem adhatjuk meg,
| |
| mivel az kiértékelődik még az oszlopfüggvények kiszámítása előtt. Ezért ha az oszlopfüggvények
| |
| kimenetére szeretnénk szűrni, akkor azt külön a having kulcsszó után lehet megadni.
| |
|
| |
| 8. Írja fel a select utasítás általános szintaktikáját!
| |
| select [discint] oszloplista
| |
| from táblalista
| |
| [where logikai kifejezés]
| |
| [group by oszloplista]
| |
| [having logikai kifejezés]
| |
| [order by oszloplista]
| |
|
| |
| 9. Mire szolgál az isnull függvény MS SQL Serveren?
| |
| isnull(kifejezés1,kifejezés2) Ha a kifejezés1 értéke nem null, akkor a kifejezés1-et adja
| |
| vissza, ha null, akkor a kifejezés2-t. Néha van olyan, hogy egy változó értéke lehet, hogy
| |
| null, és ha null, akkor lehet, hogy helyette valami mással szeretnék dolgozni.
| |
|
| |
| 10. Miképp lehet megadni két tábla outer joinját MS SQL Serveren?
| |
| A join művelet tulajdonsága, hogy a nem párosítható rekordokat nem tartalmazza az
| |
| eredményhalmaz. A left outer join abban tér el ettől, hogy ha mondjuk az első táblának volt
| |
| olyan sora, ami semmilyen módon nem került be a kiválasztott sorok közé, akkor nem kerül be,
| |
| itt viszont bekerül, és a hozzá tartozó második táblabeli oszlopok értékei mind null-ok
| |
| lesznek. A right outer join ugyanez, csak a két tábla szerepe felcserélve.
| |
| select *
| |
| from termek right outer join gyarto on gyartoid=gyarto.id
| |
| select *
| |
| from gyarto left outer join termek on gyartoid=gyarto.id | | from gyarto left outer join termek on gyartoid=gyarto.id |
|
| |
| -- Main.meilinger - Meilinger Ákos - 2009.03.22.
| |
| </pre>
| |
|
| |
|
|
| |
|
| [[Category:Villanyalap]] | | [[Category:Villanyalap]] |
Ez az oldal az Informatika 2 című tárgy - SQL nyelv labor beugrókérdéseinek kidolgozását tartalmazza.
Jelenleg még elég hiányos a kidolgozás, továbbá évről évre kismértékben változhatnak beugrókérdések. A tanszéki honlapról mindig elérhető az aktuális mérési útmutató, mely az aktuális beugrókérdéseket tartalmazza.
Kérlek szerkesszétek, aktualizáljátok!
Milyen szintaktikájú SQL utasítással lehet létrehozni egy rekordot egy táblában?
a, insert into táblanév (oszlopok listája); values (értékek listája)
b, insert into táblanév (oszlopok listája); select...
Oszlopok listája elhagyható, select rész lekérdezést csinál, a visszaadott sorok kerülnek be.
Milyen szintaktikájú SQL utasítással lehet módosítani rekordokat?
update táblanév
set oszlopnév1=érték1, oszlopnév2=érték2,…
where logikai feltétel //where elhagyható
Milyen szintaktikájú SQL utasítással lehet törölni rekordokat?
delete from táblanév where logikai felétel
vagy
delete táblanév <- így minden sort törlünk a táblából
Hogyan lehet vizsgálni egy kifejezés nullitását?
kifejezés is null <- csak így lehet, a kifejezés = null értéke akkor sem lesz igaz, ha a kifejezés értéke egyébként null, mivel ha valamit null-al hasonlítunk össze, az mindig false
pl: SELECT FROM tanszekek WHERE shortname is null
Ezt a külön nyelvi konstrukciót lehet a null-ság vizsgálatára használni.
Miképp működik a like operátor? Milyen joker karaktereket lehet használni?
kifejezés like string minta
String összehasonlító operátor, a kifejezésben keres a mintának megfelelően, és ha a minta illeszthető a kifejezésre, akkor az operátor igaz értékkel tér vissza. A mintaillesztés case sensitive, a használható joker karakterek:
_: egy betű helyettesítése
%: tetszőleges hosszúságú szöveg helyettesítése
dupla aposztróf: szimpla aposztróf, mivel, a szimpla aposztróf jel önmagában a stringhatároló karakter
pl.: select * from termek where nev like ’%er%’
azon termékek listája, amelyek neve tartalmazza az er karaktersorozatot
Hogyan működnek az oszlopfüggvények?
A lekérdezés eredményeként kapott rekordhalmazon lehet utólagos kalkulációt végezni velük:
- sum: értékek összegzése
- min: legkisebb érték megkeresése
- max: legnagyobb érték
- avg: átlag számítása
- count: rekordok megszámolása
A kiszámítandó oszlopfüggvényeket a select listában kell megadni. Az adatbázis-kezelő szerver először lefuttatja a lekérdezést az oszlopfüggvények nélkül, majd az egyes rekordokat átadja az oszlopfüggvényeknek, az értékek kiszámítására. Az oszlopfüggvények a null értéket nem veszik figyelembe, kivéve a count(*) függvény.
Mire szolgál a having kulcsszó?
Ha az oszlopfüggvény eredményére teszünk megkötést, akkor ezt a where részben nem adhatjuk meg, mivel az kiértékelődik még az oszlopfüggvények kiszámítása előtt. Ezért ha az oszlopfüggvények kimenetére szeretnénk szűrni, akkor azt külön a having kulcsszó után lehet megadni.
Írja fel a select utasítás általános szintaktikáját!
select [discint] oszloplista
from táblalista
[where logikai kifejezés]
[group by oszloplista]
[having logikai kifejezés]
[order by oszloplista]
Mire szolgál az isnull függvény MS SQL Serveren?
Az isnull(kifejezés1,kifejezés2) Ha a kifejezés1 értéke nem null, akkor a kifejezés1-et adja vissza, ha null, akkor a kifejezés2-t. Néha van olyan, hogy egy változó értéke lehet, hogy null, és ha null, akkor lehet, hogy helyette valami mással szeretnék dolgozni.
Miképp lehet megadni két tábla outer joinját MS SQL Serveren?
A join művelet tulajdonsága, hogy a nem párosítható rekordokat nem tartalmazza az eredményhalmaz. A left outer join abban tér el ettől, hogy ha mondjuk az első táblának volt olyan sora, ami semmilyen módon nem került be a kiválasztott sorok közé, akkor nem kerül be, itt viszont bekerül, és a hozzá tartozó második táblabeli oszlopok értékei mind null-ok lesznek. A right outer join ugyanez, csak a két tábla szerepe felcserélve.
select *
from termek right outer join gyarto on gyartoid=gyarto.id
select *
from gyarto left outer join termek on gyartoid=gyarto.id