Lekérdezések készítése SQL szerveren. Lekérdezések elérése

Az Access lekérdezései az adatbázistáblázatokban lévő adatok lekérésének, frissítésének és kezelésének elsődleges eszközei. Az Access a relációs adatbázisok koncepciójával összhangban Structured Query Language (SQL) segítségével hajtja végre a lekérdezéseket. Az Access bármely lekérdezése SQL utasításokkal valósul meg.

A lekérdezés fő típusa a kiválasztási lekérdezés. A lekérdezés eredménye egy új tábla, amely a lekérdezés bezárása előtt létezik. A rekordok a lekérdezést tartalmazó táblák rekordjainak összevonásával jönnek létre. A táblarekordok kombinálásának módja a kapcsolatuk adatsémában történő meghatározásakor vagy lekérdezés létrehozásakor van megadva. A lekérdezésben megfogalmazott kiválasztási feltételek lehetővé teszik a táblák összekapcsolásának eredményét alkotó rekordok szűrését.

Az Access többféle lekérdezést hozhat létre:

  • kérés lekérése- egyetlen táblából vagy lekérdezésből, vagy több kapcsolódó táblából és egyéb lekérdezésekből választ ki adatokat. Az eredmény egy tábla, amely a lekérdezés bezárása előtt létezik. Az eredménytábla rekordjainak kialakítása a megadott kiválasztási feltételeknek megfelelően, több tábla használata esetén azok rekordjainak egyesítésével történik;
  • lekérdezés tábla létrehozásához- összefüggő táblákból és egyéb lekérdezésekből választ ki adatokat, de a kiválasztási lekérdezéssel ellentétben az eredményt egy új állandó táblába menti;
  • kérések frissítése, hozzáadása, törlése- olyan műveleti kérések, amelyek hatására a táblákban szereplő adatok megváltoznak.

A tervezési módban az Access lekérdezései tartalmaznak egy adatsémát, amely megjeleníti a használt táblákat, és egy lekérdezési űrlapot, amely megalkotja a lekérdezési tábla szerkezetét és a rekordok kiválasztásának feltételeit (4.1. ábra).

Lekérdezés segítségével a következő típusú adatfeldolgozást hajthatja végre:

  • belefoglalni a lekérdezési táblába a felhasználó által kiválasztott táblamezőket;
  • végezzen számításokat minden fogadott rekordban;
  • válassza ki a kiválasztási kritériumoknak megfelelő rekordokat;
  • hozzon létre egy új virtuális táblát a kapcsolódó táblák rekordjainak egyesítése alapján;
  • olyan rekordokat csoportosítanak, amelyek egy vagy több mezőben azonos értékekkel rendelkeznek, egyidejűleg statisztikai funkciókat látnak el a csoport más mezőiben, és minden csoporthoz egy rekordot tartalmaznak az eredményben;
  • hozzon létre egy új adatbázistáblát a meglévő táblák adatainak felhasználásával;
  • frissíti a mezőket a rekordok kiválasztott részhalmazában;
  • törölje a rekordok kiválasztott részhalmazát az adatbázistáblából;
  • adja hozzá a rekordok kiválasztott részhalmazát egy másik táblához.

Az Access lekérdezései rekordforrásként szolgálnak más lekérdezések, űrlapok és jelentések számára. Egy lekérdezés segítségével több táblázatból gyűjthet teljes információt a tárgykör egy bizonyos dokumentumának kialakításához, majd felhasználhatja egy űrlap létrehozásához - ennek a dokumentumnak az elektronikus ábrázolásához. Ha egy űrlapot vagy jelentést a varázsló több egymáshoz kapcsolódó tábla alapján hoz létre, akkor a rendszer automatikusan lekérdezést generál hozzájuk rekordforrásként.
A konszolidációhoz nézze meg az oktatóvideót.

A kéréseket idézőjelek nélkül írják, mivel MySQL, MS SQLés PostGree különbözőek.

SQL lekérdezés: meghatározott (kötelező) mezők lekérése egy táblából

SELECT id, country_title, count_people FROM table_name

Kapunk egy listát a rekordokról: ÖSSZES ország és lakosságuk. A kötelező mezők neveit vessző választja el.

SELECT * FROM tábla_neve

* az összes mezőt jelöli. Vagyis benyomások lesznek MINDEN adatmezők.

SQL lekérdezés: rekordok kiadása egy táblából, a duplikátumok kizárásával

SELECT DISTINCT country_title FROM table_name

Kapunk egy listát a rekordokról: azok az országok, ahol felhasználóink ​​találhatók. Egy országból több felhasználó is lehet. Ebben az esetben ez az Ön kérése.

SQL lekérdezés: rekordok megjelenítése táblából meghatározott feltétel szerint

SELECT id, country_title, city_title FROM table_name WHERE count_people> 100000000

Kapunk egy listát a rekordokról: országok, ahol az emberek száma meghaladja a 100 000 000 főt.

SQL lekérdezés: rekordok megjelenítése táblából rendezéssel

SELECT id, city_title FROM table_name ORDER BY city_title

