Dotazy na server ms sql. Příklad vytvoření dotazu (Query) v databázi MS SQL Server

Poslední aktualizace: 07/05/2017

V minulém tématu byla v SQL Management Studiu vytvořena jednoduchá databáze s jednou tabulkou. Nyní pojďme definovat a provést první SQL dotaz. Chcete-li to provést, otevřete SQL Management Studio, klepněte pravým tlačítkem myši na prvek nejvyšší úrovně v Průzkumníku objektů (název serveru) a ze zobrazené kontextové nabídky vyberte položku Nový dotaz:

Poté se v centrální části programu otevře okno pro zadávání SQL příkazů.

Proveďme dotaz na tabulku, která byla vytvořena v předchozím tématu, konkrétně z ní získáme všechna data. Naše databáze se nazývá univerzita a tabulka je dbo.Students , takže abychom získali data z tabulky, zadáme následující dotaz:

VYBRAT * Z univerzity.dbo.Studenti

Příkaz SELECT umožňuje vybrat data. FROM určuje zdroj, odkud se mají data získat. Ve skutečnosti tímto dotazem říkáme "SELECT all FROM table university.dbo.Students". Stojí za zmínku, že pro název tabulky se používá úplná cesta k tabulce, která označuje databázi a schéma.

Po zadání dotazu klikněte na nástrojové liště na tlačítko Provést, nebo můžete stisknout klávesu F5.

V důsledku provedení dotazu se ve spodní části programu objeví malá tabulka, která zobrazí výsledky dotazu - tedy všechna data z tabulky Studenti.

Pokud potřebujeme provést více dotazů na stejnou databázi, můžeme k potvrzení databáze použít příkaz USE. V tomto případě při dotazu na tabulky stačí zadat jejich název bez názvu databáze a schématu:

POUŽÍVEJTE univerzitní VÝBĚR * OD studentů

V tomto případě provádíme dotaz jako celek pro server, můžeme přistupovat k libovolné databázi na serveru. Můžeme ale také provádět dotazy pouze v rámci konkrétní databáze. Chcete-li to provést, klepněte pravým tlačítkem myši na požadovanou databázi a z kontextové nabídky vyberte příkaz Nový dotaz:

Pokud bychom se v tomto případě chtěli dotazovat na výše použitou tabulku Studenti, pak bychom v dotazu nemuseli uvádět název databáze a schéma, protože tyto hodnoty by již byly jasné.

SQL Server Management Studio poskytuje kompletní nástroj pro vytváření všech typů dotazů. S ním můžete vytvářet, ukládat, načítat a upravovat dotazy. Kromě toho můžete pracovat na dotazech bez připojení k libovolnému serveru. Tento nástroj také poskytuje možnost vytvářet dotazy pro různé projekty.

S dotazy můžete pracovat prostřednictvím Editoru dotazů i Průzkumníka řešení. Tento článek popisuje oba tyto nástroje. Kromě těchto dvou součástí SQL Server Management Studio se podíváme na ladění kódu SQL pomocí vestavěného debuggeru.

Editor dotazů

Chcete-li otevřít panel Editor dotazů Editor dotazů, na panelu nástrojů SQL Server Management Studio klikněte na tlačítko Nový dotaz. Tento panel lze rozšířit o zobrazení tlačítek pro vytváření všech možných dotazů, nejen dotazů Database Engine. Ve výchozím nastavení se vytvoří nový dotaz databázového stroje, ale kliknutím na odpovídající tlačítko na panelu nástrojů můžete vytvořit také dotazy MDX, XMLA a další.

Stavový řádek v dolní části panelu Editor dotazů označuje stav připojení editoru k serveru. Pokud nejste automaticky připojeni k serveru, po spuštění Editoru dotazů se vám zobrazí dialogové okno Připojit k serveru, kde můžete vybrat server, ke kterému se chcete připojit, a režim ověřování.

Editace dotazů offline poskytuje větší flexibilitu, než když jste připojeni k serveru. Pro úpravu dotazů nemusíte být připojeni k serveru a okno editoru dotazů lze odpojit od jednoho serveru (pomocí příkazu nabídky Dotaz --> Připojení --> Odpojit) a připojit k jinému, aniž byste museli otevírat další okno editoru. Chcete-li vybrat režim úprav offline, v dialogovém okně připojení k serveru, které se zobrazí po spuštění editoru pro konkrétní typ dotazu, jednoduše klikněte na tlačítko Zrušit.

Editor dotazů můžete použít k provádění následujících úloh:

    vytváření a provádění příkazů Transact-SQL;

    ukládání vygenerovaných příkazů Transact-SQL do souboru;

    vytváření a analýza prováděcích plánů pro běžné dotazy;

    grafické znázornění prováděcího plánu vybraného dotazu.

Editor dotazů obsahuje vestavěný textový editor a panel nástrojů se sadou tlačítek pro různé akce. Hlavní okno Editoru dotazů je vodorovně rozděleno na panel dotazů (nahoře) a panel výsledků (dole). Příkazy Transact-SQL (tj. dotazy), které mají být provedeny, se zadávají v horním podokně a výsledky systémového zpracování těchto dotazů se zobrazují ve spodním podokně. Obrázek níže ukazuje příklad zadání dotazu do editoru dotazů a výsledky provedení tohoto dotazu:

První příkaz dotazu USE určuje použití databáze SampleDb jako aktuální databáze. Druhý příkaz SELECT načte všechny řádky v tabulce Zaměstnanec. Chcete-li spustit tento dotaz a zobrazit výsledky, klikněte na panelu nástrojů Editoru dotazů na tlačítko Spustit nebo stiskněte klávesu F5 .

Můžete otevřít více oken Editoru dotazů, tzn. vytvořit více připojení k jedné nebo více instancím databázového stroje. Nové připojení se vytvoří kliknutím na tlačítko Nový dotaz na panelu nástrojů SQL Server Management Studio.

