close

Strukturált lekérdezési nyelv

Ugrás a navigációhoz Ugrás a kereséshez
SQL
programozási nyelv
SQL ANATOMY wiki.svg
Egy utasítás részei.
SzerzőDonald Chamberlin
Származási dátum1974
Legújabb verzióSQL: 2016 ( 2016. december )
Használatlétrehozás, lekérdezés, adatbázis kezelés
Paradigmákmultiparadigma
Gépelésstatikus, erős
Gyakori kiterjesztések.sql

A számítástechnikában az SQL ( Structured Query Language ) (/skjuːˈɛl / "SQL") egy szabványosított adatbázis -nyelv , amely a relációs modellen ( RDBMS ) alapul, és a következő műveletekhez készült:

A név ellenére ez nem egy egyszerű lekérdezési nyelv : egyes részhalmazai valójában lehetővé teszik adatbázisok létrehozását, kezelését és adminisztrálását.

Történelem

Az SQL-t 1974 - ben Donald Chamberlin hozta létre az IBM laboratóriumaiban . A relációs modellt követő adatbázisokkal való munkaeszközként született . Akkoriban azonban SEQUEL-nek hívták ( ezért az SQL helyes IPA kiejtése [ˈɛsˈkjuˈɛl], az informálisé [ˈsiːkwəl]). 1975 - ben kifejlesztették a SEQUEL-XRM prototípust ; kísérleteket végeztek vele, amelyek 1977 -ben a nyelv új változatához vezettek, amelyet eredetileg SEQUEL / 2-nek kellett volna hívni, de aztán jogi okokból az lett (a SEQUEL nevet már használták, és mindenekelőtt regisztrálták). , egy másik légitársaság hatókörében), SQL. Erre fejlesztették ki a System R prototípust , amelyet az IBM belső használatra és egyes ügyfelei számára is használt. Sikerének köszönhetően azonban más cégek is gyorsan elkezdték SQL-alapú termékek fejlesztését. 1981- ben az IBM elkezdett árulni néhány relációs terméket, és 1983 -ban kiadta a DB2 -t, a 20. század utolsó éveiben népszerű relációs DBMS -t . Az SQL gyorsan a relációs modellt használó szoftverek iparági szabványává vált.

Az ANSI 1986 óta szabványként fogadta el anélkül, hogy lényeges változtatásokat tett volna az IBM által eredetileg kifejlesztett verzión. 1987- ben az ISO is ezt tette. Ezt az első szabványos verziót SQL / 86-nak hívják. A következő években más verziók is készültek, ezek az SQL / 89, SQL / 92 és az SQL / 2003 voltak. Ez a szabványosítási folyamat egy olyan nyelv létrehozására irányult, amely minden relációs DBMS-en (adatbázis-kezelő rendszeren) működött, de ezt a célt nem sikerült elérni. Valójában a különböző gyártók a nyelvet számos variációval implementálták, és a gyakorlatban olyan szinten vették át a szabványokat, amelyek nem haladják meg az Ansi által Belépési Szintként meghatározott minimumot.

Jellemzők

Az SQL adatbázisok lekérdezésére és kezelésére szolgáló nyelv a lekérdezéseknek nevezett programozási konstrukciók használatával . Az SQL segítségével adatokat olvashat, módosíthat, törölhet, valamint felügyeleti és adminisztrációs funkciókat gyakorolhat az adatbázisrendszerben. A legtöbb megvalósításnak van parancssori felülete a közvetlen parancsvégrehajtáshoz, amely csak a grafikus felhasználói felület alternatívája lehet .

Eredetileg deklaratív típusú nyelvnek tervezték, azóta pedig az eljárási konstrukciók, az áramlásvezérlő utasítások , a felhasználó által definiált adattípusok és számos más nyelvi bővítmény bevezetésével fejlődött. Az SQL: 1999 szabvány meghatározása óta sok ilyen kiterjesztést formálisan az SQL szerves részeként fogadtak el a szabvány SQL / PSM szakaszában.