Rekordlistát kapunk: városok ábécé sorrendben. Az A elején, az I végén.

SELECT id, city_title FROM table_name ORDER BY city_title DESC

Kapunk egy listát a rekordokról: városok fordítva ( DESC) rendben. Az elején én, a végén A.

SQL lekérdezés: a rekordok számának számlálása

COUNT (*) KIVÁLASZTÁS A tábla_nevéből

Megkapjuk a táblázatban szereplő rekordok számát (számát). Ebben az esetben NINCS rekordlista.

SQL lekérdezés: adja ki a kívánt rekordtartományt

SELECT * FROM tábla_neve LIMIT 2, 3

A táblázatból 2 (második) és 3 (harmadik) rekordot kapunk. A kérés hasznos a WEB oldalakon történő navigáció létrehozásakor.

SQL lekérdezések feltételekkel

Rekordok kimenete egy táblázatból adott feltétel szerint logikai operátorok segítségével.

SQL lekérdezés: ÉS konstrukció

SELECT id, city_title FROM table_name WHERE ország = "Oroszország" ÉS olaj = 1

Kapunk egy listát a rekordokról: városok Oroszországból ÉS olajhoz juthatnak. Amikor a kezelőt használják ÉS, akkor mindkét feltételnek meg kell egyeznie.

SQL lekérdezés: VAGY konstrukció

SELECT id, city_title FROM table_name WHERE country = "Oroszország" OR country = "USA"

Kapunk egy listát a rekordokról: minden város Oroszországból VAGY USA. Amikor a kezelőt használják VAGY, akkor legalább egy feltételnek meg kell egyeznie.

SQL lekérdezés: ÉS NEM konstruál

SELECT id, user_login FROM table_name WHERE country = "Oroszország" AND NOT count_comments<7

Kapunk egy listát a rekordokról: minden felhasználó Oroszországból ÉS ki csinálta NEM KEVESEBB 7 hozzászólás.

SQL lekérdezés: IN (B) konstrukció

SELECT id, user_login FROM table_name WHERE country IN ("Oroszország", "Bulgária", "Kína")

Kapunk egy listát a rekordokról: az összes felhasználó, aki a ( BAN BEN) (Oroszország, Bulgária vagy Kína)

SQL lekérdezés: NEM AZ építésben

SELECT id, user_login FROM table_name WHERE country NOT IN ("Oroszország", "Kína")

Kapunk egy listát a rekordokról: minden olyan felhasználó, aki nem a ( NEM BENT) (Oroszország vagy Kína).

SQL lekérdezés: IS NULL konstrukció (üres vagy NEM üres értékek)

SELECT id, user_login FROM táblanév WHERE állapot NULL

Kapunk egy listát a bejegyzésekről: minden olyan felhasználó, akinek az állapota nincs megadva. A NULL egy külön téma, ezért külön ellenőrzik.

SELECT id, user_login FROM táblanév WHERE állapot NEM NULL

Kapunk egy listát a rekordokról: minden felhasználó, ahol az állapot definiálva van (NEM NULLA).

SQL lekérdezés: LIKE konstrukció

SELECT id, user_login FROM table_name WHERE vezetéknév LIKE "Ivan%"

Kapunk egy listát a rekordokról: a felhasználók, akiknek vezetéknevük "Ivan" kombinációval kezdődik. A% jel BÁRMELY számú karaktert jelent. A% jel megtalálásához használja az "Ivan \%" kilépő karaktert.

SQL lekérdezés: BETWEEN konstrukció

SELECT id, user_login FROM table_name WHERE fizetés 25000 ÉS 50000 KÖZÖTT

Kapunk egy listát a rekordokról: azok a felhasználók, akik 25 000 és 50 000 közötti fizetést kapnak.

Nagyon sok logikai operátor létezik, ezért tanulmányozza át részletesen az SQL szerver dokumentációját.

Összetett SQL lekérdezések

SQL lekérdezés: több lekérdezés kombinálása

(SELECT id, user_login FROM table_name1) UNION (SELECT id, user_login FROM table_name2)

Kapunk egy listát a rekordokról: a rendszerben regisztrált felhasználókról, valamint a fórumon külön-külön regisztrált felhasználókról. Az UNION operátorral több lekérdezés is kombinálható. Az UNION úgy működik, mint a SELECT DISTINCT, vagyis elveti az ismétlődő értékeket. Az összes rekord eléréséhez az UNION ALL operátort kell használnia.

SQL lekérdezés: MAX, MIN, SUM, AVG, COUNT mezőértékek számlálása

Egy kimenete, a számláló maximális értéke a táblázatban:

MAX (számláló) KIVÁLASZTÁS A tábla_nevéből

Egy kimenete, a számláló minimális értéke a táblázatban:

SELECT MIN (számláló) FROM tábla_neve

Az összes számlálóérték összegének megjelenítése a táblázatban:

SELECT SUM (számláló) FROM tábla_neve

A számláló átlagértékének megjelenítése a táblázatban:

SELECT AVG (számláló) FROM table_name

A számlálók számának megjelenítése a táblázatban:

SZÁM VÁLASZTÁSA (számláló) FROM táblázat_neve