Stavový řádek v dolní části okna Editoru dotazů zobrazuje následující informace související s prováděním příkazů dotazu:

    stav aktuální operace (například „Požadavek úspěšně dokončen“);

    jméno databázového serveru;

    aktuální uživatelské jméno a ID procesu serveru;

    název aktuální databáze;

    čas potřebný k dokončení poslední žádosti;

    počet nalezených řádků.

Jednou z hlavních výhod SQL Server Management Studio je snadné použití, což platí také pro Editor dotazů. Editor dotazů poskytuje mnoho funkcí, které usnadňují kódování příkazů Transact-SQL. Zejména používá zvýraznění syntaxe ke zlepšení čitelnosti příkazů Transact-SQL. Všechna vyhrazená slova jsou zobrazena modře, proměnné černě, řetězce červeně a komentáře zeleně.

Kromě toho má Editor dotazů kontextově citlivou nápovědu Dynamická nápověda, jehož prostřednictvím můžete získat informace o konkrétním návodu. Pokud neznáte syntaxi příkazu, vyberte jej v editoru a poté stiskněte klávesu F1. Můžete také zvýraznit parametry různých příkazů Transact-SQL a získat k nim nápovědu z Books Online.

SQL Management Studio podporuje SQL Intellisense, což je typ nástroje automatického doplňování. Jinými slovy, tento modul navrhuje nejpravděpodobnější dokončení částečně zadaných prvků příkazu Transact-SQL.

Průzkumník objektů může také pomoci s úpravou dotazu. Chcete-li se například naučit, jak vytvořit příkaz CREATE TABLE pro tabulku Zaměstnanci, klikněte pravým tlačítkem na tabulku v Průzkumníku objektů a z místní nabídky vyberte Tabulku skriptů jako --> CREATE to --> New Query Editor Window. tabulky --> Použití CREATE --> Okno New Query Editor). Okno editoru dotazů obsahující takto vytvořený příkaz CREATE TABLE je znázorněno na obrázku níže. Tato schopnost platí také pro jiné objekty, jako jsou uložené procedury a funkce.

Prohlížeč objektů je velmi užitečný pro grafické zobrazení plánu provádění pro konkrétní dotaz. Plán provádění dotazu je možnost spuštění zvolená optimalizátorem dotazů z několika možných možností pro provedení konkrétního dotazu. V horním panelu editoru zadejte požadovaný dotaz, vyberte sekvenci příkazů z nabídky Dotaz --> Zobrazit odhadovaný plán provedení (Dotaz --> Zobrazit odhadovaný plán provedení) a plán provedení tohoto dotazu se zobrazí v spodní panel okna editoru.

Průzkumník řešení

Úpravy dotazů v SQL Server Management Studio jsou založeny na metodě řešení. Pokud vytvoříte prázdný dotaz pomocí tlačítka Nový dotaz, bude založen na prázdném řešení. To lze vidět spuštěním sekvence příkazů z nabídky Zobrazit --> Průzkumník řešení ihned po otevření prázdného dotazu.

Rozhodnutí se může týkat žádného, ​​jednoho nebo více projektů. Prázdné řešení, které není spojeno s žádným projektem. Chcete-li přidružit projekt k řešení, zavřete prázdné řešení, Průzkumník řešení a Editor dotazů a vytvořte nový projekt spuštěním sekvence příkazů Soubor --> Nový --> Projekt. V okně Nový projekt, které se otevře, vyberte v prostředním podokně možnost Skripty SQL Server. Projekt je způsob organizace souborů na určitém místě. Projekt můžete pojmenovat a vybrat umístění pro jeho umístění na disku. Když vytvoříte nový projekt, automaticky se spustí nové řešení. Projekt můžete přidat k existujícímu řešení pomocí Průzkumníka řešení.

Pro každý vytvořený projekt zobrazí Průzkumník řešení složky Connections (Connections), Queries (Requests) a Miscellaneous (Miscellaneous). Chcete-li otevřít nové okno Editoru dotazů pro daný projekt, klikněte pravým tlačítkem na jeho složku Dotazy a z kontextové nabídky vyberte Nový dotaz.

Ladění SQL Serveru

SQL Server, počínaje SQL Serverem 2008, má vestavěný ladicí program kódu. Chcete-li spustit relaci ladění, vyberte následující sekvenci příkazů Debug --> Start Debugging z hlavní nabídky SQL Server Management Studio. Na fungování ladicího programu se podíváme na příkladu pomocí balíčku příkazů. Dávka je logická posloupnost příkazů SQL a procedurálních rozšíření, která je odeslána do Database Engine, aby provedla všechny příkazy, které obsahuje.

Obrázek níže ukazuje balíček, který počítá počet zaměstnanců pracujících na projektu p1. Pokud je toto číslo 4 nebo více, zobrazí se odpovídající zpráva. Jinak se zobrazují jména a příjmení zaměstnanců.

Chcete-li zastavit provádění balíčku na konkrétní instrukci, můžete nastavit body přerušení, jak je znázorněno na obrázku. Chcete-li to provést, klikněte nalevo od řádku, na kterém chcete zastavit. Když spustíte ladění, provádění se zastaví na prvním řádku kódu, který je označen žlutou šipkou. Chcete-li pokračovat v provádění a ladění, spusťte příkaz nabídky Debug --> Continue (Ladění --> Continue). Provádění pokynů k balíčku bude pokračovat k prvnímu bodu přerušení a žlutá šipka se v tomto bodě zastaví.

Informace související s procesem ladění se zobrazují ve dvou podoknech v dolní části okna Editor dotazů. Informace o různých typech informací o ladění jsou seskupeny v těchto panelech na několika kartách. Levý panel obsahuje kartu Autos (Automaticky), Locals (Local) a až pět karet Watch (Visible). Pravé podokno obsahuje karty Zásobník volání, Vlákna, Zarážky, Příkazové okno, Okamžité okno a Výstup. Karta Locals zobrazuje proměnné hodnoty, karta Zásobník hovorů zobrazuje hodnoty zásobníku hovorů a karta Body přerušení zobrazuje informace o bodech přerušení.

