Začínáme s SQL Serverem: 1. Jednoduché dotazy SELECT

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.

  1. Jak zjistíte názvy všech tabulek v databázi AdventureWorks2012?
  2. Jaké jsou dva způsoby, jak získat názvy všech sloupců v databázi Person.Person?
  3. Vyberte JobTitle a BirthDate pro všechny zaměstnance.
  4. 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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.