A számlálók számának kijelzése az 1. számú műhelyben a táblázatban:

SELECT COUNT (counter) FROM table_name WHERE office = "1. bolt"

Ezek a legnépszerűbb parancsok. A számításokhoz lehetőség szerint ajánlatos az ilyen típusú SQL lekérdezéseket használni, mivel egyetlen programozási környezet sem tud összehasonlítani adatfeldolgozási sebességgel, mint maga az SQL szerver saját adatainak feldolgozásakor.

SQL lekérdezés: rekordok csoportosítása

SELECT kontinens, SUM (ország_terület) FROM országból GROUP BY kontinens

Rekordlistát kapunk: a kontinens nevével és az összes ország területeinek összegével. Azaz, ha van olyan országok névjegyzéke, ahol minden országnak fel van tüntetve a területe, akkor a GROUP BY záradék segítségével megtudhatja az egyes kontinensek méretét (a kontinens szerinti csoportosítás alapján).

SQL lekérdezés: több tábla használata álnéven keresztül

SELECT o.order_no, o.amount_paid, c.company FROM orders AS o, ügyfél AS WHERE o.custno = c.custno AND c.city = "Tyumen"

Kapunk egy listát a rekordokról: megrendelések olyan ügyfelektől, akik csak Tyumenben élnek.

Valójában egy ilyen típusú, megfelelően kialakított adatbázisnál a lekérdezés a leggyakoribb, ezért a MySQL-ben egy speciális operátor került bevezetésre, amely sokszor gyorsabban működik, mint a fent írt kód.

KIVÁLASZTÁS o.rendelési_szám, o.kifizetett összeg, z.cég A rendelésekből, AS o LEFT JOIN ügyfél AS z BE (z.custno = o.custno)

Beágyazott segédlekérdezések

SELECT * FROM táblázat_neve WHERE fizetés = (SELECT MAX (fizetés) FROM alkalmazott)

Egy rekordot kapunk: információkat a maximális fizetéssel rendelkező felhasználóról.

Figyelem! A beágyazott segédlekérdezések az SQL-kiszolgálók egyik szűk keresztmetszete. Rugalmasságukkal és teljesítményükkel együtt jelentősen megnövelik a szerver terhelését is. Ez a többi felhasználó munkájának katasztrofális lelassulásához vezet. A rekurzív hívások beágyazott lekérdezésekkel nagyon gyakoriak. Ezért erősen javaslom, hogy NE használjunk beágyazott lekérdezéseket, hanem bontsuk kisebbre. Vagy használja a fenti LEFT JOIN kombinációt. Az ilyen típusú kérések mellett a kérések a biztonság megsértésének fokozott melegágyát jelentik. Ha úgy dönt, hogy beágyazott segédlekérdezéseket használ, akkor nagyon körültekintően kell megterveznie őket, és a kezdeti futtatásokat az adatbázisok másolatain (tesztadatbázisokon) kell elvégeznie.

Az SQL lekérdezi az adatok megváltoztatását

SQL lekérdezés: INSERT

Utasítás BESZÁLLÍTÁS lehetővé teszi rekordok beszúrását egy táblázatba. Egyszerű szavakkal, hozzon létre egy sort a táblázatban lévő adatokkal.

1. számú lehetőség. Az utasítást gyakran használják:

INSERT INTO table_name (id, user_login) VALUES (1, "ivanov"), (2, "petrov")

Az asztalban " táblázat_neve"Egyszerre 2 (két) felhasználó kerül beillesztésre.

2. számú lehetőség. Kényelmesebb a stílus használata:

INSERT tábla_neve SET id = 1, user_login = "ivanov"; INSERT táblanév SET id = 2, user_login = "petrov";

Ennek megvannak a maga előnyei és hátrányai.

Főbb hátrányai:

  • Sok kis SQL-lekérdezés valamivel lassabban fut, mint egy nagy SQL-lekérdezés, de más lekérdezések sorba kerülnek a szolgáltatáshoz. Vagyis ha egy nagy SQL lekérdezést hajtanak végre 30 percig, akkor ezalatt a többi lekérdezés füstölög és várja a sorát.
  • A kérés masszívabbnak bizonyult, mint az előző verzió.

Fő előnyei:

  • Kisméretű SQL-lekérdezések során a többi SQL-lekérdezés nincs blokkolva.
  • Könnyű olvasás.
  • Rugalmasság. Ebben az opcióban nem követheti a szerkezetet, hanem csak a szükséges adatokat adhatja hozzá.
  • Az archívumok ilyen módon történő létrehozása során egyszerűen másolhat egy sort, és futtathatja a parancssorban (konzolon), így nem áll vissza az egész ARCHÍVUM.
  • Az írás stílusa hasonló az UPDATE utasításhoz, ami megkönnyíti az emlékezést.

SQL lekérdezés: UPDATE

UPDATE table_name SET user_login = "ivanov", user_surname = "Ivanov" WHERE id = 1

Az asztalban " táblázat_neve"Az id = 1 rekordban a user_login és user_surname mezők értékei a megadott értékekre módosulnak.

