Vytváranie dopytov na serveri SQL. Dotazy v Accesse

Dotazy v Accesse sú hlavným nástrojom na výber, aktualizáciu a spracovanie údajov v databázových tabuľkách. Access v súlade s koncepciou relačných databáz používa na vykonávanie dotazov štruktúrovaný jazyk dotazov (SQL). Pomocou príkazov SQL je implementovaný akýkoľvek dotaz v Accesse.

Hlavným typom požiadavky je výberová požiadavka. Výsledkom tohto dotazu je nová tabuľka, ktorá existuje, kým sa dotaz neuzavrie. Záznamy sa tvoria spojením záznamov tabuliek, na ktorých je dotaz postavený. Spôsob kombinovania záznamov tabuľky sa špecifikuje pri definovaní ich vzťahu v dátovej schéme alebo pri vytváraní dotazu. Podmienky výberu formulované v dotaze umožňujú filtrovať záznamy, ktoré tvoria výsledok spájania tabuliek.

V Accesse je možné vytvoriť niekoľko typov dotazov:

  • vzorová žiadosť- vyberá údaje z jednej tabuľky alebo dotazu alebo niekoľkých súvisiacich tabuliek a iných dotazov. Výsledkom je tabuľka, ktorá existuje, kým sa dotaz neuzavrie. Vytváranie záznamov výsledkových tabuliek sa vykonáva v súlade so stanovenými podmienkami výberu a pri použití viacerých tabuliek spojením ich záznamov;
  • dotaz na vytvorenie tabuľky- vyberie údaje zo súvisiacich tabuliek a iných dotazov, ale na rozdiel od výberového dotazu uloží výsledok do novej stálej tabuľky;
  • žiadosti o aktualizáciu, pridanie, odstránenie- sú akčné požiadavky, v dôsledku ktorých sa menia údaje v tabuľkách.

Dotazy v Accesse v návrhovom režime obsahujú dátovú schému, ktorá zobrazuje použité tabuľky, a dotazovací formulár, v ktorom je zostavená štruktúra dotazovacej tabuľky a podmienky výberu záznamov (obr. 4.1).

Pomocou dotazu môžete vykonávať nasledujúce typy spracovania údajov:

  • zahrnúť užívateľom vybrané polia tabuľky do tabuľky dotazov;
  • vykonávať výpočty v každom z prijatých záznamov;
  • vybrať záznamy, ktoré spĺňajú výberové kritériá;
  • vytvoriť novú virtuálnu tabuľku založenú na spojení záznamov súvisiacich tabuliek;
  • skupinové záznamy, ktoré majú rovnaké hodnoty v jednom alebo viacerých poliach, súčasne vykonávajú štatistické funkcie v iných poliach skupiny a vo výsledku zahŕňajú jeden záznam pre každú skupinu;
  • vytvoriť novú databázovú tabuľku pomocou údajov z existujúcich tabuliek;
  • aktualizovať polia vo vybranej podmnožine záznamov;
  • vymazať vybranú podmnožinu záznamov z databázovej tabuľky;
  • pridajte vybratú podmnožinu záznamov do inej tabuľky.

Dotazy v Accesse slúžia ako zdroje záznamov pre iné dotazy, formuláre, zostavy. Pomocou dotazu môžete zhromaždiť úplné informácie na vytvorenie dokumentu určitej oblasti z niekoľkých tabuliek a potom ich použiť na vytvorenie formulára - elektronickej reprezentácie tohto dokumentu. Ak sprievodca vytvorí formulár alebo zostavu na základe niekoľkých vzájomne súvisiacich tabuliek, automaticky sa pre ne vygeneruje dotaz ako zdroj záznamov.
Ak chcete opraviť, pozrite si video tutoriál.

Dotazy sú písané bez úvodzoviek, pretože MySQL, MS SQL a PostGree sú rozdielne.

SQL dotaz: získanie špecifikovaných (povinných) polí z tabuľky

SELECT id, country_title, count_people FROM table_name

Dostaneme zoznam záznamov: VŠETKY krajiny a ich obyvateľstvo. Názvy povinných polí sú oddelené čiarkami.

SELECT * FROM názov_tabulky

* označuje všetky polia. To znamená, že budú displeje VŠETKO dátové polia.

SQL dotaz: zobrazenie záznamov z tabuľky s výnimkou duplikátov

SELECT DISTINCT country_title FROM table_name

Získame zoznam záznamov: krajiny, v ktorých sa naši používatelia nachádzajú. Z jednej krajiny môže byť veľa používateľov. V tomto prípade je to vaša požiadavka.

SQL dotaz: zobrazenie záznamov z tabuľky podľa danej podmienky

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

Dostávame zoznam rekordov: krajiny, kde je počet ľudí viac ako 100 000 000.

SQL dotaz: zobrazenie záznamov z tabuľky s usporiadaním

SELECT id, city_title FROM table_name ORDER BY city_title

