Prohlášení o přístupu k SQL. Seznámení s příkazy SQL; vytváření nejjednodušších SQL dotazů v Accessu pomocí příkazu SELECT pomocí příkazů IN, BETWEEN, LIKE

Jazyk SQL nemá funkce plnohodnotného vývojového jazyka, ale je zaměřen na přístup k datům, proto je součástí nástrojů pro vývoj programu. V tomto případě se nazývá vestavěný SQL. Jazykový standard SQL je podporován moderními implementacemi následujících programovacích jazyků: PL / 1, Ada, C, COBOL, Fortran, MUMPS a Pascal.

Ve specializovaných systémech pro vývoj aplikací typu klient-server je navíc obvykle doplňováno programovací prostředí komunikační prostředky(vytváření a odpojování připojení k databázovým serverům, detekce a zpracování chyb vyskytujících se v síti atd.), nástroje pro vývoj uživatelského rozhraní, nástroje pro návrh a ladění.

Existují dva hlavní způsoby použití integrovaného SQL: statický a dynamický.

Na statický používání jazyka (statický SQL) text programu obsahuje volání funkcí jazyka SQL, které jsou po kompilaci pevně zakódovány do spustitelného modulu. Změny volaných funkcí mohou být na úrovni jednotlivé parametry volání pomocí proměnných programovacího jazyka.

Na dynamický používání jazyka (dynamický SQL) Předpokládá se dynamická konstrukce volání funkcí SQL a interpretace těchto volání, například přístup k datům ze vzdálené databáze, během provádění programu. Dynamická metoda se obvykle používá v případech, kdy aplikace předem nezná typ volání SQL a je postavena v dialogu s uživatelem.

Hlavním účelem jazyka SQL (stejně jako dalších jazyků pro práci s databázemi) je příprava a provádění dotazů. V důsledku načítání dat z jedné nebo více tabulek lze získat mnoho záznamů, nazývaných reprezentace.

Výkon je v podstatě tabulka, která je generována v důsledku spuštění dotazu. Můžeme říci, že se jedná o druh uloženého požadavku. Ze stejných tabulek lze vytvořit více pohledů. Samotný pohled je popsán zadáním identifikátoru pohledu a požadavku, který je třeba provést k jeho přijetí.



Pro usnadnění práce s pohledy byl do jazyka SQL zaveden koncept kurzoru. Kurzor je druh ukazatele, který slouží k procházení sad záznamů při jejich zpracování.