SQL lekérdezés: DELETE

DELETE FROM table_name WHERE id = 3

A 3-as azonosítószámú rekord törlődik a táblázat_neve táblából.

  1. Javasoljuk, hogy minden mezőnevet kis betűkkel írjon, és ha szükséges, kényszerített szóközzel "_" válassza el őket a különböző programozási nyelvekkel, például Delphi, Perl, Python és Ruby kompatibilitás érdekében.
  2. Írja az SQL-parancsokat NAGYBETŰVEL az olvashatóság érdekében. Mindig ne feledje, hogy mások is elolvashatják a kódot Ön után, és valószínűleg Ön is N idő múlva.
  3. Nevezze meg a mezőket a főnév elejétől, majd a műveletet. Például: city_status, user_login, user_name.
  4. Próbálja meg elkerülni a különböző nyelvű tartalékszavakat, amelyek problémákat okozhatnak SQL-ben, PHP-ben vagy Perlben, például (név, szám, hivatkozás). Például: a link használható MS SQL-ben, de a MySQL-ben le van foglalva.

Ez az anyag egy rövid hivatkozás a mindennapi munkához, és nem állítja, hogy egy rendkívül hiteles forrás, amely egy adott adatbázis SQL-lekérdezésének elsődleges forrása.

Mindannyian rendszeresen találkozunk és használunk különféle adatbázisokat. Amikor e-mail címet választunk, adatbázissal dolgozunk. Az adatbázisok keresőmotorokat, bankokat használnak az ügyféladatok tárolására stb.

Az adatbázisok folyamatos használata ellenére azonban még sok szoftverrendszer-fejlesztő számára is sok „üres folt” van ugyanazon kifejezések eltérő értelmezése miatt. Az SQL nyelv megtekintése előtt röviden meghatározzuk az alapvető adatbázis-kifejezéseket. Így.

Adatbázis - rendezett adatstruktúrák és azok kapcsolatainak tárolására szolgáló fájl vagy állománykészlet. Nagyon gyakran egy vezérlőrendszert adatbázisnak neveznek - ez csak egy bizonyos formátumú információ tárolása, és különféle DBMS-ekkel működhet.

asztal - Képzeljen el egy mappát, amely bizonyos kritériumok szerint csoportosítva tárolja a dokumentumokat, például az elmúlt hónap rendeléseinek listáját. Ez a táblázat a számítógépben. Egy különálló táblának saját egyedi neve van.

Adattípus - külön oszlopban vagy sorban tárolható információ. Ezek lehetnek számok vagy szövegek meghatározott formátumban.

Oszlop és sor- mindannyian táblázatokkal dolgoztunk, amelyekben sorok és oszlopok is vannak. Bármely relációs adatbázis hasonló módon működik a táblákkal. A sorokat néha rekordoknak is nevezik.

Elsődleges kulcs- a táblázat minden sorában lehet egy vagy több oszlop az egyedi azonosításhoz. Elsődleges kulcs nélkül nagyon nehéz frissíteni, módosítani és törölni a szükséges sorokat.

Mi az SQL?

SQL(angol – strukturált lekérdezési nyelv) csak az adatbázisokkal való munkavégzéshez lett kifejlesztve, és jelenleg az összes népszerű DBMS szabványa. A nyelv szintaxisa kevés operátorból áll, és könnyen megtanulható. De a külső egyszerűség ellenére lehetővé teszi sql lekérdezések létrehozását összetett műveletekhez bármilyen méretű adatbázissal.

1992 óta létezik egy általánosan elfogadott szabvány, az ANSI SQL. Meghatározza az operátorok alapvető szintaxisát és funkcióit, és a DBMS piac összes vezetője támogatja, mint például az ORACLE. A nyelv összes jellemzőjét nem lehet egyetlen kis cikkben megvizsgálni, ezért röviden csak az alapvető SQL lekérdezéseket fogjuk figyelembe venni . A példák egyértelműen mutatják a nyelv egyszerűségét és képességeit:

  • adatbázisok és táblázatok létrehozása;
  • adatok behozása;
  • rekordok hozzáadása;
  • információk módosítása és törlése.

SQL adattípusok

Az adatbázistábla minden oszlopa ugyanazt az adattípust tárolja. Az SQL adattípusai ugyanazok, mint a többi programozási nyelvben.

Hozzon létre táblákat és adatbázisokat

Kétféleképpen hozhat létre új adatbázisokat, táblákat és egyéb lekérdezéseket SQL-ben:

  • a DBMS konzolon keresztül
  • Az adatbázis-szerverhez mellékelt online adminisztrációs eszközök használata.

Az operátor új adatbázist hoz létre ADATBÁZIS LÉTREHOZÁSA<наименование базы данных>; ... Amint látja, a szintaxis egyszerű és tömör.

Az adatbázison belül táblákat hozunk létre a CREATE TABLE utasítással a következő paraméterekkel:

  • táblázat neve
  • oszlopnevek és adattípusok

Példaként hozzunk létre egy árutáblát a következő oszlopokkal:

Készítünk egy táblázatot:

TÁBLÁZAT LÉTREHOZÁSA Áru

(commodity_id CHAR (15) NEM NULL,

vendor_id CHAR (15) NEM NULL,

áru_neve CHAR (254) NULL,

commodity_price DECIMAL (8,2) NULL,

commodity_desc VARCHAR (1000) NULL);

A táblázat öt oszlopból áll. A név után az adattípus szerepel, az oszlopokat vessző választja el. Az oszlop értéke lehet null (NULL) vagy ki kell tölteni (NOT NULL), és ez a tábla létrehozásakor kerül meghatározásra.

Adatok lekérése egy táblázatból

Az adatkiválasztó operátor a leggyakrabban használt SQL lekérdezések. Az információszerzéshez szükséges jelezni, hogy mit szeretnénk kiválasztani egy ilyen táblázatból. Kezdjük egy egyszerű példával:

VÁLASZTÁSA TERMÉK_NEVE FROM Áruból

A SELECT utasítás után megadjuk az oszlop nevét, hogy megkapjuk az információkat, a FROM pedig a táblát határozza meg.

A lekérdezés végrehajtásának eredménye a tábla összes olyan sora lesz, amelyben az Árunév értékei vannak abban a sorrendben, ahogyan az adatbázisba kerültek, pl. minden válogatás nélkül. Az eredmény rendezéséhez egy további ORDER BY záradékot használunk.

Ha több mezőt szeretne lekérdezni, azokat vesszővel elválasztva listázzuk ki, mint az alábbi példában:

SELECT áruazonosító, árucikk_neve, árucikk ára FROM árucikkből

Lehetőség van egy lekérdezés eredményeként egy sor összes oszlopának értékét megkapni. Ehhez használja a "*" jelet:

KIVÁLASZTÁS * Áruból

  • Ezenkívül a SELECT támogatja:
  • Adatok rendezése (ORDER BY operátor)
  • Kiválasztás a feltételek szerint (HOL)
  • Csoportosítási kifejezés (GROUP BY)

Add hozzá a sort

Egy sor hozzáadásához a táblázathoz az INSERT utasítást tartalmazó SQL-lekérdezéseket kell használni. A hozzáadás háromféleképpen történhet:

  • adjunk hozzá egy új egész sort;
  • egy karakterlánc része;
  • lekérdezési eredmények.

Egy teljes sor hozzáadásához meg kell adnia a táblázat nevét és az új sor oszlopainak (mezőinek) értékeit. Mondjunk egy példát:

INSERT AZ Áru ÉRTÉKEIBE ("106", "50", "Coca-Cola", "1.68", "No Alcogol")

A példa egy új terméket ad a táblázathoz. Az értékek az VALUES után vannak megadva minden oszlopban. Ha nincs megfelelő érték az oszlophoz, akkor NULL értéket kell megadni. Az oszlopok a táblázat létrehozásakor megadott sorrendben vannak kitöltve értékekkel.

Ha egy sornak csak egy részét adja hozzá, akkor kifejezetten meg kell adnia az oszlopok nevét, mint a példában:

INSERT INTO Áru (áruazonosító, szállítóazonosító, árucikk_neve)

ÉRTÉKEK ("106", '50 "," Coca-Cola ",)

Csak a termék, szállító és nevének azonosítóit adtuk meg, a többi mezőt üresen hagytuk.

Lekérdezési eredmények hozzáadása

Az INSERT főként sorok hozzáadására szolgál, de használható egy SELECT utasítás eredményeinek hozzáadására is.

Adatváltozás

Az adatbázistábla mezőiben lévő információk megváltoztatásához az UPDATE utasítást kell használni. Az operátor kétféleképpen használható:

  • A táblázat összes sora frissül.
  • Csak egy adott sorhoz.

Az UPDATE három fő elemből áll:

  • a táblázat, amelyben módosítania kell;
  • mezőnevek és új értékeik;
  • a módosítandó sorok kiválasztásának feltételei.

Nézzünk egy példát. Tegyük fel, hogy a 106-os azonosítójú cikk költsége megváltozott, ezért ezt a sort frissíteni kell. A következő operátort írjuk:

Árukészlet FRISSÍTÉSE commodity_price = "3,2" WHERE commodity_id = "106"

Megjelöltük a tábla nevét, esetünkben Áru, ahol a frissítés megtörténik, majd a SET után - az oszlop új értékét és a WHERE-ben a szükséges azonosító érték megadásával megtaláltuk a kívánt rekordot.

Több oszlop módosításához a SET utasítás után több oszlop-érték pár kerül megadásra, vesszővel elválasztva. Nézzünk egy példát, amely frissíti egy termék nevét és árát:

UPDATE Árukészlet commodity_name = 'Fanta', commodity_price = "3,2" WHERE commodity_id = "106"

Egy oszlop információinak eltávolításához NULL-ra állíthatja, ha a táblázatszerkezet ezt lehetővé teszi. Emlékeztetni kell arra, hogy a NULL pontosan „nem” érték, és nem nulla szöveg vagy szám formájában. Töröljük a termékleírást:

UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"

Sorok törlése

A tábla sorainak törlésére szolgáló SQL-lekérdezéseket a DELETE utasítás hajtja végre. Két felhasználási eset létezik:

  • bizonyos sorok törlésre kerülnek a táblázatban;
  • a táblázat összes sora törlődik.

Példa egy sor törlésére a táblázatból:

DELETE FROM Commodity WHERE commodity_id = "106"

A DELETE FROM után megadjuk annak a táblának a nevét, amelyben a sorok törlésre kerülnek. A WHERE záradék tartalmaz egy feltételt, amely alapján a törlendő sorok kijelölésre kerülnek. A példában a 106-os azonosítójú termék sorát töröljük. Nagyon fontos a HOL megadása. ennek az utasításnak a kihagyásával a táblázat összes sora törlődik. Ez vonatkozik a mezők értékének megváltoztatására is.

A DELETE utasítás nem tartalmaz oszlopneveket vagy metakaraktereket. A sorokat teljesen törli, de egyetlen oszlopot sem.

SQL használata a Microsoft Accessben

Általában interaktívan használják táblák, adatbázisok létrehozására, adatbázisban lévő adatok kezelésére, módosítására, elemzésére és SQL Access lekérdezések beágyazására egy kényelmes interaktív lekérdezéstervezőn (Query Designer) keresztül, amellyel bármilyen SQL utasítást összeállíthat és azonnal végrehajthat. bonyolultság...

A kiszolgálóhoz való hozzáférés módja is támogatott, amelyben az Access DBMS bármely ODBC adatforráshoz SQL lekérdezések generátoraként használható. Ez a képesség lehetővé teszi, hogy az Access alkalmazások bármilyen formátummal együttműködjenek.

SQL kiterjesztések

Mivel az SQL-lekérdezések nem rendelkeznek az eljárási programozási nyelvek összes lehetőségével, például hurkok, ágak stb., az adatbázis-szállítók saját SQL-verziót fejlesztenek ki speciális képességekkel. Először is, ez a tárolt eljárások és az eljárási nyelvek szabványos operátorainak támogatása.

A nyelv leggyakoribb dialektusai:

  • Oracle Database - PL / SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server – Transact-SQL
  • PostgreSQL - PL / pgSQL.

SQL az interneten

A MySQL-t a GNU General Public License alatt terjesztik. Van egy kereskedelmi licenc, amely lehetővé teszi egyedi modulok fejlesztését. Elválaszthatatlan részeként szerepel az internetes szerverek legnépszerűbb összeállításaiban, mint például az XAMPP, WAMP és LAMP, és a legnépszerűbb DBMS az internetes alkalmazások fejlesztéséhez.

A Sun Microsystems fejlesztette ki, jelenleg pedig az Oracle Corporation támogatja. 64 terabájtig terjedő adatbázisok, SQL: 2003 szintaxis szabvány, adatbázis-replikáció és felhőszolgáltatások támogatottak.

Táblázatkifejezések Az allekérdezések el vannak nevezve, és ott használatosak, ahol a tábla várhatóan létezik. Kétféle táblázatkifejezés létezik:

    származtatott táblázatok;

    általánosított táblázatos kifejezések.

A táblázatkifejezések e két formáját a következő alfejezetek tárgyalják.

Származtatott táblázatok

Származtatott táblázat egy táblakifejezés, amely a lekérdezés FROM záradékában található. A származtatott táblák akkor használhatók, ha az oszlopálnevek nem használhatók, mert az SQL-fordító egy másik utasítást dolgoz fel, mielőtt az álnév ismertté válik. Az alábbi példa egy oszlopálnév használatára tesz kísérletet olyan helyzetben, amikor egy másik záradékot dolgoznak fel, mielőtt az alias ismertté válna:

SampleDb HASZNÁLATA; SELECT HÓNAP (Belépés dátuma) mint belépési_hónap FROM Munkaidő: GROUP BY enter_month;

A lekérdezés végrehajtásának kísérlete a következő hibaüzenetet eredményezi:

207. üzenet, 16. szint, 1. állapot, 5. sor Érvénytelen oszlopnév: „enter_month”. (207. üzenet: 16. szint, 1. állapot, 5. sor Érvénytelen oszlopnév enter_month)

A hiba oka az, hogy a GROUP BY záradék feldolgozása a kapcsolódó SELECT lista feldolgozása előtt megtörténik, és az enter_month oszlop álneve nem ismert a csoport feldolgozása során.

Ez a probléma megoldható egy származtatott tábla használatával, amely tartalmazza az előző lekérdezést (a GROUP BY záradék nélkül), mivel a FROM záradék a GROUP BY záradék előtt kerül végrehajtásra:

SampleDb HASZNÁLATA; SELECT belépési_hónap FROM (SELECT MONTH (Belépés dátuma) mint belépési_hónap FROM Munkaidő) AS m GROUP BY belépési_hónap;

A lekérdezés végrehajtásának eredménye a következő lesz:

A táblakifejezés általában bárhol elhelyezhető a SELECT utasításban, ahol a tábla neve megjelenhet. (A táblakifejezés eredménye mindig egy tábla, vagy speciális esetekben egy kifejezés.) A következő példa egy táblakifejezés használatát mutatja be egy SELECT utasítás kijelölő listájában:

Ennek a lekérdezésnek az eredménye:

Általános táblakifejezések

Common Table Expression (CTE) egy elnevezett táblakifejezés, amelyet a Transact-SQL nyelv támogat. Az általános táblakifejezések a következő két típusú lekérdezésben használatosak:

    nem rekurzív;

    rekurzív.

Ezt a két típusú kérelmet a következő szakaszok tárgyalják.

OTB és nem rekurzív lekérdezések

A származtatott táblák és nézetek alternatívájaként használhatja a nem rekurzív OTB űrlapot. Általában az OTB-t a záradékokkalés egy opcionális lekérdezés, amely a WITH záradékban használt névre hivatkozik. A WITH kulcsszó nem egyértelmű a Transact-SQL-ben. A félreértések elkerülése érdekében a WITH záradékot megelőző utasítást pontosvesszővel fejezze be.

HASZNÁLATA AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue> (SELECT AVG (TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR (OrderDate) = "2005") AND Freight> (SELECT AVG (TotalDue) FROM Sales.OrderHeader0 2,5;

Ebben a példában a lekérdezés azokat a rendeléseket választja ki, amelyek teljes adója (TotalDue) meghaladja az összes adó átlagát, és amelyek szállítási díja (Freight) meghaladja az adók átlagának 40%-át. Ennek a lekérdezésnek a fő tulajdonsága a térfogata, mivel az allekérdezést kétszer kell megírni. A lekérdezési konstrukció méretének csökkentésének egyik lehetséges módja egy részlekérdezést tartalmazó nézet létrehozása. Ez a megoldás azonban kissé nehézkes, mivel egy nézetet kell létrehozni, majd a lekérdezés végrehajtása után törölni kell. A legjobb megoldás az OTB létrehozása. Az alábbi példa a nem rekurzív OTB használatát mutatja be, amely lerövidíti a fenti lekérdezésdefiníciót:

HASZNÁLATA AdventureWorks2012; WITH price_calc (year_2005) AS (SELECT AVG (TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR (OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue> (SELECT year_ Fre_calc)0 FROM /2005.5.5;

A WITH záradék szintaxisa nem rekurzív lekérdezésekben a következő:

A cte_name paraméter az eredményül kapott táblát azonosító OTB nevet jelöli, a column_list paraméter pedig a táblázatkifejezés oszlopainak listáját. (A fenti példában az OTB neve price_calc, és egy oszlopa van, év_2005.) Az inner_query paraméter egy SELECT utasítást jelent, amely meghatározza a megfelelő táblakifejezés eredménykészletét. A definiált táblakifejezés ezután használható az outer_query külső lekérdezésben. (A fenti példában a külső lekérdezés az OTB price_calc értéket és az év_2005 oszlopát használja a dupla beágyazott lekérdezés egyszerűsítésére.)

OTB és rekurzív lekérdezések

Ez a rész fokozott összetettségű anyagokat mutat be. Ezért első olvasásakor ajánlatos kihagyni, és később visszatérni hozzá. Az OTB-k rekurziókat valósíthatnak meg, mivel az OTB-k tartalmazhatnak hivatkozásokat önmagukra. A rekurzív lekérdezések alapvető OTB szintaxisa így néz ki:

A cte_name és oszloplista paraméterek jelentése ugyanaz, mint az OTB-ben a nem rekurzív lekérdezéseknél. A WITH záradék törzse két lekérdezésből áll, amelyeket az operátor kombinál UNION ALL... Az első lekérdezést csak egyszer hívják meg, és elkezdi felhalmozni a rekurzió eredményét. Az UNION ALL operátor első operandusa nem utal az OTB-re. Ezt a lekérdezést referencia lekérdezésnek vagy forrásnak nevezik.

A második kérés tartalmaz egy hivatkozást az OTB-re, és annak rekurzív részét képviseli. Emiatt rekurzív tagnak nevezik. A rekurzív rész első hívásakor az OTB hivatkozás a referencialekérdezés eredményét jelenti. A rekurzív tag a lekérdezés első hívásának eredményét használja. Ezt követően a rendszer újra meghívja a rekurzív részt. Egy rekurzív tag hívása megszakad, ha egy korábbi hívás üres eredményhalmazt ad vissza.

Az UNION ALL operátor összefűzi az aktuálisan felhalmozott karakterláncokat, valamint az aktuális hívás által a rekurzív taghoz hozzáadott további karakterláncokat. (Az UNION ALL operátor jelenléte azt jelenti, hogy az ismétlődő sorok nem kerülnek eltávolításra az eredményből.)

Végül az outer_query paraméter meghatároz egy külső lekérdezést, amely az OTB-t használja, hogy az összes hívást megkapja mindkét tag uniójához.

A rekurzív OTB űrlap bemutatásához az alábbi példában látható kóddal meghatározott és feltöltött Repülőgép táblát használjuk:

SampleDb HASZNÁLATA; TÁBLÁZAT LÉTREHOZÁSA Repülőgép (ContainingAssembly VARCHAR (10), ContainedAssembly VARCHAR (10), QuantityContained INT, UnitCost DECIMAL (6,2)); INSERT INTO Airplane VALUES ("Repülőgép", "Tüzér", 1, 10); INSERT INTO Airplane VALUES ("Airplane", "Wings", 1, 11); INSERT INTO Airplane VALUES ("Airplane", "Tail", 1, 12); INSERT INTO Airplane VALUES ("Tüzér", "Szalon", 1, 13); INSERT INTO Airplane VALUES ("törzs", "kabin", 1, 14); INSERT INTO Repülőgép ÉRTÉKEK ("Tüzlet", "Orr", 1, 15); INSERT INTO Airplane VALUES ("Szalon", NULL, 1.13); INSERT INTO Repülőgép ÉRTÉKEK ("Cabin", NULL, 1, 14); INSERT INTO Airplane VALUES ("Orr", NULL, 1, 15); INSERT INTO Airplane VALUES ("Wings", NULL, 2, 11); INSERT INTO Airplane VALUES ("farok", NULL, 1, 12);

A Repülőgép táblázat négy oszlopból áll. A ContainingAssembly oszlop az összeállítást, a ContainedAssembly oszlop pedig a megfelelő összeállítást alkotó alkatrészeket (egymás után) azonosítja. Az alábbi ábra grafikusan szemlélteti egy lehetséges repülőgéptípust és annak alkotórészeit:

A Repülőgép táblázat a következő 11 sorból áll:

Az alábbi példa bemutatja a WITH záradékot, amelyet az egyes összeállítások teljes költségét kiszámító lekérdezés meghatározásához használnak:

SampleDb HASZNÁLATA; WITH_of_parts (összeállítás1, mennyiség, költség) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Repülőgép WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST (asset.l.quantity) *DECl.quantity) ) FROM list_of_parts l, Repülőgép a WHERE l.assembly1 = a.ContainedAssembly) SELECT szerelvény1 "Alkatrész", mennyiség "Mennyiség", költség "Ár" FROM_alkatrészek_listája;

A WITH záradék egy list_of_parts nevű OTB-listát határoz meg három oszloppal: összeállítás1, mennyiség és költség. A példa első SELECT utasítását csak egyszer hívjuk meg, hogy megőrizzük a rekurziós folyamat első lépésének eredményeit. A példa utolsó sorában található SELECT utasítás a következő eredményt jeleníti meg.

Utolsó frissítés: 2017.07.05

Az előző témakörben egy egyszerű, egy táblás adatbázis készült az SQL Management Studio-ban. Most határozzuk meg és hajtsuk végre az első SQL lekérdezést. Ehhez nyissa meg az SQL Management Studio alkalmazást, kattintson a jobb gombbal az Object Explorer legfelső szintű elemére (kiszolgálónév), és válassza az Új lekérdezés lehetőséget a megjelenő helyi menüben:

Ezt követően a program központi részében megnyílik egy ablak az SQL parancsok bevitelére.

Futtassunk egy lekérdezést az előző témakörben létrehozott táblához, konkrétan onnan fogunk megkapni minden adatot. Adatbázisunk neve egyetem, a tábla pedig dbo.Students, így a táblázatból való adatgyűjtéshez a következő lekérdezést adjuk meg:

SELECT * FROM egyetem.dbo.Students

A SELECT utasítás lehetővé teszi az adatok kiválasztását. A FROM jelzi a forrást, ahonnan az adatok származnak. Valójában ezzel a lekérdezéssel azt mondjuk, hogy "MINS VÁLASZTÁSA A University.dbo.Students táblából". Érdemes megjegyezni, hogy a tábla nevéhez a teljes elérési út kerül felhasználásra, jelezve az adatbázist és a sémát.

A lekérdezés bevitele után kattintson az eszköztáron a Végrehajtás gombra, vagy nyomja meg az F5 billentyűt.

A lekérdezés végrehajtása eredményeként a program alján megjelenik egy kis táblázat, amely megjeleníti a lekérdezés eredményeit - vagyis a Diákok tábla összes adatát.

Ha több lekérdezést kell végrehajtanunk ugyanabban az adatbázisban, akkor a USE paranccsal véglegesíthetjük az adatbázist. Ebben az esetben a táblák lekérdezésekor elegendő a nevüket megadni az adatbázis és a séma neve nélkül:

egyetemi HASZNÁLAT SELECT * FROM Diákok

Ebben az esetben a szerver egészére vonatkozó kérést hajtunk végre, a szerveren lévő bármely adatbázishoz hozzáférhetünk. De lekérdezéseket csak egy adott adatbázison belül is végrehajthatunk. Ehhez kattintson a jobb gombbal a kívánt adatbázisra, és válassza ki az Új lekérdezés elemet a helyi menüben:

Ha ebben az esetben lekérdezést szeretnénk végrehajtani a fent használt Students táblához, akkor a lekérdezésben nem kell megadnunk az adatbázis nevét és a sémát, hiszen ezek az értékek már egyértelműek lennének.