Dostaneme zoznam záznamov: mestá v abecednom poradí. A na začiatku, Z na konci.

SELECT id, city_title FROM table_name ORDER BY city_title DESC

Dostaneme zoznam záznamov: mestá naopak ( DESC) je v poriadku. Na začiatku ja, na konci A.

SQL dotaz: počítanie počtu záznamov

SELECT COUNT(*) FROM názov_tabuľky

Dostaneme počet (počet) záznamov v tabuľke. V tomto prípade NEEXISTUJE ŽIADNY zoznam záznamov.

SQL dotaz: zobrazenie požadovaného rozsahu záznamov

SELECT * FROM názov_tabulky LIMIT 2, 3

Z tabuľky dostaneme 2 (druhý) a 3 (tretí) záznam. Dotaz je užitočný pri vytváraní navigácie na WEB stránkach.

SQL dotazy s podmienkami

Zobrazenie záznamov z tabuľky podľa danej podmienky pomocou logických operátorov.

SQL dotaz: konštrukcia AND (AND)

SELECT id, city_title FROM table_name WHERE country="Russia" AND oil=1

Získanie zoznamu záznamov: mestá z Ruska A mať prístup k rope. Kedy sa používa operátor? A, potom sa obe podmienky musia zhodovať.

SQL dotaz: OR konštrukcia (OR)

SELECT id, city_title FROM table_name WHERE country="Russia" OR country="USA"

Získajte zoznam záznamov: všetky mestá z Ruska ALEBO USA. Kedy sa používa operátor? ALEBO, potom sa musí zhodovať ASPOŇ jedna podmienka.

SQL dotaz: AND NOT konštruovať (A NOT)

SELECT id, user_login FROM table_name WHERE country="Russia" AND NOT count_comments<7

Získajte zoznam záznamov: všetci používatelia z Ruska A vyrobené NIE MENEJ 7 komentárov.

SQL dotaz: IN konštrukcia (B)

SELECT id, user_login FROM table_name WHERE country IN ("Rusko", "Bulharsko", "Čína")

Získame zoznam záznamov: všetci používatelia, ktorí žijú v ( IN) (Rusko alebo Bulharsko alebo Čína)

SQL dotaz: NOT IN konstrukt (NOT IN)

SELECT id, user_login FROM table_name WHERE country NOT IN ("Rusko","Čína")

Získame zoznam záznamov: všetci používatelia, ktorí nežijú v ( NIE V) (Rusko alebo Čína).

SQL dotaz: konštrukcia IS NULL (prázdne alebo NIE prázdne hodnoty)

SELECT id, user_login FROM table_name WHERE status IS NULL

Získame zoznam záznamov: všetci používatelia, ktorých stav nie je definovaný. NULL je samostatná téma, a preto sa kontroluje samostatne.

SELECT id, user_login FROM table_name WHERE state IS NOT NULL

Získame zoznam záznamov: všetci používatelia, kde je definovaný stav (NIE NULA).

SQL dotaz: konštrukcia LIKE

SELECT id, user_login FROM table_name WHERE priezvisko LIKE "John%"

Získame zoznam záznamov: používatelia, ktorých priezvisko začína kombináciou „Ivan“. Znak % znamená AKÝKOĽVEK počet AKÝCHKOĽVEK znakov. Ak chcete nájsť znak %, musíte použiť escapovanie "Ivan\%".

SQL dotaz: konštrukcia BETWEEN

SELECT id, user_login FROM table_name WHERE plat MEDZI 25 000 AŽ 50 000

Dostávame zoznam záznamov: používatelia, ktorí dostávajú plat od 25 000 do 50 000 vrátane.

Existuje VEĽMI veľa logických operátorov, preto si podrobne preštudujte dokumentáciu k SQL serveru.

Komplexné SQL dotazy

SQL dotaz: spojenie viacerých dotazov

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

Získame zoznam záznamov: používateľov, ktorí sú zaregistrovaní v systéme, ako aj používateľov, ktorí sú registrovaní na fóre samostatne. Operátor UNION môže kombinovať viacero dopytov. UNION funguje ako SELECT DISTINCT, to znamená, že zahodí duplicitné hodnoty. Ak chcete získať úplne všetky záznamy, musíte použiť operátor UNION ALL.

SQL dotaz: výpočet hodnôt polí ​​MAX, MIN, SUM, AVG, COUNT

Výstup jedna, maximálna hodnota počítadla v tabuľke:

SELECT MAX(počítadlo) FROM názov_tabuľky

Výstup jednej, minimálnej hodnoty počítadla v tabuľke:

SELECT MIN(counter) FROM table_name

Zobrazenie súčtu všetkých hodnôt počítadla v tabuľke:

SELECT SUM(počítadlo) FROM názov_tabuľky

Zobrazenie priemernej hodnoty počítadla v tabuľke:

SELECT AVG(counter) FROM table_name

Zobrazenie počtu počítadiel v tabuľke:

SELECT COUNT(counter) FROM table_name

Záver o počte metrov v predajni č.1 v tabuľke:

SELECT COUNT(counter) FROM table_name WHERE office="Workshop #1"

Toto sú najobľúbenejšie príkazy. Tam, kde je to možné, sa odporúča použiť na výpočet SQL dotazy tohto druhu, keďže žiadne programovacie prostredie sa v rýchlosti spracovania dát nemôže porovnávať so samotným SQL serverom pri spracovaní vlastných dát.

SQL dotaz: zoskupovanie záznamov

SELECT kontinent, SUM(country_area) FROM country GROUP BY kontinent

Dostaneme zoznam záznamov: s názvom kontinentu a so súčtom oblastí všetkých ich krajín. To znamená, že ak existuje adresár krajín, kde má každá krajina zaznamenanú svoju oblasť, potom pomocou konštrukcie GROUP BY môžete zistiť veľkosť každého kontinentu (na základe zoskupenia podľa kontinentov).

SQL dotaz: použitie viacerých tabuliek cez alias (alias)

SELECT o.order_no, o.amount_paid, c.company FROM orders AS o, customer AS with WHERE o.custno=c.custno AND c.city="Tyumen"

Dostávame zoznam záznamov: objednávky od kupujúcich, ktorí žijú iba v Ťumeni.

V skutočnosti pri správne navrhnutej databáze tohto typu je dopyt najfrekventovanejší, a tak MySQL zaviedlo špeciálny operátor, ktorý pracuje mnohonásobne rýchlejšie ako kód napísaný vyššie.

VYBERTE o.číslo_objednávky, o.zaplatená_suma, z.spoločnosť Z objednávok AKO o LEFT PRIDAJTE SA k zákazníkovi AS z ON (z.custno=o.custno)

Vnorené poddotazy

SELECT * FROM table_name WHERE plat=(SELECT MAX(plat) FROM zamestnanca)

Získame jeden záznam: informáciu o užívateľovi s maximálnou mzdou.

Pozor! Vnorené poddotazy sú jedným z úzkych miest na serveroch SQL. Spolu s ich flexibilitou a výkonom tiež výrazne zvyšujú zaťaženie servera. Čo vedie ku katastrofálnemu spomaleniu pre ostatných používateľov. Veľmi časté sú prípady rekurzívnych volaní s vnorenými dopytmi. Preto dôrazne odporúčam NEPOUŽÍVAŤ vnorené dotazy, ale rozdeliť ich na menšie. Alebo použite kombináciu LEFT JOIN opísanú vyššie. Okrem tohto typu požiadaviek sú zvýšeným ohniskom narušenia bezpečnosti. Ak sa rozhodnete použiť vnorené poddotazy, musíte ich navrhnúť veľmi opatrne a vykonať počiatočné spustenie na kópiách databázy (testovacích databázach).

SQL dotazy meniace údaje

SQL dotaz: INSERT

Poučenie VLOŽIŤ umožňujú vkladať záznamy do tabuľky. Jednoducho povedané, vytvorte riadok s údajmi v tabuľke.

Možnosť číslo 1. Často používaný návod:

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

V tabulke " názov_tabuľky» vloží 2 (dvoch) používateľov naraz.

Možnosť číslo 2. Je pohodlnejšie použiť štýl:

INSERT názov_tabuľky SET id=1, user_login="ivanov"; INSERT názov_tabulky SET id=2, user_login="petrov";

To má svoje výhody aj nevýhody.

Hlavné nevýhody:

  • Mnoho malých SQL dotazov je o niečo pomalších ako jeden veľký SQL dotaz, ale ostatné dotazy budú zaradené do frontu na obsluhu. To znamená, že ak veľký SQL dotaz beží 30 minút, tak počas celej tejto doby budú zvyšok dotazov fajčiť bambus a čakať, kým na ne príde rad.
  • Požiadavka je masívnejšia ako predchádzajúca verzia.

Hlavné výhody:

  • Počas malých SQL dotazov nie sú blokované iné SQL dotazy.
  • Jednoduchosť čítania.
  • Flexibilita. V tejto možnosti nemôžete sledovať štruktúru, ale pridať len potrebné údaje.
  • Pri vytváraní archívov týmto spôsobom môžete jednoducho skopírovať jeden riadok a spustiť ho cez príkazový riadok (konzolu), čím neobnovíte celý ARCHÍV.
  • Štýl písania je podobný príkazu UPDATE, ktorý je ľahšie zapamätateľný.

SQL dotaz: AKTUALIZÁCIA

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

V tabulke " názov_tabuľky» v zázname s číslom id=1 sa hodnoty polí user_login a user_surname zmenia na zadané hodnoty.

SQL dotaz: DELETE

DELETE FROM table_name WHERE id=3

