V této sérii lekcí se naučíte zadávat dotazy na server Microsoft SQL Server pomocí příkazu SQL SELECT. Po přečtení této lekce budete umět:
- Identifikovat všechny tabulky v databázi SQL Server SSMS (SQL Server Management Studio).
- Pochopit, jak vypsat sloupce tabulky.
- Chcete-li zobrazit sloupce, vytvořit textové a matematické výsledky a nastavit odlišné hodnoty, použijte příkaz SQL SELECT.
- Znáte některé techniky ladění příkazů a opravy chyb.
Důležité! Postupujte podle příkladů v databázi a proveďte je. Pokud jste tak ještě neučinili, zaregistrujte se do mého Průvodce pro začátky se serverem SQL. Získáte tak návod ke stažení bezplatného softwaru a ukázkové databáze.
Pochopení vaší databáze
Jednoduchý příkaz select se skládá ze dvou částí. První část popisuje, jaké sloupce chceme zobrazit, a druhá část, kterou tabulku zobrazujeme. Příkaz select vypadá takto:
SELECT LastName FROM Person.Person
V tomto příkladu je sloupec LastName a tabulka Person. Sloupce jsou uvedeny za klíčovým slovem SELECT, zatímco tabulce předchází FROM.
Pojmenování tabulky
Možná vás zajímá, proč je tabulka Person označována jako Person. Person ve výše uvedeném příkazu. Souvisí to se způsobem organizace objektů na serveru. Databázi si lze představit jako řadu vnořených kontejnerů. Kontejnery jsou:
- Server/Instance – Instance SQL Serveru běžící na počítači.
- Databáze – Jedna nebo více databází vytvořených na instanci.
- Schémata – Způsob logického seskupování tabulek a dalších databázových objektů.
Plně kvalifikovaný název tabulky je ….. Pokud bychom tedy chtěli být opravdu explicitní, mohli bychom pro dotaz použít něco jako
SELECT LastName FROM ...
. Naštěstí obvykle píšeme dotazy v rámci jedné databáze, takže nám stačí zadat Schema a TableName takto:
SELECT LastName FROM Person.Person
Ale co závorky ? Ty se používají, pokud má vaše tabulka v názvu mezeru. Takže
SELECT Last NameFROM Person.Person Table
byla by chyba
SELECT FROM Person.
Je v pořádku. Moje rada? Pokud se dostanete k pojmenování vlastních tabulek, nepoužívejte mezery, závorky jsou ošklivé! Pokud musíte, postupujte jako lidé z Oracle a používejte podtržítka. Person_Table se čte mnohem lépe než , osobně dávám přednost PersonTable.
Používání Průzkumníka objektů
Pro psaní dotazů potřebujete vědět, jaké tabulky a sloupce jsou ve vašich databázích k dispozici. Při použití SSMS (SQL Server Management Studio) můžete jednoduše rozbalit složku tabulek databáze a zobrazit seznam všech tabulek, které se ve vaší databázi nacházejí. Jakmile najdete tabulku, o které chcete vědět více, jednoduše ji rozbalte kliknutím na název tabulky a poté na složku sloupců, kde se zobrazí seznam všech sloupců.
Spouštění dotazů v SSMS
Než se dostaneme příliš daleko, ukážu vám, jak spustit dotaz v SSMS. Je to vlastně velmi snadné. Jakmile spustíte SQL Server Management Studio, budete chtít vybrat svou databázi. Poté klepněte na tlačítko Nový dotaz, které se nachází v horním panelu nástrojů. Tím se vpravo zobrazí okno s dotazem. Do tohoto okna můžete napsat cokoli, protože se v podstatě jedná o textový editor. Vyjměte a vložte nebo zadejte příkaz SQL a poté jej spusťte kliknutím na tlačítko Spustit. Výsledky se zobrazí ve spodní části okna a případné zprávy, například chyby, se zobrazí na kartě zprávy.
Výběr více sloupců
Chcete-li vybrat více než jeden sloupec, stačí je oddělit čárkou. Například
SELECT FirstName, LastNameFROM Person.Person
vrátí jako výsledek jméno i příjmení. Pokud vás to zajímá, můžete při psaní dotazů míchat velikost písmen. Tedy
SELECT FirstName, LastNameFROM Person.Person
Funguje stejně dobře jako
select FirstName, LastNamefrom Person.Person
Tip! Běžnou konvencí je psát všechna klíčová slova s velkým písmenem. Někteří DBA mají pocit, že je snazší číst takto napsané příkazy. Osobně to nedělám, ale pro tento blog to ZKOUŠÍM 🙂
Přejmenování sloupců SQL
Sloupce, které jsou výsledkem příkazů select, můžete přejmenovat. K tomu použijte příkaz AS takto:
SELECT LastName as SirNameFROM Person.Person
Tento příkaz zobrazí výsledek jako „SirName“ místo „LastName“. Je to pěkná funkce z hlediska marnosti, ale hodí se i v případě, že chceme vrátit výsledek výpočtu a potřebujeme jej pojmenovat. Předpokládejme například, že chcete vrátit LastName se všemi velkými písmeny. Mohli byste napsat
SELECT UPPER(LastName) AS SirNameFROM Customers
UPPER je známá funkce. SQL Server má mnoho funkcí, které můžete použít k provádění mnoha typů výpočtů. Všem se budeme věnovat později, ale zatím vězte, že můžete spojit několik funkcí dohromady a vytvořit tak složitý výraz, který vypíše data tak, jak potřebujete.
Složité sloupcové výrazy
Naše tabulka zaměstnanců obsahuje samostatná pole pro jméno a příjmení. Předpokládejme, že personální oddělení potřebuje vidět celé jméno s velkými písmeny. Jak byste to udělali? Jednoduše! Mohli byste napsat
SELECT UPPER(FirstName) + ' ' + UPPER(LastName) AS FullNameFROM Person.Person
Tento příkaz může vypadat složitě, ale jakmile ho rozebereme, zjistíte, že se skládá jen z několika jednoduchých prvků.
- Jak jste se právě naučili, UPPER slouží k vrácení velkého písmene sloupce.
- Příkaz + říká SQL, aby spojil dvě hodnoty dohromady.
Vše, co je v jednoduchých uvozovkách (‚), se zobrazí doslova tak, jak je. V našem případě ‚ ‚ znamená vypsání jedné mezery. Kdybyste si náš výraz přečetli v angličtině, zněl by takto: „Vezměte velké písmeno FirstName zkombinujte ho s mezerou a pak k němu přidejte velké písmeno LastName.“
Matematizujte pomocí SQL!“
Můžete také přimět SQL, aby za vás dělal matematické triky. Dokáže provádět docela složité aritmetické operace, pokud mu to dovolíte. Pro dnešek vám ukážu, jak vynásobit dvě čísla, ale stejně snadno můžete sčítat, odčítat nebo dělit. Později to uděláme ještě složitější, abyste si mohli znovu prožít své dny z Algebry II :). Zde jsou některé běžné matematické operátory, které můžete v SQL použít:
- * Násobit
- / Dělit
- + Sčítat
- – Odečítat
Použijeme tabulku OrderDetails a vypočítáme celkovou cenu vynásobením jednotkové ceny množstvím.
SELECT UnitPrice, OrderQty, UnitPrice * OrderQty AS TotalFROM Purchasing.PurchaseOrderDetail
Bit “ UnitPrice * OrderQty“ říká, že se má vynásobit UnitPrice množstvím.
Rozlišovat a ladit
Dosud jsme používali příkaz select k získání všech záznamů v tabulce bez ohledu na to, zda se některé hodnoty opakují nebo ne. Pokud chcete, můžete použít klíčové slovo DISTINCT, abyste z výsledků odstranili duplicity. Pokud byste například chtěli vrátit pouze jedinečný seznam titulů zaměstnanců, použili byste tento příkaz SQL:
SELECT DISTINCT JobTitleFROM HumanResources.Employee
Příkaz DISTINCT funguje také pro více než jeden sloupec. Pokud byste chtěli, mohli byste získat odlišný výpis názvů pracovních pozic a pohlaví příkazem
SELECT DISTINCT JobTitle, GenderFROM HumanResources.Employee
!Zajímavost: Klíčové slovo ALL je protějškem příkazu DISTINCT a jedná se o výchozí chování. Proto ho do příkazů nepíšeme.
Nalezení a oprava chyb
Dříve nebo později chybně zadáte příkaz select do příkazového řádku a počítač na vás zařve – „Syntaktická chyba!“ nebo „Nesprávný název sloupce“ Co dělat? Stačí si uvědomit, že příkaz select se skládá ze dvou hlavních částí: části SELECT a FROM. Obecně platí, že databáze se nejprve podívá, zda jsou tato klíčová slova přítomna, a pokud nejsou, vyvolá chybu syntaxe.
To je jen módní výraz pro „špatně jste napsali klíčové slovo nebo ho máte v jiném pořadí“ (např. máte Distinct před Select jako v DISTINCT SELECT). Po kontrole klíčových slov se příkaz zkontroluje, zda jste zadali tabulku. Jakmile je tabulka známa, může zkontrolovat sloupce. Pořadí je tedy takové, že se nejprve kontrolují klíčová slova, pak tabulky a nakonec správné sloupce. Kdykoli se zobrazí chyba, pečlivě si ji přečtěte. Je pravděpodobné, že jste něco špatně napsali. Počítač vám v uvozovkách řekne, co jste napsali špatně; vaším úkolem je pak najít překlep a opravit ho.
SQL Select Exercises
Důležité je cvičit! K zodpovězení těchto otázek použijte ukázkovou databázi.
- Jak zjistíte názvy všech tabulek v databázi AdventureWorks2012?
- Jaké jsou dva způsoby, jak získat názvy všech sloupců v databázi Person.Person?
- Vyberte JobTitle a BirthDate pro všechny zaměstnance.
- Jaká by byla UnitPrice jednotlivých položek PurchaseOrderDetail, kdyby byla poloviční sleva?
Odpovědi jsou zde
Gratulujeme! Právě jste se naučili používat příkaz select k dotazování databáze. Další výukové lekce budou následovat a v nich se ponoříme do některých oblastí, které jsme dnes okrajově probrali, jako jsou matematické operátory a funkce. Nezapomeňte! Chci vám všem připomenout, že pokud máte další otázky, které chcete zodpovědět, napište mi komentář nebo tweet. Jsem tu pro vás, abych vám pomohl.