Popis a použití kurzoru v jazyce SQL je následující. V narativní části programu svázáte proměnnou CURSOR s příkazem SQL (obvykle příkazem SELECT). V části prováděného programu se otevře kurzor (OPEN<имя курсора», перемещение курсора по записям (FETCI-1 <имя курсора>...), následuje vhodné zacházení a nakonec zavření kurzoru (ZAVŘÍT<имя курсора>).

V relačních DBMS se k provádění operací na relacích používají dvě skupiny jazyků, jejichž matematickým základem jsou teoretické dotazovací jazyky navržené E. Coddem:

Relační algebra;

Relační počet.

V relační algebře operandy a výsledky všech akcí jsou vztahy. Relační jazyky algebry jsou procedurální v tom, že relace vyplývající z dotazu proti relační databázi se vypočítá spuštěním sekvence relačních operátorů aplikovaných na relaci. Operátory jsou tvořeny relačními operandy a relačními operacemi.

Operace Coddovy relační algebry lze rozdělit do dvou skupin: základní množina-teoretická a speciální relační... První skupina operací zahrnuje klasické operace teorie množin: sjednocení, rozdíl, průnik a součin. Druhá skupina představuje vývoj konvenčních set-teoretických operací směrem ke skutečným problémům manipulace s daty; zahrnuje operace: projekce, výběr, dělení a připojení.

Jazyky počtu jsou nepostupové (popisné nebo deklarativní) a umožňují vám vyjadřovat dotazy pomocí predikátu prvního řádu (příkaz funkce), který musí n-tice nebo relační domény splňovat. Databázový dotaz spuštěný pomocí podobného jazyka obsahuje pouze informace o požadovaném výsledku. Tyto jazyky mají sadu pravidel pro psaní dotazů. Zejména SQL patří do jazyků této skupiny.

Funkce aplikace SQL dotazy

Dotaz SQL je dotaz, který je vytvořen pomocí příkazu SQL. Příklady dotazů SQL jsou sjednocovací dotazy, serverové dotazy, řídicí dotazy a podřízené dotazy.

Spojovací dotaz je dotaz, který kombinuje pole (sloupce) z jedné nebo více tabulek nebo dotazů do jednoho pole nebo sloupce v sadě výsledků záznamů. Například šest prodejců každý měsíc předkládá vedení seznamy dostupných položek. Jakmile vytvoříte spojovací dotaz, můžete tyto zásoby zkombinovat do sady záznamů výsledků a poté navrhnout dotaz k vytvoření tabulky na základě spojovacího dotazu.

Serverový dotaz přenáší příkazy SQL prostřednictvím ODBC na server, například Microsoft SQL Server... Serverové dotazy vám umožňují pracovat přímo s tabulkami na serveru, místo abyste je spojovali. Výsledkem provedení dotazu na server může být načtení záznamů nebo změna dat.

Řídicí dotaz vytváří nebo upravuje databázové objekty, jako jsou tabulky aplikace Access nebo tabulky serveru SQL.

Poddotaz se skládá z příkazu SQL SELECT v rámci jiného dotazu na výběr nebo změnu. Tyto pokyny se zadávají do řádku Pole formuláře žádosti o definování nového pole nebo do řádku Kritéria k definování podmínky výběru pole. Podřízené dotazy se používají k následujícímu:

Kontrola existence některých výsledků v poddotazu pomocí vyhrazených slov EXISTS nebo NO EXISTS;

Vyhledejte v hlavním dotazu všechny hodnoty, které jsou stejné, větší nebo menší než hodnoty vrácené v poddotazu (pomocí vyhrazených slov JAKÉKOLI, IN nebo VŠE);

Vytváření podřízených dotazů v rámci podřízených dotazů (vnořené podřízené dotazy).

Jazyk SQL v Accessu lze použít při vývoji displejů, sestav i při tvorbě maker a programů VBA.

Vztah mezi QBE a SQL

Access má úzký vztah mezi jazyky QBE a SQL. Tabulky dotazů (formuláře, formuláře) v jazyce QBE, vyplněné uživatelem, jsou před přímým spuštěním převedeny na výrazy SQL. To znamená, že jazyk SQL je interním standardem pro provádění dotazů. Tento mechanismus má tu výhodu, že umožňuje aplikaci Access sjednotit přípravu dotazů pro provádění na místních a vzdálených počítačích v systému Access. V druhém případě je zpráva SQL skutečně přenesena do počítače - dotazovacího serveru.

V Accessu může být dotaz v jednom ze tří režimů (stavů): Návrh, SQL a Tabulka. Režim návrhu se používá k návrhu nového dotazu od začátku (bez použití průvodců nebo jiných nástrojů) nebo ke změně rozložení stávajícího dotazu. Režim SQL se používá k zadávání nebo prohlížení příkazů SQL. Režim tabulky se používá k práci s výsledky dotazu.

SQL ve formulářích a sestavách

Hlavními zdroji záznamů na obrazovkách a sestavách jsou tabulky a dotazy. V druhém případě může být dotazem hotový dotaz do databáze nebo vytvořen během vývoje formuláře nebo sestavy.

SQL v makrech

Makra jsou součástí maker, která se používají k automatizaci provádění často opakovaných akcí při práci s databází. Makro je jedno nebo více maker s argumenty.

Makra jsou volána z okna databáze nebo automaticky při výskytu určitých událostí. Událostí, kterou je makro vyvoláno, může být například stisknutí tlačítka v oblasti formuláře nebo otevření okna databáze. Spolu s prováděním některých akcí s databázovými objekty mohou makra volat další makra, programy jazyka Visual Basic a externí aplikace.

Z mnoha maker jsou dvě makra přímo související s SQL: Run SQL a OpenQuery

Makro Spustit dotaz SQL spustí dotaz na změnu nebo řízení přístupu pomocí příslušného příkazu SQL. Toto makro umožňuje provádět akce v makru bez předchozího uložení dotazů. Uložené dotazy lze také provádět pomocí makra.

Změnit požadavky jsou příkazy SQL, které implementují následující funkce: přidat (INSERT INTO), odstranit (DELETE), vytvořit tabulku (SELECT ... INTO) a aktualizovat (UPDATE)

Kontrolní dotazy jsou příkazy SQL, které provádějí následující funkce: vytvořit tabulku (CREATE TABLE), upravit tabulku (ALTER TABLE), zahodit tabulku (DROP TABLE), vytvořit index (CREATE INDEX) a zahodit index (DROP INDEX)

Jediný a požadovaný argument makra Spuštění dotazu SQL je příkaz SQL. Argument příkazu makro ve formě textu SQL - příkazy se zadávají ručně do vstupního okna makra nebo se kopírují z okna SQL, což je často pohodlnější.

Makro Otevřít požadavek umožňuje otevřít výběrový nebo křížový dotaz (v režimech tabulky, návrhu a náhledu), spustit dotaz na úpravy nebo zadávání dat.

Makro má tři argumenty: název požadavku, režim a datový režim. První argument je název žádosti o otevření a je povinný. Druhý argument nastavuje režim otevírání dotazu (tabulka, návrh a zobrazení). Třetí argument popisuje způsob zadávání dat do požadavku („Přidat“, „Upravit“ a „Pouze pro čtení“)

SQL v programech VBA

VBA, stejně jako makra, je navržena tak, aby automatizovala opakující se operace s databázovými objekty Accessu.

Access poskytuje následující způsoby spouštění programů VBA:

Zahrnutí programu do postupu zpracování událostí;

Volání funkce ve výrazu;

Volání procedury Sub v jiné proceduře nebo v ladicím okně;

Spuštění makra RunCode v makru.

Funkce se používají ve výrazech, které definují vypočítaná pole ve formulářích, sestavách nebo dotazech. Výrazy se používají k určení podmínek v dotazech a filtrech, stejně jako v makrech, příkazech a metodách VBA a v příkazech SQL. Sub procedura může zahrnovat veřejné rutiny VBA, které jsou volány z jiných procedur.

Podívejme se, jak spustit databázový dotaz pomocí příkazů SQL v programu Visual Basic for Applications.

Dotaz vybírá záznamy v databázi, které splňují určité podmínky (dotaz pro výběr), nebo je vydán pokyn k provedení zadaných akcí se záznamy, které splňují určité podmínky (dotaz na změnu).

Dotazy lze provádět následujícími způsoby:

Volání metody Execute (ke spuštění požadavků na změnu SQL);

Vytvoření a spuštění speciálního objektu QueryDef;

Použití příkazu SQL jako argumentu pro metodu OpenRecordset;

Provedení metody OpenRecordset na existujícím objektu QueryDef;

Volání metod RunSQL a OpenQuery.

Metoda provedení používá se, pokud je vyžadováno provedení takové změny v databázi, ve které se nevracejí záznamy. Například operace pro vložení nebo odstranění záznamů.

Objekt QueryDef je definice uloženého dotazu v databázi. Lze jej považovat za kompilovaný příkaz SQL.

Metoda OpenRecordset slouží k otevření objektu typu Recordset pro následné operace s ním.

Metoda RunSQL spustí makro Spuštění dotazu SQL v programu VBA

Metoda OpenQuery spustí makro OpenQuery v programu VBA. Lze jej použít k otevření dotazu v režimu Tabulka, Návrh nebo Zobrazení. Tím se nastaví jeden z následujících režimů práce s daty: přidání, změna nebo jen pro čtení.

Volbu možnosti spuštění dotazu určuje programátor s přihlédnutím ke zvláštnostem řešeného problému.

Problematice se věnovaly předchozí články. Je zvažována technologie vytváření struktury databázových tabulek "sql_training_st.mdb" na základě dotazů SQL. Navíc pomocí SQL dotazů byly naplněny tabulky ACCESS DBMS „sql_training_st.mdb“.

Je známo, že v relačních databázích je jazyk SQL určen pro manipulaci s daty, definování struktury databází a jejích komponent, řízení přístupu uživatelů k databázi a pro správu transakcí nebo správu změn v databázi.

Jazyk SQL se skládá ze čtyř skupin:

  • jazyk pro manipulaci s daty DML;
  • jazyk definice dat DDL;
  • jazyk pro správu dat DCL;
  • jazyk pro správu transakcí TCL.

Skupina DML zahrnuje čtyři hlavní typy dotazů SQL:

  • INSERT - navržen tak, aby přidal jeden nebo více záznamů na konec tabulky;
  • UPDATE - navržen tak, aby změnil stávající záznamy ve sloupcích tabulky nebo upravil data v tabulce;
  • DELETE - navrženo tak, aby odstranilo záznamy z tabulky;
  • VYBRAT - slouží k výběru dat z tabulek.

Na stránce byly probrány první tři typy dotazů SQL (INSERT, UPDATE, DELETE), které se týkají opravných dotazů do databáze.

V tomto článku budeme zvažovat dotazy k načítání dat z databázových tabulek Accessu.

Chcete -li načíst informace uložené v databázi Accessu 2003 nebo 2007, můžete k výběru dat z tabulek použít dotaz SELECT.

Pojďme sestavit následující dotaz SQL (příkaz SQL) pro výběr, k tomu vybereme režim SQL spuštěním příkazu View / SQL Mode. Na klávesnici zadejte následující příkaz SQL:

VYBRAT *
OD studentů;

Toto prohlášení se skládá ze dvou klauzulí „SELECT *“ a „FROM Students“. První klauzule obsahuje příkaz SELECT a identifikátor * („identifikátor *“ znamená zobrazení všech sloupců v tabulce). Druhá klauzule obsahuje klauzuli FROM a identifikátor „Studenti“.

OD - definuje tabulku "Studenti", která obsahuje pole uvedená v klauzuli SELECT. Je třeba poznamenat, že ve výběrovém dotazu jsou vždy dva příkazy: SELECT a FROM. V závislosti na podmínkách výběru mohou být v žádosti o výběr přítomni další operátoři. Obrázek 1 ukazuje snímek obrazovky žádosti o načtení dat.


Rýže. 1. SLECT dotaz pro výběr dat

V tomto případě je vzorek dat vytvořen ze všech sloupců tabulky Studenti.

Dotaz uložíme pod názvem „Students-Query1“. V důsledku spuštění příkazu „Uložit“ se objekt objeví v „navigačním podokně“ - „Dotazy: Studenti -Dotaz1“.

Po uložení vybraného dotazu ho musíte spustit kliknutím na ikonu Spustit. Výsledky příkazu „Spustit“ jsou uvedeny na obr. 2.



Rýže. 2. Načítání dat ze všech sloupců tabulky Studenti


Srovnání Microsoft Access SQL a ANSI SQL Microsoft Access SQL je většinou ANSI-89 (úroveň 1), některé funkce ANSI SQL se v Microsoft Access SQL nepoužívají Microsoft Access SQL používá vyhrazená slova a funkce, které nejsou podporovány ANSI SQL V Accessu 2000 (MS Jet 4.0 ) přidaná rozšíření, která přibližují jazyk standardu ANSI SQL -92 - režim je k dispozici pouze při použití poskytovatele MS OLE DB Provider pro Jet


Syntaxe příkazu SELECT (Microsoft Access) SELECT [predikát] ( * | tabulka. * | [Tabulka.] Field_1 [, [tabulka.] Field_2 [, ...]]) FROM výraz [, ...] FROM klauzule VÝBĚR seznam Výraz z polí FROM Výraz je výraz, který identifikuje jednu nebo více tabulek, ze kterých se načítají data. Tento výraz může být název jednotlivé tabulky, název uloženého dotazu nebo výsledek operace VNITŘNÍ PŘIPOJENÍ, LEVÉ PŘIPOJENÍ nebo PRAVÉ PŘIPOJENÍ. VNITŘNÍ PŘIPOJENÍ, LEVÉ PŘIPOJENÍ PRAVÉ PŘIPOJENÍ.


Argumenty příkazu SELECT Predikát (ALL, DISTINCT, DISTINCTROW nebo TOP) je jedním z kritérií výběru. Predikáty se používají k omezení počtu vrácených záznamů. Pokud chybí, je ve výchozím nastavení použit predikát ALL (vybere všechny záznamy, které odpovídají podmínkám uvedeným v příkazu SQL). SQL DISTINCT - vyloučí záznamy, které obsahují ve vybraných polích duplicitní hodnoty. DISTINCTROW - vynechává data na základě zcela opakujících se záznamů, nikoli na základě jednotlivých opakujících se polí. Predikát DISTINCTROW je ignorován, pokud dotaz obsahuje pouze jednu tabulku nebo všechna pole všech tabulek. TOP n - Vrátí určitý počet záznamů na začátku nebo na konci rozsahu popsaného pomocí klauzule ORDER BY. VYBRAT]] Z tabulky 5 nejpočetnějších oddělení: VYBERTE TOP 5 zaměstnanců. [Kód oddělení], Počet (název_zaměstnance) JAKO počet_zaměstnanců ZE SKUPINY PODLE zaměstnance. [Kód oddělení] OBJEDNÁVKA PODLE Počet (název_zaměstnance) DESC;