Záznam s ID číslom 3 bude v tabuľke table_name vymazaný.

  1. Všetky názvy polí sa odporúča písať malými písmenami a v prípade potreby ich oddeliť vynútenou medzerou „_“ kvôli kompatibilite s rôznymi programovacími jazykmi, ako sú Delphi, Perl, Python a Ruby.
  2. Príkazy SQL sú kvôli čitateľnosti písané VEĽKÝMI písmenami. Vždy si pamätajte, že kód po vás môžu prečítať iní ľudia, ale s najväčšou pravdepodobnosťou vy sami po N množstve času.
  3. Polia pomenujte najskôr podstatným menom a potom akciou. Napríklad: city_status, user_login, user_name.
  4. Pokúste sa vyhnúť rezervným slovám v rôznych jazykoch, ktoré môžu spôsobiť problémy v SQL, PHP alebo Perl, ako napríklad (meno, počet, odkaz). Napríklad: odkaz môže byť použitý v MS SQL, ale je rezervovaný v MySQL.

Tento materiál je krátkou referenciou pre každodennú prácu a nepredstiera, že je super mega autoritatívnym zdrojom, ktorý je primárnym zdrojom SQL dopytov konkrétnej databázy.

Každý z nás sa pravidelne stretáva a využíva rôzne databázy. Keď vyberieme e-mailovú adresu, pracujeme s databázou. Databázy využívajú vyhľadávacie služby, banky na ukladanie údajov o zákazníkoch atď.

Ale napriek neustálemu používaniu databáz, dokonca aj pre mnohých vývojárov softvérových systémov existuje veľa „bielych miest“ kvôli rôznym výkladom tých istých pojmov. Predtým, ako sa pozrieme na jazyk SQL, stručne zadefinujeme základné databázové pojmy. Takže

Databáza - súbor alebo množina súborov na ukladanie usporiadaných dátových štruktúr a ich vzťahov. Databáza sa veľmi často nazýva riadiaci systém - je to len úložisko informácií v určitom formáte a môže pracovať s rôznymi DBMS.

tabuľky - Predstavme si priečinok, v ktorom sú uložené dokumenty zoskupené podľa určitého atribútu, napríklad zoznam objednávok za posledný mesiac. Toto je tabuľka v počítači. Samostatná tabuľka má svoj vlastný jedinečný názov.

Dátový typ - druh informácií, ktoré môžu byť uložené v konkrétnom stĺpci alebo riadku. Môžu to byť čísla alebo text určitého formátu.

Stĺpec a riadok- Všetci sme pracovali s tabuľkami, ktoré majú tiež riadky a stĺpce. Akákoľvek relačná databáza pracuje s tabuľkami rovnakým spôsobom. Riadky sa niekedy nazývajú záznamy.

primárny kľúč- každý riadok tabuľky môže mať jeden alebo viac stĺpcov na jeho jedinečnú identifikáciu. Bez primárneho kľúča je veľmi ťažké aktualizovať, upraviť a odstrániť požadované riadky.

Čo je SQL?

SQL(angličtina - štruktúrovaný dotazovací jazyk) bol vyvinutý len pre prácu s databázami a v súčasnosti je štandardom pre všetky populárne DBMS. Syntax jazyka pozostáva z malého počtu operátorov a dá sa ľahko naučiť. Ale napriek vonkajšej jednoduchosti umožňuje vytváranie SQL dotazov pre zložité operácie s databázou ľubovoľnej veľkosti.

Od roku 1992 existuje všeobecne akceptovaný štandard s názvom ANSI SQL. Definuje základnú syntax a funkcie operátorov a je podporovaný všetkými lídrami na trhu DBMS, ako je ORACLE. Nie je možné pokryť všetky možnosti jazyka v jednom malom článku, preto sa v krátkosti pozrieme len na základné SQL dotazy. Príklady jasne ukazujú jednoduchosť a možnosti jazyka:

  • vytváranie databáz a tabuliek;
  • vzorkovanie údajov;
  • pridávanie záznamov;
  • úprava a vymazanie informácií.

Typy údajov SQL

Všetky stĺpce v databázovej tabuľke ukladajú rovnaký typ údajov. Dátové typy v SQL sú rovnaké ako v iných programovacích jazykoch.

Vytváranie tabuliek a databáz

Existujú dva spôsoby vytvárania nových databáz, tabuliek a iných dotazov v SQL:

  • cez konzolu DBMS
  • Používanie interaktívnych administračných nástrojov, ktoré sú súčasťou databázového servera.

Operátor vytvorí novú databázu VYTVORIŤ DATABÁZU<наименование базы данных>; . Ako vidíte, syntax je jednoduchá a stručná.

Tabuľky v databáze vytvárame pomocou príkazu CREATE TABLE s nasledujúcimi parametrami:

  • názov tabuľky
  • názvy stĺpcov a typy údajov

Ako príklad si vytvorte tabuľku komodít s nasledujúcimi stĺpcami:

Vytvárame tabuľku:

VYTVORIŤ TABUĽKU Komodita