Chcete-li zastavit proces ladění, proveďte sekvenci příkazů z hlavního menu Debug --> Stop Debugging nebo stiskněte modré tlačítko na panelu nástrojů ladicího programu.

V SQL Server 2012 byl vestavěný ladicí program v SQL Server Management Studio vylepšen o několik nových funkcí. Nyní v něm můžete provádět řadu následujících operací:

    Zadejte podmínku bodu přerušení. Zlomový stav je SQL výraz, jehož vyhodnocená hodnota určuje, zda bude vykonávání kódu v daném okamžiku zastaveno či nikoliv. Chcete-li zadat podmínku bodu přerušení, klepněte pravým tlačítkem myši na červenou ikonu požadovaného bodu přerušení a z kontextové nabídky vyberte Podmínka. Otevře se dialogové okno Podmínka bodu přerušení, ve kterém je třeba zadat potřebný logický výraz. Kromě toho, pokud chcete zastavit provádění, pokud je výraz pravdivý, měli byste nastavit přepínač Je pravda. Pokud je třeba zastavit provádění, pokud se výraz změnil, musíte nastavit přepínač When Changed (Changed).

    Zadejte počet přístupů k bodu přerušení. Počet přístupů je podmínkou pro zastavení provádění v daném okamžiku na základě počtu zásahů do bodu přerušení během provádění. Když je dosaženo zadaného počtu iterací a jakékoli další podmínky zadané pro daný bod přerušení, ladicí program provede zadanou akci. Podmínka přerušení založená na počtu požadavků může být jedna z následujících:

    1. bezpodmínečné (výchozí akce) (Vždy přerušit);

      pokud se počet zásahů rovná zadané hodnotě (Přestávka, když se jeho počet rovná zadané hodnotě);

      pokud je počet zásahů násobkem zadané hodnoty (Zlom, když se počet zásahů rovná násobku zadané hodnoty);

      pokud je počet zásahů roven nebo větší než zadaná hodnota (Přestávka, když je jeho počet větší nebo roven zadané hodnotě).

    Chcete-li nastavit počet přístupů během ladění, klikněte pravým tlačítkem na ikonu požadovaného bodu přerušení na kartě Body přerušení, z kontextové nabídky vyberte možnost Počet přístupů a poté v zobrazeném dialogovém okně Počet přístupů k bodu přerušení vyberte jednu z následujících podmínek: ze seznamu výše . U možností, které vyžadují hodnotu, ji zadejte do textového pole napravo od rozevíracího seznamu podmínek. Chcete-li uložit zadané podmínky, klepněte na tlačítko OK.

    Zadejte filtr bodů přerušení. Filtr bodů přerušení omezuje provoz bodů přerušení pouze na určené počítače, procesy nebo vlákna. Chcete-li nastavit filtr bodů přerušení, klikněte pravým tlačítkem na požadovaný bod přerušení a z kontextové nabídky vyberte Filtr. Potom v dialogovém okně Filtry bodů přerušení, které se otevře, určete prostředky, na které chcete omezit provádění tohoto bodu přerušení. Chcete-li uložit zadané podmínky, klepněte na OK.

    Určete akci v bodě přerušení. Podmínka When Hit určuje akci, která má být provedena, když provádění balíčku dosáhne daného bodu přerušení. Ve výchozím nastavení, když jsou splněny podmínky počtu přístupů i podmínka zastavení, je provádění přerušeno. Případně můžete zobrazit předem zadanou zprávu.

    Chcete-li určit, co se má dělat, když je zasažen bod přerušení, klepněte pravým tlačítkem myši na červenou ikonu požadovaného bodu přerušení a z kontextové nabídky vyberte Při zásahu. V dialogovém okně Při zásahu bodu přerušení, které se otevře, vyberte požadovanou akci. Chcete-li uložit zadané podmínky, klepněte na tlačítko OK.

    Použijte okno Rychlé sledování. V okně QuickWatch můžete zobrazit hodnotu výrazu Transact-SQL a poté tento výraz uložit v okně Watch Values ​​​​. Chcete-li otevřít okno Quick Watch, v nabídce Debug vyberte Quick Watch. Výraz v tomto okně lze vybrat buď z rozevíracího seznamu Výraz (Výraz), nebo jej zadat do tohoto pole.

    Použijte nápovědu Rychlé informace. Když umístíte ukazatel myši na identifikátor kódu, nástroj Rychlé informace zobrazí jeho deklaraci ve vyskakovacím okně.

Tabulkové výrazy tzv. poddotazy, které se používají tam, kde se očekává tabulka. Existují dva typy tabulkových výrazů:

    odvozené tabulky;

    zobecněné tabulkové výrazy.

Tyto dvě formy tabulkových výrazů jsou diskutovány v následujících podkapitolách.

Odvozené tabulky

Odvozená tabulka je tabulkový výraz zahrnutý v klauzuli FROM dotazu. Odvozené tabulky lze použít, když použití aliasů sloupců není možné, protože překladač SQL zpracovává jiný příkaz předtím, než je znám alias. Níže uvedený příklad ukazuje pokus o použití aliasu sloupce v situaci, kdy se zpracovává jiná klauzule předtím, než je znám alias:

POUŽÍVEJTE SampleDb; SELECT MONTH(EnterDate) jako enter_month FROM Works_on GROUP BY enter_month;

Pokus o provedení tohoto dotazu vrátí následující chybovou zprávu:

Msg 207, Level 16, State 1, Line 5 Neplatný název sloupce "enter_month". (Zpráva 207: Úroveň 16, stav 1, řádek 5 Neplatný název sloupce enter_month)

Důvodem chyby je, že klauzule GROUP BY je zpracována před zpracováním odpovídajícího seznamu příkazu SELECT a při zpracování skupiny není znám alias sloupce enter_month.

Tento problém lze vyřešit použitím pohledu obsahujícího předchozí dotaz (bez klauzule GROUP BY), protože klauzule FROM se provádí před klauzulí GROUP BY:

POUŽÍVEJTE SampleDb; SELECT enter_month FROM (SELECT MONTH(EnterDate) as enter_month FROM Works_on) AS m GROUP BY enter_month;

Výsledek tohoto dotazu bude vypadat takto:

Typicky lze tabulkový výraz umístit kdekoli v příkazu SELECT, kde se může objevit název tabulky. (Výsledkem tabulkového výrazu je vždy tabulka nebo ve zvláštních případech výraz.) Následující příklad ukazuje použití tabulkového výrazu ve výběrovém seznamu příkazu SELECT:

Výsledkem tohoto dotazu je:

Obecné tabulkové výrazy

Common Table Expression (OTB) (zkráceně CTE) je pojmenovaný tabulkový výraz podporovaný jazykem Transact-SQL. Běžné tabulkové výrazy se používají v následujících dvou typech dotazů:

    nerekurzivní;

    rekurzivní.

Tyto dva typy požadavků jsou popsány v následujících částech.

OTB a nerekurzivní dotazy

Nerekurzivní forma OTB může být použita jako alternativa k odvozeným tabulkám a pohledům. Obvykle je OTB definováno S klauzulemi a další dotaz, který odkazuje na název použitý v klauzuli WITH. V Transact-SQL je význam klíčového slova WITH nejednoznačný. Aby se předešlo nejednoznačnosti, měl by být příkaz předcházející příkazu WITH ukončen středníkem.

POUŽÍVEJTE 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.SalesOr200Red5a ")/2,5;

Dotaz v tomto příkladu vybere objednávky, jejichž celkové daně (TotalDue) jsou vyšší než průměr všech daní a jejichž poplatky za dopravu (Dopravné) jsou vyšší než 40 % průměrných daní. Hlavní vlastností tohoto dotazu je jeho objemnost, protože vnořený dotaz je potřeba napsat dvakrát. Jedním z možných způsobů, jak omezit rozsah konstrukce dotazu, by bylo vytvořit pohled, který obsahuje poddotaz. Toto řešení je však trochu složitější, protože vyžaduje vytvoření pohledu a jeho odstranění po dokončení dotazu. Nejlepším přístupem by bylo vytvořit OTB. Níže uvedený příklad ukazuje použití nerekurzivního OTB, které zkracuje výše uvedenou definici dotazu:

POUŽÍVEJTE 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_2005FROM) A Freight (SELECT year_2005FROM) /2,5;

Syntaxe klauzule WITH v nerekurzivních dotazech je následující:

Parametr cte_name je název OTB, který definuje výslednou tabulku, a parametr column_list je seznam sloupců ve výrazu tabulky. (Ve výše uvedeném příkladu se OTB nazývá price_calc a má jeden sloupec, rok_2005.) Parametr inner_query představuje příkaz SELECT, který určuje sadu výsledků odpovídajícího tabulkového výrazu. Definovaný tabulkový výraz pak lze použít v external_query. (Vnější dotaz ve výše uvedeném příkladu používá OTB price_calc a jeho sloupec year_2005 ke zjednodušení dvojitě vnořeného dotazu.)

OTB a rekurzivní dotazy

Tato část představuje materiál se zvýšenou složitostí. Proto se při prvním čtení doporučuje přeskočit a vrátit se k němu později. OTB mohou být rekurzivní, protože OTB mohou obsahovat odkazy na sebe. Základní syntaxe OTB pro rekurzivní dotaz vypadá takto:

Parametry cte_name a column_list mají stejný význam jako v OTB pro nerekurzivní dotazy. Tělo klauzule WITH se skládá ze dvou dotazů spojených příkazem UNION VŠECHNY. První dotaz se zavolá pouze jednou a začne sčítat výsledek rekurze. První operand operátoru UNION ALL neodkazuje na OTB. Tento dotaz se nazývá referenční dotaz nebo zdroj.

Druhý dotaz obsahuje odkaz na OTB a představuje jeho rekurzivní část. Z tohoto důvodu se nazývá rekurzivní člen. V prvním volání rekurzivní části představuje OTB reference výsledek referenčního dotazu. Rekurzivní člen používá výsledek prvního volání dotazu. Poté systém znovu zavolá rekurzivní část. Volání rekurzivního člena skončí, když předchozí volání k němu vrátí prázdnou sadu výsledků.

Operátor UNION ALL spojuje řádky, které se dosud nashromáždily, a také další řádky přidané aktuálním voláním do rekurzivního člena. (Přítomnost operátoru UNION ALL znamená, že duplicitní řádky nebudou z výsledku odstraněny.)

Nakonec parametr external_query definuje vnější dotaz, který OTB používá k získání všech volání do spojení obou členů.

K demonstraci rekurzivní formy OTB používáme tabulku letadla definovanou a vyplněnou kódem uvedeným v příkladu níže:

POUŽÍVEJTE SampleDb; CREATE TABLE Letadlo (ContainedAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DECIMAL(6,2)); INSERT INTO Airplane VALUES ("Letadlo", "Trup", 1, 10); INSERT INTO Airplane VALUES ("Letadlo", "Křídla", 1, 11); INSERT INTO Airplane VALUES ("Letadlo", "Ocas", 1, 12); INSERT INTO Airplane VALUES ("Trup", "Salon", 1, 13); INSERT INTO Airplane VALUES ("Trup", "Kokpit", 1, 14); INSERT INTO Airplane VALUES ("Trup", "Nos", 1, 15); INSERT INTO Airplane VALUES("Salon", NULL, 1,13); INSERT INTO Airplane VALUES("kabina", NULL, 1, 14); INSERT INTO Airplane VALUES("Nose", NULL, 1, 15); INSERT INTO Airplane VALUES("Křídla", NULL,2, 11); INSERT INTO Airplane VALUES("Tail", NULL, 1, 12);

Tabulka Letadlo má čtyři sloupce. Sloupec ContainedAssembly definuje sestavu a sloupec ContainedAssembly definuje díly (jeden po druhém), které tvoří odpovídající sestavu. Níže uvedený obrázek ukazuje grafické znázornění možného typu letadla a jeho součástí:

Tabulka letadla se skládá z následujících 11 řádků:

Následující příklad používá klauzuli WITH k definování dotazu, který vypočítá celkové náklady každého sestavení:

POUŽÍVEJTE SampleDb; WITH list_of_parts(sestava1, množství, cena) AS (SELECT ContainedSembly, QuantityContained, UnitCost FROM Letadlo WHERE ContainedAssembly JE NULL UNION ALL SELECT a.ConifyingSembly, a.QuantityContained, CAST(l.quantity * l.cost AS DECIMAL) ) FROM seznam_dílů l, Letadlo a WHERE l.sestava1 = a.Obsahovaná Sestava) VYBERTE sestavu1 "Díl", množství "Množství", cena "Cena" Z seznamu_dílů;

Klauzule WITH definuje seznam OTB s názvem seznam_dílů, který se skládá ze tří sloupců: sestava1, množství a náklady. První příkaz SELECT v příkladu je volán pouze jednou, aby se uložily výsledky prvního kroku procesu rekurze. Příkaz SELECT na posledním řádku příkladu zobrazí následující výsledek.

Každý z nás se pravidelně setkává a využívá různé databáze. Když vybereme e-mailovou adresu, pracujeme s databází. Databáze využívají vyhledávací služby, banky k ukládání zákaznických dat a tak dále.

Ale navzdory neustálému používání databází existuje i pro mnoho vývojářů softwarových systémů mnoho „bílých míst“ kvůli různým výkladům stejných pojmů. Než se podíváme na jazyk SQL, stručně definujeme základní databázové pojmy. Tak.

Databáze - soubor nebo sada souborů pro ukládání uspořádaných datových struktur a jejich vztahů. Velmi často se databáze nazývá systém řízení - je pouze úložištěm informací v určitém formátu a může pracovat s různými DBMS.

Stůl - Představme si složku, ve které jsou uloženy dokumenty seskupené podle určitého atributu, například seznam objednávek za poslední měsíc. Toto je tabulka v počítači. Samostatná tabulka má svůj jedinečný název.

Datový typ - druh informací, které mohou být uloženy v konkrétním sloupci nebo řádku. Mohou to být čísla nebo text určitého formátu.

Sloupec a řádek- všichni jsme pracovali s tabulkami, které mají také řádky a sloupce. Každá relační databáze pracuje s tabulkami stejným způsobem. Řádky se někdy nazývají záznamy.

primární klíč- každý řádek tabulky může mít jeden nebo více sloupců pro jeho jednoznačnou identifikaci. Bez primárního klíče je velmi obtížné aktualizovat, upravovat a mazat požadované řádky.

Co je SQL?

SQL(angličtina - strukturovaný dotazovací jazyk) byl vyvinut pouze pro práci s databázemi a v současnosti je standardem pro všechny populární DBMS. Syntaxe jazyka se skládá z malého počtu operátorů a je snadné se ji naučit. Ale i přes vnější jednoduchost umožňuje vytváření sql dotazů pro složité operace s databází libovolné velikosti.

Od roku 1992 existuje obecně uznávaný standard nazvaný ANSI SQL. Definuje základní syntaxi a funkce operátorů a je podporován všemi lídry na trhu DBMS, jako je ORACLE. Není možné pokrýt všechny možnosti jazyka v jednom malém článku, proto se stručně budeme zabývat pouze základními SQL dotazy. Příklady názorně ukazují jednoduchost a možnosti jazyka:

  • vytváření databází a tabulek;
  • vzorkování dat;
  • přidávání záznamů;
  • úpravy a mazání informací.

SQL datové typy

Všechny sloupce v databázové tabulce ukládají stejný typ dat. Datové typy v SQL jsou stejné jako v jiných programovacích jazycích.

Vytváření tabulek a databází

Existují dva způsoby, jak vytvořit nové databáze, tabulky a další dotazy v SQL:

  • prostřednictvím konzole DBMS
  • Použití interaktivních administračních nástrojů, které jsou součástí databázového serveru.

Operátor vytvoří novou databázi VYTVOŘIT DATABÁZI<наименование базы данных>; . Jak vidíte, syntaxe je jednoduchá a stručná.

Tabulky v databázi vytváříme pomocí příkazu CREATE TABLE s následujícími parametry:

  • název tabulky
  • názvy sloupců a datové typy

Jako příklad vytvoříme tabulku komodit s následujícími sloupci:

Vytvoříme tabulku:

VYTVOŘIT TABULKU Komodita

(id_komodity CHAR(15) NOT NULL,

vendor_id CHAR(15) NOT NULL,

název_komodity CHAR(254) NULL,

commodity_price DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Tabulka má pět sloupců. Za názvem následuje datový typ, sloupce jsou odděleny čárkami. Hodnota sloupce může být prázdná (NULL) nebo musí být vyplněna (NOT NULL), což je určeno při vytváření tabulky.

Výběr dat z tabulky

Operátor výběru dat je nejčastěji používaným SQL dotazem. Pro získání informací je potřeba specifikovat, co chceme z takové tabulky vybrat. Nejprve jednoduchý příklad:

SELECT název_komodity FROM Komodita

Po příkazu SELECT uvedeme název sloupce pro získání informací a FROM definuje tabulku.

Výsledkem spuštění dotazu budou všechny řádky tabulky s hodnotami Commodity_name v pořadí, v jakém byly vloženy do databáze, tzn. bez jakéhokoli třídění. K uspořádání výsledku se používá dodatečná klauzule ORDER BY.

Chcete-li se dotazovat na více polí, uveďte je oddělená čárkami, jako v následujícím příkladu:

SELECT commodity_id, commodity_name, commodity_price FROM Commodity

Je možné získat hodnotu všech sloupců řádku jako výsledek dotazu. K tomu se používá znak "*":

VYBERTE * Z Komodity

  • SELECT navíc podporuje:
  • Řazení dat (výpis ORDER BY)
  • Vyberte podle podmínek (KDE)
  • Termín seskupení (GROUP BY)

Přidání řádku

K přidání řádku do tabulky se používají SQL dotazy s příkazem INSERT. Přidání lze provést třemi způsoby:

  • přidat nový celý řádek;
  • část provázku;
  • výsledky dotazu.

Chcete-li přidat celý řádek, musíte zadat název tabulky a hodnoty sloupců (polí) nového řádku. Zde je příklad:

INSERT INTO Commodity VALUES("106", "50", "Coca-Cola", "1,68", "No Alcohol ,)

Příklad přidá do tabulky nový produkt. Hodnoty jsou uvedeny za VALUES pro každý sloupec. Pokud pro sloupec neexistuje žádná odpovídající hodnota, je nutné zadat hodnotu NULL. Sloupce jsou naplněny hodnotami v pořadí určeném při vytváření tabulky.

Pokud přidáte pouze část řádku, musíte explicitně zadat názvy sloupců, jako v příkladu:

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

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

Zadali jsme pouze identifikátory produktu, dodavatele a jeho název a zbytek polí nechali prázdný.

Přidávání výsledků dotazu

INSERT se primárně používá k přidávání řádků, ale lze jej také použít k přidání výsledků příkazu SELECT.

Změňte data

Chcete-li změnit informace v polích databázové tabulky, musíte použít příkaz UPDATE. Operátor lze použít dvěma způsoby:

  • Všechny řádky v tabulce jsou aktualizovány.
  • Pouze pro určitý řádek.

UPDATE se skládá ze tří hlavních prvků:

  • tabulka, ve které je nutné provést změny;
  • názvy polí a jejich nové hodnoty;
  • podmínky pro výběr řádků ke změně.

Zvažte příklad. Řekněme, že se změnila cena produktu s ID=106, takže tento řádek je třeba aktualizovat. Píšeme následující prohlášení:

AKTUALIZACE SADA komodit commodity_price = "3,2" WHERE commodity_id = "106"

Zadali jsme název tabulky, v našem případě Komodity, kde bude aktualizace provedena, poté po SET - novou hodnotu sloupce a našli požadovaný záznam zadáním požadované hodnoty ID do WHERE.

Chcete-li změnit více sloupců, zadejte více párů sloupec-hodnota oddělených čárkami za příkazem SET. Podívejme se na příklad, ve kterém je aktualizován název a cena produktu:

AKTUALIZACE SADA komodit commodity_name='Fanta', commodity_price = "3,2" WHERE commodity_id = "106"

Chcete-li odstranit informace ve sloupci, můžete jej nastavit na hodnotu NULL, pokud to struktura tabulky umožňuje. Je třeba mít na paměti, že NULL je přesně "žádná" hodnota a nikoli nula ve formě textu nebo čísla. Odebrat popis produktu:

AKTUALIZACE SADA komodit commodity_desc = NULL WHERE id_komodity = "106"

Odstranění řádků

SQL dotazy k odstranění řádků v tabulce se provádějí pomocí příkazu DELETE. Existují dva případy použití:

  • některé řádky v tabulce jsou odstraněny;
  • všechny řádky v tabulce jsou odstraněny.

Příklad odstranění jednoho řádku z tabulky:

DELETE FROM Commodity WHERE commodity_id = "106"

Po DELETE FROM zadáme název tabulky, ve které budou řádky smazány. Klauzule WHERE obsahuje podmínku, podle které budou vybrány řádky k odstranění. V příkladu odstraňujeme produktovou řadu s ID=106. Určení KDE je velmi důležité. vynechání tohoto příkazu smaže všechny řádky v tabulce. To platí i pro změnu hodnoty polí.

Příkaz DELETE neurčuje názvy sloupců ani metaznaky. Zcela odstraní řádky, ale nemůže odstranit jediný sloupec.

Použití SQL v aplikaci Microsoft Access

Obvykle se používá interaktivně k vytváření tabulek, databází, ke správě, úpravám, analýze dat v databázi a implementaci dotazů SQL Access prostřednictvím pohodlného interaktivního návrháře dotazů (Query Designer), pomocí kterého můžete sestavovat a okamžitě provádět SQL příkazy jakékoli složitosti.

Podporován je také režim přístupu na server, ve kterém lze Access DBMS použít jako generátor SQL dotazů do libovolného zdroje dat ODBC. Tato schopnost umožňuje aplikacím Access interakci s jakýmkoli formátem.

Rozšíření SQL

Vzhledem k tomu, že dotazy SQL nemají všechny funkce procedurálních programovacích jazyků, jako jsou smyčky, větve atd., dodavatelé DBMS vyvíjejí vlastní verzi SQL s pokročilými funkcemi. V prvé řadě se jedná o podporu uložených procedur a standardních operátorů procedurálních jazyků.

Nejběžnější dialekty jazyka:

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

SQL na web

MySQL DBMS je distribuován pod GNU General Public License. Existuje komerční licence s možností vývoje vlastních modulů. Jako nedílná součást je součástí nejpopulárnějších sestav internetových serverů, jako jsou XAMPP, WAMP a LAMP, a je nejoblíbenějším DBMS pro vývoj aplikací na internetu.

Byl vyvinut společností Sun Microsystems a v současné době je spravován společností Oracle Corporation. Podporuje databáze do 64 terabajtů, standard syntaxe SQL:2003, replikaci databází a cloudové služby.

SQL- Strukturovaný dotazovací jazyk.
V tomto přehledu se budeme zabývat nejběžnějšími typy SQL dotazů.
Je definován standard SQL ANSI(Americký národní normalizační institut).
SQL je jazyk speciálně zaměřený na relační databáze.

SQL rozdělení:


DDL
(Jazyk pro definici dat) - takzvaný Schema Description Language v ANSI, sestává z příkazů, které vytvářejí objekty (tabulky, indexy, pohledy atd.) v databázi.
DML(Jazyk pro manipulaci s daty) je sada příkazů, které určují, jaké hodnoty jsou v tabulkách v daném okamžiku přítomny.
DCD(Jazyk pro správu dat) se skládá z prostředků, které určují, zda povolit uživateli provádět určité akce či nikoli. Jsou součástí DDL v ANSI. Nezapomeňte na tato jména. Nejedná se o různé jazyky, ale o části příkazů SQL seskupené podle jejich funkce.

Typy dat:

SQL Server – datové typy

Popis

bigint (int 8)

bigint (int 8)

binární(n)

binární(n) nebo obraz

charakter
(synonymum char)

národní charakter nebo ntext

charakter proměnlivý(synonymum char měnící se varchar)

národní charakter různé nebo ntext

čas schůzky

čas schůzky

desetinný

on je číselné

dvojitá přesnost

dvojitá přesnost

celé číslo (int 4) (synonymum: int)

celé číslo (int 4)

národní charakter(synonymum: národní charakter, nchar)

národní charakter

Numerický(synonyma: desetinný, prosinec)

národní charakter různé(synonyma: národní charakter různé, nvarchar)

národní charakter různé

Malé datum a čas

čas schůzky

smallint (int 2)

smallint (int 2)

Malé peníze

sql_variant

Již není podporováno

Ntext
Počínaje SQL Server 2005 se nedoporučuje používat.

Časové razítko

Není podporováno

tinyint (int 1)

tinyint (int 1)

Unikátní identifikátor

unikátní identifikátor

varbinární(n)

varbinární(n) nebo obraz

smalldatetime

čas schůzky

smallint (int 2)

smallint (int 2)

malé peníze

sql_variant

Není podporováno

časové razítko

Není podporováno

tinyint (int 1)

tinyint (int 1)

unikátní identifikátor

unikátní identifikátor

varbinární(n)

varbinární(n) nebo obraz

Tabulka typů dat v SQL Server 2000

CO JE ŽÁDOST?

Žádost je příkaz, který zadáváte svému databázovému programu. Dotazy jsou součástí jazyka DML. Všechny dotazy v SQL se skládají z jediného příkazu. Struktura tohoto příkazu je zdánlivě jednoduchá, protože jej musíte rozšířit, abyste mohli provádět vysoce komplexní vyhodnocení a manipulace s daty.

příkaz SELECT:

VYBRAT„Select“ je nejčastěji používaný příkaz, používá se k výběru dat z tabulky.
Typ dotazu pomocí SELECT:

SELECT id, uživatelské_jméno, město, datum narození FROM uživatelská_základna;

Takový dotaz zobrazí z tabulky users_base všechny hodnoty sloupců zadaných čárkou za příkazem SELECT. Také můžete zobrazit všechny sloupce jedním znakem, * tj. SELECT * FROM uživatelská_základna ; - takový dotaz zobrazí všechna data z tabulky.

Struktura příkazu SELECT:

SELECT (názvy sloupců oddělené čárkami, které se mají zobrazit v dotazu) FROM (název tabulky v databázi)
je nejjednodušší druh požadavku. Existují další příkazy pro usnadnění extrahování dat (viz níže „Funkce“)

DML příkazy:

Hodnoty lze umístit a odebrat z polí pomocí tří příkazů DML (Data Manipulation Language):
VLOŽIT(Vložit)
AKTUALIZACE(aktualizace, úprava),
VYMAZAT(vymazání)

příkaz INSERT:

INSERT INTO user_base (uživatelské_jméno, město, datum narození) VALUES ('Alexander', 'Rostov', '20.06.1991');

Příkaz INSERT přichází s předponou INTO (in to - in), v závorkách jsou pak názvy sloupců, do kterých musíme vkládat data, poté přichází příkaz VALUES (hodnoty) a v závorkách jsou postupně hodnoty (je nutné dodržovat pořadí hodnot se sloupci, hodnoty musí být ve stejném pořadí jako vámi zadané sloupce).

Příkaz UPDATE:

UPDATE users_base SET user_name = 'Alex';

Příkaz UPDATE aktualizuje hodnoty v tabulce. Nejprve přichází na řadu samotný příkaz UPDATE, pak název tabulky, za příkaz SET (set) pak název sloupce a jeho hodnota v uvozovkách (uvozovky se dávají, pokud má hodnota formát řetězce, pokud se jedná o číselnou hodnotu a sloupec je nejsou vázány na datový typ vchar a žádné jiné typy řetězců, uvozovky nemají význam.)

příkaz DELETE:

DELETE FROM users_base WHERE user_name = 'Vasily';

Příkaz DELETE smaže celý řádek, určí řádek podle kritéria WHERE (Kde). V tomto případě by tento dotaz odstranil všechny řádky, kde byla hodnota sloupce user_name Vasily. O kritériích WHERE a dalších si povíme o něco později.

Kritéria, funkce, podmínky atd. což nám pomáhá v SQL:

Klauzule WHERE příkazu SELECT a dalších příkazů DML, která umožňuje nastavit predikáty, jejichž podmínka může být pravdivá nebo nepravdivá pro libovolný řádek v tabulce. Příkaz extrahuje z tabulky pouze ty řádky, pro které je takový výrok pravdivý.
Příklad:
SELECT id, město, datum narození FROM user_base WHERE user_name = 'Alex';- takový dotaz zobrazí pouze ty řádky, které budou odpovídat podmínce WHERE, a to všechny řádky, ve kterých má sloupec uživatelské_jméno hodnotu Alex.

ORDER BY - podmínka pro řazení vybraných řádků. Má 2 kritéria ASC a DESC. ASC (řazení od A do Z nebo 0 až 9)

DESC (opak ASC).
Příklad:
SELECT id, město, datum narození FROM user_base ORDER BY user_name ASC; - takový dotaz zobrazí hodnoty seřazené podle sloupce user_name od A do Z (A-Z; 0-9)

Tuto podmínku lze také použít ve spojení s klauzulí WHERE.
Příklad:
SELECT id, město, datum narození FROM user_base WHERE user_name = 'Alex' ORDER BY id ASC;

DISTINCT (Distinct) je argument, který vám poskytuje způsob, jak odstranit duplicitní hodnoty z vaší klauzule SELECT. Tito. pokud máte ve sloupci opakované hodnoty, řekněme uživatelské_jméno, pak vám DISTINCT zobrazí pouze jednu, například máte v databázi 2 osoby jménem Alexey, pak dotaz pomocí funkce DISTINCT zobrazí pouze 1 hodnotu, která narazí jako první...
Příklad:
SELECT DISTINCT uživatelské_jméno FROM uživatelská_základna;- takový dotaz zobrazí hodnoty všech záznamů ve sloupci user_name, ale nebudou se opakovat, tzn. pokud jste měli nekonečný počet duplicitních hodnot, nebudou zobrazeny...

AND - vezme dva logické argumenty (ve tvaru A AND B) jako argumenty a vyhodnotí je proti pravdivosti, aby se zjistilo, zda jsou oba pravdivé.
Příklad:
SELECT * FROM users_base WHERE city = 'Rostov' AND user_name = 'Alexander';- zobrazí všechny hodnoty z tabulky, kde se název města vyskytuje na jednom řádku (v tomto případě Rostov a uživatelské jméno Alexander.

NEBO - vezme dva booleany (ve tvaru A NEBO B) jako argumenty a vyhodnotí správnost, zda je jeden z nich pravdivý.

SELECT * FROM users_base WHERE city = 'Rostov' OR user_name = 'Alexander';- zobrazí všechny hodnoty z tabulky, kde řádek obsahuje název města Rostov nebo uživatelské jméno Alexander.

NOT - vezme jeden booleovský (ve tvaru NOT A) jako argumenty a změní jeho hodnotu z false na true nebo true na false.
SELECT * FROM users_base WHERE city = 'Rostov' OR NOT user_name = 'Alexander';- zobrazí všechny hodnoty z tabulky, kde se název města Rostov vyskytuje na jednom řádku nebo uživatelské jméno nebude přesně Alexander.

IN - definuje množinu hodnot, ve kterých daná hodnota může nebo nemusí být zahrnuta.
SELECT * FROM users_base WHERE city IN ('Vladivostok', 'Rostov');- takový dotaz zobrazí všechny hodnoty z tabulky, které obsahují názvy zadaných měst ve sloupci města

Mezi - podobně jako operátor IN. Na rozdíl od specifikování čísly z množiny, jak to dělá IN, BETWEEN definuje rozsah, jehož hodnoty se musí snížit, aby byl predikát pravdivý.
SELECT * FROM user_base WHERE id BETWEEN 1 AND 10;- zobrazí všechny hodnoty z tabulky, které budou v rozsahu od 1 do 10 ve sloupci id

POČET – vytvoří čísla řádků nebo jiné hodnoty než NULL polí, která dotaz vybral.
SELECT COUNT (*) FROM user_base ;- zobrazí počet řádků v dané tabulce.
SELECT COUNT (DISTINCT uživatelské_jméno) FROM user_base ;- zobrazí počet řádků s uživatelskými jmény (neopakují se)

SUM - Vytváří aritmetický součet všech vybraných hodnot v daném poli.
SELECT SUM (id) FROM user_base ;- zobrazí součet hodnot všech řádků sloupce id.

AVG - zprůměruje všechny vybrané hodnoty daného pole.
SELECT AVG (id) FROM user_base ;- vypíše průměr všech vybraných hodnot sloupce id

MAX - Vytvoří největší ze všech vybraných hodnot v daném poli.

MIN - Vytváří nejmenší ze všech vybraných hodnot pro dané pole.

Vytvoření tabulky:

CREATE TABLE users_base(id integer, user_name text, city text, birthday_day datetime);- provedení takového příkazu povede k vytvoření tabulky, podle které jsem uvedl příklady ... Zde je vše jednoduché, napíšeme příkaz CREATE TABLE, dále název tabulky, kterou chceme vytvořit, dále v závorce, oddělené čárkami, názvy sloupců a jejich datový typ. Toto je standardní způsob vytvoření tabulky v SQL. Nyní uvedu příklad vytváření tabulek v SQL Server 2005:

NASTAVIT ANSI_NULLS ZAPNUTO
JÍT
NASTAVIT QUOTED_IDENTIFIER ZAPNUTO
JÍT
POKUD NEEXISTUJE (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N."") A zadejte (N"U"))
ZAČÍT
VYTVOŘIT TABULKU.(

NENULOVÝ,
NENULOVÝ,
NENULOVÝ,
PRIMÁRNÍ KLÍČ SOUBOR
ASC


KONEC
JÍT
NASTAVIT ANSI_NULLS ZAPNUTO
JÍT
NASTAVIT QUOTED_IDENTIFIER ZAPNUTO
JÍT
POKUD NEEXISTUJE (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N."") A zadejte (N"U"))
ZAČÍT
VYTVOŘIT TABULKU.(
IDENTITA(1,1) NENÍ NULL,
NULA,
NULA,
PRIMÁRNÍ KLÍČ SOUBOR
ASC
)S (IGNORE_DUP_KEY=OFF) ZAPNUTO
) NA TEXTIMAGE_ON
KONEC
JÍT
NASTAVIT ANSI_NULLS ZAPNUTO
JÍT
NASTAVIT QUOTED_IDENTIFIER ZAPNUTO
JÍT
POKUD NEEXISTUJE (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N."") A zadejte (N"U"))
ZAČÍT
VYTVOŘIT TABULKU.(
IDENTITA(1,1) NENÍ NULL,
NULA,
NULA,
PRIMÁRNÍ KLÍČ SOUBOR
ASC
)S (IGNORE_DUP_KEY=OFF) ZAPNUTO
) ZAPNUTO
KONEC

Syntaxe v SQL Server 2005 je další téma, jen jsem chtěl ukázat, že jsem popsal základy programování SQL, můžete dosáhnout výšin sami, když budete znát základy.

Pokud máte nějaké dotazy k tomuto tématu, napište mi.