SELECT Statement Arguments Table je název tabulky, ze které se mají vybrat záznamy. S MOŽNOSTÍ VLASTNICTVÍ - Používá se ve víceuživatelském prostředí se zabezpečenou pracovní skupinou k udělení uživateli, který pracuje s oprávněními požadavku, která se shodují s oprávněními vlastníka požadavku. field_1, field_2 - názvy polí, ze kterých by měla být data vybrána. Pokud zahrnete více polí, budou načtena v uvedeném pořadí. Alias_1, Alias_2 jsou názvy, které se stanou nadpisy sloupců namísto původních názvů sloupců v tabulce. Výraz - názvy jedné nebo více tabulek, které obsahují vybraná data Externí databáze - název databáze, která obsahuje tabulky určené pomocí argumentu výrazu, pokud nejsou v aktuální databázi. VYBRAT zaměstnance, celé jméno, [plat] * 0,5 JAKO bonus od zaměstnance; VYBRAT průměr (zaměstnanec.zpráva) JAKO průměrný_port OD zaměstnance;


Společné zpracování několika tabulek VYBERTE zaměstnance.název, předmět. [Název subjektu krátký] OD zaměstnance VNITŘNÍ PŘIPOJENÍ (předmět VNITŘNÍ PŘIPOJENÍ [držení předmětů] ZAPNUTO předmět. [Kód předmětu] = [držení předmětů]. [Kód disciplíny]) ZAP employee.code = [držení věcí]. [kód zaměstnance];