Az SQL-lel szemben leggyakrabban megfogalmazott kritikák a különböző gyártók közötti kódhordozhatóság hiányára , a hiányzó (null) adatok nem megfelelő kezelési módjára és a néha szükségtelenül bonyolult szemantikára vonatkoznak.

Szerkezet

Deklaratív nyelv lévén az SQL nem követeli meg műveletsorozatok (például kötelező nyelvek ) írását, ahelyett, hogy a keresett információ logikai tulajdonságait határozná meg. A következőkre oszlik:

Operátorok

A szabványos SQL által elérhetővé tett operátorok hét kategóriába sorolhatók:

  • Hozzárendelési operátorok
  • Összehasonlító operátorok
  • Karakterlánc operátorok
  • Aritmetikai operátorok
  • Feltételes operátorok
  • Logikai operátorok
  • Bit-bit operátorok

Hozzárendelés operátorok

A hozzárendelési operátorok értéket rendelnek egy változóhoz vagy mezőhöz.

  • =Hozzárendelést fejez ki, és nem ad vissza értéket.
  • :=Érték hozzárendelését fejezi ki egy még nem példányosított változóhoz, és nem ad vissza semmilyen értéket.

Összehasonlító operátorok

Az összehasonlító operátorokat az értékek közötti egyenlőségek és egyenlőtlenségek meghatározására, valamint az adatokon belüli keresésre használják. Az alábbiakban egy táblázat diagram:

  • =Egyenlőséget fejez ki két számérték vagy karakterlánc között (ahol nem használják hozzárendelési operátorként)
  • ISAnnak ellenőrzésére szolgál, hogy egy érték NULL-e, vagy megfelel-e logikai értéknek (IGAZ, HAMIS, ISMERETLEN).
  • LIKEHasonlóságot fejez ki két literális érték között: a LIKE operátorral összehasonlításhoz a% (tetszőleges számú betűt helyettesít) és a _ (tetszőleges betűt helyettesít) speciális karakterek használhatók.
  • <Meghatározza, hogy az egyik érték kisebb-e, mint a másik
  • >Meghatározza, hogy az egyik érték nagyobb-e a másiknál
  • <=Meghatározza, hogy az egyik érték kisebb-e vagy egyenlő-e a másikkal
  • >=Meghatározza, hogy az egyik érték nagyobb-e vagy egyenlő-e a másikkal
  • <>Meghatározza, hogy két érték különbözik-e egymástól
  • !=egyenértékű<>
  • BETWEEN ... ANDKét érték közötti értéket kér le
  • INMeghatározza, hogy egy érték szerepel-e a lehetséges értékek listáján
  • EXISTSMeghatározza, hogy egy adott segédlekérdezés ad-e vissza értéket
  • ANYo SOMEMeghatározza, hogy egy adott részlekérdezés visszaadja-e a megadott értékek közül legalább egyet
  • ALLMeghatározza, hogy egy adott segédlekérdezés visszaadja-e az összes kívánt értéket

Néhány ilyen operátor egy ellentétes operátornak felel meg a NOT kifejezést használva:

  • IS NOT
  • NOT LIKE
  • NOT BETWEEN
  • NOT IN
  • NOT EXISTS

String operátorok

A karakterlánc-operátorok két karakterláncot vesznek fel operandusként, és egy logikai vagy karakterlánc-értéket adnak vissza.

LIKE operátor

Az operátor LIKE(a MATCHES is használatos) általában a kulcsszavas keresési feltételek és a keresőmotorok által végzett lekérdezések alapja.

Az aláhúzás ( _) karakter, az úgynevezett wildchar , egyetlen tetszőleges karaktert keres; a szimbólumot %helyettesítő karakternek nevezik, és tetszőleges karakterláncon keres, azaz számértékek tartományában. Az aláhúzás karakterének kereséséhez egy kifejezésen belül használja a szintaxist [_](lásd még alább).

