„Informatika 2 - Adatbázisok használata labor” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
a (David14 átnevezte a(z) LaborBeugro20080326 lapot a következő névre: Informatika 2 - SQL nyelv labor: Értelmes cím)
a
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,&#8230;
  
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 &#8217;%er%&#8217;
  
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,&#8230;
 
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 &#8217;%er%&#8217;
 
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]]

A lap 2013. január 18., 15:16-kori változata

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