Mezi ... A výrazem 1 MEZI výrazem 2 A výrazem 3 (v Microsoft Access SQL může být výraz 2 větší než výraz 3, ale v ANSI SQL nemůže). VYBERTE jméno zaměstnance, jméno zaměstnance.ZPRÁVA OD zaměstnance KDE ((((report.zaměstnance) mezi 1 000 a 2 000)); Dotaz: VYBERTE jméno zaměstnance, jméno zaměstnance.zpráva OD zaměstnance KDE ((((zaměstnanec.zpráva) mezi 2000 a 1 000)); nedává chybu a dává stejnou odpověď VYBERTE název zaměstnance, jméno zaměstnance.zpráva OD zaměstnance KDE ((((zaměstnanec.zpráva) 15000)); VYBERTE jméno zaměstnance, jméno zaměstnance.ZPRÁVA OD zaměstnance KDE ((((zaměstnanec.zpráva) ne mezi 1000 a 2000));


Znaky vzoru S predikátem Like se používají různé znaky vzoru. MS Access SQL ANSI Znak SQL jeden znak? _ (podtržítko) skupina znaků *% jeden znak v seznamu znaků [seznam znaků] chybí jeden znak, který není v seznamu znaků [! chybí seznam_char_list] Poslední dvě funkce jsou pouze přístup V režimu Access 2000 může režim ANSI SQL-92 používat zástupné znaky ANSI. Nelze kombinovat znaky v jednom dotazu VYBERTE zaměstnance.ZO zaměstnance WHERE (((zaměstnanec.Celé jméno) Jako "D *"));


SKUPINA PODLE VÝBĚRU seznam polí z tabulky KDE výběrová podmínka, kde seskupení Pole jsou názvy polí (až 10), která se používají ke seskupování záznamů. Pořadí názvů polí v argumentu Seskupitelná pole určuje úroveň seskupení pro každé z těchto polí. Použijte klauzuli WHERE k vyloučení záznamů ze seskupení a klauzuli HAVING k použití filtru na záznamy po seskupení. MÁME Při použití klauzule GROUP BY musí být všechna pole v seznamu polí příkazu SELECT zahrnuta do klauzule GROUP BY nebo musí být použita jako argumenty agregační funkce SQL. Oddělení s více než 5 zaměstnanci: VYBERTE zaměstnance [kód oddělení], počet (celé jméno zaměstnance) JAKO [počet_zaměstnanců] ZE SKUPINY zaměstnanců podle zaměstnance [kód oddělení] MÁ (((počet (celé jméno zaměstnance))> 5)); 5));">




Vnořená žádost. Existuje predikát. VYBRAT zaměstnance, počet (zaměstnanec) JAKO číslo_Certifikát_Práce OD zaměstnance KDE (((existuje (VYBRAT DISTINKT zaměstnance, zaměstnanec OD zaměstnance VNITŘNÍ PŘIPOJIT se EX NA zaměstnance = kopírovat zaměstnance)) nepravda)) SKUPINA PODLE zaměstnanecké společnosti; False)) SKUPINA PODLE zaměstnanecké společnosti; "> Nepravda)) SKUPINA PODLE zaměstnanecké společnosti;"> Nepravda)) SKUPINA PODLE zaměstnanecké společnosti; "title =" (! LANG: Poddotaz. Predikát existuje. VYBERTE zaměstnaneckou společnost, počet (Zaměstnanecký zaměstnanec) AS Number_Cattest_ Zaměstnanec OD Zaměstnavatele KDE (((Existuje (VYBRAT DISTINKT Zaměstnanecká společnost, Zaměstnanec Zaměstnanec OD Zaměstnance VNITŘNÍ PŘIPOJIT Kopírovat ON Zaměstnanec = Kopírovat zaměstnance)) Nepravda)) SKUPINA PODLE Zaměstnanecké společnosti;"> title="Vnořená žádost. Existuje predikát. VYBRAT zaměstnance, počet (zaměstnanec) JAKO číslo_Certifikát_Práce OD zaměstnance KDE (((existuje (VYBRAT DISTINKT zaměstnance, zaměstnanec OD zaměstnance VNITŘNÍ PŘIPOJIT se EX NA zaměstnance = kopírovat zaměstnance)) nepravda)) SKUPINA PODLE zaměstnanecké společnosti;"> !}








Vytvoření poddotazu pomocí nástroje QBE Query Builder Pokud k definování podmínek pro pole používáte poddotaz, zadejte příkaz SELECT do buňky v řádku Kritéria ve sloupci tohoto pole. Příkaz SELECT musí být uzavřen v závorkách.








Mazání záznamů. Dotaz SQL (generován) VYMAZAT ROZDÍLIT student.FULLNAME OD studenta WHERE (((student.FULLNAME) = "Burlak GN"));


Příkaz DELETE Žádost o odstranění smaže celý záznam, nejen obsah zadaných polí. Chcete -li odstranit data pro konkrétní pole, vytvořte dotaz na aktualizaci záznamu, který nahradí stávající hodnoty hodnotami Null Odstranit dotaz bez dané podmínky vyhledávání odstraní všechny záznamy z tabulky. Na rozdíl od příkazu DROP je struktura tabulky a všechny vlastnosti zachovány.


Mazání záznamů. Dotaz SQL Dotaz: ODSTRANIT * OD studenta KDE student.Full name = "Burlak GN"; dává podobný výsledek.



















35





41



Vytvoření tabulky návrhu napájení pomocí DDL

Cokoli, co můžete definovat databázi pomocí nástroje RAD, jako je Access, lze také provést pomocí SQL. V tomto případě místo klikání na položky nabídky zadáváte příkazy pomocí klávesnice. Ti, kteří dávají přednost manipulaci s grafikou, zjišťují, že nástrojům RAD lze snadno a přirozeně porozumět a naučit se je. Jiní, kteří dávají přednost vkládání slov do vět s určitou logikou, věří, že příkazy SQL jsou stále jednodušší a přirozenější. Vzhledem k tomu, že některé věci lze snadno reprezentovat pomocí paradigmatu objektu a jiné je snadné řešit pomocí SQL, je užitečné znát obě metody.

V následujících částech použijete SQL k provedení stejných kroků k vytvoření, úpravě a zrušení tabulky, kterou jste použili nástroj RAD v předchozí části.

Použití SQL s Microsoft Access

Access byl navržen jako nástroj Rapid Application Development (RAD), který nevyžaduje žádné kódování. Přestože můžete psát a spouštět příkazy SQL přímo v Accessu, můžete to také provést zadními dveřmi. Chcete -li otevřít hlavní editor používaný k zadávání kódu SQL, postupujte takto.

  1. Otevřete databázi a poté ze seznamu Objekty vyberte možnost Dotazy.
  2. V podokně úloh na pravé straně okna vyberte možnost Vytvořit dotaz v režimu návrhu. Zobrazí se dialogové okno Přidat tabulku.
  3. Vyberte libovolnou z tabulek, klikněte na tlačítka Přidat a Zavřít. Ignorujte blikající kurzor v nově vytvořeném okně požadavku.
  4. V hlavní nabídce Access zvolte View SQL Mode. Zobrazí se okno editoru s počátečním příkazem SQL SELECT.
  5. Odeberte příkaz SELECT a poté zadejte požadovaný příkaz SQL.
  6. Po dokončení klikněte na ikonu Uložit. Access vás vyzve k zadání názvu nově vytvořeného této žádosti.
  7. Zadejte název požadavku a klikněte na tlačítko OK.

Příkaz, který jste právě vytvořili, bude uložen a proveden později jako požadavek. Bohužel Access nespouští celou řadu příkazů SQL. Například neprovede příkaz CREATE TABLE. Jakmile je však tabulka vytvořena, můžete provádět téměř jakoukoli požadovanou transformaci dat v ní.

Vytvoření tabulky

Při práci s plně funkčním systémem DBMS, jako je Microsoft SQL Server, Oracle 9i nebo IBM DB2, musíte při vytváření tabulky pomocí SQL zadat stejné informace, jaké byste zadali při vytváření tabulky pomocí nástroje RAD. Rozdíl je v tom, že nástroj RAD vám k tomu pomůže tím, že vám poskytne dialog pro vytvoření tabulky (nebo nějakou podobnou strukturu) a nedovolí vám vstoupit špatná jména pole, typy nebo velikosti. SQL vám nevěnuje tolik pozornosti. Při práci s SQL musíte od začátku přesně vědět, co dělat. Musíte zadat celý příkaz CREATE TABLE, než tomu bude SQL věnovat pozornost, natož vám řekne, jestli jsou v příkazu nějaké chyby.

Následující příkaz vytvoří tabulku shodnou s tabulkou vytvořenou dříve:

VYTVOŘIT TABULKU PowerSQL
Číslo návrhu MALÝ INT
Jméno CHAR (15),
Příjmení CHAR (20),
Adresa CHAR (30),
Město CHAR (25),
Státní provincie CHAR (2),
Poštovní směrovací číslo CHAR (10),
Země CHAR (30),
Telefon CHAR (14),
HowKnown CHAR (30),
Návrh CHAR (50),
BusinOrCharity CHAR (1);

Jak vidíte, informace jsou v podstatě stejné jako při vytváření tabulky pomocí nástrojů RAD (jak je popsáno dříve v této kapitole). Lze upřednostnit jakýkoli způsob vytváření tabulek. Co je však na SQL dobré, je jeho univerzálnost. Stejná standardní syntaxe bude fungovat v jakémkoli systému správy databází.

Pamatovat si:
Vynaloženo jakékoli úsilí učení se SQL, bude mít ospravedlnění na dlouhou dobu, protože tento jazyk nehodlá rychle opustit jeviště. A úsilí vynaložené na to, stát se odborníkem ve vývojovém prostředí, pravděpodobně přinese menší návratnost. A stejně jako je nejnovější nástroj RAD skvělý, buďte si jisti, že bude do dvou až tří let nahrazen pokročilejší technologií. Je skvělé, když během této doby dokážete vrátit vynaložené úsilí do učení tento nástroj! Použijte, pokud můžete. A pokud nemůžete, bude rozumnější držet se starého a vyzkoušeného prostředku nápravy. Znalost SQL bude vyplácet dividendy mnohem déle
.

Jeden dotaz SQL lze vnořit do jiného. Poddotaz není nic jiného než dotaz v rámci dotazu. V klauzuli WHERE se obvykle používá poddotaz. Existují však i jiné způsoby použití poddotazů.

Vyžádejte si Q011. Zobrazí se informace o produktech z tabulky m_product, jejichž kódy jsou také v tabulce m_income:

VYBRAT *
Z m_produktu
KDE JE IN (VYBRAT product_id FROM m_income);

Vyžádejte si Q012. Zobrazí se seznam produktů z tabulky m_product, jejichž kódy nejsou v tabulce m_outcome:

VYBRAT *
Z m_produktu
KDE ID NENÍ V (VYBRAT product_id FROM m_outcome);

Vyžádejte si Q013. Tento dotaz SQL zobrazuje jedinečný seznam kódů produktů a názvů, které mají kódy v tabulce m_income, ale nikoli v tabulce m_outcome:

VYBERTE DISTINCT product_id, název
Z m_income VNITŘNÍ PŘIPOJENÍ m_product
ON m_income.product_id = m_product.id
KDE product_id NENÍ VE VÝBĚRU (SELECT product_id FROM m_outcome);

Vyžádejte si Q014. V tabulce m_category se zobrazuje jedinečný seznam kategorií, jejichž názvy začínají písmenem M:

VYBRAT název DISTINCT
Z m_produktu
KDE NÁZEV JAKO „М *“;

Vyžádejte si Q015. Příklad provádění aritmetických operací na polích v požadavku a přejmenování polí v požadavku (alias). Tento příklad vypočítá částku nákladů = množství * cenu a ziskovou marži pro každý záznam o výdajích položky za předpokladu, že zisk je 7 procent z prodejní částky:

Cena, částka * cena JAKO výsledek_součet,
částka * cena / 100 * 7 AS zisk
OD M_výnos;

Vyžádejte si Q016. Analýzou a zjednodušením aritmetických operací můžete zvýšit rychlost provádění dotazu:


result_sum * 0,07 AS zisk
OD M_výnos;

Vyžádejte si Q017. Pomocí příkazu INNER JOIN můžete spojit data z více tabulek. V následujícím příkladu je v závislosti na hodnotě ctgry_id každý záznam tabulky m_income spárován s názvem kategorie z tabulky m_category, do které produkt patří:

VYBERTE c.title, b.title, dt, částka, cena, částka * cena AS příjem_sum
OD (m_income AS a INNER JOIN m_product AS b ON a.product_id = b.id)
VNITŘNÍ PŘIPOJENÍ m_kategorie AS c ON b.ctgry_id = c.id
OBJEDNÁVKA podle c.title, b.title;

Vyžádejte si Q018. Funkce jako SUM - součet, COUNT - množství, AVG - aritmetický průměr, MAX - maximální hodnota, MIN - minimální hodnota se nazývají agregační funkce. Nabývají více hodnot a po zpracování vracejí jednu hodnotu. Příklad výpočtu součtu součtu polí částka a cena pomocí agregační funkce SUMA:

VYBERTE SOUČET (částka * cena) AS Celkem_Součet
Z M_příjmu;

Vyžádejte si Q019. Příklad použití více agregačních funkcí:


VYBRAT Součet (částka) AS Částka_Součet, AVG (částka) JAKO Částka_AVG,
MAX (částka) AS Částka_Max, Min (částka) AS Částka_Min,
Počítat (*) AS Total_Number
Z M_příjmu;

Vyžádejte si Q020. Tento příklad vypočítá součet všech položek s velkým písmenem kódu 1 v červnu 2011:

VYBRAT
Z m_příjmu
KDE product_id = 1 A DT MEZI # 1. 6. 2011 # A # 30. 6. 2011 #;.

Vyžádejte si Q021. Následující dotaz SQL vypočítá prodanou částku za položky s kódem 4 nebo 6:

VYBRAT
OD m_výjmu
KDE product_id = 4 NEBO product_id = 6;

Vyžádejte si Q022. Vypočítává se, pro jaké množství bylo prodáno 12. června 2011 zboží s kódem 4 nebo 6:

VYBRAT Součet (částka * cena) AS výsledný_součet
OD m_výjmu
KDE (product_id = 4 NEBO product_id = 6) AND dt = # 6/12/2011 #;

Vyžádejte si Q023.Úkol je následující. Vypočítejte celkové množství zboží v kategorii „Pekárna“, které bylo aktivováno.

Chcete -li tento problém vyřešit, musíte pracovat se třemi tabulkami: m_income, m_product a m_category, protože:
- množství a cena aktivovaného zboží jsou uloženy v tabulce m_income;
- kód kategorie každého produktu je uložen v tabulce m_product;
- název názvu kategorie je uložen v tabulce m_category.

K vyřešení tohoto problému použijeme následující algoritmus:
- určení kódu kategorie "Pekařské výrobky" z tabulky m_kategorie pomocí poddotazu;
- spojení tabulek m_income a m_product za účelem určení kategorie každého aktivovaného produktu;
- výpočet částky příjmu (= množství * cena) u zboží, jehož kód kategorie se rovná kódu definovanému výše uvedeným poddotazem.


Z m_produktu JAKO VNITŘNÍ PŘIPOJENÍ m_příjmu AS b ON a.id = b.product_id
WHERE ctgry_id = (VYBRAT ID Z M_kategorie WHERE title = "(! LANG: Pekárna"); !}