A Microsoft Access szintaxisa kissé eltér ettől a nemzetközi szabványtól, és teljesebb. Az aláhúzás szimbólum helyett ?egyetlen karakter (szám és betű) keresésére szolgál; a szimbólum helyett %a helyettesítő karakter operátort a *. Az Access lehetővé teszi, hogy egyetlen numerikus értékre keressen a hash (vagy hash ) billentyűvel ( #), és keressen egy karaktert (betűt és számot) az értékkészleten belül vagy kívül, a szintaxis []és a [!]. Az intervallum lehet pontos vagy gyűjtő: például az [AF] az A és F közötti betűket jelöli, míg az [A, F] csak ennek a két betűnek a keresését jelöli. Például egy olyan utasítás, mint a „LIKE P [! AF] C” „P”-vel kezdődő, „C”-re végződő szavakat keres, a második betű pedig nem tartalmaz karaktereket az A és F betűk között. Ez a teljesség a megvalósításban A LIKE annak a ténynek köszönhető, hogy az Access nem tervez bonyolultabb operátorokat, mint például a HASONLÓ TO és a REGEXP.

A teljesség ellenére a Windows OLE DB illesztőprogramjában van egy ismert hiba: a helyettesítő karakter operátor *csak az alkalmazáson belül használható, míg a klasszikus szimbólumot az OLE DB / ODBC-n keresztül kell használni %.

HASONLÓ A REGEXP operátorokhoz

A SIMILAR TO operátor az SQL szabvány része, és lehetővé teszi annak ellenőrzését, hogy egy karakterlánc egyezik-e egy adott reguláris kifejezéssel . A használt szintaxis eltér a Perl és a POSIX által létrehozott de facto szabványoktól, ezért a gyártók ezt az operátort meglehetősen korlátozottan alkalmazzák.

A REGEXP operátor gyakoribb, és lehetővé teszi annak ellenőrzését is, hogy egy karakterlánc egyezik-e egy adott reguláris kifejezéssel. A használt szintaxis az SQL implementációtól függően változik, de általában megfelel a Perl vagy a POSIX által meghatározott de facto szabványoknak.

Az SQL tartalmazza a NEM HASONLÍTÓ és NEM REGEXP kiegészítő operátorokat is .

BINÁRIS

Ez az operátor arra szolgál, hogy a reguláris kifejezések alkalmazását a kis- és nagybetűk megkülönböztetésére tegye, vagyis biztosítsa, hogy a nagybetűket a kisbetűktől eltérőnek tekintse.

COLLATE

Ez az operátor annak meghatározására szolgál, hogy melyik leválogatást (a karakterkészlet rendezésének szabályait) kell használni az aktuális kifejezésben.

Aritmetikai operátorok

Az aritmetikai operátorok numerikus típusú (egész vagy decimális) operátorokat fogadnak el, és a megfelelő aritmetikai művelet eredményét adják vissza. Az alábbiakban egy táblázat séma látható:

Üzemeltető leírása

  • +Adjon hozzá kiegészítést, vagy hagyja változatlanul egy szám előjelét
  • -Vonja ki vagy fordítsa meg egy szám előjelét
  • *Végezzen szorzást
  • /Készítsen felosztást
  • MODAz osztás maradékát adja vissza
  • DIVEgy osztás egész részét adja vissza

Feltételes operátorok

Az SQL egyetlen feltételes operátora a WHERE (hol), és célzott keresési feltételek meghatározására szolgál.

Logikai operátorok

Az SQL logikai operátorai a logikai logikai operátorok közé tartoznak, és a következők: ÉS (és), VAGY (vagy, vagy), NEM (nem), XOR (más néven "kizárólagos VAGY").

  • A logikai ÉS operátor , amely két feltételt köt össze, akkor és csak akkor ad vissza IGAZ értéket, ha mindkét operandus igaz.
  • A logikai VAGY operátor , amely két feltételt köt össze, akkor és csak akkor ad vissza IGAZ értéket, ha legalább az egyik operandus igaz.
  • A NOT operátor csak egy operandust fogad el, és az inverz értéket adja vissza: false, ha ez igaz, igaz, ha ez hamis.
  • Az XOR operátor , amely két feltételt fogad el, akkor és csak akkor ad vissza IGAZ értéket, ha csak az egyik operandus igaz.

Bitoperátorok

Az SQL szabvány nem biztosítja ezt az operátorcsaládot, de számos megvalósításban jelen van. Ezek az operátorok ÉS, VAGY, NEM és XOR műveleteket hajtanak végre bitszinten.

Általános szabályok az üzemeltetőkre

A kifejezés egy értékből vagy egy értéket visszaadó műveletből áll. Ez a definíció rekurzív: a kifejezések egymásba ágyazhatók. Mivel az operátorok mindig egy értéket adnak vissza, teljesen jogos kombinálni őket, hogy egyre bonyolultabb feltételeket alkossanak.

A kerek zárójelek () használata a keresési kifejezéseken belül lehetővé teszi az operátorok elsőbbségének módosítását vagy explicitté tételét, vagyis a feldolgozási sorrendet. Ha egy összetett kifejezést zárójelek nélkül írunk, akkor a nyelv által biztosított operátorok közötti elsőbbséget alkalmazzuk.

DDL: Adatdefiníció

A DDL ( Data Definition Language ) az adatbázisban lévő objektumok létrehozására, módosítására vagy törlésére szolgál. A DDL parancsok határozzák meg az adatbázis szerkezetét és így a benne található adatok szerkezetét, de nem biztosítanak eszközöket azon adatok módosításához, amelyekhez a DML-t ( Data Manipulation Language ) használják. A felhasználónak rendelkeznie kell a szükséges jogosultságokkal az adatbázis-struktúra kezeléséhez, és ezeket a jogosultságokat a DCL ( Data Control Language ) adja.

Elementary Domains

Az SQL hat elemi tartomány családot biztosít, amelyekből meghatározhatók a séma attribútumaihoz társítandó tartományok.

DML: Adatmanipuláció

A DML ( Data Manipulation Language ) parancsokat biztosít adatok beszúrásához, módosításához és törléséhez az adatbázisban lévő táblákban. Ezen adatok szerkezetét a DDL-n keresztül már meg kell határozni. Ezenkívül az ilyen adatokhoz való hozzáférést előzetesen hozzá kell rendelni a felhasználóhoz a DCL-en keresztül.

Beszúrás

A parancsnak az a funkciója, hogy adatokat szúrjon be a táblákba .

Az értékek céloszlopait (vagy mezőit) lehet deklarálni a parancsban, de lehet, hogy nem. Ha nincsenek deklarálva, akkor a táblázat minden oszlopához értéket kell adni a parancsnak, szigorúan betartva az oszlopok sorrendjét. Ha viszont a céloszlopok deklarálva vannak, akkor csak azokat az oszlopokat lehet feltüntetni, amelyeknek értéket adtak át, feltéve, hogy a táblázat összes nem null oszlopának értéke (amely nem lehet nulla) amúgy is bekerülnek.

Önmagában az insert parancs úgy működik, hogy egyszerre csak egy sort szúr be a táblázatba. Lehetőség van azonban egynél több sort "automatikusan" beszúrására úgy, hogy a beszúrásnak átadunk egy sor (vagy sor) sorozatát, amelyek egy select parancs eredményeként jönnek létre, feltéve, hogy ezek a sorok kompatibilisek a táblázat azon oszlopaival, amelyeken a adat kerül beillesztésre.

Parancs szintaxis beillesztés

  • Egyszerű beillesztés:
INSERT  INTO  table_name 
VALUES  ( értékek listája  , minden , a táblázat mezőinek sorrendjének betartásával , pl . " adományozott " ) ;          

vagy

INSERT  INTO  táblanév  ( a beszúrásban érintett mezők listája  ) VALUES ( értékek listája , mind , a fent megadott mezők sorrendjének betartásával , példa " adományozott " ) ; _   
           
  • Beszúrás a kiválasztással:
INSERT  INTO  táblanév  ( a beszúrásban részt vevő mezők listája ,  pl . " adományozott " ) AS SELECT ...;       
 

Frissítés

Az update parancs hármas funkciója a táblák adatainak módosítása.

Az egyes módosítandó mezők nevét a SET kulcsszó után kell deklarálni, és utána az (egyenlő) szimbólumnak =és az új értéknek kell szerepelnie.

Ugyanazon sorban több mezőt is módosíthat egyetlen frissítési paranccsal, ezeket egymástól szimbólummal ,(vesszővel) elválasztva.

Az általános parancs frissíti a táblázat összes sorát. A számot korlátozhatja a WHERE további kulcsszó alkalmazásával , amely lehetővé teszi a sorok minőségi kijelölését úgy, hogy a frissítés előtt feltételeket szab a sorokban lévő adatokra.

Parancs szintaxis frissítése

  • Általános frissítés:
UPDATE  table_name 
SET  field_name1  =  'érték1_új' , 
    mező_név2  =  'érték2_új' , 
     ... 
;
  • Frissítés feltételekkel:
UPDATE  table_name 
SET  field_name1  =  'érték1_új' , 
    mező_név2  =  'érték2_új' 
WHERE  mező_név3  =  'érték' ;

Törlés

A delete parancsnak az a funkciója, hogy adatokat töröljön a táblákból.

Az update parancshoz hasonlóan a delete is általánosan működhet a táblázat összes sorának törlésével, vagy azonosíthatja a törölni kívánt sorokat a további WHERE kulcsszó és a hozzá tartozó feltétel (vagy feltételek) segítségével.

Parancs szintaxis törlése

  • Általános törlés:
DELETE  FROM  táblanév ;
  • Törlés a következő feltétellel:
DELETE  FROM  tábla_neve 
WHERE  mező_neve  =  'érték' ;

Csonka táblázat

Amint már említettük, a Delete where záradék nélküli törli az összes sort a megadott táblából. Van azonban egy másik módszer is a tábla teljes kiürítésére: a Táblázat csonkolása parancs . Egyes DBMS-ek ezt a parancsot (amely nem szerepel az SQL-szabványban) gyorsabban valósítják meg, mint a Törlést, például úgy, hogy az adatfájlt olvasás nélkül törlik, majd üresen újra létrehozzák. Ez azonban általában megakadályozza bizonyos kiegészítő információk visszaadását, például a törölt sorok számát.

Táblázat parancs szintaxisának csonkolása

 A [ TÁBLÁZAT ]  táblanév csonkolása

A tranzakció

A tranzakció olyan utasítások blokkja, amelyek szorosan kapcsolódnak egymáshoz. Abban az esetben, ha bármilyen okból (belső hiba a DBMS-ben, hiba az SQL utasításokban, rendszerhiba) valamelyik utasítás nem fejeződik be, a teljes tranzakció törlésre kerül. A tranzakciót tehát atomi műveletnek mondjuk , vagyis nem osztható: ha nem hajtják végre teljesen, akkor egyáltalán nem hajtják végre. Ez az egyik leggyakrabban használt eszköz az adatok integritásának biztosítására.

A tranzakció sikerességéig az általa végrehajtott módosítások csak a tranzakciót kezdeményező munkamenet számára láthatók. Az elkülönítési szinttől függően más felhasználók hozzáférhetnek az adatok régebbi verziójához, vagy a tranzakció befejezéséig tartásba kerülhetnek.

Nem minden DBMS támogatja a tranzakciókat, míg mások csak bizonyos feltételek mellett támogatják azokat (például a MySQL - ben csak bizonyos táblatípusok esetén támogatottak). Ezenkívül a DBMS korlátozhatja a tranzakciókat az SQL egy részhalmazára (például a MySQL-ben, ha DDL parancsot adnak ki, az aktuális tranzakció véget ér).

Egyes DBMS-ek lehetővé teszik a beágyazott tranzakciókat is. Az egyik tranzakció által egy másikban végrehajtott változtatások hatástalanok mindaddig, amíg a legkülső tranzakció sikeresen be nem fejeződik.

Szemantikailag nagyon hasonló alternatíva a mentési pontok. Lehetővé teszik az adatok egy verziójának elmentését a tranzakció közepén. Ezután lehetőség nyílik a teljes tranzakció törlésére vagy a korábban beállított mentési pontok visszaállítására. Ez a mentés elvégezhető feltételes kódblokkban, ami sokkal dinamikusabbá teszi ezt a funkciót, mint a beágyazott tranzakciók.

Tranzakció megkezdése

Egy tranzakció kifejezett kezdeményezéséhez használja a BEGIN TRANSACTION parancsot . A parancs hiánya miatt minden utasítás külön tranzakcióként működik.

Parancs szintaxis start tranzakció
 TRANSACTION  BEGIN [ tranzakció_neve ];

Commit

A COMMIT parancs a tranzakció megerősítésére szolgál . Ezzel az adatokon korábban végrehajtott összes változtatást eltároljuk.

Parancs szintaxis commit
COMMIT  [ TRANSACTION ]  [ tranzakció_neve ];

Visszagörgetés

A ROLLBACK parancs a tranzakció törlésére szolgál . Ezzel az adatokon korábban (a tranzakció kezdetétől kezdődően) végrehajtott összes módosítás törlődik.

Parancs szintaxis visszaállítása
ROLLBACK  [ TRANSACTION ]  [ tranzakció_neve ];

DQL: Adatlekérdezés

A DQL (adatlekérdezési nyelv) parancsokat tartalmaz az adatbázisban lévő adatok olvasására és feldolgozására. Ezeket az adatokat a DML-en keresztül kell bevinni a DDL-lel létrehozott struktúrákba, míg a DCL megállapítja, hogy a felhasználó hozzáférhet-e.

Válassza a

A select paranccsal lehetőségünk nyílik az adatok célzott kinyerésére az adatbázisból.

A kijelölés parancs szintaxisa

KIVÁLASZTÁS  [  ÖSSZES  |  KÜLÖNBÖZŐ  |  TOP  ] Selection_elements_list  FROM table_list_references 
[ WHERE feltételes_kifejezés ] [ GROUP BY oszloplista [ HAVING Condition ] ] [ ORDER BY oszloplista ] ; 
   
      
    

hol van:

  • lista_elemek_kijelölése a kivonandó mezők listája (egymástól vesszővel elválasztva);
  • A referencia_lista_táblázata azoknak a tábláknak a listája, amelyekből adatokat lehet kinyerni;
  • A feltételes_kifejezés a feltételek listáját képviseli, vagyis azokat a követelményeket, amelyeknek egy mezőnek meg kell felelnie ahhoz, hogy lekérhető legyen a lekérdezésből (a feltételeket az összehasonlító operátorok, logikai összekötők és összehasonlítók segítségével határozzák meg, például a következők : , in , like , nulla );
  • Az oszloplista az az oszlop vagy oszlopok, amelyeket referenciaként kell figyelembe venni a kimeneti adatok rendezéséhez.

A SELECT parancs alapértelmezés szerint az ALL metódussal működik , de a DISTINCT (vagy az implementációtól függően UNIQUE ) megadásával lehetőség van a duplikált sorok eltávolítására az eredményekből.

A GROUP BY záradék az eredmények sor szerinti csoportosítására szolgál, míg a relatív HAVING feltétel az eredmények szűrésére szolgál.

 SELECT  szállító ,  összeg ( számla összege ) FROM számlák GROUP BY szállító HAVING összeg ( számla_összege ) > 10 . 000 
  
   
  

Ebben az esetben kiszűrjük azokat a beszállítókat, akiknek összforgalma meghaladja a 10 000-et.

Az ORDER BY záradék az eredmények egy vagy több mező alapján történő rendezésére szolgál.

A LIMIT (vagy TOP , a megvalósítástól függően) korlátozza a megadott sorok számát: A LIMIT 10 a táblázatom első 10 sorát veszi fel. Arra is lehetőség van, hogy az eredmények elején néhány sort eldobjunk, ha paramétert adunk a LIMIT -hez vagy az OFFSET záradékhoz .

A szabványos SQL-nek nincs rendezése, ha nem adjuk meg az ORDER BY záradékot , így enélkül a LIMIT -nek is megjósolhatatlan hatása van.
Egy példa a következő:

 SELECT  DISTINCT  vezetéknév ,  keresztnév ,  város_lakóhely 
 FROM  felhasználók 
 WHERE  év  >  =  18 
 ORDER  BY  vezetéknév

Ez a lekérdezés kibontja az összes felnőtt felhasználó listáját a kimenet vezetéknév szerinti rendezésével. A GROUP BY és ORDER BY záradékokban a mezők nevei helyettesíthetők a SELECT függvény sorrendjének megfelelő számmal : az utolsó esetben ORDER BY vezetéknév írhat ORDER BY 1 -et .

A kijelölés definíciója azonban sokkal tágabb, sok más lehetőséget is kínál, de elvileg ezekből az opciókból áll össze a legtöbb lekérdezés.

 SELECT  DISTINCT  * 
 FROM  felhasználóktól

a csillag lehetővé teszi, hogy a felhasználói tábla összes oszlopát belefoglalja a kijelölésbe

A kiválasztással számításokat is végezhet:

Select  DISTINCT  cod_art ,  price_unit * stock  AS  Total ,  stock * teher  AS  TotIngombro ; 
 A cikkekből 

ez kinyert, de számított adatokat is előállít. Az AS záradék arra szolgál, hogy nevet adjon az új oszlopnak, amely a végrehajtott kijelölés eredményében fog megjelenni.

Sok DBMS támogatja a nem szabványos LIMIT záradékot, amelyet utolsóként kell elhelyezni, és háromféle lehet:

 LIMIT  < number_results >
 LIMIT  < pozíció_első_eredmény > ,  < eredmények_száma >
 LIMIT  < szám_eredmények >  [ OFFSET  < position_first_result > ]

number_results a kivonandó sorok száma. A pos_first_result az első kinyerendő sor indexe. Együtt használhatók arra, hogy az eredményeket blokkokra bontsák és egyenként beolvassák (például a DBA kényelme érdekében, vagy a webalkalmazás által megjelenített eredmények lapozására).

Csatlakozz

Egy több, egy vagy több közös mezőt tartalmazó táblázatból álló kiválasztási forma a Join záradékon keresztül érhető el .

Allekérdezés

Allekérdezések bárhol beszúrhatók, ahol az SQL nyelv egyetlen értéket ad vissza kifejezést, és a FROM záradékba. Ebben a második esetben az allekérdezéseket származtatott tábláknak is nevezik.

A tulajdonképpeni részlekérdezések adott esetben egyetlen értéket vagy eredményhalmazt adhatnak vissza. Egy meglehetősen egyszerű példa az, amelyben az átlag feletti számértékeket szeretné kivonni egy táblázatból. Egyetlen Select nem tudja leolvasni az átlagot és egyben az azt meghaladó értékeket. Ebből a célból lesz egy kijelölésünk, amely az átlagot olvassa:

SELECT  AVG ( field1 )  FROM  my_table ;

Ez a lekérdezés a legkülső lekérdezés WHERE záradékába kerül; először a segédlekérdezés kerül végrehajtásra:

SELECT  *  FROM  my_table  WHERE  mező1  >  ( SELECT  AVG ( mező1 )  FROM  my_table );

Mint látható, szintaktikai szempontból az allekérdezéseket zárójelbe kell tenni.

Származtatott táblázatok

A származtatott táblák az allekérdezés speciális esetei: egy belső Select kivonja azokat az adatokat, amelyeket ezután a külső select lekérdez.

A következő példa oktatási célokra szolgál, de nem optimális megközelítés. Tegyük fel azonban, hogy ki akarja bontani azokat a rekordokat, amelyeknél a levélmező nem üres, és kiválasztja azokat azon felhasználók közül, akiknek a regisztrációját megerősítették. Ezt a következőképpen teheti meg származtatott táblázattal:

SELECT  email  FROM  ( SELECT  email  FROM  users  WHERE  megerősítés  =  IGAZ );

Valójában a származtatott táblák akkor hasznosak, ha nincs más lehetséges megközelítés, ami akkor történik, ha a külső lekérdezés JOIN-t tartalmaz.

DCL: Adatkezelés

A DCL-t arra használják, hogy biztosítsák vagy visszavonják a felhasználók számára a DML- és DDL-parancsok, valamint maguk a DCL-parancsok használatához szükséges engedélyeket (amelyeknek képesnek kell lenniük bizonyos objektumok engedélyeinek módosítására).

Grant

A Grant parancs egy vagy több engedélyt ad vagy ad egy adott felhasználónak (pl.: tábla beszúrásának, módosításának vagy törlésének engedélye) és egy értékes rendszergazdának.

Visszavonás

A Visszavonás parancs egy vagy több engedélyt visszavon egy adott felhasználótól (pl. a táblából való törlés engedélyét).

Tárolt programok

A tárolt programok vagy üzleti logika az SQL-ben programozott rutinokra utal, olyan eljárási kiterjesztésekkel, amelyek lehetővé teszik az áramlásvezérlést, a ciklusokat , a kurzorokat és a hibakezelést. A legteljesebb SQL implementációkban a tárolt programok különböző típusúak lehetnek:

Ezenkívül egyes DBMS-ek, például a MySQL lehetővé teszik olyan SQL-eljárások létrehozását, amelyek egy adott időpontban csak egyszer, vagy egy bizonyos időintervallumban ismétlődnek, például a Unix rendszerek Cron Jobs-jai.

Az SQL kritikája

Az SQL egy lekérdezési nyelv, amelyet relációs adatbázisokkal való interakcióra terveztek. A teoretikusok azonban rámutatnak arra, hogy az SQL eredeti jellemzői, amelyeket a sorok számítása inspirált , valójában sérti azt . A legújabb bővítmények teljes mértékben támogatják a relációs modellt , de tovább rontották a fent említett jogsértéseket .

Ezenkívül számos kritika éri az SQL gyakorlati használatát:

  • nem nyújt szabványos módot a hosszú parancsok rövidebb, névvel hivatkozható parancsokra bontására (bár sok implementáció valóban biztosítja ezt a funkciót);
  • a különböző megvalósítások általában nem kompatibilisek egymással;
  • túlságosan támaszkodnak a NULL értékekre , egy olyan metaértékre, amely egyes akadémikusok szerint az érték hiányát, mások szerint ismeretlen értéket kell, hogy jelezzen, míg a gyakorlatban mindkét irányban, vagy csak az egyiken használják. , de következetlen módon .

Bibliográfia

Kapcsolódó elemek

Egyéb projektek

Külső linkek