1.1 Tábla létrehozása: CREATE TABLE
Szintaxis:
CREATE TABLE tábla_neve
(
mező1 típus [(méret)] [NOT NULL] [ CONSTRAINT…],
mező2 típus [(méret)] [NOT NULL] [ CONSTRAINT…],
…
);
A CREATE TABLE utasítás részei:
tábla - A létrehozandó tábla neve
mező1, mező2 - Az új tábla mezőjének vagy mezőinek neve. Legalább egy mezőt létre kell hoznunk.
típus - Az új tábla mezőjének adattípusa
méret - A mező mérete karakterben (csak Szöveg és Bináris mezőnél)
NOT NULL - Kötelező adatbevitel
CONSTRAINT … - Megkötések egy mezőre
Példák:
(Ha az azonosítóban szóköz van, akkor azt szögletes zárójelbe kell tenni!!!) A következő példa létrehoz egy új táblát két Szöveg típusú és egy Dátum/Idő típusú mezővel, továbbá egy egyedi indexszel, amely mindhárom mezőt tartalmazza:
CREATE TABLE [Próba Tábla2]
(
Vezetéknév TEXT,
Keresztnév TEXT,
[Születési dátum] DATETIME,
CONSTRAINT TöbbmezősIndexNeve UNIQUE (Vezetéknév, Keresztnév, [Születési dátum])
A következő példa létrehoz egy új táblát elsődleges- és idegenkulccsal, és mindenféle csingilingivel:
CREATE TABLE [Próba Tábla4]
(
Rendeléskód INTEGER CONSTRAINT ElsődlegesKulcsNeve PRIMARY KEY,
Címzett TEXT NOT NULL,
Irányítószám TEXT CONSTRAINT EgyediIndexNeve UNIQUE,
Vevőkód TEXT (5) CONSTRAINT KülsőKulcsNeve REFERENCES Vevők
);
1.2 Indexek létrehozása – CREATE INDEX
Új index létrehozása a már létező táblán
Szintaxis:
CREATE [ UNIQUE ] INDEX index_neve
ON tábla
(
mező1 [ASC|DESC],
mező2 [ASC|DESC],
…
[WITH…]
);
A CREATE INDEX utasítás részei:
UNIQUE – Egyedi index (ismétlődések nem fordulhatnak elő a mezőben)
index - A létrehozandó index neve
tábla - A tábla neve, amelyet indexelni akarunk.
mező - A indexelendő mező(k) neve(i). Egymezős index esetén írjuk a mező nevét zárójelben a tábla neve után. Többmezős index esetén soroljuk fel azokat a mezőket, amelyekre az index vonatkozik. Csökkenő sorrend létrehozásához használjuk a DESC foglalt szót; egyébként a sorrend növekvő (ASC).
WITH – Ezzel a záradékkal az adatok érvényességi szabályait határozhatjuk meg (megadása nem kötelező):
A DISALLOW NULL beállítással tilthatjuk a Null értékű bejegyzéseket az új rekordok mezőibe.
Az IGNORE NULL beállítás esetén a Null értékű mezővel rendelkező rekordok nem fognak az indexben szerepelni.
A PRIMARY beállítással az indexelt mező(ke)t elsődleges kulcsként jelöljük meg. Ez magába foglalja a kulcs egyediségét is, ezért nem kell a UNIQUE foglalt szót használnunk.
Példák:
A következő példa létrehoz az Alkalmazottak táblához egy új indexet, mely az Otthoni telefon és a Mellék mezőből áll.
CREATE INDEX ÚjIndexNeve ON Alkalmazottak (Otthoni telefon, Mellék);
A következő példa létrehoz a Vevők táblához egy új indexet a Vevőkód mező alapján. Nem létezhet két rekord ugyanazzal a Vevőkód értékkel, és nincs engedélyezve a Null érték.
CREATE UNIQUE INDEX CustID ON Vevők (Vevőkód) WITH DISALLOW NULL;
1.3 Indexek törlése – DROP INDEX
Szintaxis:
DROP INDEX index_név ON táblanév;
Példa:
Az előző példában létrehozott indexet a DROP utasítás segítségével lehet törölni. A tábla Tervező nézetében az index kizárólag akkor törölhető, ha a Vevők táblához tartozó kapcsolatot is töröljük. A következő kódrészlet a DROP utasítás segítségével törli az új indexet.
DROP INDEX CustID ON Vevők;
1.4 Adatbevitel táblákba – INSERT INTO
Egy vagy több rekordot ad hozzá a táblához. Ezt hozzáfűző lekérdezésnek hívják.
Szintaxis:
Több rekordot létrehozó hozzáfűző lekérdezés:
INSERT INTO cél_tábla [(mező1, mező2, ...)]
SELECT [mező1, mező2, ...]
FROM forrás_tábla;
Egyetlen rekordot létesítő hozzáfűző lekérdezés:
INSERT INTO cél_tábla [(mező1, mező2, ...)]
VALUES (érték1, érték2, ...);
Az INSERT INTO utasítás a következő részekből áll:
Cél_tábla - A tábla neve, melyhez hozzá szeretnénk fűzni az új rekordokat.
Forrás_tábla - A tábla vagy lekérdezés neve, melyből a rekordokat át szeretnénk másolni.
mező1, mező2 - Ha cél argumentum után szerepelnek, az új rekordban kitöltendő mezők nevei, ha forrás argumentum után szerepelnek, akkor ezekből a mezőkből veendők az adatok.
érték1, érték2 - Az új rekord egyes mezőibe írandó értékek. Minden érték a vele a listában azonos pozíción szereplő mezőbe kerül: az érték1 a mező1-be, az érték2 a mező2-be, és így tovább. Az értékeket vesszővel választjuk el és a szöveges értékeket idézőjelbe (" ") tesszük.
Példák:
Ha ki szeretnénk próbálni a következő példákat, akkor hozzunk létre egy másolatot a Vevők tábláról Vevők2 névvel (csak a struktúrát másolja le).
A következő példa létrehoz egy új rekordot az Alkalmazottak táblában:
INSERT INTO Alkalmazottak (Keresztnév, Vezetéknév, Beosztás)
VALUES ('Pista', 'Budai', 'Gyakornok');
A következő példa egy feltételezett Tanulók táblából kiválaszt minden olyan gyakornokot, aki több, mint 30 napja van a vállalatnál, és az őket tartalmazó rekordokat hozzáadja az Alkalmazottak táblához.
INSERT INTO Alkalmazottak SELECT Gyakornok.* FROM Tanulók
WHERE [Belépés dátuma] <>
Frissítő lekérdezést hoz létre, amely a megadott tábla mezőit módosítja a megadott feltétel alapján.
Szintaxis:
UPDATE tábla
SET új érték
WHERE feltétel;
Az UPDATE utasítás a következő részekből áll:
Tábla - Azon tábla neve, amelynek adatait módosítani szeretnénk.
új érték - Az a kifejezés, amely meghatározza, milyen érték kerül be a módosítandó rekordok egyes mezőibe.
Feltétel - Az a kifejezés, amely meghatározza, mely rekordok módosulnak. Csak a kifejezésnek eleget tevő rekordok változnak.
Megjegyzés:
Az UPDATE különösen akkor hasznos, amikor sok rekordot szeretnénk módosítani, vagy amikor a módosítandó rekordok több különböző táblában vannak.
Egyszerre több mezőt is módosíthatunk.
Az UPDATE nem hoz létre eredményhalmazt. Ha a rekordokat frissítő lekérdezéssel módosítjuk, a műveletet nem lehet visszavonni. Ha látni szeretnénk, mely rekordok módosulnának, először futtassunk le egy választó lekérdezést ugyanolyan feltétellel, s ennek eredményét vizsgáljuk meg. Csak ezután futtassuk le a módosító lekérdezést.
Az adatokról mindig legyen másolatunk. Ha rossz rekordokat módosítunk, a másolatból helyreállíthatjuk az eredeti adatokat.
Példák:
A következő példa minden olyan rekord Felettes mezőjét 5-re állítja, amelynek jelenleg 2 az értéke.
UPDATE Alkalmazottak SET Felettes = 5 WHERE Felettes = 2;
A következő példa minden olyan termék egységárát csökkenti 5 százalékkal, amely a Tokyo Traders nevű szállítótól származik, és amelyből van raktáron. A Termékek és a Szállítók tábla között több-az-egyhez kapcsolat van.
UPDATE Szállítók INNER JOIN Termékek
ON Szállítók.Szállítókód = Termékek.Szállítókód SET Egységár = Egységár * .95
WHERE Cégnév = 'Tokyo Traders' AND Raktáron>0;
Létrehoz egy törlő lekérdezést, amely a FROM záradékban felsorolt táblákból törli azokat a rekordokat, amelyek eleget tesznek a WHERE záradék feltételének.
Szintaxis:
DELETE * FROM tábla
WHERE feltétel
A DELETE utasítás két részből áll:
Tábla - A tábla neve, amelyből a rekordokat törölni kell
Feltétel - A törlendő rekordokat kijelölő kifejezés
Megjegyzés
A DELETE különösen hasznos, ha sok rekordot szeretnénk törölni
Egész táblát a DROP TABLE utasítással töröljünk. Ha az egész táblát töröljük, akkor annak szerkezete is elvész. Ezzel szemben a DELETE használatakor csak az adatok törlődnek, a tábla szerkezete és minden jellemzője (például a mezőnevek, az indexek) érintetlen marad.
A DELETE segítségével olyan táblákból is törölhetünk rekordokat, amelyek más táblákkal egy-a-többhöz kapcsolatban állnak. Kaszkádolt törlésnél a kapcsolat "több" oldalán levő rekordok is törlődnek, ha a kapcsolat "egy" oldalán levő rekordot törli a lekérdezés. Például a Vevők és a Rendelések tábla esetében a Vevők vannak az "egy" oldalon, a Rendelések a "több" oldalon. Kaszkádolt törlés használatakor a Vevők táblából törölt rekordokkal együtt a hozzájuk tartozó Rendelések rekordok is törlődnek.
A törlő lekérdezés nem egyes mezők adatait törli, hanem a teljes rekordokat. Ha egyes mezők adatait szeretnénk törölni, használjunk frissítő lekérdezést, ami a mezők értékét Null értékre változtatja.
A törlő lekérdezés nem vonható vissza, a törölt rekordok elvesznek. Ha látni szeretnénk a törlendő rekordokat, akkor a törlés előtt először vizsgáljuk meg egy ugyanolyan feltételt használó választó lekérdezés eredményét.
Mindig legyen biztonsági mentés az adatokról. Így ha rossz rekordokat töröltünk, ezek visszanyerhetők.
Példa:
Ha a következő példát ki szeretnénk próbálni, akkor adjunk néhány rekordot az Alkalmazottak táblához, és a Beosztás mezőbe írjuk be a “Gyakornok” értéket.
A következő példa töröl az Alkalmazottak táblából minden olyan rekordot, amelyben a Beosztás mező értéke “Gyakornok”.
DELETE * FROM Alkalmazottak WHERE Beosztás = 'Gyakornok';