(id_komodity CHAR(15) NOT NULL,

vendor_id CHAR(15) NOT NULL,

názov_komodity CHAR(254) NULL,

commodity_price DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Tabuľka má päť stĺpcov. Za názvom nasleduje typ údajov, stĺpce sú oddelené čiarkami. Hodnota stĺpca môže byť prázdna (NULL) alebo musí byť vyplnená (NOT NULL), a to sa určuje pri vytváraní tabuľky.

Výber údajov z tabuľky

Operátor výberu údajov je najčastejšie používaným SQL dotazom. Na získanie informácií je potrebné špecifikovať, čo chceme z takejto tabuľky vybrať. Najprv jednoduchý príklad:

SELECT commodity_name FROM Commodity

Po príkaze SELECT zadáme názov stĺpca pre získanie informácií a FROM definuje tabuľku.

Výsledkom vykonania dotazu budú všetky riadky tabuľky s hodnotami Commodity_name v poradí, v akom boli zadané do databázy, t.j. bez akéhokoľvek triedenia. Na usporiadanie výsledku sa používa dodatočná klauzula ORDER BY.

Ak chcete dopytovať viaceré polia, uveďte ich oddelené čiarkami, ako v nasledujúcom príklade:

SELECT commodity_id, commodity_name, commodity_price FROM Commodity

Je možné získať hodnotu všetkých stĺpcov riadku ako výsledok dotazu. Na tento účel sa používa znak „*“:

VYBERTE * Z komodity

  • SELECT navyše podporuje:
  • Triedenie údajov (výpis ORDER BY)
  • Vyberte podľa podmienok (KDE)
  • Výraz zoskupenia (GROUP BY)

Pridanie riadku

Na pridanie riadka do tabuľky sa používajú SQL dotazy s príkazom INSERT. Pridávanie je možné vykonať tromi spôsobmi:

  • pridať nový celý riadok;
  • časť reťazca;
  • výsledky dotazu.

Ak chcete pridať celý riadok, musíte zadať názov tabuľky a hodnoty stĺpcov (polí) nového riadku. Tu je príklad:

INSERT INTO Commodity VALUES("106", "50", "Coca-Cola", "1,68", "Bez alkoholu ,)

Príklad pridá do tabuľky nový produkt. Hodnoty sú špecifikované po VALUES pre každý stĺpec. Ak pre stĺpec neexistuje žiadna zodpovedajúca hodnota, musíte zadať hodnotu NULL. Stĺpce sú vyplnené hodnotami v poradí určenom pri vytváraní tabuľky.

Ak pridáte iba časť riadku, musíte explicitne zadať názvy stĺpcov, ako v príklade:

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

VALUES("106 "; '50"; "Coca Cola");

Zadali sme len identifikátory produktu, dodávateľa a jeho názov a ostatné polia sme nechali prázdne.

Pridávanie výsledkov dotazu

INSERT sa primárne používa na pridávanie riadkov, ale dá sa použiť aj na pridávanie výsledkov príkazu SELECT.

Zmeňte údaje

Ak chcete zmeniť informácie v poliach databázovej tabuľky, musíte použiť príkaz UPDATE. Operátor je možné použiť dvoma spôsobmi:

  • Všetky riadky v tabuľke sú aktualizované.
  • Len pre určitý riadok.

AKTUALIZÁCIA pozostáva z troch hlavných prvkov:

  • tabuľka, v ktorej je potrebné vykonať zmeny;
  • názvy polí a ich nové hodnoty;
  • podmienky pre výber riadkov, ktoré sa majú zmeniť.

Zvážte príklad. Povedzme, že cena produktu s ID=106 sa zmenila, takže tento riadok je potrebné aktualizovať. Píšeme nasledujúci operátor:

AKTUALIZOVAŤ SADA komodít commodity_price = "3,2" WHERE commodity_id = "106"

Zadali sme názov tabuľky, v našom prípade Komodita, kde bude vykonaná aktualizácia, potom po SET - novú hodnotu stĺpca a zadaním požadovanej hodnoty ID v WHERE sme našli požadovaný záznam.

Ak chcete zmeniť viacero stĺpcov, za príkazom SET zadajte viacero párov stĺpcov a hodnôt oddelených čiarkami. Pozrime sa na príklad, v ktorom sa aktualizuje názov a cena produktu:

AKTUALIZOVAŤ SADA komodít commodity_name='Fanta', commodity_price = "3,2" WHERE commodity_id = "106"

Ak chcete odstrániť informácie v stĺpci, môžete ho nastaviť na hodnotu NULL, ak to štruktúra tabuľky umožňuje. Je potrebné mať na pamäti, že NULL je presne „žiadna“ hodnota a nie nula vo forme textu alebo čísla. Odstrániť popis produktu:

AKTUALIZOVAŤ SADA komodít commodity_desc = NULL WHERE commodity_id = "106"

Odstraňovanie riadkov

SQL dotazy na vymazanie riadkov v tabuľke sa vykonávajú pomocou príkazu DELETE. Existujú dva prípady použitia:

  • niektoré riadky v tabuľke sú vymazané;
  • všetky riadky v tabuľke sa vymažú.

Príklad odstránenia jedného riadku z tabuľky:

DELETE FROM Commodity WHERE commodity_id = "106"

Po DELETE FROM zadáme názov tabuľky, v ktorej sa budú vymazávať riadky. Klauzula WHERE obsahuje podmienku, podľa ktorej sa vyberú riadky na vymazanie. V príklade odstraňujeme produktový rad s ID=106. Špecifikácia KDE je veľmi dôležitá. vynechaním tohto príkazu sa vymažú všetky riadky v tabuľke. To platí aj pre zmenu hodnoty polí.

Príkaz DELETE nešpecifikuje názvy stĺpcov ani metaznaky. Úplne odstráni riadky, ale nedokáže odstrániť jeden stĺpec.

Používanie SQL v programe Microsoft Access

Zvyčajne sa používa interaktívne na vytváranie tabuliek, databáz, na správu, úpravu, analýzu údajov v databáze a na implementáciu dotazov SQL Access prostredníctvom pohodlného interaktívneho návrhára dotazov (Query Designer), pomocou ktorého môžete zostavovať a okamžite vykonávať príkazy SQL akejkoľvek zložitosti.

Podporovaný je aj režim prístupu na server, v ktorom je možné Access DBMS použiť ako generátor SQL dotazov na ľubovoľný zdroj údajov ODBC. Táto schopnosť umožňuje aplikáciám Access interagovať s akýmkoľvek formátom.

Rozšírenia SQL

Keďže dotazy SQL nemajú všetky funkcie procedurálnych programovacích jazykov, ako sú slučky, vetvy atď., predajcovia DBMS vyvíjajú vlastnú verziu SQL s pokročilými funkciami. V prvom rade ide o podporu uložených procedúr a štandardných operátorov procedurálnych jazykov.

Najbežnejšie dialekty jazyka:

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

SQL na web

MySQL DBMS je distribuovaný pod GNU General Public License. Existuje komerčná licencia s možnosťou vývoja vlastných modulov. Ako neoddeliteľná súčasť je súčasťou najpopulárnejších zostáv internetových serverov, ako sú XAMPP, WAMP a LAMP, a je najpopulárnejším DBMS pre vývoj aplikácií na internete.

Bol vyvinutý spoločnosťou Sun Microsystems a v súčasnosti je spravovaný spoločnosťou Oracle Corporation. Podporuje databázy do 64 terabajtov, štandard syntaxe SQL:2003, replikáciu databáz a cloudové služby.

Tabuľkové výrazy nazývané poddotazy, ktoré sa používajú tam, kde sa očakáva tabuľka. Existujú dva typy tabuľkových výrazov:

    odvodené tabuľky;

    zovšeobecnené tabuľkové výrazy.

Tieto dve formy tabuľkových výrazov sú diskutované v nasledujúcich podkapitolách.

Odvodené tabuľky

Odvodená tabuľka je tabuľkový výraz zahrnutý v klauzule FROM dotazu. Odvodené tabuľky možno použiť, keď nie je možné použiť aliasy stĺpcov, pretože prekladač SQL spracuje iný príkaz skôr, ako je známy alias. Nižšie uvedený príklad ukazuje pokus použiť alias stĺpca v situácii, keď sa iná klauzula spracováva skôr, ako je známy alias:

USE SampleDb; SELECT MONTH(EnterDate) ako enter_month FROM Works_on GROUP BY enter_month;

Pokus o vykonanie tohto dotazu vráti nasledujúce chybové hlásenie:

Msg 207, Level 16, State 1, Line 5 Neplatný názov stĺpca "enter_month". (Správa 207: Úroveň 16, Stav 1, Riadok 5 Neplatný názov stĺpca enter_month)

Dôvodom chyby je, že klauzula GROUP BY sa spracuje pred spracovaním zodpovedajúceho zoznamu príkazu SELECT a alias stĺpca enter_month nie je pri spracovaní skupiny známy.

Tento problém možno vyriešiť použitím zobrazenia, ktoré obsahuje predchádzajúci dotaz (bez klauzuly GROUP BY), pretože klauzula FROM sa vykonáva pred klauzulou GROUP BY:

USE SampleDb; SELECT zadajte_mesiac FROM (SELECT MONTH(ZadajteDátum) ako zadajte_mesiac FROM Works_on) AS m GROUP BY zadajte_mesiac;

Výsledok tohto dotazu bude takýto:

Typicky môže byť tabuľkový výraz umiestnený kdekoľvek v príkaze SELECT, kde sa môže objaviť názov tabuľky. (Výsledkom tabuľkového výrazu je vždy tabuľka alebo v špeciálnych prípadoch výraz.) Nasledujúci príklad ukazuje použitie tabuľkového výrazu vo výberovom zozname príkazu SELECT:

Výsledkom tohto dotazu je:

Všeobecné tabuľkové výrazy

Common Table Expression (OTB) (skrátene CTE) je pomenovaný tabuľkový výraz podporovaný jazykom Transact-SQL. Bežné tabuľkové výrazy sa používajú v nasledujúcich dvoch typoch dotazov:

    nerekurzívne;

    rekurzívne.

Tieto dva typy žiadostí sú diskutované v nasledujúcich častiach.

OTB a nerekurzívne dotazy

Nerekurzívna forma OTB môže byť použitá ako alternatíva k odvodeným tabuľkám a pohľadom. Zvyčajne sa OTB definuje podľa S doložkami a dodatočný dotaz, ktorý odkazuje na názov použitý v klauzule WITH. V Transact-SQL je význam kľúčového slova WITH nejednoznačný. Aby sa predišlo nejednoznačnosti, príkaz pred príkazom WITH by mal byť ukončený bodkočiarkou.

POUŽÍVAJTE AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") AND Dopravné > (SELECT AVG(TotalDue) FROM Sales.SalesOr200Header) WHEREDER YHEREder5a ")/2,5;

Dotaz v tomto príklade vyberá objednávky, ktorých celkové dane (TotalDue) sú vyššie ako priemer všetkých daní a ktorých prepravné je vyššie ako 40 % priemerných daní. Hlavnou vlastnosťou tohto dotazu je jeho objemnosť, keďže vnorený dotaz je potrebné napísať dvakrát. Jedným z možných spôsobov, ako znížiť rozsah konštrukcie dotazu, by bolo vytvoriť pohľad, ktorý obsahuje poddotaz. Toto riešenie je však trochu zložité, pretože vyžaduje vytvorenie zobrazenia a jeho odstránenie po dokončení dotazu. Najlepším prístupom by bolo vytvorenie OTB. Nižšie uvedený príklad ukazuje použitie nerekurzívneho OTB, ktoré skracuje definíciu dotazu vyššie:

POUŽÍVAJTE 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_200505ROM cena) cSELECT FROM) /2,5;

Syntax klauzuly WITH v nerekurzívnych dotazoch je nasledovná:

Parameter cte_name je názov OTB, ktorý definuje výslednú tabuľku, a parameter column_list je zoznam stĺpcov vo výraze tabuľky. (Vo vyššie uvedenom príklade má OTB názov price_calc a má jeden stĺpec rok_2005.) Parameter inner_query predstavuje príkaz SELECT, ktorý špecifikuje množinu výsledkov zodpovedajúceho tabuľkového výrazu. Definovaný tabuľkový výraz možno potom použiť v external_query. (Vonkajší dotaz v príklade vyššie používa OTB price_calc a jeho stĺpec year_2005 na zjednodušenie dvojito vnoreného dotazu.)

OTB a rekurzívne dotazy

Táto časť predstavuje materiál so zvýšenou zložitosťou. Preto sa pri prvom čítaní odporúča preskočiť a vrátiť sa k nemu neskôr. OTB môžu byť rekurzívne, pretože OTB môžu obsahovať odkazy na seba. Základná syntax OTB pre rekurzívny dotaz vyzerá takto:

Parametre cte_name a column_list majú rovnaký význam ako v OTB pre nerekurzívne dotazy. Telo klauzuly WITH pozostáva z dvoch dopytov spojených príkazom UNION VŠETKO. Prvý dotaz sa zavolá iba raz a začne hromadiť výsledok rekurzie. Prvý operand operátora UNION ALL neodkazuje na OTB. Tento dotaz sa nazýva referenčný dotaz alebo zdroj.

Druhý dotaz obsahuje odkaz na OTB a predstavuje jeho rekurzívnu časť. Z tohto dôvodu sa nazýva rekurzívny člen. V prvom volaní rekurzívnej časti OTB referencia predstavuje výsledok referenčného dotazu. Rekurzívny člen používa výsledok prvého volania dotazu. Potom systém znova zavolá rekurzívnu časť. Volanie rekurzívneho člena sa skončí, keď predchádzajúce volanie vráti prázdnu množinu výsledkov.

Operátor UNION ALL spája riadky, ktoré sa doteraz nahromadili, ako aj ďalšie riadky pridané aktuálnym volaním do rekurzívneho člena. (Prítomnosť operátora UNION ALL znamená, že duplicitné riadky nebudú z výsledku odstránené.)

Nakoniec parameter external_query definuje vonkajší dotaz, ktorý OTB používa na získanie všetkých volaní na spojenie oboch členov.

Na demonštráciu rekurzívnej formy OTB používame tabuľku lietadla definovanú a vyplnenú kódom uvedeným v príklade nižšie:

USE SampleDb; VYTVORIŤ TABUĽKU Lietadlo (obsahuje zostavu VARCHAR(10), zostavu obsahuje VARCHAR(10), množstvo obsahuje INT, jednotkové náklady DECIMAL(6,2)); INSERT INTO Airplane VALUES ("Lietadlo", "Trup", 1, 10); INSERT INTO Airplane VALUES ("Lietadlo", "Krídla", 1, 11); INSERT INTO Airplane VALUES ("Lietadlo", "Chvost", 1, 12); INSERT INTO Airplane VALUES ("Trup", "Salón", 1, 13); INSERT INTO Airplane VALUES ("Trup", "Kokpit", 1, 14); INSERT INTO Airplane VALUES ("Trup", "Nos", 1, 15); INSERT INTO Airplane VALUES("Salón", NULL, 1,13); INSERT INTO Airplane VALUES("kajuta", NULL, 1, 14); INSERT INTO Airplane VALUES("Nose", NULL, 1, 15); INSERT INTO Airplane VALUES("Krídla", NULL,2, 11); INSERT INTO Airplane VALUES("Chvost", NULL, 1, 12);