Vyžádejte si Q024. Problém výpočtu celkového množství aktivovaného zboží v kategorii „Pekařské výrobky“ vyřešíme pomocí následujícího algoritmu:
- pro každý záznam tabulky m_income, v závislosti na hodnotě jejího product_id, z tabulky m_category, odpovídá názvu kategorie;
- vyberte záznamy, u nichž se kategorie rovná „Pekařské výrobky“;
- vypočítat částku účtenky = množství * cena.

VYBRAT Součet (částka * cena) AS součet příjmů
OD (m_produkt JAKO VNITŘNÍ PŘIPOJENÍ m_income AS b ON a.id = b.product_id)
WHERE c.title = "(! LANG: Pekárna"; !}

Vyžádejte si Q025. Tento příklad vypočítá, kolik položek bylo spotřebováno:

VYBERTE COUNT (product_id) jako product_cnt
OD (VYBRAT DISTINCT product_id FROM m_výsledek) AS t;

Vyžádejte si Q026. Klauzule GROUP BY se používá ke seskupování záznamů. Záznamy jsou obvykle seskupeny podle hodnoty jednoho nebo více polí a na každou skupinu se použije nějaký druh agregační operace. Následující dotaz například vygeneruje zprávu o prodeji zboží. To znamená, že je vygenerována tabulka, která obsahuje názvy zboží a částku, za kterou bylo prodáno:

VYBRAT název, SUMA (částka * cena) JAKO výsledek_součet
Z m_produktu JAKO VNITŘNÍ PŘIPOJENÍ m_výsledek AS b
ON a.id = b.product_id
SKUPINA PODLE názvu;

Vyžádejte si Q027. Zpráva o prodeji podle kategorie. To znamená, že je generována tabulka, která obsahuje názvy kategorií produktů, celkovou částku, za kterou byly produkty těchto kategorií prodány, a průměrnou částku prodeje. Funkce ROUND se používá k zaokrouhlení průměrné hodnoty na jednu setinu (druhá číslice za oddělovač desetinných míst):

VYBERTE c.title, SUM (částka * cena) AS result_sum,
KOLO (AVG (částka * cena), 2) AS result_sum_avg
OD (m_produkt JAKO VNITŘNÍ PŘIPOJENÍ m_výsledek AS b ON a.id = b.product_id)
VNITŘNÍ PŘIPOJENÍ m_kategorie AS c ON a.ctgry_id = c.id
SKUPINA PODLE c.title;

Vyžádejte si Q028. U každého produktu se vypočítá celkový a průměrný počet jeho účtenek a zobrazí informace o zboží, jejichž celkový počet účtenek není menší než 500:

VYBRAT product_id, SUM (částka) AS suma_sum,
Zaokrouhlení (Prům. (Částka), 2) AS částka_avg
Z m_příjmu
SKUPINA PODLE ID_produktu
MAJÍCÍ součet (částka)> = 500;

Vyžádejte si Q029. Tento dotaz vypočítá pro každou položku součet a průměr jejích příjmů ve druhém čtvrtletí 2011. Pokud celkové množství přijatého zboží není menší než 1 000, zobrazí se informace o tomto produktu:

VYBRAT název, SUMA (částka * cena) JAKO příjmový_součet
Z m_příjmu a VNITŘNÍ PŘIPOJENÍ m_product b ON a.product_id = b.id
KDE dt MEZI # 1. 4. 2011 # A # 30. 6. 2011 #
SKUPINA PODLE názvu
MAJÍCÍ SOUČET (částka * cena)> = 1000;

Vyžádejte si Q030. V některých případech je třeba namapovat každý záznam určité tabulky na každý záznam jiné tabulky; čemu se říká karteziánský výrobek. Tabulka, která je výsledkem takového spojení, se nazývá Descartesova tabulka. Pokud má například některá tabulka A 100 záznamů a tabulka B má 15 záznamů, pak jejich Descartesova tabulka bude obsahovat 100 * 15 = 150 záznamů. Následující dotaz spojí každý záznam v tabulce m_income s každým záznamem v tabulce m_outcome:

VYBRAT * Z m_příjmu, m_výjmu;

Vyžádejte si Q031. Příklad seskupení záznamů podle dvou polí. Následující dotaz SQL vypočítá pro každého dodavatele množství a množství zboží, které od něj obdržel:


SUM (částka * cena) AS příjem_sum

Požádejte o Q032. Příklad seskupení záznamů podle dvou polí. Následující dotaz vypočítá pro každého dodavatele množství a množství námi prodaných produktů:

VYBERTE id_dodavatele, id_produktu, SUM (částka) AS částka_sum,
SUM (částka * cena) AS result_sum
SKUPINA PODLE dodavatele_id, product_id;

Vyžádejte si Q033. V tomto příkladu se jako poddotazy používají dva výše uvedené dotazy (q031 a q032). Výsledky těchto dotazů pomocí metody LEFT JOIN jsou sloučeny do jedné sestavy. Následující dotaz uvádí množství a množství produktů přijatých a prodaných pro každého dodavatele. Vezměte prosím na vědomí, že pokud již nějaký produkt dorazil, ale ještě nebyl prodán, pak buňka result_sum pro tento záznam bude prázdná. Je třeba také poznamenat, že tento požadavek je pouze příkladem použití složité dotazy jako poddotaz. Výkon tohoto SQL dotaz u velkého množství dat je pochybné:

VYBRAT *
Z
SUM (částka * cena) AS příjem_sum
ON a.product_id = b.id SKUPINA PODLE dodavatele_id, product_id) AS a
LEVÉ PŘIPOJENÍ
(VYBERTE id_dodavatele, id_produktu, SUMA (částka) AS částka_sum,
SUM (částka * cena) AS result_sum
Z m_výjmu JAKO VNITŘNÍ PŘIPOJENÍ m_produktu AS b
ON a.product_id = b.id SKUPINA PODLE dodavatele_id, product_id) AS b
ON (a.product_id = b.product_id) AND (a.supplier_id = b.supplier_id);

Vyžádejte si Q034. V tomto příkladu se jako poddotazy používají dva výše uvedené dotazy (q031 a q032). Výsledky těchto dotazů pomocí metody RIGTH JOIN jsou sloučeny do jedné sestavy. Následující dotaz zobrazí zprávu o výši plateb každého klienta za platební systémy, které použil, a výši investic, které provedli. Následující dotaz uvádí množství a množství produktů přijatých a prodaných pro každého dodavatele. Je třeba poznamenat, že pokud již byl některý produkt prodán, ale dosud nedorazil, pak buňka income_sum pro tento záznam bude prázdná. Přítomnost těchto prázdných buněk je indikátorem chyby v účtování tržeb, protože před prodejem je nejprve nutné, aby dorazil odpovídající produkt:

VYBRAT *
Z
(VYBERTE id_dodavatele, id_produktu, SUMA (částka) AS částka_sum,
SUM (částka * cena) AS příjem_sum
Z m_příjmu JAKO VNITŘNÍ PŘIPOJENÍ m_product AS b ON a.product_id = b.id
SKUPINA PODLE ID_dodavatele, ID_produktu) AS a
SPRÁVNÉ PŘIPOJENÍ
(VYBERTE id_dodavatele, id_produktu, SUMA (částka) AS částka_sum,
SUM (částka * cena) AS result_sum
Z m_výjmu JAKO VNITŘNÍ PŘIPOJENÍ m_product AS b ON a.product_id = b.id
SKUPINA PODLE ID_dodavatele, ID_produktu) AS b
ZAPNUTO (a.dodavatel_id = b.dodavatel_id) A (a.id_produktu = b.id_produktu);

Vyžádejte si Q035. Zobrazí zprávu o výši příjmů a výdajů podle produktů. Za tímto účelem se vytvoří seznam produktů podle tabulek m_income a m_outcome, poté se pro každý produkt z tohoto seznamu vypočítá součet jeho příjmů podle tabulky m_income a součet jeho výdajů podle tabulky m_outcome:

VYBRAT product_id, SUM (in_amount) AS příjem_mount,
SUM (out_amount) AS result_amount
Z
(VYBRAT product_id, částka AS in_amount, 0 AS out_amount
Z m_příjmu
UNION ALL
SELECT product_id, 0 AS in_amount, částka AS out_amount
FROM m_outcome) AS t
SKUPINA PODLE ID_produktu;

Vyžádejte si Q036. EXISTS vrací hodnotu TRUE, pokud do ní předaná sada obsahuje prvky. Funkce EXISTS vrací FALSE, pokud je jí předaná sada prázdná, to znamená, že neobsahuje žádné prvky. Následující dotaz zobrazuje kódy produktů, které jsou obsaženy v tabulkách m_income a m_outcome:

VYBERTE DISTINCT product_id
OD M_income AS a
KDE EXISTUJE (VYBRAT product_id FROM m_outcome AS b

Vyžádejte si Q037. Zobrazí se kódy produktů, které jsou obsaženy jak v tabulce m_income, tak v m_outcome tabulce:

VYBERTE DISTINCT product_id
OD M_income AS a
KDE IN_produkt_ID (VYBERTE ID_produktu OD m_výjmu)

Vyžádejte si Q038. Zobrazí se kódy produktů, které jsou obsaženy jako v tabulce m_income, ale nejsou obsaženy v tabulce m_outcome:

VYBERTE DISTINCT product_id
OD M_income AS a
KDE NEJSOU (VYBRAT product_id FROM m_outcome AS b
KDE b.product_id = a.product_id);

Vyžádejte si Q039. Zobrazí se seznam produktů s maximálním prodejem. Algoritmus je následující. U každého produktu je vypočítána výše jeho prodeje. Poté je stanoveno maximum těchto částek. Poté se pro každý produkt znovu vypočítá celková částka jeho prodeje a zobrazí se kód a objem prodeje produktů, jejichž celkový součet se rovná maximu:

VYBRAT product_id, SUM (částka * cena) AS suma_sum
OD m_výjmu
SKUPINA PODLE ID_produktu
MAJÍCÍ SOUČET (částka * cena) = (VYBERTE MAX (s_ množství)
OD (VYBRAT SOUČET (částka * cena) JAKO s_množství OD m_výjmu SKUPINA PODLE ID_produktu));

Požádejte o Q040. Vyhrazené slovo IIF ( podmíněný operátor) se používá k odhadu logický výraz a provedení jedné nebo druhé akce v závislosti na výsledku (PRAVDA nebo NEPRAVDA). V následujícím příkladu je dodávka položky považována za „malou“, pokud je množství menší než 500. V opačném případě, tj. Množství příjmu je větší nebo rovné 500, je dodávka považována za „velkou“:

SELECT dt, product_id, amount,
IIF (částka<500,"малая","большая") AS mark
Z M_příjmu;

SQL dotaz Q041. V případě, že je operátor IIF použit několikrát, je výhodnější jej nahradit operátorem SWITCH. K vyhodnocení booleovského výrazu a provedení akce na základě výsledku se používá operátor SWITCH (operátor s více možnostmi). V následujícím příkladu je dodaná šarže považována za „malou“, pokud je množství zboží v šarži menší než 500. V opačném případě, pokud je množství zboží větší nebo rovné 500, je šarže považována za „velkou“ ":

SELECT dt, product_id, amount,
SWITCH (částka<500,"малая",amount>= 500, „velký“) značka AS
Z M_příjmu;

Vyžádejte si Q042. <300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, amount,
IIF (částka<300,"малая",
IIF (částka<1000,"средняя","большая")) AS mark
Z M_příjmu;

SQL dotaz Q043. Pokud je v dalším požadavku množství zboží v přijaté dávce menší než 300, pak je dávka považována za „malou“. V opačném případě, pokud je podmínka částky<300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, amount,
SWITCH (částka<300,"малая",
množství<1000,"средняя",
částka> = 1000, „velká“) značka AS
Z M_příjmu;

SQL dotaz Q044. V dalším dotazu jsou tržby rozděleny do tří skupin: malé (do 150), střední (od 150 do 300), velké (300 a více). Dále se pro každou skupinu vypočítá součet:

VYBRAT kategorii, SUM (výsledek_součet) jako Ctgry_Total
OD (VYBRAT částku * cena AS výsledek_součet,
IIf (částka * cena<150,"малая",
IIf (částka * cena<300,"средняя","большая")) AS Category
FROM m_outcome) AS t
SKUPINA PODLE kategorií;

SQL dotaz Q045. Funkce DateAdd slouží k přidání dnů, měsíců nebo let k danému datu a získání nového data. Další dotaz:
1) přidá 30 dní k datu z pole dt a zobrazí nové datum v poli dt_plus_30d;
2) přidá 1 měsíc k datu z pole dt a zobrazí nové datum v poli dt_plus_1m:

SELECT dt, dateadd ("d", 30, dt) AS dt_plus_30d, dateadd ("m", 1, dt) AS dt_plus_1m
Z M_příjmu;

SQL dotaz Q046. Funkce DateDiff je určena k výpočtu rozdílu mezi dvěma daty v různých jednotkách (dny, měsíce nebo roky). Následující dotaz vypočítá rozdíl mezi datem v poli dt a aktuálním datem ve dnech, měsících a letech:

SELECT dt, DateDiff ("d", dt, Date ()) AS last_day,
DateDiff ("m", dt, Date ()) AS last_months,
DateDiff ("yyyy", dt, Date ()) AS last_years
Z M_příjmu;

SQL dotaz Q047. Počet dní od data převzetí zboží (tabulka m_income) do aktuálního data se vypočítá pomocí funkce DateDiff a porovná se datum expirace (tabulka m_product):


DateDiff ("d", dt, Date ()) AS last_days
Z m_příjmu JAKO VNITŘNÍ PŘIPOJENÍ m_product AS b
ZAPNUTO a.product_id = b.id;

SQL dotaz Q048. Vypočítá se počet dní od data převzetí zboží k aktuálnímu datu, poté se zkontroluje, zda toto číslo překračuje datum expirace:

SELECT a.id, product_id, dt, lifedays,
DateDiff ("d", dt, Date ()) AS last_days, IIf (last_days> lifedays, "Yes", "No") AS date_expire
Z m_příjmu a VNITŘNÍ PŘIPOJENÍ m_produkt b
ZAPNUTO a.product_id = b.id;

SQL dotaz Q049. Vypočítává se počet měsíců od data převzetí zboží do aktuálního data. Sloupec month_last1 vypočítá absolutní počet měsíců, sloupec month_last2 vypočítá počet celých měsíců:

SELECT dt, DateDiff ("m", dt, Date ()) AS month_last1,
DateDiff ("m", dt, Date ()) - iif (den (dt)> den (date ()), 1,0) AS month_last2
Z M_příjmu;

SQL dotaz Q050. Zobrazí se čtvrtletní zpráva o množství a množství zboží aktivovaného pro rok 2011:

VYBRAT kvartal, SUM (výsledek_součet) AS Celkem
OD (VYBRAT částku * cena AS výsledek_součet, měsíc (dt) AS m,
SPÍNAČ (m<4,1,m<7,2,m<10,3,m>= 10,4) AS kvartal
Z m_příjmu KDE rok (dt) = 2011) AS t
SKUPINA PODLE kvartalu;

Vyžádejte si Q051. Následující dotaz pomáhá zjistit, zda uživatelé byli schopni zadat do systému informace o spotřebě položky v množství větším, než je částka přijetí položky:

SELECT product_id, SUM (in_sum) AS income_sum, SUM (out_sum) AS result_sum
OD (VYBRAT product_id, částka * cena jako in_sum, 0 jako out_sum
od m_income
UNION ALL
VYBRAT product_id, 0 jako in_sum, částka * cena jako out_sum
od m_outcome) AS t
SKUPINA PODLE ID_produktu
MAJÍCÍ SOUČET (in_sum)

Vyžádejte si Q052.Číslování řádků vrácených dotazem je implementováno různými způsoby. Řádky sestavy připravené v MS Access můžete například přečíslovat pomocí samotného MS Access. Můžete také přečíslovat pomocí programovacích jazyků, jako je VBA nebo PHP. Někdy je to však nutné provést v samotném dotazu SQL. Následující dotaz tedy očísluje řádky tabulky m_income podle vzestupného pořadí hodnot pole ID:

VYBRAT COUNT (*) jako N, b.id, b.id_product_id, b.amount, b.price
Z m_income a INNER JOIN m_income b ON a.id<= b.id
SKUPINA PODLE b.id, b.product_id, b.amount, b.price;

Vyžádejte si Q053. Prvních pět mezi produkty se zobrazuje podle výše tržeb. Prvních pět záznamů se zobrazuje pomocí příkazu TOP:

VYBERTE TOP 5, product_id, součet (částka * cena) jako součet
OD m_výjmu
SKUPINA PODLE ID_produktu
OBJEDNÁVKA PODLE součtu (částka * cena) DESC;

Vyžádejte si Q054. Zobrazí se pět vůdců mezi produkty podle výše tržeb a řádky jsou očíslovány:

VYBERTE POČET (*) JAKO N, b.id_produktu_, b.summa
Z

Z m_výsledku SKUPINA PODLE ID_produktu) AS a
VNITŘNÍ SPOJENÍ
(VYBRAT product_id, součet (částka * cena) AS summa,
součet * 10000000 + ID_produktu AS ID
Z m_výsledku SKUPINA PODLE ID_produktu) AS b
ON a.id> = b.id
SKUPINA PODLE b.product_id, b.summa
MÁME POČET (*)<=5
OBJEDNÁVKA PO COUNT (*);

Vyžádejte si Q055. Následující dotaz SQL ukazuje použití matematických funkcí COS, SIN, TAN, SQRT, ^ a ABS v MS Access SQL:

SELECT (vyberte počet (*) z m_income) jako N, 3,1415926 jako pi, k,
2 * pi * (k-1) / N jako x, COS (x) jako COS_, SIN (x) jako SIN_, TAN (x) jako TAN_,
SQR (x) jako SQRT_, x ^ 3 jako "x ^ 3", ABS (x) jako ABS_
OD (VYBERTE POČET (*) AS k
Z m_income AS A INNER JOIN m_income AS b ON a.id<=b.id
SKUPINA PODLE b.id) t;



Související články: