Mit jelent az SQL. Mi az adatbázis és a dbms? Válassza az Adatbázis lehetőséget

Ebben a fejezetben megtudhatja, hogy az SQL-t használják más nyelveken írt programok bővítésére. Bár az SQL nyelv necromance nyelve nagyon erős, ugyanakkor nagyszámú korlátozást szab ki. A korlátozások leküzdéséhez az SQL-t olyan programokban vagy más eljárási nyelven (specifikus algoritmussal) tartalmazhat. Például a Pascal-t választottuk, figyelembe véve, hogy ez a nyelv a legegyszerűbb a kezdők számára, és még azért is, mert a Pascal az egyik olyan nyelv, amelyhez az ANSI félig hivatalos szabványt tartalmaz.

Mi az SQL beágyazása

Az SQL egy másik nyelven történő befektetéséhez a szoftvercsomagot kell használnia, amely támogatást nyújt az SQL mellékletekhez e nyelvhez, és természetesen a nyelv támogatása. Természetesen ismernie kell a használt nyelvet. Főleg az SQL parancsokat az adatbázis táblázatokban dolgozni fogja, továbbítja a kimeneti eredményeket a programba, és fogadja a programot a programból, amelyre befektetik, általánosan hivatkozva a fő programra (ami lehet, vagy nem tudja megkapni őket a párbeszéd vagy a küldés vissza a párbeszédhez és programhoz).

Miért fektessen be SQL-t?

Bár egy kis időt töltöttünk arra, hogy megmutassuk, hogy mit tehet az SQL-nek, de ha tapasztalt programozó vagy, akkor valószínűleg megjegyezte, hogy saját, nem nagyon hasznos a programok írásakor. A legnyilvánvalóbb korlátozás az, hogy míg az SQL azonnal végrehajthatja a parancscsomagot, az interaktív SQL elsősorban egy parancsra hajt végre minden egyes alkalommal. Az IF LOGICAL struktúrák típusai ... Akkor ("Ha ... Akkor"), mert ... ("Mert ... Execute") és míg ... Ismételje meg ("közben ... ismétlés") - A legtöbb számítógépes program struktúráira használják, nincsenek, így nem tudsz döntést hozni - akár elvégezni, hogy hogyan kell végrehajtani, vagy mennyi ideig végrehajtani egy műveletet egy másik fellépés eredményeként. Ezenkívül az interaktív SQL nem tehet sokat az értékekkel, kivéve, ha beírja őket egy táblázatba, elhelyezést vagy elosztást kérésekkel, és természetesen visszavonja őket valamilyen eszközre.

A hagyományosabb nyelvek azonban erősebbek ezeken a területeken. Úgy tervezték, hogy a programozó elkezdheti feldolgozni az adatokat, és eredményei alapján eldöntheti, hogy ezt vagy más, vagy ismételje meg a cselekvést azoknak, amíg bizonyos feltételek nem teljesülnek logikai útvonalak és ciklusok létrehozásával. Az értékeket olyan változók tárolják, amelyek bármilyen parancs használatával használhatók és változhatnak. Ez lehetőséget ad arra, hogy megadja a felhasználókat, hogy adja meg vagy adja ki ezeket a parancsokat a fájlból, és képes formázni a kimenetet komplex módszerek (például a numerikus adatok konvertálása a diagramban). A beágyazott SQL célja, hogy ötvözze ezeket a funkciókat, amelyek lehetővé teszik, hogy olyan összetett eljárási programokat hozzon létre, amelyek az adatbázist az SQL-en keresztül kezelik - lehetővé teszik, hogy megszüntesse az olyan eljárási nyelven az összetett akciókat olyan eljárási nyelven, amely nem foglalkozik ilyen adatstruktúrára, a ugyanakkor fenntartja az eljárási nyelv strukturális szigorságát.

Hogyan csatolhatsz SQL-t.

Az SQL parancsokat a főprogram forrásszövegébe helyezik, amelyet a kifejezés - Exec SQL (Execute SQL). Ezután egyes parancsok vannak telepítve, amelyek különlegesek a beágyazott SQL formátumhoz, és amelyeket ebben a fejezetben bemutatunk. Szigorúan beszélve az ANSI szabvány nem támogatja a beágyazott SQL-t. Támogatja az úgynevezett koncepciót - egy modul, amely pontosabb, az SQL-eljárások halmaza, ahelyett, hogy egy másik nyelvhez csatlakozik. Az SQL csatolási szintaxis hivatalos meghatározása magában foglalja az egyes nyelvek hivatalos szintaxisának bővítését, amelyben az SQL befektethető, ami nagyon adósság és hálátlan feladat, amelyet az ANSI elkerüli. Azonban az ANSI négy alkalmazást (nem része a szabványnak), amely meghatározza az SQL mellékletek szintaxisát négy nyelven: COBOL, PASCAL, FORTRAN és PL / 1. A C nyelv is széles körben támogatott, mint más nyelvek. Ha az SQL parancsokat a másik nyelven írt program szövegéhez írja be, akkor elő kell döntenie, mielőtt végül összeállítaná. A programot az előkötő (vagy az előfeldolgozó) nevezik, megtekintheti a program szövegét, és konvertálja az SQL parancsokat, amely alkalmas az alapnyelvhez való használatra.

Ezután a szokásos fordítót használja, hogy konvertálja a programot forrásszövegből a végrehajtható kódhoz. A moduláris nyelv megközelítése szerint egy adott ANSI, a fő program az SQL-eljárásokat hívja. Eljárások Válasszon paramétereket a fő programból, és visszaküldte a már feldolgozott értékeket a főprogramhoz. A modul bármely olyan eljárást tartalmazhat, amelyek mindegyike egyetlen SQL parancsból áll. Az ötlet az, hogy az eljárások ugyanúgy működhetnek, hogy az általuk fektetett nyelven (bár a modulnak továbbra is azonosítania kell az alapvető nyelvet a különböző nyelvek adatainak különbségeinek köszönhetően). A végrehajtás megfelel a szabványnak az SQL beágyazása után, mintha a modulok már meghatározták volna. Ebből a célból a Precompet illesztőprogram létrehozza a hozzáférési modul nevű modult. Ehhez a programhoz csak egy modul tartalmazhat semmilyen SQL-eljárást. Az SQL-üzemeltetők közvetlenül a főkódban történő elhelyezése egyszerűen csak gyakorlatilag történik, mint közvetlenül a modulok létrehozásának. Az SQL mellékletet használó programok mindegyike a hozzáférési azonosítóhoz kapcsolódik a végrehajtás során. A programhoz kapcsolódó programnak rendelkeznie kell minden jogosultsággal a programban végrehajtott SQL műveletek végrehajtásához. Valójában az SQL beágyazott program regisztrálva van az adatbázisban, valamint a programot végrehajtó felhasználót. A részletesebben meghatározza a tervezőt, de valószínűleg jó lenne a Connect parancs vagy hasonló hozzáillesztése a programban.

Az alapvető nyelvi változók használata SQL-ben

Az a fő módszer, amelynek fő módja, hogy az SQL és a programok alapnyelvének részei kapcsolatba lépnek egymással - ez változó értékeket használ. Természetesen a különböző nyelvek különböző típusú adatokat ismertetnek a változók számára. Az ANSI négy alapnyelvhez SQL ekvivalenseket határoz meg - PL / 1, PASCAL, COBOL és FORTRAN; Mindezeket a részleteket a B. függelék tartalmazza. Ekvivalensek más nyelvekhez - meghatározza a tervezőt. Ne feledje, hogy olyan típusok, mint a dátum, az ANSI nem ismeri fel; Ezért az alapnyelvekre vonatkozó egyenértékű adattípusok nem léteznek az ANSI szabványban. Az alapnyelvi adatok összetettebb típusai, mint például a mátrixok, nincsenek ekvivalensek az SQL-ben. Az SQL alfezett üzemeltetők fő programjától eltérő változókat használhat, bárhol is használhatja az értékek kifejezéseket. (Az ebben a fejezetben használt SQL-nek a beágyazott SQL-nek megfelelően értendő, amíg kifejezetten nem írja elő.) A változó aktuális értéke lehet a parancsban használt érték. A fő változóknak -

* Az alábbiakban leírandó SQL-ben kell bejelenteni.

* Kompatibilis adattípust tartalmaz az SQL parancs funkcióihoz (például egy numerikus típus, ha beillesztésre kerül a numerikus mezőbe)

* Legyen a hozzárendelt érték az SQL parancs alatt, ha az SQL parancs nem tud kinevezést tenni.

* megelőzze a vastagbél (:) Amikor az SQL csapatban szerepelnek

Mivel a fő változók eltérnek az SQL oszlopok nevétől egy vastagbéllel, akkor ugyanazokkal a nevekkel rendelkező változók használhatók, mint az oszlopok, ha biztosan szükséges. Tegyük fel, hogy négy változót tartalmaz a programban, nevekkel: ID_NUM, SALESPERSON, LOC és COMM. Ezek tartalmazzák a beilleszteni kívánt értékeket az eladók táblájába. A következő SQL parancsot csatolhatja a programhoz: EXEC SQL Insert Salespeople értékek (: ID_NUM, SALESPERSON,: LOC,: COMM) A változók aktuális értékei az asztalra kerülnek. Amint láthatja, a Comm változó ugyanazt az oszlopnak kell lennie, amelyben ezt az értéket befektetik. Kérjük, vegye figyelembe, hogy a csapat végén vesszővel rendelkező pont hiányzik. Ez azért van így, mert az SQL beágyazott parancs megfelelő befejezése evakuálódik attól a nyelvetől, amelyre a beruházás történik.

Pascal és PL / 1 esetében egy vesszővel lesz egy pont; COBOL, Word End-Exec; És a FORTRAN számára nincs befejezés. Más nyelveken a végrehajtástól függ, ezért egyetértünk azzal, hogy egy vesszővel (ebben a könyvben) egy pontot fogunk használni, hogy mindig ne ellentmondjon az interaktív SQL-t és a pasztát. Pascal kiegészíti a beágyazott SQL-t és saját csapatait egyformán - pontosvesszővel. A parancs végrehajtásának módja a fent leírt módon a ciklusban is beilleszteni, és ismételje meg, a változók különböző értékeivel, például a következő példában látható: míg a végső ot-file (bemenet) megkezdje a readln (ID_NUM, SALESPERSON, LOC, COMM); Exec Sol Insert Salespeople értékek (: ID_NUM,: Salesperson,: Loc,: Comm); vége; A Pascal programfragmense meghatározza azt a ciklust, amely elolvassa az értékeket a fájlból, mentse őket négy helyettesített változóban, mentse ezeket a változók értékeit az eladók táblázatában, majd olvassa el a következő négy értéket, ismételje meg a következő négy értéket Ez a folyamat, amíg a teljes bemeneti fájl olvasható. Úgy vélik, hogy minden értékkészlet a kocsi visszatérésével fejeződik be (a Pascal ismeretlenszerűen, a ReadlN funkció az információ engedélyezett és átadja az információ forrásának következő sorát). Ez könnyű módot ad arra, hogy adatokat átadjon egy szövegfájlról egy relációs struktúrára. Természetesen először feldolgozhatja az adatokat a fő nyelv bármely lehetséges módjával, például az alábbi összes jutalék kiküszöbölése érdekében. Műszaki adatok. 12 Bár a végső ot-fájl (bemenet) nem kezdődik újra olvasható (ID_NUM, SALESPERSON, LOC, COMM ); Ha a Comm\u003e \u003d .12 majd az SQL beillesztést az Salespeople értékekbe (: ID_NUM,: SALESPERSON,: LOC,: COMM); vége; Csak olyan vonalak, amelyek megfelelnek a kommunikációs állapotnak\u003e \u003d .12-nek a visszavonásba kerülnek. Ez azt mutatja, hogy a fő nyelvet normál lehet, és ciklusokat és körülményeket használhat.

Kijelentés

Minden olyan változó, amelyen az SQL-ajánlatokban linket tartalmaznak, először az SQL Deklare szakaszban kell bejelenteni, a szokásos fő nyelvszintaxis segítségével. A programban bármilyen szekciót tartalmazhat, és a kódot valahol a kódot a használt változó előtt lehet közzétenni, alárendelni a fő nyelvnek megfelelően meghatározott korlátozásoknak. A hirdetések megkezdődnek és végül az SQL-BEING DECLARE részleget a beágyazott parancsokkal és a Vége Deklare szakasz (a hirdetésszakasz vége), amelyet a szokásos EXEC SQL (RUN) előzményei előznek meg. Az előző példában használt változók kijelöléséhez a következőket írhatja be: EXEC SQL BEGIN A RECLARE szakasz; VAR ID-NUM: egész szám; Salesperson: Csomagolt tömb (1.10) OT Char; LOC: Csomagolt tömb (1.10) OT Char; Comm: Real; EXEC SQL End deklare szakasz; A Pascal, a VAR egy olyan cím, amely számos deklarált változót, és csomagolt (vagy kicsomagolt) tömböket tartalmaz, amelyek a különböző számok értékeinek rögzített változók sorozatából (például a harmadik karakter LOC lesz (3)). Egy vesszőpont használata minden egyes változó után azt jelzi, hogy Pascal, NEM SQL.

Változók kivonása

Amellett, hogy a változó értékeket az SQL parancsok segítségével az asztalra helyezi el, az SQL segítségével értékeket kaphat ezeknek a változóknak. Ennek egyik módja egy olyan típusú válogatás parancs, amely tartalmazza a javaslatot. Menjünk vissza az előző példájunkhoz, és mozgassuk az eladók asztalától a fő nyelv változókáig. EXEC SQL SELECT SNUM, SNAME, CITY, COMM AT: ID_NUM, ID_NUM,: SALESPERSON,: LOC,: COMM a Salespeops-ból, ahol snum \u003d 1001; A kiválasztott értékeket a mondatban megadott rendezett nevekkel rendelkező változókba helyezzük. Természetesen a változóknak a mellékletben megadott nevekkel rendelkező változóknak megfelelő típusúnak kell lenniük az értékek elvégzéséhez, és a CAUDO kiválasztott oszlophoz változónak kell lennie. Ha nem veszi figyelembe a beutazási ajánlat jelenlétét, akkor ez a kérés hasonló máshoz. A javaslat azonban jelentősen felderítést tesz lehetővé. A kérésnek legfeljebb egy vonalat kell kitöltenie. Ha sok vonalat cserél, akkor mindegyike nem illeszthető egyszerre ugyanabban a változóban. A csapat természetesen meghiúsul. Ezért válassza ki a be kell használni csak a következő feltételek mellett:

* Ha a predikátum ellenőrzési értékeit használja, akkor egyedülálló lehet, mint ebben a példában. Azok az értékek, amelyekről tudod, egyediek lehetnek azok az értékek, amelyek az egyediség vagy egy egyedülálló index korlátozásával rendelkeznek, amint azt a 17. fejezetben említettek szerint említik.

* Ha egy vagy több aggregált funkciót használ, és nem használja a csoportot.

* Ha a SELECT SELECTINT-t a külső kulcsra használja, a szülő kulcs egyetlen értékére hivatkozva (a referencia-integritás receptje), a következő példában: EXEC SQL SELECT SELECTINT SNUM: SALESNUM az ügyfelektől, ahol snum \u003d (Válassza ki a snum-t a Salespeops-ból, ahol SNAME \u003d "MOTIKA"); Feltételezték, hogy az Salespeople.sname és az Salespeople.snum az asztal egyedülálló és elsődleges kulcsai, és az ügyfelek.snum a külső kulcs, amely az értékesítőkre utal, és feltételezte, hogy ez a kérés egy karakterláncot fog tenni . Vannak más esetek is, ha tudjuk, hogy a lekérdezésnek egyetlen kimeneti vonalat kell biztosítania, de kevéssé ismert, és a legtöbb esetben azon a tényen alapul, hogy az adatok olyan integritással rendelkeznek, amelyet nem lehet korlátozások felhasználásával előírni. Ne támaszkodjon rá! Olyan programot hoz létre, amely valószínűleg használható egy ideig, és a lehető legjobban elveszíti, hogy a jövőben garantált legyen a lehetséges kudarcokból. Mindenesetre nincs szükség arra, hogy csoportosulási kérdéseket készítsen, amelyek egyetlen vonalat állítanak elő, mivel a kiválasztás csak a kényelem érdekében használható. Amint azt látja, használhatja a kéréseket számos karakterláncot a kurzor segítségével.

KURZOR

Az SQL egyik erős tulajdonsága az a képesség, hogy az asztal minden sorában működjön, hogy megfeleljen egy bizonyos feltételnek, mint egy blokkrekord, nem tudja, hogy hány ilyen húr lehet. Ha tíz vonal megfelel a predikátumnak, akkor a kérés visszavonhatja az összes tíz vonalat. Ha tízmillió vonal van meghatározva, mind a tíz millió sor származik. Némileg nehéz, ha megpróbálja kötni más nyelvekkel. Hogyan rendelheti meg a változók kérését, ha nem tudja, milyen nagy lesz a kimenet? A döntés az, hogy a kurzornak nevezik. Valószínűleg ismeri a kurzort, mint egy villogó kötőjel, amely a számítógép képernyőjén lévő pozícióját jelzi. Az SQL kurzort olyan eszközként tekintheti meg, amely hasonló ahhoz, jegyezze meg a helyét a lekérdezés kimenetében, bár az analógok nem teljesek. A kurzor egy olyan változó típus, amely a lekérdezéshez kapcsolódik. Ennek a változónak a értéke lehet, amely a kérés során megjelenik. A fő változóhoz hasonlóan a kurzorokat azokat megelőzően kell bejelenteni. Ezt a Deklare kurzor parancs végzi, az alábbiak szerint: Exec SQL kijelenti a kurzor londonsales-t a Salesople-től, ahol a város \u003d "London"; A kérelem azonnal nem kerül végrehajtásra; Csak meghatározható. A kurzor nem hasonlít olyan nézetre, amelyben a kurzor lekérdezést tartalmaz, és a kurzor tartalma - emlékeztet minden kérési kimenetre, minden alkalommal, amikor a kurzor nyitva lesz. Az alap táblázatokkal vagy nézetekkel ellentétben azonban a kurzor húrok megrendelésre kerülnek: vannak először, második ... ... és a kurzor utolsó karakterlánca. Ez a megrendelés önkényes lehet kifejezett ellenőrzéssel a megrendelés javaslatával a lekérdezésben, vagy alapértelmezés szerint követheti a meghatározott szerszám által meghatározott sémának megrendelését. Ha olyan pontot találsz a programban, amelyben lekérdezni szeretné, megnyitja a kurzort a következőkkel: Exec SQL nyitott kurzor londonsales; A kurzorban lévő értékek akkor érhetők el, ha ezt a parancsot végzi, de nem az előző bejelentő parancsot, és nem az ezt követő letöltési parancsot. Ezután a Fetch parancsot használja a kimenet kimenetének kivonásához, egy sor minden alkalommal. EXEC SQL FETCH LONDONSALES: ID_NUM,: SALESPERSON,: LOC,: COMM; Ez a kifejezés az értékeket az első kiválasztott karakterlánctól a változókig mozgatja. A FRIEND FETCH parancs a következő értékkészletet jeleníti meg. Az ötlet az, hogy a lekérési parancsot a ciklus belsejébe helyezze, hogy a karakterlánc kiválasztásával mozgassa a sorból származó értékeket a változókhoz, visszaállt a ciklushoz. A következő értékek mozgatásához ugyanazok a változók. Például előfordulhat, hogy kimenetet kell adnia egy sorból, és minden alkalommal, aki továbbra is egy olyan felhasználó, aki továbbra is szeretné látni a következő karakterláncot Look_at_more: \u003d igaz; Exec SQL nyitott kurzor londonsales; Míg a Look_at_More megkezdi az EXEC SQL letöltött Londonsales-t: ID_NUM,: Salesperson,: Loc,: Comm; Writeln (ID_NUM, SALESPERSON, LOC, COMM); Writeln ("Szeretne több adatot látni? (Y / N)"); Readln (válasz); Ez válasz \u003d "n", majd look_at_more: \u003d hamis vég; EXEC SQL szoros kurzor londonsales; Pascal, a jel: \u003d azt jelenti - "egy kijelölt érték", míg a \u003d még mindig a szokásos érték "egyenlő." A Writeln funkció a kimenetet írja, majd új sorba lép. Egyetlen idézetek a második írásban lévő szimbólumértékek körül és az IF ... mint az ajánlat - gyakoriak a Pascal számára, ami akkor történik, ha az SQL-ben másol. Ennek a fragmentumnak köszönhetően a Look_at _More névvel rendelkező logikai változónak helyesen kell lennie, a kurzor nyitva van, és a ciklus be van írva. A ciklus belsejében a karakterlánc a kurzorból van kiválasztva, és megjelenik a képernyőn. A felhasználó megkérdezi, hogy szeretné-e látni a következő sort. Miközben nem válaszolt N (NO), a ciklus megismétlődik, és a következő értéksor kiválasztásra kerül. Bár a Look_at_more változókat és a választ a Pascal változó hirdetéseiben logikai változó és szimbolikus (char) változónak kell nyilvánítani, azokat nem szabad az SQL-hirdetések szakaszba foglalni, mert az SQL parancsok nem használják őket . Amint láthatja, a vastagbél a változó nevek előtt nem használható a nem SQL operátorok számára. Ezután vegye figyelembe, hogy van egy szoros kurzor operátor, amely megfelel a nyitott kurzorszolgáltatónak. Ő, ahogy értette, felszabadítja az értékek kurzorát, így a lekérdezést meg kell ismételni a nyitott kurzor utasítással, mielőtt átkerülne a következő értékek kiválasztására. Ez nem szükséges azoknál a sorokhoz, amelyeket a kurzor lezárítása után választottak ki, bár ez a szokásos eljárás. Míg a kurzor zárva van, az SQL nem követi, hogy milyen sorokat választottak ki. Ha újra megnyitja a kurzort, akkor a lekérdezés újra végrehajtásra kerül, és újra elkezdi újra. Ez a példa nem lép ki automatikusan a ciklusból, ha az összes vonal már kiválasztott. Ha a letöltés nem rendelkezik több vonalakkal, amelyeket ki kell húzni, egyszerűen nem változtatja meg az értékeket a javaslatváltozókban. Ezért, ha az adatok kimerültek, ezek a változók ismételten azonos értékekkel jelennek meg, amíg a felhasználó befejezi a ciklust a válasz megadásával - N.

SQL kódok

Jó lenne tudni, hogy az adatok kimerüljenek, hogy ezt ehhez jelentheted, és a ciklus automatikusan befejeződik. Még fontosabb, mint például tudni, hogy az SQL parancs hiba történt. Az SQLCODE változó (az úgynevezett SQLCOD FORTRAN-ban) ezt a funkciót úgy tervezték meg. A fő nyelv változójaként kell meghatározni, és rendelkeznie kell egy olyan adattípust, amely a fő nyelven megfelel az egyik pontos numerikus SQL típusnak, amint azt a B. függelék mutatja. Az SQLCODE érték minden alkalommal, amikor az SQL parancs végrehajtása. Alapvetően három lehetőség van: 1. A parancs hiba nélkül teljesült, de nem tett semmilyen intézkedést. A különböző parancsok esetében különböző módon néz ki:

A) A kiválasztáshoz a lekérdezés nem választja ki a sort.

B) A letöltéshez az utolsó sor már kiválasztásra került, vagy nem egyetlen sor van kiválasztva a kurzor lekérdezése.

B) A beillesztéshez nincs behelyezett karakterlánc (azt értjük, hogy a kérelmet a behelyezés értékeinek létrehozására használták fel, és elutasították a karakterlánc kivonásakor.

D) A frissítéshez és a törléshez nincs karakterlánc a predikátum állapotában, ezért a táblázatban nem történik változás.

Mindenesetre az SQLCODE \u003d 100 kód be van állítva.

2. A parancsot általában elvégezték, és nem felel meg a fenti feltételek bármelyikének. Ebben az esetben a kód SQLCOD \u003d 0 lesz beállítva.

3. A parancs hibát generált. Ha ez történt, az aktuális tranzakció adatbázisának módosítása visszaáll (lásd a 23. fejezetet). Ebben az esetben az SQLCODE kód beállítása \u003d a tervező által meghatározott egyes negatív szám. Ennek a számnak a feladata, a probléma azonosítása, pontosan a lehető legpontosabban. Elvileg a rendszert fel kell szerelni egy szubrutinnal, amely ebben az esetben végre kell hajtani az Ön számára az egyes tervező negatív számának visszafejtését. Ebben az esetben egy bizonyos hibaüzenet jelenik meg a képernyőn, vagy írja a protokollfájlba, és a program visszanyeri az aktuális tranzakció módosítását ebben az időben, kikapcsolja az adatbázist, és elhagyja. Most javíthatunk

Az SQLCODE használata ciklusok kezeléséhez

Előző példa a ciklusból való kilépéshez, feltéve, hogy a kurzor üres, minden sor van kiválasztva, vagy hiba történt: Look_at_more: \u003d lhe; Exec SQL nyitott kurzor londonsales; Míg a look_at_more és az sqlcode \u003d o kezdődik az exec sql letöltése London $ Ales: Id_Num,: Salesperson ,: LOC,: Comm; Writeln (ID_NUM, SALESPERSON, LOC, COMM); Writeln ("Szeretne több adatot látni? (Y / N)"); Readln (válasz); Ha válasz \u003d "n", akkor look_at_more: \u003d fabe; vége; EXEC SQL szoros kurzor londonsales;

Minden alkalommal, amikor

Ez kényelmes kilépni a végrehajtott állapot alatt - minden sor van kiválasztva. De ha hibáztál, meg kell tennie valamit, amit a harmadik esetben ismertetünk. Ebből a célból az SQL Goto ajánlatot nyújt. Tény, hogy az SQL lehetővé teszi, hogy alkalmazza, hogy széles körben széles, így a program automatikusan végrehajthatja a GOTO parancsot, ha egy adott SQLCODE értéket hajt végre. Ezt az ajánlatmal együtt teheti meg. Ebben az esetben van egy példa: EXEC SQL, ha SQLError Goto ERROR_HANDER; EXEC SQL, ha nem található tovább; Az SQLError egy másik módja annak, hogy jelentse az SQLCode-t< 0; а NOT FOUND - это другой способ сообщить что SQLCODE = 100. (Некоторые реализации называют последний случай еще как - SQLWARNING.) Error_handler - это им того места в программе в которое будет пере- несено выполнение программы если произошла ошибка (GOTO может состоять из одного или двух слов). Такое место определяется любым способом соответствующим для главного языка, например, с помощью метки в Паскале, или имени раздела или имени параграфа в КОБОЛЕ (в дальнейшем мы будем использовать термин - метка). Метка более удач- но идентифицирует стандартную процедуру распространяемую проектировщиком для включения во все программы.

A Folytatás nem tesz semmit az SQLCODE értékhez. Ez az alapértelmezett érték is. Ha nem használja a mikor parancsot, amely meghatározza az SQLCODE értéket. Ezek az inaktív definíciók azonban lehetőséget adnak arra, hogy a program különböző pontjain (címkéi) előrehaladjanak és hátrafelé és hátrafelé haladjanak. Ha például a program számos beillesztési parancsot tartalmaz, olyan kéréseket használva, amelyek igazán értékeket kell végrehajtaniuk, akkor speciális üzenetet nyomtathat vagy valamit, ami elmagyarázta, hogy a kérések üresek maradnak, és nincsenek értékek. Ebben az esetben a következőket írhatja be: EXEC SQL, ha nem található goto no_rows; NO_ROWS egy címke valamilyen kódban, amely egy konkrét műveletet tartalmaz. Másrészt, ha egy mintát kell készítenie a programban, akkor a következőket adhatja meg ezen a ponton, ha nem találja meg az SQL-t; Hogy a minta végrehajtását mindaddig megismételjük, amíg az összes vonalat kivonták, ami normál eljárás, amely nem igényel speciális feldolgozást.

A kurzorok módosítása

A kurzorok használhatók arra is, hogy kiválaszthassák a karakterláncok egy csoportját egy táblázatból, amelyet ezután módosíthatunk vagy eltávolíthatunk egyenként. Ez lehetőséget ad arra, hogy megkerülje a frissítésben használt predikátum korlátozásokat. A kurzorkérés előrejelzésében részt vevő táblázatban vagy annak bármely aljzatának előrejelzésében részt vevő táblázathoz fordulhat, amelyet nem lehet végrehajtani ezeknek a parancsoknak a predikátumokban. Amint azt a 16. fejezet hangsúlyozta, az SQL szabvány elutasítja az összes felhasználónak az átlag alatti értékkel való törlését, a következő formában: Exec SQL Delete az ügyfelek számára, ahol a minősítés< (SELECT AVG (rating) FROM Customers); Однако, вы можете получить тот же эффект, используя запрос для выбора соответствующих строк, запомнив их в курсоре, и выполнив DELETE с использованием курсора. Сначала вы должны объявить курсор: EXEC SQL DECLARE Belowavg CURSOR FOR SELECT * FROM Customers WHERE rating < (SELECT AVG (rating) FROM Customers); Затем вы должны создать цикл, чтобы удалить всех заказчиков выбранных курсором: EXEC SQL WHENEVER SQLERROR GOTO Error_handler; EXEC SQL OPEN CURSOR Belowavg; while not SOLCODE = 100 do begin EXEC SOL FETCH Belowavg INTO:a, :b, :c, :d, :e; EXEC SOL DELETE FROM Customers WHERE CURRENT OF Belowavg; end; EXEC SOL CLOSE CURSOR Belowavg; Предложение WHERE CURRENT OF означает что DELETE применяется к строке которая в настоящее время выбрана курсором. Здесь подразумевается, что и курсор и команда DELETE, ссылаются на одну и ту же таблицу, и следовательно, что запрос в курсоре - это не объединение. Курсор должен также быть модифицируемым. Являясь модифицируемым, курсор должен удовлетворять тем же условиям что и представления (см. Главу 21). Кроме того, ORDER BY и UNION, которые не разрешены в представлениях, в курсорах - разрешаются, но предохраняют курсор от модифицируемости. Обратите внимание в вышеупомянутом примере, что мы должны выбирать строки из курсора в набор переменных, даже если мы не собирались использовать эти переменные. Этого требует синтаксис команды FETCH. UPDATE работает так же. Вы можете увеличить значение комиссионных всем продавцам, которые имеют заказчиков с оценкой=300, следующим способом. Сначала вы объявляете курсор: EXEC SOL DECLARE CURSOR High_Cust AS SELECT * FROM Salespeople WHERE snum IN (SELECT snum FROM Customers WHERE rating = 300); Затем вы выполняете модификации в цикле: EXEC SQL OPEN CURSOR High_cust; while SQLCODE = 0 do begin EXEC SOL FETCH High_cust INTO:id_num, :salesperson, :loc, :comm; EXEC SQL UPDATE Salespeople SET comm = comm + .01 WHERE CURRENT OF High_cust; end; EXEC SQL CLOSE CURSOR High_cust; Обратите внимание: что некоторые реализации требуют, чтобы вы указы- вали в определении курсора, что курсор будет использоваться для выполнения команды UPDATE на определенных столбцах. Это делается с помощью заключительной фразы определения курсора - FOR UPDATE . Чтобы объявить курсор High_cust таким способом, так чтобы вы мог- ли модифицировать командой UPDATE столбец comm, вы должны ввести следующее предложение: EXEC SQL DECLARE CURSOR High_Cust AS SELECT * FROM Salespeople WHERE snum IN (SELECT snum FROM Customers WHERE rating = 300) FOR UPDATE OF comm; Это обеспечит вас определенной защитой от случайных модификаций, которые могут разрушить весь порядок в базе данных.

Változó jelző

Az üres (nulls) értékek az SQL SAM által meghatározott különleges markerek. Nem lehetnek a fő változókba helyezni őket. A NULL értékek beillesztése a fő változóhoz helytelen lesz, mivel a fő nyelvek nem támogatják az SQL null értékeit, definíció szerint. Az eredmény, ha a NULL értéket a fő változóba próbálja beilleszteni, meghatározza a tervezőt, ez az eredmény nem ellentétes az adatbázis elméletét, ezért köteles hibázni: SQLCODE kód negatív szám formájában, és Hívja a hibakezelési alprogramot. Természetesen el kell kerülned. Ezért választhat null értékeket érvényes értékekkel, amelyeket nem fog megsemmisíteni a program. Még ha a program nem összeomlik, a fő változók értékei helytelenül válnak, mert nem lehet null értékek. Ehhez a helyzethez mellékelt alternatív módszer a mutatóváltozó (mutató) funkciója. A hiányzó változó az SQL hirdetésekben más változókra hasonlítanak. Van egyfajta fő nyelv, amely megfelel az SQL numerikus típusának. Ha olyan műveletet végez, amelynek null értékét kell elhelyeznie a fő nyelvi változóhoz, akkor a megbízhatósági változónak kell használnia a megbízhatóságot. Az indikátorváltozót az SQL parancsba közvetlenül a védelem alatt álló fő nyelv változója után helyezze el, szóközökkel vagy vesszők nélkül, bár ha szeretné, helyezze be a szót - jelzőt. A parancsban lévő indikátorváltozó kezdetben 0-hoz van hozzárendelve. Ha null állítanak elő, akkor a deficator változó negatív számgá válik. Ellenőrizheti a tervezett jelző értékét, hogy megtudja, hogy null megtalálta-e. Tegyük fel, hogy a város és a kommár padló, az eladók táblái nem korlátozódnak NEM NULL, és hogy az SQL promiszkuitás, két Pascalievi változók az egész típus, I_A és I_B. (Semmi sem hasonlít az üledékekben, ami jelzőváltozókként tudná biztosítani számukra. A jelző változók változóvá válnak, amikor a jelzőváltozók használhatók.) Van egy lehetőség: Exec SQL Open Cursor High_Cust; Míg az sqlcode \u003d o kezdődik az express sql fetch high_cust be: id_num ,: Salesson ,: LOC: I_A,: Commutlcator: i_b; Ha i_a\u003e \u003d o és i_b\u003e \u003d o (nincs nulls előállított) EXEC SQL frissítés Salespeople Set Comm \u003d Comm + .01, ahol a hlgh_cust jelenlegi. Más (egy vagy mindkét null) kezdődik, ha i_a< O then writeln ("salesperson ", id_num, " has no city"); If i_b < O then writeln ("salesperson ", id_num, " has no commission"); end; {else} end; {while} EXEC SQL CLOSE CURSOR High_cust; Как вы видите, мы включили, ключевое слово INDICATOR в одном случае, и исключили его в другом случае, чтобы показать, что эффект будет одинаковым в любом случае. Каждая строка будет выбрана, но команда UPDATE выполнится только если NULL значения не будут обнаружены. Если будут обнаружены NULL значения, выполнится еще одна часть программы, которая распечатает предупреждающее сообщение, где было найдено каждое NULL значение. Обратите внимание: переменные indicator должны проверяться в главном языке, как указывалось выше, а не в предложении WHERE команды SQL. Последнее в принципе не запрещено, но результат часто бывает непредвиденным.

Az indikátorváltozó használata NULL értékek emulálásához SQL

Barátja A lehetőség az, hogy feldolgozza az indikátorváltozót, összekapcsolja azt a fő nyelv minden változójából, olyan különleges módon, amely emulálja az SQL null értékeinek viselkedését. Ha az egyik értéket használja a programban, például az IF ... Tíz ajánlatban először ellenőrizheti az indikátor társított változóját, függetlenül attól, hogy érték \u003d null. Ha igen, akkor másképp feldolgozza a változót. Például, ha null értéket extrahálunk a város padlójából a fő változó városhoz, amely a mutatóhoz kapcsolódik - I_City változó, akkor meg kell határoznia a városi értéket a résszekvenciákkal. Csak akkor lesz szükség, ha kinyomtatja a nyomtatóra; Az értéke nem különbözhet a program logikájától. Természetesen az i_City automatikusan negatív értékre van telepítve. Tegyük fel, hogy a következő tervezésben volt a programodban: ha a Sity \u003d "London", akkor a Comm: \u003d Comm + .000001 Elkapcsolat: \u003d Comm - .01 A városváltozóba bevitt értékek, vagy "London" lesznek . Következésképpen minden esetben a Bizottság értéke megnövekedett vagy csökkent. Azonban az SQL-ben lévő egyenértékű parancsok különböző módon történnek: Exec SQL frissítés Salespeople Set Comm \u003d Comm + .01, ahol Sity \u003d "London"; és Exec SQL frissítés Salespeople Set Comm \u003d Comm01; Ahol a sity.< > "London"; (A PASCAL opció csak egyetlen értékkel működik, míg az SQL opció az összes asztalnál működik.) Ha az SQL verziójú városi értéke megegyezik a null értékkel, mindkét predikátum ismeretlen lesz, és az értéke Ezért semmilyen esetben nem lesz megváltoztatva. Használhatja az indikátorváltozót, hogy a fő nyelv viselkedését érthetetlen-e ezzel egy olyan állapot létrehozásával, amely kiküszöböli a null értékeket: Ha i_City\u003e \u003d O, akkor kezdődik, ha a város \u003d "London", majd Comm: \u003d Comm + \u003d Comm - .01; vége; (Kezdődik és vége csak a megértéshez szükséges)
MEGJEGYZÉS: A példa utolsó sora tartalmaz egy megjegyzést - (a kezdő és a vége csak a megértéshez szükséges)
Bonyolultabb programokban érdemes telepíteni egy logikai változó "TRUE" -t, hogy megadja, hogy az értéket \u003d null. Ezután egyszerűen ellenőrizheti ezt a változót, ha szüksége van rá.

A mutatóváltozó másik használata

A jelzőváltozó null érték hozzárendelésére is használható. Csak add hozzá a fő változó nevéhez a frissítés vagy a beillesztés parancsban ugyanúgy, mint a Select parancs. Ha a jelző változó negatív értékkel rendelkezik, akkor a null értéket a mezőbe helyezzük. Például a következő parancs a NULL értékeket helyezi el a városban és a kommunikációs táblázatban, az eladók táblázatban, amikor a mutatóváltozók - I_A vagy I_B negatívak; Ellenkező esetben a fő változók értékeit helyezi: EXEC SQL Insert Salespeople értékek (: ID_NUM,: Saleson ,: LOC: I_A,: Comm: i_b); Az indikátorváltozó az eldobott karakterlánc megjelenítéséhez is használható. Ez akkor fog történni, ha SQL karaktereket helyez be a fő változóhoz, amely nem elég ahhoz, hogy minden karaktert befogadjon. Ez egy adott probléma a nem szabványos adattípusokkal - Varchar és hosszú (lásd a C. függelék). Ebben az esetben a változó tele lesz az első karakterlánc szimbólumokkal, és az utolsó karakterek elvesznek. Ha egy jelzőt használ, akkor pozitív értékre van állítva, amely jelzi, hogy a dobás hosszúságának hossza, így megtudja, hány karakter elveszett. Ebben az esetben ellenőrizheti, hogy megtekintheti a jelző\u003e változó\u003e 0, vagy< 0.

Összefoglaló

Az SQL parancsokat eljárási nyelvekbe fektetik be két megközelítés erejének kombinálására. Néhány további SQL eszköz szükséges a munka megvalósításához. A Precompiler nevű program által továbbított SQL parancsok, a fő nyelvfordító által történő használatra alkalmas formanyomtatvány, valamint a fő nyelven használt formanyomtatvány, mivel a precoler létrehozására szolgáló alprogramokra való hívásokat - hozzáférési modulok hívják. Az ANSI támogatja az SQL mellékletet a nyelvekben: Pascal, Fortran, Cobol és PL / I. Más nyelveket is használnak, különösen SI. A beágyazott SQL röviden leírása érdekében ebben a fejezetben a legfontosabb helyek vannak:

* Az összes SQL befektetett parancs az EXEC SQL szavakkal kezdődik, és olyan módon végződik, amely az alkalmazott fő nyelvetől függ.

* Az SQL parancsokban elérhető összes fő változót SQL hirdetésekben kell bejelenteni, mielőtt használják őket.

* Minden nagyobb változónak meg kell előznie a vastagbélbe, amikor az SQL parancsot használják.

* A kérések megmenthetik a kimenetet közvetlenül a fő változókban a javaslat használatával, ha csak az egyetlen karakterláncot választják.

* A kurzorok használhatók a lekérdezés kimenetének mentésére, és minden alkalommal egy sorhoz való hozzáférés. A kurzorok bejelentése (ha a lekérdezés meghatározza, hogy melyiket tartalmazza), nyitva van (ha kérést kap), és zárt (ha törli a kurzor megjelenését). Ha a kurzor nyitva van, akkor a lekérdezési parancsot a lekérdezési kimenet minden sorához fordíthatja.

* A kurzorok módosíthatók vagy olvashatók. Módosíthatóvá válik, a kurzornak meg kell felelnie az összes kritériumnak, amellyel kielégíti a nézetet; Ezenkívül nem szabad használnia a megrendelést vagy az uniós ajánlatokat, amelyek minden esetben a nézők nem használhatók. Nem módosítható kurzor csak a kurzor olvasása.

* Ha a kurzor módosítható, akkor felhasználható annak meghatározására, hogy mely sorok szerepelnek a frissítésben és törölni a parancsokat, ahol a vállalat jelenlegi. A törlés vagy a frissítésnek az asztalon kívül kell lennie, amelyhez a hősök a lekérdezésbe kerülnek.

* Az SQLCode-t numerikus típusként kell bejelenteni minden olyan program esetében, amely a beágyazott SQL-t fogja használni. Az értéke automatikusan be van állítva, miután minden egyes SQL parancs végrehajtásra kerül.

* Ha az SQL parancs a szokásos módon történik, de nem tette ki az adatbázisban, az adatbázisban, az SQLCODE \u003d 100. Ha a parancs hibaüzenetet generált, az SQLCode megegyezik a hibát leíró hardverspecifikus negatív számmal. Ellenkező esetben az SQLCODE \u003d 0.

* A WHANGEL javaslat felhasználható annak érdekében, hogy meghatározza az SQLCode \u003d 100 (nem található), vagy ha az SQLODE egyenlő a negatív számmal (SQLError). A cselekvés lehet a program egy meghatározott címkéjére való áttérés (Goto

A fő SQL parancsok, amelyeket minden programozónak tudnia kell

Az SQL vagy a strukturált lekérdezés nyelvi nyelve (strukturált lekérdezések nyelve) úgy van kialakítva, hogy kezelje az adatokat a relációs adatbázis-rendszerben (RDBMS). Ez a cikk megmondja a gyakran használt SQL parancsokat, amelyeket minden programozónak ismernie kell. Ez az anyag ideális azok számára, akik szeretnének frissíteni tudásukat az SQL-ről az állásinterjú előtt. Ehhez szétszerelje a cikkben megadott példákat, és emlékezzen arra, hogy mi az adatbázisok párjai.

Kérjük, vegye figyelembe, hogy egyes adatbázisrendszerekben meg kell adnia egy pontosvesszőt az egyes operátorok végén. A pontosvessző egy szabványos mutató az egyes operátorok végéhez SQL-ben. A példák a MySQL-t használják, így a vesszővel rendelkező pont szükséges.

Az adatbázis beállítása példákhoz

Hozzon létre egy adatbázist a parancsok bemutatásához. Két fájlt kell letöltenie a munkához: dll.sql és insestatements.sql. Ezt követően nyissa meg a terminál és jelentkezzen be a MySQL konzolra a következő parancs segítségével (a cikk azt sugallja, hogy a MySQL már telepítve van a rendszerbe):

Mysql -u root -p

Ezután írja be a jelszót.

Futtassa a következő parancsot. Hívja az "Egyetem" adatbázist:

Adatbázis-egyetem létrehozása; Használja az egyetemet; Forrás. ; Forrás

Parancsok az adatbázisokkal való munkavégzéshez

1. A hozzáférhető adatbázisok megtekintése

Adatbázisok megjelenítése;

2. Új adatbázis létrehozása

Adatbázis létrehozása;

3. Válassza az Adatbázis lehetőséget

Használat ;

4. Importálja az SQL parancsokat a File.SQL fájlból

Forrás ;

5. Adatbázis törlése

Drop adatbázis. ;

Asztalokkal dolgozik

6. Az adatbázisban rendelkezésre álló táblázatok megtekintése

Táblázatok megjelenítése;

7. Új táblázat létrehozása

Táblázat létrehozása ( , , ELSŐDLEGES KULCS ( ), Idegen kulcs ( ) Referenciák. ());

Integritáshatárok az asztal létrehozásakor

Szükség lehet bizonyos oszlopok korlátozásainak létrehozására a táblázatban. A táblázat létrehozásakor beállíthatja a következő korlátozásokat:

  • az asztali sejt nem lehet null;
  • elsődleges kulcs - elsődleges kulcs (col_name1, col_name2, ...);
  • külső kulcs - idegen kulcs (col_namex1, ..., col_namexn) Referenciák, table_name (col_namex1, ..., col_namexn).

Egynél több elsődleges kulcsot állíthat be. Ebben az esetben kiderül egy kompozit elsődleges kulcsot.

Példa

Hozzon létre egy "oktató" táblázatot:

Táblázat-oktató létrehozása (ID Char (5), név Varchar (20) NULL, DEPT_NAME VARCHAR (20), fizetés numerikus (8.2), elsődleges kulcs (ID), külföldi kulcs (Dept_Name) Referencia osztály (Dept_Name)

8. Táblázat információ

Megnézheti a különböző információkat (az értékek típusa, a kulcs vagy sem) a következő parancs oszlopairól:

Leír ;

9. Adatok hozzáadása az asztalhoz

Beilleszt (, , , ...) értékek ( , , , …);

Adatok hozzáadása a táblázat minden oszlopához, nem szükséges megadni az oszlopok nevét.

Beilleszt Értékek ( , , , …);

10. Táblázat-adatok frissítése

Frissítés. KÉSZLET. = , = ... Hol ;

11. Az összes adat törlése az asztalról

Törölje. ;

12. Törölje az asztalt

Csepp asztal ;

Parancsok létrehozására kéréseket

13. Válassza ki

Válassza ki az adott táblázatból származó adatokat:

Kiválaszt , ... tól től. ;

A következő parancs visszavonhatja az összes adatot az asztalról:

VÁLASSZON. ;

14. Válassza ki a különbséget

Az asztali oszlopok tartalmazhatnak ismétlődő adatokat. A SELECT SELECTIONCE csak nem ismételt adatok beszerzéséhez.

Válassza a Különleges lehetőséget. , ... tól től. ;

15. Whater

Használhatja azt a mely kulcsszót a kiválasztáshoz a lekérdezés feltételeinek megadásához:

Kiválaszt , ... tól től. Hol. ;

A lekérdezésben a következő feltételek állnak be:

  • szöveges összehasonlítás;
  • a numerikus értékek összehasonlítása;
  • logikai műveletek és (s), vagy (vagy), és nem (megtagadás).

Példa

Próbálja meg végrehajtani a következő parancsokat. Figyeljen a megadott feltételekre, ahol:

Válassza a * menüpontot, ahol a Dept_Name \u003d 'Comp. Sci. '; Válassza a * menüpontot, ahol a Credits\u003e 3; Válassza a * menüpontot, ahol a Dept_Name \u003d "Comp. Sci." És kredit\u003e 3;

16. Csoport.

A csoportot az üzemeltető által gyakran használják az összesített funkciók, például szám, max, min, összeg és AVG, a kimeneti értékek csoportosításához.

Kiválaszt , ... tól től. Csoportosít. ;

Példa

Visszavonja az egyes karokmányok számát:

Válassza ki a COUNT (CUSHE_ID), a DEPT_NAME programot a Dept_Name programtól;

17. Miután.

A kulcsszóval az SQL-hez adódott, mert ahol nem használható az aggregált funkciók munkájához.

Kiválaszt , ... tól től. Csoportosít. Miután

Példa

Visszavesszük azokat a karokat, akiknek több mint egy kurzusa van:

Válassza ki a COUNT (COURE_ID), a Dept_Name programot a Dept_Name-tól a COUNT (CUSHE_ID)\u003e 1;

18. Rendelés szerint.

A megrendelés a lekérdezés eredményeinek rendezésére vagy növekvő eredményeinek rendezésére szolgál. Rendelések sorrendje növekvő, ha az ASC vagy az DESC válogatási módszer nem adja meg.

Kiválaszt , ... tól től. Rendezés. , , ... asc | desc;

Példa

Visszavonja a kurzusok listáját növekvő és leereszkedve a hitelek száma:

Válassza a * Kreditektől fogva a * -ig; Válassza ki a * -ot a CRYS DESC-tól;

19. Között.

A konkrét résből származó adatértékek kiválasztására szolgál. Numerikus és szöveges értékek használhatók, valamint a dátumok.

Kiválaszt , ... tól től. Hol. Között. És. ;

Példa

Visszavonjuk az oktatók listáját, akiknek fizetése több mint 50 000, de kevesebb, mint 100.000:

Válasszon * az oktatótól, ahol 50 000 és 100000 közötti fizetés;

20. Mint

A hasonló nyilatkozatot akkor használják, ahol a hasonló érték keresési sablonjának beállítása.

Két szabad üzemeltető van, amelyek hasonlóak:

  • % (nem, egy vagy több karakter);
  • _ (egy karakter).
Kiválaszt , ... tól től. Hol. Mint ;

Példa

Visszavonja a kurzusok listáját, amelynek nevét "to" és a kurzusok listáját tartalmazza, amelynek neve a "cs-" -vel kezdődik:

Válassza ki a * menüpontot, ahol a cím, mint a "%-t%"; Válassza a * menüpontot, ahol a tanfolyam_id, mint a "CS -___";

21. BE.

A Be in használatával több értéket adhat meg az üzemeltető számára:

Kiválaszt , ... tól től. Hol. Ban ben ( , , …);

Példa

Visszavonjuk a Comp utasok listájának listáját. Sci., Fizika és Elec. Eng.:

Válassza ki a * -ot, ahol a Dept_Name-t a ("Comp. Sci.", "Fizika", "Elec. Eng.")

22. Csatlakozzon.

Csatlakoztunk két vagy több asztal kommunikálására közös tulajdonságokkal benne. Az alábbi kép különböző módon jeleníti meg az SQL kombinációját. Figyeljen a bal külső Szövetség és a megfelelő külső Szövetség közötti különbségre:

Kiválaszt , ... tól től. Csatlakozik. TOVÁBB. = ;

1. példa.

Visszavonjuk az összes kurzus és a vonatkozó kari információk listáját:

Válassza ki a * Természetes csatlakozási osztályt a COUTE.DEPT_NAME \u003d Department.Dept_Name;

2. példa.

Visszavonjon egy listát az összes kötelező tanfolyamról és részletről róluk:

Válassza a PREREQ.COURSE_ID, CITY, DPT_NAME, CREDITS, PREREREQ_ID from Prereq_Id from Prereq Bal Outer Course a Prereq.Course_ID \u003d Course.Course_id;

3. példa.

Visszavonjuk az összes kurzus jegyzékét, függetlenül attól, hogy szükségesek-e vagy sem:

Válasszon tanfolyamot.Course_id, Cím, Dept_Name, Credits, Prereq_ID a Prereq Jobbra csatlakozik a PREREREQ.COURSE_ID \u003d COURE.COURSE_ID;

23. Nézd meg.

A nézet egy virtuális SQL tábla, amelyet egy kifejezés eredményeként hoztak létre. Tartalmaz sorokat és oszlopokat, és nagyon hasonlít a szokásos SQL asztalra. A nézet mindig az adatbázisból származó legfrissebb információkat mutatja.

Teremtmény

Nézet létrehozása. AS SELECT , ... tól től. Hol. ;

Eltávolítás

Drop nézet. ;

Példa

Hozzon létre egy nézetet, amely 3 kölcsönzésből áll:

24. Összesített funkciók

Ezeket a funkciókat a vizsgált adatokhoz kapcsolódó kumulatív eredmény elérésére használják. Az alábbiakban általában aggregált funkciókat használnak:

  • Szám (col_name) - visszaadja a sorok számát;
  • Összeg (col_name) - visszaadja az értékek mennyiségét ebben az oszlopban;
  • Avg (col_name) - visszaadja az oszlop átlagos értékét;
  • Min (col_name) - visszaadja az oszlop legkisebb értékét;
  • Max (col_name) - visszaadja az oszlop legnagyobb értékét.

25. Beágyazott szubkókák

A befektetett szubkókák olyan SQL lekérdezések, amelyek tartalmazzák a kiválasztást, és ahol a kifejezések egy másik kérésre befektetnek.

Példa

Keressen tanfolyamokat, amelyeket 2009 őszén és 2010 tavaszán tanítottak:

Válassza ki a különálló kurzusokat a szakaszban, ahol a félév \u003d "esik" és év \u003d '2009 és a tanfolyam (válassza a Semper_ID-t, ahol a félév \u003d "tavasz" és év \u003d 2010);

Programozási nyelv

Az SQL (strukturált lekérdezési nyelv egy strukturált lekérdezési nyelv) - adatbáziskezelési nyelv relációs adatbázisokhoz. Az SQL maga nem egy Turing-Teljes programozási nyelv, de a szabvány lehetővé teszi, hogy eljárási kiterjesztéseket hozzon létre annak, amely kiterjeszti a funkcionalitását egy teljes körű programozási nyelvre.

A nyelvet az 1970-es években hozták létre az adatbázis-kezelő rendszer (DBMS) System (DBMS) rendszerhez. Később "SQL" -nek nevezték, hogy elkerüljék a védjegyek konfliktusát. 1979-ben az SQL-t először az Oracle V2 kereskedelmi termék formájában jelent meg.

Az első hivatalos nyelvstandard az ANSI 1986-ban és az ISO-ban - 1987-ben fogadta el az ISO-t. Azóta több szabványt hoztak létre, ezek közül néhányan megismételték az előzőeket kisebb eltérésekkel, mások pedig új alapvető jellemzőket vettek igénybe.

A szabványok létezése ellenére a leggyakoribb SQL implementációk olyan erősek, hogy a kód ritkán átkerül egy DBMS-ről a másikra, anélkül, hogy jelentős változások lenne. Ez a szabvány nagy volumenének és összetettségének köszönhető, valamint a végrehajtás bizonyos területein belüli előírások hiánya.

Az SQL-t egyszerű szabványosított módszerként hozták létre a relációs adatbázisban lévő adatok kivonására és kezelésére. Később nehezebbé vált, mint gondolta, és egy fejlesztő eszközré vált, nem pedig a végfelhasználó. Jelenleg az SQL (többnyire az Oracle megvalósításában) továbbra is a legnépszerűbb adatbázis-kezelési nyelvek, bár számos alternatíva van.

Az SQL négy különálló részből áll:

  1. az adatmeghatározás nyelvét (DDL) az adatbázisban tárolt adatstruktúrák meghatározására használják. A DDL operátorok lehetővé teszik az egyes objektumok létrehozását, módosítását és törlését az adatbázisban. A megengedett típusú objektumok függenek az alkalmazott DBMS-től, és általában adatbázisokat, felhasználókat, táblákat és számos kisebb segédeszközt, például szerepeket és mutatókat tartalmaznak.
  2. az adatkezelési nyelvet (DML) az adatbázisban lévő adatok kivonására és módosítására használják. A DML-operátorok lehetővé teszik, hogy kivonja, beilleszti, módosítsa és törölje az adatokat táblákban. Néha az adatkitermelő üzemeltetők nem tekinthetők a DML részeként, mivel nem változtatják meg az adatállapotot. Minden DML-operátor deklaratív.
  3. az adat hozzáférési definíciós nyelv (DCL) az adatbázisban lévő adatokhoz való hozzáférés ellenőrzésére szolgál. A DCL-szolgáltatók a kiváltságokra vonatkoznak, és lehetővé teszik, hogy kiadhassanak, és válasszák bizonyos DDL és DML nyilatkozatok bizonyos adatbázis-objektumokra való alkalmazására vonatkozó jogokat.
  4. a tranzakcióvezérlőnyelv (TCL) az adatbázisban lévő tranzakció feldolgozásának ellenőrzésére szolgál. Általában a TCL-nyilatkozatok magukban foglalják a tranzakció során bekövetkező változások megerősítését, a törlést és a savepointot, hogy megtörjék a tranzakciót több kisebb részre.

Meg kell jegyezni, hogy az SQL vámáru-programozási paradigmát valósít meg: Minden egyes operátor csak a szükséges intézkedéseket írja le, és a DBMS úgy dönt, hogy végrehajtja azt, vagyis A művelet elvégzéséhez szükséges elemi műveleteket tervezi, és elvégzi őket. Az SQL képességeinek hatékony használatához azonban a fejlesztőnek meg kell értened, hogy a DBMS-nek hogyan elemzi az egyes üzemeltetőket, és létrehozza a végrehajtási tervet.

Példák:

Helló Világ!

Példa az Oracle 10G SQL, Oracle 11G SQL verzióira

A "Hello, World!" Karakterlánc a beépített kettős táblázatból van kiválasztva, amelyek nem igényelnek hozzáférést ehhez a táblázatokhoz.

válassza a "Hello, World!" kettős;

Faktoriális:

Példa az Oracle 10G SQL, Oracle 11G SQL verzióira

Az SQL nem támogatja a ciklusokat, rekurziót vagy felhasználói funkciókat. Ez a példa bemutatja a lehetséges bypass útvonalat:

  • level pszeudo-beetter, hogy hozzon létre pszeudo-szalag T1 és T2-t tartalmazó számokat 1-től 16-ig,
  • Összefoglaló funkció, amely lehetővé teszi számunkra, hogy összefoglaljuk a készlet elemeit a ciklus kifejezett használata nélkül,
  • és matematikai függvények LN és Exp, lehetővé téve a munka helyettesítését (az SQL által biztosított tényezők kiszámításához szükséges).

Sor "0! \u003d 1 "nem adja meg az eredményeként kapott sorkészletet, mert Az LN (0) kiszámításának kísérlete kivételre vezet.

Fibonacci számok:

Példa az Oracle 10G SQL, Oracle 11G SQL verzióira

Az SQL nem támogatja a ciklusokat vagy rekurziót, emellett a táblázat vagy kérelem különböző soraiból származó mezők összekapcsolása nem szabványos összesített funkció. Ez a példa:

  • bina Formula és matematikai funkciók kerek, hatalom és SQRT a Fibonacci n-th számának kiszámításához;
  • level Pseudo-Toll, hogy hozzon létre Pseudo-szalag T1, amely számokat tartalmaz 1-től 16-ig;
  • beépített funkció sys_connect_by_path a kapott számok sorrendben történő rendezett összekapcsolásához.

Válassza ki a Cserélőt (max (sys_connect_by_path (fib ||, "," / "))," / "," ") || "..." FIBLIST (NINCS N, FIB, ROW_NUMBER () Kiválasztás (NYILATKOZTATÁS N) R (Válassza az N, kerek (Power ((1 + SQRT (5)) * 0.5, N) (1 - SQRT (5)) * 0.5, N)) / SQRT (5)) FIB (Válassza ki az N szintet a kettős csatlakozásból szinten<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

Helló Világ!

Példa a Microsoft SQL Server 2005 verzióira, a Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012, MySQL 5, PostgreSQL 8.4, PostgreSQL 9.1, SQLite 3.7.3

válassza a "Hello, World!" ;

Faktoriális:

Példa a Microsoft SQL Server 2005 verzióira, a Microsoft SQL Server 2008 R2, a Microsoft SQL Server 2012

A rekurzív kérelem révén megvalósított tényleges meghatározását használják. Minden lekérdezési karakterlánc két numerikus mezőt tartalmaz - n és n!, Mindegyik következő sor az előző adatok alapján kerül kiszámításra.

Az egész tényezőt csak 20! Amikor megpróbál kiszámítani 21! Van egy hiba "aritmetikai túlcsordulás hiba", vagyis Van egy kisülési háló túlcsordulás.

A valós számok esetén a faktori 100 számítható! (Ehhez például a 3. sorban meg kell cserélnie a Bigint-t a 3. sorban)

Fibonacci számok:

Példa a Microsoft SQL Server 2005 verzióira, a Microsoft SQL Server 2008 R2, a Microsoft SQL Server 2012

A rekurzív kérelemen keresztül megvalósított Fibonacci számok iteratív definícióját használják. Minden lekérdezési karakterlánc két szomszédos szekvenciaszámot tartalmaz, és a következő sor kerül kiszámításra (az utolsó szám, az utolsó szám, a számok száma). Így minden szám, az első és az utolsó kivételével kétszer találhatók, ezért az eredmény csak az egyes sorok első számát tartalmazza.

Faktoriális:

Példa az Oracle 10G SQL, Oracle 11G SQL verzióira

Ez a példa bemutatja az Oracle 10g verzióból álló modellüzemeltető használatát, és lehetővé teszi a lekérdezési sorok feldolgozását tömbelemekként. Minden vonal két mezőt tartalmaz - a szám n sorszáma és faktoriális F.

válasszon n || "! \u003d" || F Faktoriális tól Dual Model Vissza Minden sor dimenzió (0 d) intézkedések (0 F, 1 n) szabályzat Iteráció (17) (F [Iteration_Number] \u003d Decode (Iteration_Number, 0, 1, F [Iteration_Number - 1] * Iteration_Number) , n [itation_number] \u003d itation_number);

Fibonacci számok:

Példa az Oracle 10G SQL, Oracle 11G SQL verzióira

Ez a példa bemutatja az Oracle 10g verzióból álló modellüzemeltető használatát, és lehetővé teszi a lekérdezési sorok feldolgozását tömbelemekként. Minden vonal két mezőt tartalmaz - maga a Fibonacci számát és az összes szám összekapcsolását, kevesebb vagy egyenlő. A számok számú iteratív összekapcsolása ugyanabban a lekérdezésben, amelyben keletkeznek, könnyebb és gyorsabb, mint az aggregáció, mint egy külön cselekvés.

válassza a Max (S) || ", ..." (a kettős modelltől származó S-tól (0 d) dimenziót ad vissza (0 d) intézkedésekkel (Cast ("Varchar2 (200)) S, 0 F) szabályok ITERATE (16) (F [itation_number] \u003d dekódolás (Itateration_number, 0, 1, 1, 1] + f [itation_number - 2]), s [itation_number] \u003d dekódolás (iteration_number, 0, to_char (f [itation_number]), s [itation_number - 1] || "," || to_char (f [itation_number]))))))))

Faktoriális:

Példa a MySQL 5 verzióira

válassza ki a CONCAT (CAST (T2. N CHAN), "! \u003d", CAST (EXP (SUM (LOG (LOG (LOG (LOG (T1: N))) CHAR)))) (Válassza a @ i: \u003d 0) értéket, mint SEL1 Limit 16) T1, (válassza a @ J: \u003d @ J + 1 értéket az asztalról (válassza a @ J: \u003d 0), mint SEL1 Limit 16) T2, ahol T1. N.<= t2 . n group by t2 . n

Fibonacci számok:

Példa a MySQL 5 verzióira

Cserélje ki az asztalt bármely táblázatra, amelyhez hozzáférés van, például a mysql.help_topic.

válassza ki a CONCAT (GROUP_CONCAT (FVATORATOR ",", "),", ... ") lehetőséget (válassza a @ F: \u003d @ I + @ J-t, mint f, @ I: \u003d @ J, @ J: \u003d @ F az asztalról, (Válassza az @ i: \u003d 1, @, @ J: \u003d 0) SEL1 limit 16) t

Helló Világ!

Példa az Oracle 10G SQL, Oracle 11G SQL verzióira

Ebben a példában egy névtelen blokk PL / SQL-t használnak, amely üzenetet jelenít meg a szabványos kimeneti adatfolyamhoz a DBMS_Output csomag segítségével.

kezdődik a dbms_output. Put_line ("Hello, World!"); vége;

Faktoriális:

Példa az Oracle 10G SQL, Oracle 11G SQL verzióira

Ez a példa bemutatja a faktori gyárak iteratív kiszámítását pl / sql.

deklare n szám: \u003d 0; F szám: \u003d 1; Kezdődik, míg (n<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;

Fibonacci számok:

Példa az Oracle 10G SQL, Oracle 11G SQL verzióira

Ez a példa a Fibonacci számok iteratív definícióját használja. A már kiszámított számok a varray adatszerkezetében vannak tárolva - a tömb analógja.

a típusvektor kijelentése Varray (16) szám; FIB vektor: \u003d vektor (); I szám; S Varchar2 (100); Kezdődik a fib. kiterjeszteni (16); FIB (1): \u003d 1; FIB (2): \u003d 1; S: \u003d fib (1) || "", "|| FIB (2) || "", "; Az i 3 .. 16 hurok FIB (I): \u003d FIB (I - 1) + FIB (I - 2); S: \u003d s || Fib (i) || "", "; Végharc; DBMS_Output. Put_line (S || "..."); vége;

Másodfokú egyenlet:

Példa az Oracle 10G SQL, Oracle 11G SQL verzióira

Ezt a példát az SQL * Plus, a Toad és a PL / SQL fejlesztő tesztelte.

A Pure SQL lehetővé teszi a változók bevitelét a lekérdezés végrehajtása során cserélhető változók formájában. Az ilyen változó meghatározásához nevét (ebben az esetben az A, B és C) az Ampersand és előtte kell használni, minden alkalommal, amikor erre a változóra kell hivatkoznia. A lekérdezés végrehajtásakor a felhasználó megkapja a lekérdezés során használt cserélhető változók értékeinek megadását. Az értékek bevitele után az ilyen változóra való hivatkozás az értéke váltja fel, és a beérkezett lekérdezést elvégzik.

Számos módja van a cserélhető változók értékeinek megadására. Ebben a példában az első hivatkozás az egyes változókra az egyetlen, de kettős ampersand, de kettős ampersand. Így, az érték minden egyes változó be csak egyszer, és az összes ezt követő vonatkozó utalás is kell cserélni az azonos értékű (használatakor egyetlen ampersand SQL * Plus, az érték minden egyes hivatkozás ugyanazon változót kell adni külön-külön ). A PL / SQL Developer, linkek, minden változót kell megelőznie egyetlen jele &, különben az ORA-01008 „nem minden változót kötött” hibaüzenet jelenik meg.

A példa első sora meghatározza a decimális elválasztó szimbólumát, amelyet a gyökérszámok a karakterláncba történő átalakításakor használnak.

A kérés maga négy különböző kérésből áll. Mindegyik kérelem visszaadja a számítások eredményét tartalmazó karakterláncot (A \u003d 0, D \u003d 0, D\u003e 0 és D<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.

aLTER Session Set NLS_NUMERICER_CHARACTSERS \u003d "."; Válassza ki a "Nem négyzetes egyenletet". ANS DUAL A && A \u003d 0 Union Select "x \u003d" || to_char (- && b / 2 / & A) a kettős, ahol & A! \u003d 0 és & b * & b - 4 * & A * && c \u003d 0 Union Select "x1 \u003d" || to_char ((- & B + SQRT (& B * & B - 4 * & A * & C)) || ", x2 \u003d" || TO_CHAR (- & B - SQRT (& B * & B - 4 * & A * & C)) / 2 / & A Dual A & A! \u003d 0 és B * & B - 4 * & A * & C \u003e 0 Unió kiválasztása "x1 \u003d (" || to_char (- & b / 2 / & a) || "," || to_char (SQRT (- & B * & B + 4 * & A * & C) / 2 / & A) || ")"), "|| "X2 \u003d (" || to_char (- & B / 2 / & A) || "," || to_char (- SQRT (- & B * & B + 4 * & A * & C) / 2 / & A ) || ")" A kettős, ahol & A! \u003d 0 és & b * & b - 4 * & A * & c< 0 ;

A ciklus előző két cikkében, a magazin 6. és 7. pontjában közzétett, különböző adat-hozzáférési mechanizmusok, köztük az Ado, a BDE és az alternatívái. Most már tudjuk, hogyan válasszuk ki az adat hozzáférési technológiát egy adott pár "DBMS - Fejlesztési eszköz".

Az adat-hozzáférési technológia, végül gondolkodhat az adatok és a metaadatok manipulálására. A manipuláció módszerei specifikusak lehetnek ehhez a DBMS-hez (például a DBMS ügyfélrészének használatával az adatbázis-objektumok eléréséhez) vagy az adat-hozzáférési mechanizmushoz. Mindazonáltal van egy többé-kevésbé univerzális módszer az adatok manipulálására, amelyet szinte minden kiszolgáló relációs dbms és a legtöbb univerzális adat hozzáférési mechanizmus támogat (beleértve az asztali DBMS használatával együtt). Ez a módszer az SQL nyelv (strukturált lekérdezési nyelv - strukturált lekérdezések nyelve) alkalmazása. Az alábbiakban megnézzük a nyelv célját és jellemzőit, valamint tanulmányozzuk az adatok eltávolítását és összegzését, adjunk hozzá, töröljék és módosítsák a rekordokat, védi az adatokat a jogosulatlan hozzáférésből, adatbázisok létrehozása. Az SQL részletesebb tanulmányozásához javasolhatjuk a könyv Martin Graier "Bevezetés SQL-jét" (M., Lori, 1996) és "SQL. Referencia útmutató "(M., Lori, 1997).

Bevezetés

A strukturált lekérdezési nyelv egy példátlan nyelv, amelyet a relációs DBMS adatok kezelésére használnak. A "Necrossure" kifejezés azt jelenti, hogy ebben a nyelven megfogalmazhatja, hogy mit kell tennie az adatokhoz, de nem utasíthatja el, hogyan kell megtenni. Más szóval ebben a nyelven nincs algoritmikus struktúrák, például a címkék, a ciklusüzemeltetők, a feltételes átmenetek stb.

Az 1970-es évek elején az SQL nyelvet az IBM kutatási projekt eredményeként hozták létre, amelynek célja a relációs adatok által manipuláció nyelve volt. Kezdetben úgynevezett folytatása (strukturált angol lekérdezési nyelv), majd folytatás / 2, majd - csak SQL. A hivatalos szabvány SQL tette közzé ANSI (American National Standards Institute - National Institute of Standardization, USA) 1986-ban (ez a leggyakrabban használt SQL végrehajtás). Ezt a szabványt 1989-ben és 1992-ben bővítették, így az utolsó standard SQL-t SQL92-nek nevezik. Jelenleg a munka folyamatban van az SQL3 szabványban, amely tartalmaz néhány objektumorientált kiterjesztést.

Az ANSI szabványnak három szintje - a kezdeti, köztes és teljes. Sok gyártó szerver DBMS, mint az IBM, Informix, a Microsoft, az Oracle és a Sybase használata SQL saját megvalósítások alapján az ANSI szabvány (reagál legalább a kezdeti szintje megfelel a szabvány), és tartalmaznia néhány kiterjesztés specifikusak erre DBMS.

Az adott DBMS-ben használt SQL verziónak való megfeleléssel kapcsolatos további információkért megtalálható a DBMS-ben megadott dokumentációban.

Hogyan működik az SQL

Nézzük meg, hogyan működik az SQL. Tegyük fel, hogy bármely DBMS által vezérelt adatbázis van. Az adatok kivonásához az SQL-ben formulázott lekérdezést használják. A DBMS feldolgozza ezt a kérést, megkeresi a kért adatokat, és visszaadja őket. Ezt a folyamatot vázlatosan ábrázolja. Egy.

Mivel később látni fogjuk, az SQL nemcsak az adatok kivonására, hanem az adatstruktúrát is meghatározhatja, az adatok hozzáadása és törlése, korlátozza vagy hozzáférést biztosít az adatokhoz, fenntartja a referencia-integritást.

Figyeljen arra, hogy az SQL maga nem DBMS vagy egy különálló termék. Ez a DBMS-vel való kölcsönhatáshoz használt nyelv, és bizonyos értelemben szerves rész.

Adatmeghatározás nyelv (DDL)

Az adatmeghatározás nyelv olyan olyan operátorokat tartalmaz, amelyek lehetővé teszik az adatbázisok és objektumok létrehozását, megváltoztatását (táblázat, ábrázolások stb.). Ezek az üzemeltetők a táblázatban szerepelnek. egy.

Asztal 1

Operátor

Leírás

Új táblázat hozzáadása az adatbázishoz

A táblázat törléséhez használt adatbázisból

A meglévő táblázat szerkezetének megváltoztatására használják

Új beadvány hozzáadása az adatbázishoz

A nézet törléséhez használt adatbázisból

Ezen a mezőnek index létrehozására szolgál.

Egy meglévő index eltávolítására szolgál

Új rendszer létrehozására szolgál az adatbázisban

Az adatbázis diagramjának törlésére szolgál

Új domain létrehozására szolgál

A domain felülbírálására használják

Egy domain eltávolítására használják az adatbázisból

Adat manipulációs nyelv (DML)

Az adatkezelési nyelv olyan operátorokat tartalmaz, amelyek lehetővé teszik az adatok kiválasztását, adatait, törlése és módosítása. Kérjük, vegye figyelembe, hogy ezek az üzemeltetők nem kötelesek befejezni azokat a tranzakciót, amelyen belül hívják őket. A DML-operátorok táblázatban vannak bemutatva. 2.

2. táblázat

Néha a SELECT utasítás egy külön kategóriára vonatkozik, az úgynevezett adatnézet nyelv (DQL).

Cursor Control Language (CCL)

A kurzorvezérlő nyelvi operátorok a kurzor meghatározására szolgálnak, az SQL-javaslatok végrehajtásának, valamint néhány más üzemeltető számára történő előkészítéséhez. A CCL-szolgáltatók táblázatban vannak bemutatva. öt.

5. táblázat.

Operátor

Leírás

A kurzor megnevezésére szolgál

A kérelmi terv leírására szolgál. Ez az operátor SQL kiterjesztés a Microsoft SQL Server 7.0-hoz. Nem köteles más DBMS-ben futni. Például az Oracle esetében használja a magyarázó tervkezelőt

A kurzor megnyitására szolgál a lekérdezési eredmények kézhezvételekor.

A lekérdezési eredmények sorának sorát kapták

A kurzor bezárásához használt

Az SQL üzemeltető végrehajtására használják végrehajtáshoz

Az SQL operátor végrehajtására szolgál

Az elkészített kérelem leírására használják

Az összes SQL operátor az 1. ábrán látható. 2.

Minden SQL utasítás egy ige-val kezdődik, amely egy kulcsszó, amely meghatározza, hogy pontosan ez a kezelő (válassza ki, beilleszti, törölje ...). Az üzemeltető olyan javaslatokat is tartalmaz, amelyek tartalmaznak információkat arról, hogy milyen adatműveletek készülnek. Minden javaslat egy kulcsszóval kezdődik, például ahol, ahol stb. A javaslatszerkezet függvényétől függ - számos javaslat tartalmazza a táblázatok vagy mezők nevét, egyesek tartalmazhatnak további kulcsszavakat, állandókat vagy kifejezést.

Az SQL operátorok által végezhető el

Minden modern kiszolgáló adatbázis (és sok népszerű asztali dbms) tartalmaz egy segédprogramot, amely lehetővé teszi az SQL-ajánlat elvégzését, és megismerheti az eredményt. Különösen az Oracle kliens rész tartalmaz egy SQL Plus segédprogramot, és a Microsoft SQL Server egy SQL Query Analyzer segédprogram. Ez a segédprogram, hogy bemutassuk az SQL képességeit, és olyan adatbázisként fogjuk bemutatni, amelyen "kísérletezzünk", vigye a Northwind adatbázisot, amelyet a Microsoft SQL Server 7.0 szolgáltatással szállítunk. Elvileg használhat egy másik adatbázist és bármely más segédprogramot, amely képes ebben az SQL-javaslat adatbázisában elvégezni, és megjeleníti az eredményeket (vagy akár saját, bármilyen fejlesztési eszköz használatával - Visual Basic, Delphi, C ++ Builder stb.) . Azonban csak abban az esetben, ha javasoljuk az adatbázis biztonsági mentését.

Szükség van "Válassza ki a * menüpontot, ahol a \u003d b a c" -ről vagy "Válassza ki, ahol a \u003d b a c-ről *"?

Ha úgy nézel ki, mint én, egyetértesz: az SQL az egyik olyan darab, amely könnyen megjelenik az első pillantásra (olvassa el az angolul!), De valamilyen oknál fogva a Google minden egyszerű lekérdezését a megfelelő szintaxis megtalálja.


És akkor a Joyans elkezdődik, aggregáció, szubkókák, és kiderül, hogy a Belibard. Ez így tűnik:


Válasszon tagokat.Firstname || "" || Tagok.LastName mint "teljes név" a kölcsönök belső csatlakozás tagjai a tagok.Member.memberid \u003d hitelek ..Memberid Belső Csatlakozzon könyvek a könyvekről.BookId \u003d kölcsönök. ) Könyvekből)) csoport tagjai.Firstname, memerts.lastname;

Boe! Ez elhagyja az újoncot, vagy akár egy középszintű fejlesztőt, ha először látja az SQL-t. De ez nem minden rossz.


Könnyen emlékezhető arra, hogy mi az intuitív, és ennek a kézikönyvnek köszönhetően remélem, hogy csökkentem a bejárati küszöböt az SQL-ben kezdőknek, és már tapasztalt új megjelenést az SQL-en.


Annak ellenére, hogy az SQL Syntax szinte nem különbözik a különböző adatbázisokban, ebben a cikkben a PostgreSQL-t kérésekre használják. Néhány példa a MySQL-ben és más bázisokban fog működni.

1. Három mágikus szó

Az SQL-ben sok kulcsszó, de válassza ki, és hol vannak jelen szinte minden kérésben. Egy kicsit később meg fogod érteni, hogy ezek a három szó az építési lekérdezések legfontosabb szempontja, míg más, összetettebb kérések csak felépítmények.

2. A bázisunk

Vessünk egy pillantást az adatbázisra, amelyet példaként fogunk használni ebben a cikkben:







Van egy könyvtárunk és az emberek. Van egy speciális táblázat a kiadott könyvek számviteli.

  • A "Könyvek" asztal tárolja a címet, a szerzőt, a közzététel dátumát és könyvet. Minden egyszerű.
  • A "Tagok" táblázatban - a könyvtárban rögzített összes ember nevei és vezetékneve.
  • A kölcsönök asztal tárolja a könyvtárból származó könyveket. A Bookid oszlop a "Könyvek" táblázatban vett könyv azonosítójára utal, és a tagi oszlop a tagok táblázatának megfelelő személyére utal. Mi is a kiadás időpontja és dátuma, amikor a könyvet vissza kell küldeni.

3. Egyszerű kérés

Kezdjük egy egyszerű kéréssel: Szükségünk van elnevezés és azonosító (ID) a szerző által írt összes könyv "Dan Brown"


A kérés ilyen lesz:


Válassza ki a Bookid mint "ID", Cím a könyvekből, ahol a szerző \u003d "Dan Brown";

És az eredmény:


idézés cím
2 Az elveszett szimbólum.
4 Pokol.

Nagyon egyszerű. Elemezzük meg a kérést, hogy megértsük, mi történik.

3.1 - Honnan veszünk

Most nyilvánvalónak tűnhet, de később nagyon fontos lesz, amikor továbblépünk a kapcsolatokhoz és a szubkókákhoz.


Pontoktól az asztalig, amelyre szükséged van egy kérésre. Ez lehet egy meglévő táblázat (mint a fenti példában), vagy egy táblázat, amelyet a repülési kapcsolatokon vagy szubkókákon keresztül hoztak létre.

3.2 Hol - milyen adatok jelennek meg

Ahol egyszerűen úgy viselkedik, mint egy szűrő sorhogy visszavonulunk. A mi esetünkben csak azokat a sorokat szeretnénk látni, ahol a szerző oszlopban a "Dan Brown".

3.3 Válassza ki - az adatok megjelenítését

Most, hogy rendelkezünk az összes olyan oszlopra, amire szükségünk van az asztalról, amire szükségünk van, pontosan el kell döntenie, hogyan jelenítse meg ezt az adatokat. Esetünkben csak nevek és könyv azonosítók szükségesek, így mi vagyunk választ A kiválasztás használatával. Ugyanakkor átnevezheti az oszlopot az alkalmazásával.


Minden kérés egyszerű diagram segítségével vizualizálható:


4. Csatlakozások (Joyna)

Most szeretnénk látni a neveket (nem feltétlenül egyedülálló) minden Dan Brown könyveit, akiket a könyvtárból vettek, és amikor ezek a könyvek vissza kell térniük:


Válassza ki a Books.title mint "címet", kölcsönvevek.returndate mint "Visszatérési dátum" a kölcsönökhez Csatlakozzon könyvek a kölcsönökről.BookId \u003d könyvek.Book, ahol könyvek.Author \u003d "Dan Brown";

Eredmény:


Cím VISSZATÉRÍTÉSI DÁTUM.
Az elveszett szimbólum. 2016-03-23 00:00:00
Pokol. 2016-04-13 00:00:00
Az elveszett szimbólum. 2016-04-19 00:00:00

A kérés nagyrészt hasonló az előzőhez kivéve a Szakaszok. Ez azt jelenti adatot kérünk egy másik táblázatból. Nem vonatkozunk a "Könyvek" táblázatra vagy a "kölcsönök" táblázatra. Ehelyett fellebbezünk Új táblázatamelyet a két táblázat összekapcsolásával hoztak létre.


a kölcsönök Csatlakozzon a hitelfelvevők listájához. Az ilyen egyesülés eredménye:



És akkor kérjük ezt a táblázatot, mint a fenti példában. Ez azt jelenti, hogy az asztalok összekapcsolásakor csak akkor kell gondoskodnia arról, hogyan kell ezt a kapcsolatot. És akkor a kérelem egyértelművé válik, mint a (3) bekezdés "egyszerű lekérdezése" esetén.


Próbáljuk meg enyhén összetettebb kapcsolatot két asztallal.


Most szeretnénk megkapni az emberek nevét és vezetéknevét, akik a szerző könyvtárából "Dan Brown" könyvtárából vettek.


Ezúttal menjünk az alulról felfelé:


Lépés 1. lépés - Hol veszi az adatokat? Ahhoz, hogy megkapjuk az eredményt, csatlakoztatnia kell a "tag" és a "könyvek" táblázatokat a "kölcsönök" táblával. A csatlakozás szakasz így fog kinézni:


A kölcsönök Csatlakozzon a kölcsönökről szóló könyvekhez.BookId \u003d Books.BookId Csatlakozás tagok tagjai.Member.Memberid \u003d kölcsönök

A kapcsolat eredménye referenciaként látható.


2. lépés. - Melyek az adatok megjelenítése? Csak azokat az adatokat érdekli, ahol a könyv szerzője "Dan Brown"


Ahol a könyvek.Author \u003d "Dan Brown"

3. lépés. - Hogyan jeleníti meg az adatokat? Most, hogy az adatok beérkeznek, csak vissza kell vonnod a könyv nevét és vezetéknevét:


Válassza ki a tagok.Firstname "első név", a tagok.LASTNAME mint "vezetéknév"

Szuper! Csak három komponens kombinálása és a kérelem megteremtése szükséges:


Válassza ki a tagok.Firstname "Keresztnév", a tagok.LASTNAME "LAST NAME" A kölcsönökről Csatlakozzon a kölcsönökről a kölcsönökről.

Mit ad nekünk:


Keresztnév. Vezetéknév.
Mikrofon Willis.
Ellen. Horton.
Ellen. Horton.

Kiváló! De a nevek megismétlődnek (nem egyediek). Hamarosan kijavítjuk.

5. aggregáció

Durván mondva, aggregációra van szükség ahhoz, hogy több vonalat konvertáljon. Ugyanakkor különböző logikát alkalmaznak a különböző oszlopok aggregációja során.


Folytassa a példáját, amelyben ismétlődő nevek jelennek meg. Látható, hogy Ellen Horton több könyvet vett igénybe, de ez nem a legjobb módja annak, hogy megmutassák ezt az információt. Egy másik lekérdezést tehetsz:


Válassza ki a tagok.Firstname "Keresztnév", a tagok.LASTNAME "LAST NAME", COUNT (*) "Könyvek száma" a kölcsönökről Csatlakozzon a kölcsönökről a kölcsönökről.BookId \u003d Könyvek .Hember, ahol a könyvek.Author \u003d "Dan Brown" csoport tagjai.Firstname, tagok.LASTNAME;

Mi ad nekünk a kívánt eredményt:


Keresztnév. Vezetéknév. A kölcsönzött könyvek száma
Mikrofon Willis. 1
Ellen. Horton. 2

Szinte minden aggregáció jár együtt az expressziós csoporthoz. Ez a dolog megfordítja az asztalt, amelyet a táblázatok lekérdezésével lehet elérni. Minden csoport megfelel az egyedülálló értéknek (vagy értékcsoportnak) az oszlopban, amelyet a csoportban rámutatottunk. Példánkban az eredményt a múltbeli edzésből a stringcsoportba konvertáljuk. Végezzük el a számláló aggregációt is, amely több sort átalakít egy egész értékre (a mi esetünkben ez a húrok száma). Ezután ez az érték minden csoportnak tulajdonítható.


Ennek eredményeként minden sor az egyes csoportok aggregációjának eredményét jelenti.



Jelentkezhet a logikus következtetésre, hogy minden területet a csoporton belül kell vagy jeleznie kell, vagy aggregációt kell tenni. Mivel az összes többi mező különböző vonalakban különbözhet egymástól, és ha kiválasztja az "Ohm, akkor nem világos, hogy melyik értéket kell elvégezni.


A fenti példában a számláló funkció az összes vonalat kezelte (mivel a sorok számát tekintve). Más funkciók, mint az összeg vagy a max. Csak meghatározott sorok. Ha például szeretnénk tudni az egyes szerző által írt könyvek számát, akkor szükség van egy ilyen kérésre:


Válassza ki a szerzőt, SUM (készlet) a szerzői csoportból;

Eredmény:


szerző ÖSSZEG.
Robin Sharma. 4
Dan Brown. 6
John Green. 3
Amish Tripathi. 2

Itt az összeg funkció csak az állományoszlopot feldolgozza, és az egyes csoportok összes értékének összegét tekinti.

6. Subqueries


A szubkókák a nagyobb lekérdezésekbe ágyazott rendes SQL lekérdezések. Három típusra oszthatók a visszaküldött eredmény típusával.

6.1 Kétdimenziós asztal

Vannak kérések, amelyek több oszlopot adnak vissza. Jó példa az aggregáció által az elmúlt edzésre vonatkozó kérés. Subqueriment, egyszerűen vissza fog térni egy másik táblázatot, amelyre új kéréseket lehet tenni. Az előző edzés folytatása, ha szeretnénk tudni a "ROBIN SHARMA" szerző által írt könyvek számát, akkor az egyik lehetséges módja a szubkókák használata:


Válassza ki a * gombbal (válassza ki a szerzőt, SUM (készlet) a könyvek csoportjától), mint az eredmények, ahol a szerző \u003d "Robin Sharma";

Eredmény:



Írhatsz, mint: ["Robin Sharma", "Dan Brown"]


2. Most használja ezt az eredményt egy új lekérdezésre:


Válassza ki a címet, a Bookid-t a könyvekből, ahol a szerző be (a szerzői szerzői szerződést a szerzőtől a szerzőtől), mint az eredmény, ahol az összeg\u003e 3);

Eredmény:


cím bookid.
Az elveszett szimbólum. 2
Ki sírni fog, amikor meghalsz? 3
Pokol. 4

Ez ugyanaz, mint:


Válassza ki a címet, a könyveket a könyvekből, ahol szerzője ("Robin Sharma", "Dan Brown");

6.3 Különálló értékek

Vannak olyan kérések, amelyek csak egy sor és egy oszlop eredménye. Ezeket állandó értékeknek tekinthetők, és bárhol is alkalmazhatók, például az összehasonlító üzemeltetőknél. Olyan kétdimenziós asztalként vagy tömbökként is használhatók, amelyek egy elemből állnak.


Tegyünk például az összes könyvről, amelynek számát a könyvtárban a pillanatban meghaladja az átlagos értéket.


Az átlagos összeg így szerezhető be:


Kiválasztja az AVG (Stock) könyveket;

Mi ad minket:


7. Felvételi műveletek

A legtöbb rekord az adatbázisban meglehetősen egyszerű, ha összetettebb olvasási műveletekkel összehasonlítva.

7.1 frissítés.

A frissítési kérelem szintaxis szemantikailag egybeesik az olvasási kérelemmel. Az egyetlen különbség az, hogy a kiválasztott hangszórók kiválasztásának helyett beállítottuk az "ohm" értékét.


Ha a Dan Brown összes könyve elveszik, akkor vissza kell állítania a mennyiség értékét. Ennek kérése ilyen lesz:


A könyvek frissítése készlet \u003d 0, ahol szerző \u003d "Dan Brown";

Hol van ugyanaz, mint korábban: választja a vonalakat. A kiválasztás helyett, amelyet olvasáskor használtunk, most használjuk a készletet. Most azonban meg kell adnia, hogy ne csak az oszlop nevét, hanem az oszlop új értékét is meg kell adnia a kiválasztott vonalakban.


7.2 Törlés.

A Törlés lekérdezése egyszerűen egy kiválasztott vagy frissítési lekérdezés oszlopnevek nélkül. Komolyan. Mint a kiválasztás és a frissítés esetében, akkor a blokk ugyanaz marad: kiválasztja a törölni kívánt karakterláncokat. Az eltávolítási művelet elpusztítja az egész karakterláncot, így nincs értelme meghatározni az egyes oszlopokat. Tehát, ha úgy döntünk, hogy nem állítja vissza a Dan Brown könyvek számát, hanem általában törölheti az összes rekordot, akkor ilyen kérést készíthet:


Törölje a könyveket, ahol a szerző \u003d "Dan Brown";

7.3

Talán az egyetlen dolog, amely eltér a más típusú kérésektől. A formátum:


Helyezzen be x (A, B, C) értékekre (X, Y, Z);

Ha az A, B, C az oszlopok neve, és az X, Y és Z azok az értékek, amelyeket be kell illeszteni ezekhez az oszlopokba ugyanabban a sorrendben. Ez alapvetően ez.


Vessen egy konkrét példát. Itt van a lekérdezés a betét, amely kitölti a teljes táblázatot "Könyvek":


Helyezzen be könyveket (Bookid, Cím, Szerző, Megjelent, Készlet) Értékek (1, "Ikshvaku", "Amish Tripathi", "06-22-2015", 2), (2, "elveszett szimbólum" , "Dan Brown", "07-22-2010", 3), (3, "Ki sírni fog, amikor meghalsz?", "Robin Sharma", "06-15-2006", 4), (4, " Inferno "," Dan Brown "," 05-05-2014 ", 3), (5," a csillagunkban "," John Green "," 01-03-2015 ", 3);

8. Ellenőrizze

A végét közelítettük, egy kis tesztet javasolunk. Nézd meg a kérelmet a cikk kezdetén. Tudod kitalálni? Próbálja meg osztani a kiválasztott, ahol a csoportok csoportja, és fontolja meg a szubkók egyedi összetevőit.


Itt egy kényelmesebb az űrlap olvasásához:


Válasszon tagokat.Firstname || "" || Tagok.LastName mint "teljes név" a kölcsönök belső csatlakozás tagjai a tagok.Member.memberid \u003d hitelek ..Memberid Belső Csatlakozzon könyvek a könyvekről.BookId \u003d hitelek.Bookid, ahol a hitelfelvételek.Book ) Könyvekből)) csoport tagjai.Firstname, memerts.lastname;

Ez a lekérdezés megjeleníti azokat az emberek listáját, akik egy könyvet vettek a könyvtárból, amelynek teljes száma meghaladja az átlagot.


Eredmény:


Teljes név.
Lida Tyler.

Remélem sikerült foglalkozni semmilyen probléma nélkül. De ha nem, örülök a megjegyzések és vélemények, hogy javíthatom ezt a bejegyzést.



 
Árucikkek által Téma:
A feltaláló házi készítésű félautomata keresztmetszetet készített
A figyelmet a földhöz csatolt földre vonzták - nyilvánvalóan nem pofa, és a gyűrött fű adta ki az állatot, amely akkor fekszik, amikor a szélsőséges helyzetek keletkeznek a vadászaton, leggyakrabban érdemes magukat hibáztatni. De néha az ilyen incidensek bűncselekményei válnak
Mester osztály
Juhar levelekből készült rózsák. Mester osztály egy lépésenkénti fotós osztály a kézimunka: a technikában "Munka a természetes anyaggal". A mester osztályba helyezve: "Virágok az őszi levelekről". Munka munka: Nachanieva Natalia Anatolyuvna, Pedaggor
Nyitott munka a papírból: Csipke nyolc, mester osztály
Kínálunk egy ötletet, hogy képeslapokat hozzunk létre a képeslapokat március 8-án a saját kezével. Ebben a cikkben találsz eredeti sablonokat, példákat a gyönyörű munkákra, hasznos tippekre és lépésenkénti utasításokra. Itt látni fogja a különböző képeslapokat a gyerekeknek, akik gratulálni akarnak
Hogyan növekszik hagymát az ablakpárkányon egy műanyag palackban?
Mi lehetne jobb télen, mint a friss zöldségek, amelyeket a saját ablakpárkányon termesztettek? Növekszik egy műanyag palack otthon nagyon egyszerű. Ez különleges költségeket vagy túl összetett ellátást igényel. Minden, ami szükséges, műanyag