Tabuľka Lietadlo má štyri stĺpce. Stĺpec ContainedAssembly definuje zostavu a stĺpec ContainedAssembly definuje časti (jeden po druhom), ktoré tvoria zodpovedajúcu zostavu. Na obrázku nižšie je grafické znázornenie možného typu lietadla a jeho súčastí:

Tabuľka Lietadlo pozostáva z nasledujúcich 11 riadkov:

Nasledujúci príklad používa klauzulu WITH na definovanie dotazu, ktorý vypočítava celkové náklady na každú zostavu:

USE SampleDb; WITH zoznam_dielov (zostava1, množstvo, náklady) AS (SELECT ContainedAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainedAssembly, a.QuantityContained, CAST(l.quantity * l.cost AS DECIMAL) ) OD zoznam_dielov l, Lietadlo a WHERE l.zostava1 = a.Obsiahnutá zostava) VYBERTE zostavu1 "Časť", množstvo "Množstvo", cena "Cena" ZO zoznamu_dielov;

Klauzula WITH definuje zoznam OTB s názvom zoznam_dielov, ktorý pozostáva z troch stĺpcov: zostava1, množstvo a cena. Prvý príkaz SELECT v príklade sa volá iba raz, aby sa uložili výsledky prvého kroku procesu rekurzie. Príkaz SELECT v poslednom riadku príkladu zobrazí nasledujúci výsledok.

Posledná aktualizácia: 07/05/2017

V minulej téme bola v SQL Management Studio vytvorená jednoduchá databáza s jednou tabuľkou. Teraz poďme definovať a spustiť prvý SQL dotaz. Ak to chcete urobiť, otvorte SQL Management Studio, kliknite pravým tlačidlom myši na prvok najvyššej úrovne v Prieskumníkovi objektov (názov servera) a v zobrazenej kontextovej ponuke vyberte položku Nový dotaz:

Potom sa v centrálnej časti programu otvorí okno na zadávanie SQL príkazov.

Vykonajme dotaz na tabuľku, ktorá bola vytvorená v predchádzajúcej téme, konkrétne z nej získame všetky údaje. Naša databáza sa volá univerzita a tabuľka je dbo.Students, takže na získanie údajov z tabuľky zadáme nasledujúci dotaz:

VYBERTE * Z univerzity.dbo.Študenti

Príkaz SELECT vám umožňuje vybrať údaje. FROM určuje zdroj, odkiaľ sa majú získať údaje. V skutočnosti týmto dotazom hovoríme „VYBERTE všetko z tabuľky univerzita.dbo.Studenti“. Stojí za zmienku, že pre názov tabuľky sa používa úplná cesta tabuľky s uvedením databázy a schémy.

Po zadaní dotazu kliknite na tlačidlo Vykonať na paneli nástrojov, alebo môžete stlačiť kláves F5.

V dôsledku vykonania dotazu sa v spodnej časti programu objaví malá tabuľka, ktorá zobrazí výsledky dotazu – teda všetky údaje z tabuľky Študenti.

Ak potrebujeme vykonať viacero dotazov na rovnakú databázu, potom môžeme použiť príkaz USE na potvrdenie databázy. V tomto prípade pri dopytovaní tabuliek stačí zadať ich názov bez názvu databázy a schémy:

POUŽÍVAJTE univerzitu VYBERTE * OD študentov

V tomto prípade vykonávame dotaz ako celok pre server, môžeme pristupovať k akejkoľvek databáze na serveri. Ale môžeme tiež vykonávať dotazy iba v rámci konkrétnej databázy. Ak to chcete urobiť, kliknite pravým tlačidlom myši na požadovanú databázu a z kontextovej ponuky vyberte položku Nový dotaz:

Ak by sme v tomto prípade chceli dopytovať tabuľku Študenti použitú vyššie, potom by sme v dopyte nemuseli zadávať názov databázy a schému, pretože tieto hodnoty by už boli jasné.