Közművelődés, kultúra, oktatás, könyvtár, pedagógia, műszaki informatika, számítástechnika
2020. május 29., péntek
Egyszerű teszt2
1. Írd le, mit nevezünk számítógépes hálózatnak!
2. Melyik eszköz szükséges egy hálózat kialakításához?
a. printer
b. hálózati kártya
c. UTP kábel
d. modem
e. szkenner
3. Melyik jellemző az iskolai Windows-hálózatra?
a. egyenrangú hálózat
b. LAN jellegű hálózat
c. kliens-szerver alapon működik
d. a munkaállomások csak asztali gépek lehetnek
e. egyes gépcsoportokat routerek szolgálnak ki
4., Mit jelez, ha egy mappa az ábrán látható módon jelenik meg?
a. a mappa meg van nyitva
b. a mappa tartalmát mások is láthatják
c. a mappa védett, nem nyitható meg
d. törlésvédett mappa
e. megosztott mappa
5. Jelöld meg, melyek jellemzőek az Internetre!
a. Az összekapcsolt gépek egyenrangúak
b. Kliens-szerver alapú hálózat
c. LAN-jellegű hálózat
d. Világméretű hálózat
e. Magyarországon az 1960-as években terjedt el
6. Melyik tulajdonság illik az Internetre?
a. A gépeket IP-cím azonosítja
b. A gépek kommunikációja protokollok szerint történik
c. Az állományokat az IP-cím azonosítja
d. Az FTP fájl átviteli szabvány
e. A gépek kapcsolattartása csak Wi-fi-n keresztül történhet
7. Melyik rövidítés Internet-protokoll?
a. URL
b. HDMI
c. HTTP
d. UTP
e. FTP
8. Mi jellemző a hiperhivatkozásokra?
a. ugrópontok az internetes oldalakon
b. fölöttük az egérmutató megváltozhat
c. linkek, melyek más weboldalakra mutathatnak
d. gyorsítják a hálózat átviteli sebességét
e. csak szövegekhez rendelhetők
9. Válaszd ki a hibás IP-címeket!
a. 255.300.000.010
b. 255.255.255.255
c. 0.0.0.1
d. 034.112.58
e. 120.56.45.100
10. Mi a chat?
a. elektronikus üzenetküldés
b. on-line csevegés
c. elektronikus levelezés
d. fájlok letöltése
e. böngészés
11. Válaszd ki a jó e-mail-címeket!
a. NagyPál@g-mail.com
b. http://levelek.uw.hu
c. kviki@freemail.hu
d. kismacko.pali@citromail.hu
e. Kis Bálintka Tarhos@mailbox
12. Melyik mondat hamis?
a. Számítógépes vírusok e-mailben is terjedhetnek.
b. Minden e-mail-címben van @ karakter
c. Egy e-mail-címben nem lehet szám
d. Egy e-mailt egyidőben csak egy címre küldhetünk
e. Egy e-mailben hangfájl is küldhető
13. Melyik kijelentés hibátlan?
a. A Google egy tematikus kereső
b. Ahányszor belépünk egy levelező programba, mindig regisztrálnunk kell.
c. Ugyanazon levelező szerveren nem lehet több azonos e-mail-cím.
d. Az Opera egy böngésző program.
e. A Firefox ingyenes böngésző kliens.
14. Melyik hibás az alábbi mondatok közül?
a. A NETIKETT internetes illemszabály gyűjtemény.
b. Egy e-mailben a csupa nagybetűs szöveg kiabálásnak számít.
c. Nincs következménye annak, ha fórumozáskor nem tartod be a Netikett szabályait.
d. A smiley-k hangulatjelző rajzocskák.
e. A :) jel szomorú hangulatra utal.
Egyszerű teszt
1., Írd le, mit nevezünk hardvernek?
2., Jelöld meg, melyik hardver az alábbiakból!
a., nyomtató
b., Panda vírusirtó
c., processzor
d., keyboard
e., BIOS
3., Jelöld meg, mely eszközök találhatók az alaplapon!
a., winchester
b., memória
c., processzor
d., USB key
e., tápegység
f., BIOS chip
4., Írd a képek alá a hardvereszköz nevét!
5., Írd a képek alá a hardvereszköz nevét!
6.,Írd le, mit nevezünk szoftvernek?
7., Írd a képek alá a hardvereszköz nevét!
8., Jelöld meg a képen látható eszköz tulajdonságait!
a., elsődleges kiviteli eszköz
b., az adatokat papíron jeleníti meg
c., alkatrésze a tintapatron
d., ráégeti a festéket a papírra
e., egyszerre több példányt is nyomtathat
f., létezik színes változata is
g., működése zajos és lassú
h., a festéket festékszalag hordozza
i., festékkazettája a toner
9., Mi az angol megfelelője?
Monitor
Egér
Billentyűzet
Nyomtató
Alaplap
Alkalmazás
10., Jelöld meg azokat a mondatokat, amelyek hibásak!
a., A számítógép tízes számrendszerben kódolja az adatokat
b., A bit nagyobb információegység, mint a bájt
c., 1 MB = 1024 kB
d., A Windows egy grafikus operációs rendszer
e., Az UNIX nem operációs rendszer
f., A külső merevlemez be- és kiviteli periféria
11., Jelöld meg a hibátlan mondatokat!
a., A szkenner beviteli periféria
b., Minden számítógépben van alaplap
c., Nem lehet 1 TB-nál nagyobb tároló képességű merevlemezt készíteni
d., Mivel a DVD-n több adat tárolható, a korong mérete nagyobb mint a CD-é
e., A parancsikonnal programot indíthatunk el
f., 2 GB = 2000 MB
12., Mely mondatok érvényesek a fájlok másolására?
a., A másolt fájlnak mindig új nevet kell adni
b., A fájl a régi helyéről eltűnik
c., A fájlból újabb példány jön létre
d., A fájl a régi helyén is megmarad
e., A helyi menü mindig tartalmazza a Másolás pontot
f., A fájl mérete és kiterjesztése megmarad
13., Mik ezek?
Paint
Calc
Notepad
Wordpad
Nagyitó
13+1., Mely programok települnek a Windows telepítésekor automatikusan?
a., Defender
b., Avast vírusirtó
c., Mozilla böngésző
d., Paint
e., Jegyzettömb
f., Office Powerpoint
2., Jelöld meg, melyik hardver az alábbiakból!
a., nyomtató
b., Panda vírusirtó
c., processzor
d., keyboard
e., BIOS
3., Jelöld meg, mely eszközök találhatók az alaplapon!
a., winchester
b., memória
c., processzor
d., USB key
e., tápegység
f., BIOS chip
4., Írd a képek alá a hardvereszköz nevét!
5., Írd a képek alá a hardvereszköz nevét!
6.,Írd le, mit nevezünk szoftvernek?
7., Írd a képek alá a hardvereszköz nevét!
8., Jelöld meg a képen látható eszköz tulajdonságait!
a., elsődleges kiviteli eszköz
b., az adatokat papíron jeleníti meg
c., alkatrésze a tintapatron
d., ráégeti a festéket a papírra
e., egyszerre több példányt is nyomtathat
f., létezik színes változata is
g., működése zajos és lassú
h., a festéket festékszalag hordozza
i., festékkazettája a toner
9., Mi az angol megfelelője?
Monitor
Egér
Billentyűzet
Nyomtató
Alaplap
Alkalmazás
10., Jelöld meg azokat a mondatokat, amelyek hibásak!
a., A számítógép tízes számrendszerben kódolja az adatokat
b., A bit nagyobb információegység, mint a bájt
c., 1 MB = 1024 kB
d., A Windows egy grafikus operációs rendszer
e., Az UNIX nem operációs rendszer
f., A külső merevlemez be- és kiviteli periféria
11., Jelöld meg a hibátlan mondatokat!
a., A szkenner beviteli periféria
b., Minden számítógépben van alaplap
c., Nem lehet 1 TB-nál nagyobb tároló képességű merevlemezt készíteni
d., Mivel a DVD-n több adat tárolható, a korong mérete nagyobb mint a CD-é
e., A parancsikonnal programot indíthatunk el
f., 2 GB = 2000 MB
12., Mely mondatok érvényesek a fájlok másolására?
a., A másolt fájlnak mindig új nevet kell adni
b., A fájl a régi helyéről eltűnik
c., A fájlból újabb példány jön létre
d., A fájl a régi helyén is megmarad
e., A helyi menü mindig tartalmazza a Másolás pontot
f., A fájl mérete és kiterjesztése megmarad
13., Mik ezek?
Paint
Calc
Notepad
Wordpad
Nagyitó
13+1., Mely programok települnek a Windows telepítésekor automatikusan?
a., Defender
b., Avast vírusirtó
c., Mozilla böngésző
d., Paint
e., Jegyzettömb
f., Office Powerpoint
2020. május 28., csütörtök
Játék program készítése Pyton programozási nyelven
http://people.ubuntu.com/~kelemeng/.ufp3/your-first-python-program.html
Fallabda játék ablaka
Fallabda játék forrása
from Tkinter import *
# Fallabda
class App
(Frame):
def __init__(self, master=None):
Frame.__init__(self,master)
Pack.config(self)
self.s=0 # Pontok
self.x=280 # Labda
self.y=5
self.vx=4 #Labda sebessege
self.vy=4 #Labda sebessege
self.px=250 #Jatekos
self.py=0
self.w()
self.after(10, self.moveBall)
def w(self):
self.l=Canvas(self,bg='yellow', width="300",heigh="220")
self.l.pack()
self.m=Label(self,relief='groove', text="",anchor="w")
self.m.pack(side='top',fill="x")
self.player= self.l.create_rectangle(self.px, self.py, self.px + 7, self.py + 30,
{"fill" : 'black',"tags":"p1"})
self.ball = self.l.create_rectangle(280, 5, 290, 15,
{"fill":'red',"tags":"ball"})
self.bind_all("<Up>", self.fel)
self.bind_all("<Down>", self.le)
self.bind_all("<B1-Motion>",self.Move)
self.m.configure(text="Score : "+`self.s`)
def Move(self, event):
if CURRENT <> "ball":
self.l.move(CURRENT, 0, event.y-self.py)
self.py=event.y
def fel(self, event):
self.l.move("p1", 0,-10)
self.py=self.py-10
def le(self, event):
self.l.move("p1",0,10)
self.py=self.py+10
def moveBall(self,*args):
if (self.x+10 == self.px) and (self.vx < 0) and (self.py - 11 < self.y) and (self.py + 36 > self.y):
self.s=self.s+1
self.m.configure(text ="Score : "+`self.s`)
self.vx=self.vx * -1
if (self.x < 4 )or(self.x>288) :
self.vx=-1.0 * self.vx
if (self.y > 211) or (self.y < 4):
self.vy=-1.0 * self.vy
self.x=self.x - self.vx
self.y=self.y + self.vy
self.l.move("ball",-self.vx,self.vy )
self.after(10, self.moveBall)
if __name__=='__main__':
# root = Tk()
app = PApp()
app.mainloop()
Online futtató környezet
https://www.programiz.com/python-programming/online-compiler/
Könyv
http://mek.oszk.hu/08400/08436/08436.pdf
Ablak nyitása
import tkinter as tk
import tkinter.ttk as ttk
class App:
def __init__(self, master=None):
self.master = master
# Window 1 widgets
self.frame1 = ttk.Frame(master, width=300, height=150, relief='groove')
self.frame1.pack_propagate(False)
self.label1 = ttk.Label(self.frame1, text='This is window 1')
self.button1 = ttk.Button(self.frame1, text='Go to window 2', command=self.window2)
self.button2 = ttk.Button(self.frame1, text='Go to window 3', command=self.window3)
# Window 2 widgets
self.frame2 = ttk.Frame(master, width=300, height=150, relief='groove')
self.frame2.pack_propagate(False)
self.label2 = ttk.Label(self.frame2, text='This is window 2')
self.button3 = ttk.Button(self.frame2, text='Go to window 1', command=self.window1)
self.button4 = ttk.Button(self.frame2, text='Go to window 3', command=self.window3)
# Window 3 widgets
self.frame3 = ttk.Frame(master, width=300, height=150, relief='groove')
self.frame3.pack_propagate(False)
self.label3 = ttk.Label(self.frame3, text='This is window 3')
self.button5 = ttk.Button(self.frame3, text='Go to window 1', command=self.window1)
self.button6 = ttk.Button(self.frame3, text='Go to window 2', command=self.window2)
self.window1()
def window1(self):
self.forget_widgets()
self.frame1.pack(side='top', pady=(25, 0))
self.label1.pack(side='top', pady=(25, 25))
self.button1.pack(side='top', pady=(0, 5))
self.button2.pack(side='top')
def window2(self):
self.forget_widgets()
self.frame2.pack(side='top', pady=(25, 0))
self.label2.pack(side='top', pady=(25, 25))
self.button3.pack(side='top', pady=(0, 5))
self.button4.pack(side='top')
def window3(self):
self.forget_widgets()
self.frame3.pack(side='top', pady=(25, 0))
self.label3.pack(side='top', pady=(25, 25))
self.button5.pack(side='top', pady=(0, 5))
self.button6.pack(side='top')
def forget_widgets(self):
for widget in self.master.winfo_children():
widget.pack_forget()
if __name__ == '__main__':
root = tk.Tk()
root.geometry('350x200')
App(master=root)
root.mainloop()
Példa ablakban
class App: Width = 800 *window dimension
Height = 600
player = 0 *to track either human or computer
Frog = 0 *food
def init (self):
self._running = True
self.surface None
self._image_surf = None
self._Frog_surf = None
self.game = Game()
self.player = Player(5) *instance of Player with length 5 (5 blocks)
self.Frog = Frog(8, 5) *instance of Frog with x and y position self.computer = Computer(5) *instance of Computer player
with length 5
https://blog.jetbrains.com/pycharm/page/2/
Fallabda játék ablaka
Fallabda játék forrása
from Tkinter import *
# Fallabda
class App
(Frame):
def __init__(self, master=None):
Frame.__init__(self,master)
Pack.config(self)
self.s=0 # Pontok
self.x=280 # Labda
self.y=5
self.vx=4 #Labda sebessege
self.vy=4 #Labda sebessege
self.px=250 #Jatekos
self.py=0
self.w()
self.after(10, self.moveBall)
def w(self):
self.l=Canvas(self,bg='yellow', width="300",heigh="220")
self.l.pack()
self.m=Label(self,relief='groove', text="",anchor="w")
self.m.pack(side='top',fill="x")
self.player= self.l.create_rectangle(self.px, self.py, self.px + 7, self.py + 30,
{"fill" : 'black',"tags":"p1"})
self.ball = self.l.create_rectangle(280, 5, 290, 15,
{"fill":'red',"tags":"ball"})
self.bind_all("<Up>", self.fel)
self.bind_all("<Down>", self.le)
self.bind_all("<B1-Motion>",self.Move)
self.m.configure(text="Score : "+`self.s`)
def Move(self, event):
if CURRENT <> "ball":
self.l.move(CURRENT, 0, event.y-self.py)
self.py=event.y
def fel(self, event):
self.l.move("p1", 0,-10)
self.py=self.py-10
def le(self, event):
self.l.move("p1",0,10)
self.py=self.py+10
def moveBall(self,*args):
if (self.x+10 == self.px) and (self.vx < 0) and (self.py - 11 < self.y) and (self.py + 36 > self.y):
self.s=self.s+1
self.m.configure(text ="Score : "+`self.s`)
self.vx=self.vx * -1
if (self.x < 4 )or(self.x>288) :
self.vx=-1.0 * self.vx
if (self.y > 211) or (self.y < 4):
self.vy=-1.0 * self.vy
self.x=self.x - self.vx
self.y=self.y + self.vy
self.l.move("ball",-self.vx,self.vy )
self.after(10, self.moveBall)
if __name__=='__main__':
# root = Tk()
app = PApp()
app.mainloop()
Online futtató környezet
https://www.programiz.com/python-programming/online-compiler/
Könyv
http://mek.oszk.hu/08400/08436/08436.pdf
Ablak nyitása
import tkinter as tk
import tkinter.ttk as ttk
class App:
def __init__(self, master=None):
self.master = master
# Window 1 widgets
self.frame1 = ttk.Frame(master, width=300, height=150, relief='groove')
self.frame1.pack_propagate(False)
self.label1 = ttk.Label(self.frame1, text='This is window 1')
self.button1 = ttk.Button(self.frame1, text='Go to window 2', command=self.window2)
self.button2 = ttk.Button(self.frame1, text='Go to window 3', command=self.window3)
# Window 2 widgets
self.frame2 = ttk.Frame(master, width=300, height=150, relief='groove')
self.frame2.pack_propagate(False)
self.label2 = ttk.Label(self.frame2, text='This is window 2')
self.button3 = ttk.Button(self.frame2, text='Go to window 1', command=self.window1)
self.button4 = ttk.Button(self.frame2, text='Go to window 3', command=self.window3)
# Window 3 widgets
self.frame3 = ttk.Frame(master, width=300, height=150, relief='groove')
self.frame3.pack_propagate(False)
self.label3 = ttk.Label(self.frame3, text='This is window 3')
self.button5 = ttk.Button(self.frame3, text='Go to window 1', command=self.window1)
self.button6 = ttk.Button(self.frame3, text='Go to window 2', command=self.window2)
self.window1()
def window1(self):
self.forget_widgets()
self.frame1.pack(side='top', pady=(25, 0))
self.label1.pack(side='top', pady=(25, 25))
self.button1.pack(side='top', pady=(0, 5))
self.button2.pack(side='top')
def window2(self):
self.forget_widgets()
self.frame2.pack(side='top', pady=(25, 0))
self.label2.pack(side='top', pady=(25, 25))
self.button3.pack(side='top', pady=(0, 5))
self.button4.pack(side='top')
def window3(self):
self.forget_widgets()
self.frame3.pack(side='top', pady=(25, 0))
self.label3.pack(side='top', pady=(25, 25))
self.button5.pack(side='top', pady=(0, 5))
self.button6.pack(side='top')
def forget_widgets(self):
for widget in self.master.winfo_children():
widget.pack_forget()
if __name__ == '__main__':
root = tk.Tk()
root.geometry('350x200')
App(master=root)
root.mainloop()
Példa ablakban
class App: Width = 800 *window dimension
Height = 600
player = 0 *to track either human or computer
Frog = 0 *food
def init (self):
self._running = True
self.surface None
self._image_surf = None
self._Frog_surf = None
self.game = Game()
self.player = Player(5) *instance of Player with length 5 (5 blocks)
self.Frog = Frog(8, 5) *instance of Frog with x and y position self.computer = Computer(5) *instance of Computer player
with length 5
https://blog.jetbrains.com/pycharm/page/2/
Adatátviteli hálózatok
- szélessávú internetelérési technológiák
- az ADSL,
- a kábeltelevíziós hálózaton történő adatátvitel,
- a mikrohullámú kapcsolat,
- valamint a mobil alapú technológiák.
A szélessávú DSL technológiák közül hazánkban a legelterjedtebb az ADSL szabvány.
Az ADSL a távközlési telefonos hálózatokon keresztül elérhető szélessávú DSL technológiák egyik legelterjedtebb szabványa. A betűösszetétel az Asymmetric Digital Subscriber Line, azaz az aszimmetrikus digitális előfizetői vonal kifejezés rövidítése. Az ADSL gyors elterjedése annak köszönhető, hogy ezzel a műszaki megoldással a már meglévő rézdrót-alapú távközlő hálózatok tehetők alkalmassá a szélessávú adatátvitelre. Vagyis az ADSL hozzáférés szintén telefonvonalon valósul meg, ugyanakkor a betárcsázós csatlakozással ellentétben állandó kapcsolatot létesít az internettel, a szolgáltatás pedig a legtöbb hazai internetszolgáltatónál átalány díjazással is igénybe vehető. A szélessávú ADSL szolgáltatást ma már nem csak abban az esetben tudjuk igénybe venni, ha rendelkezünk vezetékes telefonvonal-előfizetéssel, vagy ha az internet-hozzáféréssel együtt ez utóbbit is megvásároljuk, hiszen választhatunk olyan csomagot, amelyben nem szükséges külön fizetni a telefonelőfizetésért. Figyelni kell arra azonban, hogy a legtöbb szolgáltatónál az ADSL előfizetéseknél az internetszolgáltatás átalánydíján (vagy esetleges forgalmi díjain) felül egy telefonvonal előfizetési díját is vállalnunk kell. Annak ellenére, hogy általában az ADSL, illetve a vezetékes telefonszolgáltatás egy vonalon fut, a két funkciót egyszerre is használhatjuk. A betárcsázós internetkapcsolattal ellentétben tehát nem kell választanunk a telefonálás és a világhálón történő böngészés között. ADSL esetében az internetkapcsolat a webböngésző vagy a levelezőprogram elindításával épül fel. A számítógép és az internet közti kapcsolat azonban bármikor megszakítható. ADSL esetében számítógépünk minden internetre történő bejelentkezéskor új IP-címet kap, (kivételt képez ez alól a fix IP címmel megrendelt szolgáltatás), Minden internetkapcsolat esetén javasolt a tűzfal használata , amely nagymértékben javíthatja a biztonságos internetkapcsolatot. Más szélessávú technológiákhoz viszonyítva az ADSL előnye, hogy az adott előfizetéshez tartozó sávszélesség nagyobb stabilitással érhető el a felhasználó számára, ugyanis az előfizetők független egyedi pontokként kapcsolódnak a gerinchálózathoz. Így az internethasználat telítettebb időszakaiban sem csökken az elérhető sávszélesség. Ugyanakkor az ADSL hátránya, hogy a technológia a helyi telefonközpontok mindössze 5 kilométeres körzetében alkalmazható, az ezen kívül eső területeken a szolgáltatás kiépítése általában nem gazdaságos, vagy csak kisebb sávszélességen valósítható meg. A kábeltelevíziós internethozzáférés a visszirányúsított - azaz kétirányú adatkommunikációra alkalmassá tett - kábelhálózatokon keresztül érhető el.
A magyar kábeltelevíziós penetráció nemzetközi összehasonlításban viszonylag magasnak tekinthető: jelenleg a hazai háztartások 56 százalékában van bekötve kábeltelevíziós szolgáltatás. A kábelhálózaton történő szélessávú internet-hozzáférések kiépítése 1999-ben indult meg, azóta az ADSL után a második leggyakoribb szélessávú elérési fajtává nőtte ki magát.
A kábelhálózaton történő szélessávú internet-szolgáltatás a visszirányúsított, azaz kétirányú adatkommunikációra alkalmassá tett, kábeltelevíziós hálózatokon keresztül valósulhat meg. Így a meglévő kábeltelevíziós hálózatok viszonylag gyorsan és olcsón alkalmassá tehetőek az internetezésre: a szolgáltatás megindításához "mindössze" a hálózat kétirányúsítását és csillagpontosítását kell megoldani. A kábeltelevíziós hálózaton megvalósuló internet-hozzáférés állandó és azonnali kapcsolatot biztosít a világhálóval, elszámolása átalánydíjazással történik, azonban jelenleg már a legnagyobb kábeltelevíziós internetszolgáltatók meghatároztak egy az igényelt sávszélességhez igazodó maximális havi adatforgalmat, ennek elérése után pedig korlátozzák a letöltési sebességet. Kábeltelevíziós hálózaton keresztül megvalósuló internetkapcsolat a számítógép bekapcsolásakor automatikusan felépül, és mindaddig aktív marad, amíg a gép be van kapcsolva. A hálózati kapcsolatot csakis úgy szakíthatjuk meg, ha letiltjuk a hálózati csatoló hardvert, vagy kihúzzuk az internetkábelt a számítógépből. Kábeltelevíziós hálózatú internetkapcsolatnál az egyes számítógépekhez tartozó IP-címek általában ritkán cserélődnek. Így a viszonylag hosszú ideig fixnek tekinthető IP-cím könnyebbé teszi az adott számítógép beazonosítását. A kábeltelevíziós hálózaton futó internet-kapcsolat előnye, hogy ebben az esetben a helyi központtól való távolság kevésbé jelent elérési korlátot, illetve az ADSL-hez viszonyítva igen magas, maximálisan akár 120 Mbit/s-os adatátviteli sebesség is elérhető. A kábeltelevíziós kapcsolatban szintén előny, hogy a telefon előfizetés díját nem kell megfizetni. Hátránya ugyanakkor, hogy a felhasználók nem független egyedi pontokként kapcsolódnak a gerinchálózathoz, hanem az egyes alközpontokra csatlakozva, sorba kötve, azaz megosztottan használják a hálózatot. Így csúcsidőben csökkenhet az egy előfizető által elérhető sávszélesség. A mikrohullámú technológia a hagyományos vezetékes kapcsolat helyett az elektromágneses hullámokat használja az adatok továbbítására, legelterjedtebb formája a WiFi. A beltéri használat mellett Magyarországon a WiFi már szerepet játszik a közterületeken és közintézményekben a helyfüggetlen szélessávú kommunikáció megteremtésében (hot spot), és a távoli, fejletlen, üzletileg kevéssé vonzó területek szélessávú kiszolgálásában. A harmadik generációs (3G) mobilkommunikáció alapját jelentő nagykiterjedésű vezeték nélküli eléréssel párhuzamosan kifejlesztették annak kis kiterjedésű változatát is, amely a szabaddá tett rádiófrekvencia-tartományokban vezeték nélküli helyi hálózatok formájában működik. Az ilyen, ún. WLAN-alapú megoldásokat, leggyakrabban létező szélessávú hozzáférések kiterjesztésére vagy megosztására alkalmazzák, illetve olyan intézményekben, szolgáltató egységekben (pl. repterek, pályaudvarok, szállodák, bevásárlóközpontok), ahol egyébként nincs vezetékes szélessávú elérés. Szélessávú internetkapcsolat a hagyományos vezetékes elérés helyett/mellett elektromágneses hullámok (mikrohullámok) révén is megvalósítható. Az ilyen kapcsolat alapja egy olyan rádiófrekvenciás összeköttetésen alapuló vezeték nélküli helyi hálózat (WLAN - wireless local area network), amelynek legalább egy szegmense elektromágneses hullámokat használ adatok küldésére és fogadására. A WLAN technológiák Magyarországon és nemzetközileg is legelterjedtebb formája, a Wi-Fi (Wireless Fidelity - vezeték nélküli minőség), amelynek elsődleges haszonélvezői természetesen a hordozható számítógépekkel és kézi eszközökkel rendelkezők. Wi-Fi esetében az adatokat a helyi hálózatra csatlakozók egy adatszóró "forrópontból" (HotSpot ) kapják. Egyszeri bejelentkezés után az adott hálózat bármelyik "forróponton", vagyis kapcsolódási ponton keresztül használható. A Wi-Fi 100-200 méteres körzetben 11 Mbit/s (Az IEEE 802.11b esetén) adatátviteli sebességet a 802.11a/g esetén pedig 54 Mbit/s sebességet tesz lehetővé. A kábelmodemes csatlakozáshoz hasonlóan állandó és azonnali kapcsolatot biztosít a világhálóval. A Wi-Fi-hez hasonlóan forrópontokra alapozott szélessávú adatkommunikációs helyi hálózat a WiMAX is, amelynek maximális hatótávolsága a jelenlegi kísérletek alapján az 50 kilométert is elérheti és a maximális adatátviteli sebessége akár 70 Mbit/s is lehet, sőt a 3G-hez hasonló mobilkapcsolat biztosítására is alkalmas, igaz, csak behatárolt körzetekben. Egyes intézmények, szolgáltató egységek (pl. repterek, pályaudvarok, szállodák, bevásárlóközpontok stb.) a vezeték nélküli mikrohullámú szélessávú hozzáférés kiépítését egyre inkább a versenyelőny megszerzésére használják. Szolgáltatásaik ezen a téren történő bővítésével igyekeznek vonzóbbá válni ügyfeleik, felhasználóik számára. A magyarországi HotSpot lelőhelyek legteljesebb, cím alapján kereshető adatbázisát a http://www.hotspotter.hu/hu weboldalon találjuk. Wi-Fi kapcsolat létesítéséhez mindössze egy erre alkalmas kártyát kell a számítógépünkhöz csatlakoztatni, sőt sokszor már ezt sem, ugyanis a vezeték nélküli mikrohullámú kapcsolat létesítésére alkalmas eszközök legújabb modelljei, ezt már gyárilag tartalmazzák. Az európai nagyvárosok közül Amsterdam kapott elsőként teljes körű Wi-Fi lefedettséget. A mikrohullámú hálózatok egyértelmű előnye, hogy megfelelő eszközök (pl. laptop, mobiltelefon stb.) segítségével megszünteti az internetezés helyhez kötöttségét. Egyszerű és könnyen használható lehetőséget biztosít az internetelérés helyi kiépítésére például intézmények, szolgáltató egységek (repterek, szállodák, kávézók stb.) esetében. Szintén előnye ezen kapcsolatoknak, hogy nem szükséges megfizetni a telefon előfizetési díjakat, mint például az ADSL kapcsolat esetében. A mikrohullámú internethálózatok hátránya ugyanakkor, hogy hatótávolságuk igen korlátozott, csupán néhány száz méter. Ebből kifolyólag leginkább egy már létező szélessávú hozzáférés kiterjesztésére használják: a WLAN egyik tipikus felhasználása például egy DSL vagy kábelmodemes kapcsolat megosztása a lakóházban vagy az irodában levő több számítógép között. A Wi-Fi 100-200 méteres körzetben 11 Mbit/s (Az IEEE 802.11b esetén) adatátviteli sebességet a 802.11a/g esetén pedig 54 Mbit/s sebességet tesz lehetővé. A kábelmodemes csatlakozáshoz hasonlóan állandó és azonnali kapcsolatot biztosít a világhálóval. A Wi-Fi-hez hasonlóan forrópontokra alapozott szélessávú adatkommunikációs helyi hálózat a WiMAX is, amelynek maximális hatótávolsága a jelenlegi kísérletek alapján az 50 kilométert is elérheti és a maximális adatátviteli sebessége akár 70 Mbit/s is lehet, sőt a 3G-hez hasonló mobilkapcsolat biztosítására is alkalmas, igaz, csak behatárolt körzetekben. A mobil alapú technológiák szintén lehetővé teszik a digitális adatátvitelt, így az internet használatát is. Az utóbbi időben ezen a területen az UMTS rendszer (a HSDPA) jelentette a legnagyobb áttörést, amelynek köszönhetően, álló végpont esetében már akár 2 Mbit/s sávszélességet is el lehet érni, immár az ország több mint 40%-nyi területén. A mobiltechnológia rohamos tempóban fejlődik. A második generációs (2G), csupán hangátvitelre lehetőséget adó rendszerek adatátvitelre történő kiterjesztés előbb megnyitotta az utat a közepes sebességű 2.5G szolgáltatások bevezetése előtt, majd kifejlesztették a nagysebességű 3G majd a 4G rendszert, amely ezen a területen az utóbbi idők legnagyobb áttörését hozta. A mobilkommunikáció alapja a digitális beszédátvitelre épülő második generációs (2G) technológia, amelyre a hagyományos GSM hálózatok épülnek. A 2G esetében a közvetítendő elsődleges tartalom az emberi hang. A mobilozás robbanásszerű terjedésével, valamint ezzel párhuzamosan az internetezés elterjedésével azonban új igények merültek fel a felhasználók részéről, amelyek elsősorban mobiltelefon és az internetet lehetőségeinek együttes kihasználására irányultak. Ennek realizálásához a mobil technológia továbbfejlesztésére volt szükség. Ennek első lépcsője a GPRS (General Packet Radio Service, azaz általános csomagkapcsolt rádiószolgáltatás), amelynek működési elve, hogy a rendszer az adatot több részre (csomagokra) bontja, ezeket továbbítja a GSM-hálózaton keresztül, majd a célállomáson összerakja. A GPRS tehát nagyobb mennyiségű adat megnövelt sebességű átvitelét teszi lehetővé, vagyis lényegében a mobilos internetezést. A GPRS mérföldkőnek számít a GSM hálózatok fejlődésében, amely megnyitotta az utat előbb a közepes sebességű (maximum 171,2 kbit/s) 2.5G szolgáltatások előtt (már jó minőségben lehet színes álló- és 10-12 másodperces mozgóképeket cserélni, online játékokat játszani stb.), majd a nagysebességű harmadik generációs mobilkommunikációs (3G) rendszerek számára. Ez utóbbiak alapja az UMTS ( Universal Mobile Telephone Service , azaz egyetemes mobiltelefon-szolgáltatás), amely nagy kiterjedésű, kétirányú rádióösszeköttetést jelent, és ebből fakadóan lényegesen nagyobb adattömegek átvitelét teszi lehetővé. Az UMTS-ről bővebben az umts.lap.hu weboldalon tájékozódhatunk. Az UMTS jelenleg a mozgásban lévő végpontok esetén, gyalogos közlekedésnél 384 kbit/s, gépjárművel történő haladás közben legalább 144 kbit/s, álló végpont esetében pedig akár 2 Mbit/s adatátviteli sebességet biztosít.
Az UMTS a jelenleg fejlesztés alatt álló HSPDA (High Speed Packet Data Access - nagy sebességű adatcsomag elérés) kiegészítés révén, álló helyzetű végpont számára akár 10 Mbit/s adatátviteli sebességet is biztosíthat. A már bevezetett, több szolgáltatónál is előfizethető HSDPA (High Speed Downlink Packet Access) 14,4 Mbit/s, a HSUPA (High Speed Uplink Packet Access) 5,75 Mbit/s adatátviteli sebességű. A 3G rendszerek tökéletesítésével párhuzamosan azonban már zajlanak a 4G mobilrendszerek kutatásai, főként a Távol-Keleten. Ezek révén 100 Mbit/s sebességig terjedő, mozgásban levő adatátvitelt is támogató rendszereket igyekeznek megvalósítani, míg állóhelyzetben 1 Gbit/s sebességű összeköttetésekkel kísérleteznek. E rendszerek bevezetése azonban Európában 10 éves távlaton belül, az UMTS rendszerek beruházásainak megtérüléséig nem várható. Az UMTS technológia segítségével a mobil internetezésre alkalmas készülékek egy időben több típusú adatforgalmat is bonyolíthatnak párhuzamosan. Így például zeneszámok letöltése közben nyugodtan beszélgethetünk vagy akár videófonálhatunk anélkül, hogy a letöltés megszakadna. Online nézhetünk filmet vagy televízióadást, sőt magunk is sugározhatunk műsort vagy élő közvetítést.
A 3G-s rendszerek a kommunikáció és a szórakozás mellett olyan hasznos szolgáltatásokra is alkalmassá teszik mobilunkat, mint az online útvonalajánló vagy az idegenvezető szolgáltatás, amely automatikusan meghatározza, hogy éppen hol vagyunk, és rendelkezésünkre bocsátja a közelben található nevezetességek információit, a hozzá kapcsolódó előre elkészített képeket, videókat, leírásokat. Európában 2002-ben helyezték üzembe az első kereskedelmi UMTS szolgáltatást Angliában, jelenleg pedig már 25 országban vezették be a technológiát, köztük Magyarországon is. Hazánkban mindegyik nagy mobilszolgáltató rendelkezik 3G szolgáltatással, átlagban az ország 40%-án már van HSDPA lefedettség. A szélessávú mobil technológiák előnye, hogy a felhasználók mozgás közben is igénybe vehetik az internet szolgáltatásait: böngészhetnek a weben, e-mailezhetnek, beléphetnek a céges intranetre stb. Másrészt a mobiltelefonálásnál megszokott idő alapú számlázással szemben az adatátvitel díjazása gazdaságosabb, hiszen csak a ténylegesen forgalmazott adatmennyiség után fizetünk, amely azonban még mindig jelentősen drágább egy fix telepítésű internetszolgáltatással szemben. A mobil internetezés hátránya ugyanakkor, hogy valóban nagy sávszélességű internetkapcsolat csak álló végpontok esetében érhető el, mozgás közben az adatátviteli sebesség lényegesen csökkenhet. Az áramhálózaton keresztüli internethozzáférés (PLC - Power Line Communication) ma már nem egy szürreális elképzelés, Európában több országban szakosodtak erre cégek, de már hazánkban is van olyan vállalkozás, amely elektromos hálózaton (elsősorban épületen belül) nyújt internethozzáférést. BiG - Broadband in Gas, azaz a gázvezetéken történő szélessávú adatátvitel is előfordul. Szintén elterjedt a bérelt vonali internethozzáférés, amely az egyik legkorábbi és legmegbízhatóbb szélessávú technológiák egyike, azonban kiépítési költségei miatt elsősorban cégek és intézmények szélessávú hozzáféréseinek egyike. Azonban ma már az sem ritka, elsősorban új építésű lakóingatlanok esetén, hogy az épületbe a szélessávú kapcsolat "bérelt vonalon" érkezik és épületen belül a kábeltévé-, telefon-, vagy elektromos hálózaton keresztül kerül szétosztásra a lakások között. Szintén terjedőben van a műholdas szélessávú internetkapcsolat, amely azonban a legtöbb esetben sajnos csak a letöltési sebességet tudja szélessávú kapcsolattá alakítani és így a legtöbb esetben a feltöltéshez (pl. e-mail elküldése) szükség van még egy egyéb internetkapcsolatra (pl. dial-up). Létezik azonban kétirányú műholdas internetkapcsolat is, azonban ezen kapcsolatok díjai manapság még a lakossági felhasználók számára nem megfizethetőek.
2020. május 27., szerda
SQL lekérdezés variációi
Az SQL lekérdezések sémája
Az SQL lekérdezések a következő részekből állnak:
SELECT oszlopkifejezés,...
FROM tábla,...
WHERE sorfeltétel
GROUP BY csoportosítás
HAVING csoportfeltétel
ORDER BY rendezési szempont
A hat rész funkciója röviden (részletek a következő fejezetben):
SELECT : a válaszban megjelenítendő oszlopok és kifejezések listája
FROM : melyik táblából vagy táblákból várjuk az eredményeket
WHERE : milyen feltételeknek megfelelő sorokat jelenítsünk meg a válaszban
GROUP BY : az eredmény rekordjait csoportosíthatjuk valamilyen oszlopkifejezés lehetséges értékei szerint
HAVING : a létrehozott csoportokat is megszűrhetjük
ORDER BY : a válasz rendezése a táblák oszlopai alapján
Nem része a szabványnak, de már sok SQL megvalósításban szerepel a következő kiegészítés:
SELECT ...
...
LIMIT megjelenítendő sorok száma
SELECT
A SELECT után soroljuk fel a megjelenítendő oszlopokat és oszlopkifejezéseket. A "SELECT * " minden oszlopot megmutat.
SELECT *
FROM sorozatok
SELECT cim,nemzet
FROM sorozatok
Az oszlopokra mezőnevekkel hivatkozhatunk. Az oszlopkifejezések aritmetikai műveletekkel és függvényekkel képezhetők. Az eredménytábla oszlopai átnevezhetők az AS paranccsal. MySql-ben ékezet nélküli mezőneveket és táblaneveket használunk.
SELECT név, fizetés + jutalom
FROM bérek
SELECT AVG( fizetés)
FROM bérek
SELECT AVG( fizetés ) AS átlagfizetés
FROM bérek
Összesítő függvények
Az összesítő függvények a tábla valamelyik oszlopa alapján egyetlen értéket számolnak ki.
összeg : SUM
átlag : AVG
darabszám : COUNT
minimum : MIN
maximum : MAX
A COUNT nem számolja a NULL értékeket. A COUNT(DISTINCT mezőnév) azt adja meg, hány különböző érték szerepel az oszlopban.
SELECT SUM( bevétel), SUM( kiadás )
FROM könyvelés
SELECT COUNT(DISTINCT rendező )
FROM filmek
SELECT AVG( jegy ) AS osztályátlag
FROM dolgozatok
Kifejezések a SELECT záradékban
Aritmetika
SELECT 2+2
-> 4
SELECT 2*3
-> 6
SELECT POW(2, 5)
-> 32
SELECT 8 / 5
-> 0.60
SELECT 8 DIV 5
-> 1
SELECT MOD(8, 5)
-> 3
Dátumkezelés
SELECT NOW()
-> 2010-01-08 08:26:24
SELECT YEAR( NOW() )
-> 2010
SELECT DATE_ADD( NOW(), INTERVAL 100 DAY )
-> 2010-04-18 08:28:24
Logika
SELECT IF( 4 > 3, 'rendben', 'baj van')
FROM
A FROM után soroljuk fel, hogy melyik táblákat használjuk a lekérdezésben. Ha egynél több táblát használunk, össze kell kapcsolni őket. Ha egy mezőnév több táblában is előfordul, akkor kötelező minősített névvel hivatkozni rá. A minősített név alakja. táblanév.mezőnév. Ha egyértelmű, hogy melyik táblához tartozik egy mező, akkor nem kell kiírni a tábla nevét.
SELECT *
FROM sorozatok
SELECT cim,nev
FROM sorozatok, szereplok
WHERE sorozatok.id = szereplok.sorozat
A használt táblák (rövidítés céljából) az AS paranccsal átnevezhetők.
SELECT cim,nev
FROM sorozatok AS s, szereplok AS sz
WHERE s.id = sz.sorozat
WHERE
A WHERE után adjuk meg annak feltételét, hogy melyik sorok kerüljenek az eredménybe. Egy feltételben mezők és konstanskifejezések értékét hasonlíthatjuk össze. Összetett feltételek logikai műveletekkel képezhetők.
"és" : AND
"vagy" : OR
"nem" : NOT
SELECT cim
FROM sorozatok
WHERE kezdet < 2000
SELECT cim
FROM sorozatok
WHERE nemzet = 'magyar'
SELECT nev
FROM szereplok
WHERE (sorozat = 1) AND (fo = 'i')
Karakterláncok esetében használhatunk dzsóker karaktereket. Ekkor az egyenlőség helyett a LIKE parancsot használjuk.
% 0 vagy több tetszőleges karakter
_ egy tetszőleges karakter
(MS-W alatt '*' és '?')
SELECT cim,web
FROM sorozatok
WHERE web LIKE '%.hu'
Rendezés
Az ORDER BY a választábla sorait rendezi. Azokat az oszlopokat (vagy sorszámukat) kell felsorolni, ami szerint rendezni szeretnénk a választ. Ha több oszlopot is megadunk, a második (,harmadik,...) csak akkor számít, ha az első (korábbi) szempont szerint "egyenlő" a két sor.
A rendezés iránya alapból növekvő, ha csökkenő sorrendet szeretnénk, a DESC módosítót kell alkalmazni.
Példák
SELECT név, fizetés
FROM bérek
ORDER BY fizetés DESC
SELECT osztály, név
FROM tanulók
ORDER BY 1, 2
SELECT termék, ár
FROM katalógus
ORDER BY ár*(1+áfa)
Rendezhetünk olyan oszlop (vagy oszlopkifejezés) szerint is, ami nem szerepel a SELECT után. Viszont ha az oszlop sorszámát adjuk meg a rendezésnél, az a SELECT után felsorolt kifejezések közötti sorszámot jelenti.
Választábla részének kiválasztása
Előfordulhat, hogy a választábla egy részét akarjuk megjeleníteni.
Első néhány sor kiírása
SELECT ...
FROM ...
WHERE ...
LIMIT 10
Rész kiválasztása
SELECT ...
FROM ...
WHERE ...
LIMIT 100,20
Első néhány sor kiírása máshogy
SELECT TOP 10 előadó
FROM slágerlista
WHERE ...
GROUP BY
Példák
SELECT név, SUM(befizetés)
FROM könyvelés
GROUP BY név
SELECT név, SUM(befizetés) - SUM(kifizetés) AS "egyenleg"
FROM könyvelés
GROUP BY név
SELECT név, SUM(befizetés) - SUM(kifizetés) AS "egyenleg"
FROM könyvelés
GROUP BY név, azonosító
HAVING
Példák
SELECT diák, AVG(jegy) AS "tanulmányi átlag"
FROM napló
GROUP BY diák
HAVING AVG(jegy) >= 4.0
ORDER BY 2 DESC
Táblák összekapcsolása
Jól megtervezett (normalizált) adatbázisokban az összetartozó információk sokszor több táblába vannak szétosztva. Ezzel elkerülhető a redundancia, továbbá az adatok módosításnál vagy törlésénél így egyszerűbb elkerülni bizonyos hibákat (inkozisztens adatok, információvesztés).
Amikor lekérdezünk az adatbázisból, össze kell szednünk az összetartozó adat-töredékeket. Erre szolgál a táblák összekapcsolása. Alapvetően kétféle összekapcsolást használunk:
belső összekapcsolás (INNER JOIN)
külső összekapcsolás (OUTER JOIN)
Az összekapcsolás lényege, hogy több táblából egyet csinál oly módon, hogy az eredmény tábla sorai az eredeti táblák megfelelő sorainak egymás mellé írásával keletkeznek. Hogy mit jelent a "megfelelő", az az összekapcsolás feltételében adható meg. Ez leggyakrabban abból áll, hogy az egyik tábla rekordjaiban található valamelyik mező meg kell egyezzen a másik tábla rekordjának egy mezőjével. Itt tipikusan a feltételben szereplő egyik mező kulcs szokott lenni, de ez nem kötelező.
Példa
Tekintsük a következő táblákat:
Diák(név,of)
név of
Aladár 1
Bori 2
Csilla 2
Tanár(sor,név)
sor név
1 Kiss Lenke
2 Gálos László
3 Konta Gyula
Ha a Diák tábla "of" mezőjét rendeljük a Tanát tábla "sor" mezőjéhez, akkor a következő összekapcsolt táblát kapjuk.
Diák.név of sor Tanár.név
Aladár 1 1 Kiss Lenke
Bori 2 2 Gálos László
Csilla 2 2 Gálos László
Belső összekapcsolása
Összekapcsolás a "WHERE" záradékban
SELECT *
FROM T1, T2
WHERE T1.kulcs = T2.kulcs
Összekapcsolás a "FROM" záradékban
SELECT *
FROM T1 INNER JOIN T2 ON T1.kulcs = T2.kulcs
Több tábla összekapcsolása
SELECT *
FROM T1, T2, T3
WHERE T1.ka = T2.ka AND T2.kb = T3.kb
SELECT *
FROM (T1 INNER JOIN T2 ON T1.ka=T2.ka) INNER JOIN T3 ON T2.kb=T3.kb
Külső összekapcsolás
Asszimetrikus, lehet jobb (RIGHT) vagy bal (LEFT).
SELECT *
FROM T1 LEFT OUTER JOIN T2 ON T1.kulcs=T2.kulcs
Ha a T1 tábla adott rekordjához nincs "pár" T2-ben, akkor is bekerül az eredmény táblába, és T2 mezői "NULL" értéket kapnak.
Allekérdezések
Példák
SELECT név
FROM emberek
WHERE város = (SELECT város FROM emberek WHERE név="Jeffrey D. Ullman")
SELECT név
FROM dolgozók
WHERE fizetés < ALL (SELECT fizetés FROM dolgozók WHERE szakma="tanár")
Halmazműveletek
Unió
Az unió műveletével különböző táblákból kinyert adatokat egyesíthetünk egy közös választáblában.
SELECT név
FROM 11C
WHERE matematika_jegy >= 4
UNION
SELECT név
FROM 11A
WHERE (magyar_jegy >= 4) AND (történelem_jegy >= 4)
Módosítás
Beszúrás
Új rekordok beszúrása táblába. Megadhatjuk az összes mező értékét, és az is lehet, hogy csak néhány mezőt töltünk ki.
INSERT INTO tábla
VALUES (érték1, érték2, ...)
INSERT INTO tábla (mező1, mező2, ...)
VALUES (érték1, érték2, ...)
Módosítás
Meglévő adatrekordok módosítása.
UPDATE tábla
SET mező1 = kifejezés1, mező2 = kifejezés2, ...
WHERE feltétel
Törlés
Valamilyen feltételnek megfelelő sorokat törölhetünk egy táblából.
DELETE FROM tábla
WHERE feltétel
Hogyan lehet táblát létrehozni Base-ben lekérdezés alapján?
Szintén az Eszközök / Sql... menüből elérhető parancsablakban:
SELECT mező1, mező2, ... INTO újTábla FROM ... WHERE ...
A 4.2.3-as Libre Office Base alatt az volt a tapasztalatom, hogy a parancs létrehozza a táblát, de az nem jelenik meg automatikusan a felsorolt táblák között. Mentés, bezárás és ismételt megnyitás után viszont már látszott.
Lehet-e táblákat összekapcsolni egy adatmódosító lekérdezésben?
A Base által használt HSQL motor idevonatkozó oldala alapján BASE-ben nem:
<update utasítás> ::= UPDATE <cél tábla> SET <set kifejezések listája> [ WHERE <sorfeltétel> ]
MYSQL-ben lehetséges, és az összekapcsolása kerülhet a FROM záradékba (JOIN), illetve a WHERE feltételbe is. Például:
UPDATE T1, T2
SET T1.mező1 = 2* T2.mező2
WHERE T1.id = T2.id AND további feltételek
Az SQL lekérdezések a következő részekből állnak:
SELECT oszlopkifejezés,...
FROM tábla,...
WHERE sorfeltétel
GROUP BY csoportosítás
HAVING csoportfeltétel
ORDER BY rendezési szempont
A hat rész funkciója röviden (részletek a következő fejezetben):
SELECT : a válaszban megjelenítendő oszlopok és kifejezések listája
FROM : melyik táblából vagy táblákból várjuk az eredményeket
WHERE : milyen feltételeknek megfelelő sorokat jelenítsünk meg a válaszban
GROUP BY : az eredmény rekordjait csoportosíthatjuk valamilyen oszlopkifejezés lehetséges értékei szerint
HAVING : a létrehozott csoportokat is megszűrhetjük
ORDER BY : a válasz rendezése a táblák oszlopai alapján
Nem része a szabványnak, de már sok SQL megvalósításban szerepel a következő kiegészítés:
SELECT ...
...
LIMIT megjelenítendő sorok száma
SELECT
A SELECT után soroljuk fel a megjelenítendő oszlopokat és oszlopkifejezéseket. A "SELECT * " minden oszlopot megmutat.
SELECT *
FROM sorozatok
SELECT cim,nemzet
FROM sorozatok
Az oszlopokra mezőnevekkel hivatkozhatunk. Az oszlopkifejezések aritmetikai műveletekkel és függvényekkel képezhetők. Az eredménytábla oszlopai átnevezhetők az AS paranccsal. MySql-ben ékezet nélküli mezőneveket és táblaneveket használunk.
SELECT név, fizetés + jutalom
FROM bérek
SELECT AVG( fizetés)
FROM bérek
SELECT AVG( fizetés ) AS átlagfizetés
FROM bérek
Összesítő függvények
Az összesítő függvények a tábla valamelyik oszlopa alapján egyetlen értéket számolnak ki.
összeg : SUM
átlag : AVG
darabszám : COUNT
minimum : MIN
maximum : MAX
A COUNT nem számolja a NULL értékeket. A COUNT(DISTINCT mezőnév) azt adja meg, hány különböző érték szerepel az oszlopban.
SELECT SUM( bevétel), SUM( kiadás )
FROM könyvelés
SELECT COUNT(DISTINCT rendező )
FROM filmek
SELECT AVG( jegy ) AS osztályátlag
FROM dolgozatok
Kifejezések a SELECT záradékban
Aritmetika
SELECT 2+2
-> 4
SELECT 2*3
-> 6
SELECT POW(2, 5)
-> 32
SELECT 8 / 5
-> 0.60
SELECT 8 DIV 5
-> 1
SELECT MOD(8, 5)
-> 3
Dátumkezelés
SELECT NOW()
-> 2010-01-08 08:26:24
SELECT YEAR( NOW() )
-> 2010
SELECT DATE_ADD( NOW(), INTERVAL 100 DAY )
-> 2010-04-18 08:28:24
Logika
SELECT IF( 4 > 3, 'rendben', 'baj van')
FROM
A FROM után soroljuk fel, hogy melyik táblákat használjuk a lekérdezésben. Ha egynél több táblát használunk, össze kell kapcsolni őket. Ha egy mezőnév több táblában is előfordul, akkor kötelező minősített névvel hivatkozni rá. A minősített név alakja. táblanév.mezőnév. Ha egyértelmű, hogy melyik táblához tartozik egy mező, akkor nem kell kiírni a tábla nevét.
SELECT *
FROM sorozatok
SELECT cim,nev
FROM sorozatok, szereplok
WHERE sorozatok.id = szereplok.sorozat
A használt táblák (rövidítés céljából) az AS paranccsal átnevezhetők.
SELECT cim,nev
FROM sorozatok AS s, szereplok AS sz
WHERE s.id = sz.sorozat
WHERE
A WHERE után adjuk meg annak feltételét, hogy melyik sorok kerüljenek az eredménybe. Egy feltételben mezők és konstanskifejezések értékét hasonlíthatjuk össze. Összetett feltételek logikai műveletekkel képezhetők.
"és" : AND
"vagy" : OR
"nem" : NOT
SELECT cim
FROM sorozatok
WHERE kezdet < 2000
SELECT cim
FROM sorozatok
WHERE nemzet = 'magyar'
SELECT nev
FROM szereplok
WHERE (sorozat = 1) AND (fo = 'i')
Karakterláncok esetében használhatunk dzsóker karaktereket. Ekkor az egyenlőség helyett a LIKE parancsot használjuk.
% 0 vagy több tetszőleges karakter
_ egy tetszőleges karakter
(MS-W alatt '*' és '?')
SELECT cim,web
FROM sorozatok
WHERE web LIKE '%.hu'
Rendezés
Az ORDER BY a választábla sorait rendezi. Azokat az oszlopokat (vagy sorszámukat) kell felsorolni, ami szerint rendezni szeretnénk a választ. Ha több oszlopot is megadunk, a második (,harmadik,...) csak akkor számít, ha az első (korábbi) szempont szerint "egyenlő" a két sor.
A rendezés iránya alapból növekvő, ha csökkenő sorrendet szeretnénk, a DESC módosítót kell alkalmazni.
Példák
SELECT név, fizetés
FROM bérek
ORDER BY fizetés DESC
SELECT osztály, név
FROM tanulók
ORDER BY 1, 2
SELECT termék, ár
FROM katalógus
ORDER BY ár*(1+áfa)
Rendezhetünk olyan oszlop (vagy oszlopkifejezés) szerint is, ami nem szerepel a SELECT után. Viszont ha az oszlop sorszámát adjuk meg a rendezésnél, az a SELECT után felsorolt kifejezések közötti sorszámot jelenti.
Választábla részének kiválasztása
Előfordulhat, hogy a választábla egy részét akarjuk megjeleníteni.
Első néhány sor kiírása
SELECT ...
FROM ...
WHERE ...
LIMIT 10
Rész kiválasztása
SELECT ...
FROM ...
WHERE ...
LIMIT 100,20
Első néhány sor kiírása máshogy
SELECT TOP 10 előadó
FROM slágerlista
WHERE ...
GROUP BY
Példák
SELECT név, SUM(befizetés)
FROM könyvelés
GROUP BY név
SELECT név, SUM(befizetés) - SUM(kifizetés) AS "egyenleg"
FROM könyvelés
GROUP BY név
SELECT név, SUM(befizetés) - SUM(kifizetés) AS "egyenleg"
FROM könyvelés
GROUP BY név, azonosító
HAVING
Példák
SELECT diák, AVG(jegy) AS "tanulmányi átlag"
FROM napló
GROUP BY diák
HAVING AVG(jegy) >= 4.0
ORDER BY 2 DESC
Táblák összekapcsolása
Jól megtervezett (normalizált) adatbázisokban az összetartozó információk sokszor több táblába vannak szétosztva. Ezzel elkerülhető a redundancia, továbbá az adatok módosításnál vagy törlésénél így egyszerűbb elkerülni bizonyos hibákat (inkozisztens adatok, információvesztés).
Amikor lekérdezünk az adatbázisból, össze kell szednünk az összetartozó adat-töredékeket. Erre szolgál a táblák összekapcsolása. Alapvetően kétféle összekapcsolást használunk:
belső összekapcsolás (INNER JOIN)
külső összekapcsolás (OUTER JOIN)
Az összekapcsolás lényege, hogy több táblából egyet csinál oly módon, hogy az eredmény tábla sorai az eredeti táblák megfelelő sorainak egymás mellé írásával keletkeznek. Hogy mit jelent a "megfelelő", az az összekapcsolás feltételében adható meg. Ez leggyakrabban abból áll, hogy az egyik tábla rekordjaiban található valamelyik mező meg kell egyezzen a másik tábla rekordjának egy mezőjével. Itt tipikusan a feltételben szereplő egyik mező kulcs szokott lenni, de ez nem kötelező.
Példa
Tekintsük a következő táblákat:
Diák(név,of)
név of
Aladár 1
Bori 2
Csilla 2
Tanár(sor,név)
sor név
1 Kiss Lenke
2 Gálos László
3 Konta Gyula
Ha a Diák tábla "of" mezőjét rendeljük a Tanát tábla "sor" mezőjéhez, akkor a következő összekapcsolt táblát kapjuk.
Diák.név of sor Tanár.név
Aladár 1 1 Kiss Lenke
Bori 2 2 Gálos László
Csilla 2 2 Gálos László
Belső összekapcsolása
Összekapcsolás a "WHERE" záradékban
SELECT *
FROM T1, T2
WHERE T1.kulcs = T2.kulcs
Összekapcsolás a "FROM" záradékban
SELECT *
FROM T1 INNER JOIN T2 ON T1.kulcs = T2.kulcs
Több tábla összekapcsolása
SELECT *
FROM T1, T2, T3
WHERE T1.ka = T2.ka AND T2.kb = T3.kb
SELECT *
FROM (T1 INNER JOIN T2 ON T1.ka=T2.ka) INNER JOIN T3 ON T2.kb=T3.kb
Külső összekapcsolás
Asszimetrikus, lehet jobb (RIGHT) vagy bal (LEFT).
SELECT *
FROM T1 LEFT OUTER JOIN T2 ON T1.kulcs=T2.kulcs
Ha a T1 tábla adott rekordjához nincs "pár" T2-ben, akkor is bekerül az eredmény táblába, és T2 mezői "NULL" értéket kapnak.
Allekérdezések
Példák
SELECT név
FROM emberek
WHERE város = (SELECT város FROM emberek WHERE név="Jeffrey D. Ullman")
SELECT név
FROM dolgozók
WHERE fizetés < ALL (SELECT fizetés FROM dolgozók WHERE szakma="tanár")
Halmazműveletek
Unió
Az unió műveletével különböző táblákból kinyert adatokat egyesíthetünk egy közös választáblában.
SELECT név
FROM 11C
WHERE matematika_jegy >= 4
UNION
SELECT név
FROM 11A
WHERE (magyar_jegy >= 4) AND (történelem_jegy >= 4)
Módosítás
Beszúrás
Új rekordok beszúrása táblába. Megadhatjuk az összes mező értékét, és az is lehet, hogy csak néhány mezőt töltünk ki.
INSERT INTO tábla
VALUES (érték1, érték2, ...)
INSERT INTO tábla (mező1, mező2, ...)
VALUES (érték1, érték2, ...)
Módosítás
Meglévő adatrekordok módosítása.
UPDATE tábla
SET mező1 = kifejezés1, mező2 = kifejezés2, ...
WHERE feltétel
Törlés
Valamilyen feltételnek megfelelő sorokat törölhetünk egy táblából.
DELETE FROM tábla
WHERE feltétel
Hogyan lehet táblát létrehozni Base-ben lekérdezés alapján?
Szintén az Eszközök / Sql... menüből elérhető parancsablakban:
SELECT mező1, mező2, ... INTO újTábla FROM ... WHERE ...
A 4.2.3-as Libre Office Base alatt az volt a tapasztalatom, hogy a parancs létrehozza a táblát, de az nem jelenik meg automatikusan a felsorolt táblák között. Mentés, bezárás és ismételt megnyitás után viszont már látszott.
Lehet-e táblákat összekapcsolni egy adatmódosító lekérdezésben?
A Base által használt HSQL motor idevonatkozó oldala alapján BASE-ben nem:
<update utasítás> ::= UPDATE <cél tábla> SET <set kifejezések listája> [ WHERE <sorfeltétel> ]
MYSQL-ben lehetséges, és az összekapcsolása kerülhet a FROM záradékba (JOIN), illetve a WHERE feltételbe is. Például:
UPDATE T1, T2
SET T1.mező1 = 2* T2.mező2
WHERE T1.id = T2.id AND további feltételek
Mire jó a PHP
A PHP (PHP Hypertext Prepocessor) nyelv
Konfiguráció
Ahhoz, hogy oldalaink PHP részei lefussanak, engedélyeznünk kell a szerveren a PHP kód futtatását. Az apache alatt valahogy így néz ki a beállítás:/usr/local/apache/conf/httpd.conf:
# Make sure there's only **1** line for each of these 2 directives:
# Use for PHP 4.x:
#LoadModule php4_module modules/libphp4.so
#AddHandler php-script .php
# Use for PHP 5.x:
LoadModule php5_module modules/libphp5.so
AddHandler php5-script .php
# Add index.php to your DirectoryIndex line:
DirectoryIndex index.html index.php
AddType text/html .php
# PHP Syntax Coloring
# (optional but useful for reading PHP source for debugging):
AddType application/x-httpd-php-source phps
PHP beágyazása HTML-be
A fájl kiterjesztése".php"
, hogy a webszerver észrevegye, futtatni kell a PHP értelmezőt. A HTML kódban tetszőleges számú PHP blokk lehet. A blokkokat <?php
és ?>
közé kell zárni.A PHP blokk parancsait a PHP értelmező végrehajtja, és a parancsok által "kiírt" szövegeket behelyettesíti a HTML kódba, a PHP blokk helyére.
Ebből ...
<h1>Ez még html...</h1>
<?php
echo "Ez már PHP...";
?>
... ez lesz
<h1>Ez még html...</h1>
Ez már PHP...
Változók
A PHP változókat dollár-jellel vezetjük be. Nem kell előzetes deklaráció, nem kell típust megadni, az a használat módjából derül ki.A változók tárolhatnak számokat, szövegeket és tömböket.
Számok
<?php
$a = 1;
$b = 2;
$c = $a + $b;
echo $c; //egész
$d = 10;
$e = 3;
$f = $d/$e;
printf("%.3f",$f); //lebegőpontos, formázva
?>
Szövegek
<?php
$a = "alma";
$b = "fa";
$c = $a.$b;
echo $c; //almafa
?>
Tömbök
<?php
$a[1] = 1;
$a[2] = 2;
$a[3] = 42;
print_r($a); //tömb kiírása
$b['Aladár'] = 10;
$b['Béla'] = 15;
$b['Csilla'] = 24;
print_r($b); //asszociatív tömb
$c = array( 'Aladár'=>10,
'Béla'=>15,
'Csilla'=>24);
//így is lehet
?>
Ciklusok
Számlálós ciklus
<?php
for($i=0; $i<=20; $i++){
echo $i;
} // 0, 1, 2, ..., 20
?>
Elöltesztelős ciklus
<?php
$i = 1;
while($i<1000){
echo $i;
$i *= 2;
} // 1, 2, 4, 8, ..., 512
?>
Tömb-bejáró ciklus
<?php
$primek = array(2,3,5,7,11,13,17,19);
foreach($primek as $p){
echo $p;
} // 2, 3, 5, ..., 19
?>
Elágazások
<?php
$a = 10;
$b = 20;
if($a > $b){
echo "Az 'a' a nagyobb.";
} else {
echo "Az 'a' nem a nagyobb.";
}
?>
GET paraméterek
A HTTP protokoll kétféle metódust definiál arra, hogyan tudunk paramétereket átadni egy szerveroldali szkriptnek. A GET metódus esetén a paraméterek az URL-be kódolva kerülnek átadásra.http://szerver.com/mappa/server.php?a=3&b=4
<?php
$a = $_GET["a"];
$b = $_GET["b"];
$c = $a*$b;
echo "A szorzat: ".$c;
?>
MYSQL hívások PHP alatt
A
PHP program képes MYSQL adatbázis szerverhez kapcsolódni. A kapcsolódás
után SQL lekérdezések futtathatók, a kapott válaszok a programban
felhasználhatók, az adatok alapján dinamikusan állíthatók össze HTML
tartalmak.
Az alábbi kód séma egy MYSQL tábla kiírását mutatja be:
<?php
mysql_connect("szerver","felhasználó","jelszó");
mysql_select_db("adatbázis");
$sql = "SELECT * FROM tábla";
$válasz = mysql_query($sql);
while($sor = mysql_fetch_assoc($válasz)){
print_r($sor);
}
mysql_close();
?>
Mint
látható, a fenti kódrészlet érzékeny információkat is tartalmaz.
Célszerű a szerveren jól beállítani a hozzáférési jogosultságokat, ha el
szeretnénk kerülni, hogy adatbázis jelszavunk rossz kezekbe kerüljön.
További óvatosság, hogy az azonosítót és a jelszót tárolhatjuk külön
állományban, ahonnan a php kód beolvassa. Így elkerülhető, hogy a php
modul esetleges hibája esetén letöltődő php forráskódunkban szerepeljen
kritikus információ.
"Twitter"
Összes hozzászólás kiírása
<p>
<?php
mysql_connect("szerver","felhasználó","jelszo");
mysql_select_db("adatbázis");
mysql_query("SET NAMES 'utf8'");
$sql = "SELECT * FROM posts";
$v = mysql_query($sql);
while($sor = mysql_fetch_assoc($v)){
echo "<p>";
print_r($sor);
echo "</p>";
}
mysql_close();
?>
</p>
Adott felhasználó által követettek hozzászólásai
<p>
<?php
$id = $_GET['id'];
mysql_connect("szerver","felhasználó","jelszo");
mysql_select_db("adatbázis");
mysql_query("SET NAMES 'utf8'");
$sql = "SELECT users.nev, datum, txt ";
$sql .= "FROM users, followers, posts ";
$sql .= "WHERE users.id = followers.uid1 AND ";
$sql .= "followers.uid2 = posts.uid AND ";
$sql .= "users.id = ".$id;
$v = mysql_query($sql);
while($sor = mysql_fetch_assoc($v)){
echo "<p>";
print_r($sor);
echo "</p>";
}
mysql_close();
?>
</p>
Adott felhasználó által követettek hozzászólásai, CSS formázással, felhasználó nevével
<html>
<head>
<title>Twitter</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style type="text/css">
div.poszt {
padding: 10px;
margin: 30px;
width: 200px;
border-style: solid;
border-width: 1px;}
</style>
</head>
<body>
<h1> Hozzászólások</h1>
<p>
<?php
$id = $_GET['id'];
mysql_connect("szerver","felhasználó","jelszó");
mysql_select_db("adatbázis");
mysql_query("SET NAMES 'utf8'");
$sql = "SELECT nev from users WHERE id = ".$id;
$v = mysql_query($sql);
$sor = mysql_fetch_assoc($v);
$nev = $sor['nev'];
echo "<h3>".$nev."</h3>";
$sql = "SELECT users.nev, datum, txt ";
$sql .= "FROM users, followers, posts ";
$sql .= "WHERE users.id = followers.uid2 AND ";
$sql .= "followers.uid2 = posts.uid AND ";
$sql .= "followers.uid1 = ".$id;
$v = mysql_query($sql);
while($sor = mysql_fetch_assoc($v)){
echo "<div class='poszt'>";
echo "<h4>".$sor['nev']."</h4>";
echo "<p>".$sor['txt']."</p>";
echo "<p>".$sor['datum']."</p>";
echo "</div>";
}
mysql_close();
?>
</body>
</html>
Feliratkozás:
Bejegyzések (Atom)