SQL Server Subquery (Čeština)
Summary: in this tutorial, you will learn about the SQL Server subquery and how to use the subquery for querying data.
Úvod do poddotazu na SQL Server
Poddotaz je dotaz vnořený do jiného příkazu, například SELECT
, INSERT
, UPDATE
nebo DELETE
.
Podívejme se na následující příklad.
Zvažte orders
a customers
tabulky ze vzorové databáze.
Následující příkaz ukazuje, jak použít poddotaz v WHERE
klauzuli SELECT
prohlášení k vyhledání prodejních objednávek zákazníků, kteří se nacházejí v New York
:
Zde je výsledek:
V tomto příkladu je následující výrok poddotaz:
Code language: SQL (Structured Query Language) (sql)
Upozorňujeme, že SELECT
dotaz poddotazu v závorkách ()
.
Poddotaz je známý také jako vnitřní dotaz nebo vnitřní výběr, zatímco příkaz obsahující poddotaz se nazývá an vnější výběr nebo vnější dotaz:
SQL Server provede celý výše uvedený příklad dotazu takto:
Nejprve provede poddotaz, aby získal seznam identifikačních čísel zákazníků zákazníků, kteří se nacházejí v New York
.
Code language: SQL (Structured Query Language) (sql)
Zadruhé, SQL Server nahradí identifikační čísla zákazníků vrácená poddotazem v operátoru IN
a provede vnější dotaz, aby získal konečnou sadu výsledků.
Jak můžete s ee, pomocí poddotazu můžete kombinovat dva kroky dohromady. Poddotaz odstraňuje potřebu výběru identifikačních čísel zákazníků a jejich zapojení do vnějšího dotazu. Samotný dotaz se navíc automaticky upraví, kdykoli se změní data zákazníka.
Vnořovací poddotaz
Poddotaz lze vnořit do jiného poddotazu. SQL Server podporuje až 32 úrovní vnoření. Zvažte následující příklad:
Nejprve SQL Server provede následující poddotaz, aby získal seznam identifikačních čísel značek značek Strider
a Trek
:
Zadruhé, SQL Server vypočítá průměrný ceník všech produktů, které patří těmto značkám.
Code language: SQL (Structured Query Language) (sql)
Zatřetí, SQL Server najde produkty, jejichž katalogová cena je vyšší než průměrná katalogová cena všech produktů s Strider
nebo Trek
značka.
Typy poddotazů serveru SQL
Poddotaz můžete použít na mnoha místech:
- Místo výrazu
- S
IN
neboNOT IN
- S
ANY
neboALL
- S
EXISTS
neboNOT EXISTS
- v
UPDATE
,DELETE
, neboINSERT
prohlášení - v klauzuli
FROM
poddotaz na SQL Server se používá místo výrazu
Pokud poddotaz vrací jednu hodnotu, lze jej použít kdekoli, kde se použije výraz.
V následujícím příkladu se poddotaz používá jako výraz sloupce s názvem max_list_price
v prohlášení SELECT
.
poddotaz serveru SQL Server se používá s operátorem IN
Poddotaz, který se používá s IN
vrací sadu nulových nebo více hodnot. Poté, co poddotaz vrátí hodnoty, vnější dotaz je využije.
Následující dotaz vyhledá názvy všech produktů pro horská a silniční kola, která prodejny Bike Stores prodávají.
Tento dotaz je vyhodnocen ve dvou krocích:
- Nejprve vnitřní dotaz vrátí seznam identifikačních čísel kategorií, které odpovídají názvům
Mountain Bikes
acode
silničních kol. - Zadruhé, tyto hodnoty jsou nahrazeny do vnějšího dotazu, který vyhledá názvy produktů, které mají identifikační číslo kategorie, s jednou z hodnot v seznamu.
Poddotaz na SQL Server se používá s JAKÝKOLI operátorem
Poddotaz se zavádí s ANY
operátorem, který má následující syntaxi:
Code language: SQL (Structured Query Language) (sql)
Za předpokladu, že poddotaz vrátí seznam hodnot v1, v2, … vn. Operátor ANY
vrátí TRUE
, pokud některý z porovnávacích párů (scalar_expression
, vi) vyhodnotí do TRUE
; v opačném případě vrátí FALSE
.
Například následující dotaz vyhledá produkty, jejichž ceníkové ceny jsou větší nebo rovny průměrné ceníkové ceně jakékoli značky produktu. .
Poddotaz pro každou značku najde maximální katalogovou cenu. Vnější dotaz používá tyto maximální ceny a určuje, která ceníková cena konkrétního produktu je větší nebo rovna maximální ceníkové ceně jakékoli značky.
Poddotaz na SQL Server se používá s operátorem ALL
The ALL
má stejnou syntaxi jako operátor ANY
:
Code language: SQL (Structured Query Language) (sql)
Operátor ALL
vrátí TRUE
, pokud všechny porovnávací páry (scalar_expression
, vi) vyhodnotí TRUE
; jinak vrátí FALSE
.
Následující dotaz vyhledá produkty, jejichž katalogová cena je větší nebo rovna průměrné katalogové ceně vrácené poddotazem:
poddotaz na SQL Server se používá s EXISTUJE nebo NE EXISTUJE
Následující text ilustruje syntaxi poddotazu zavedeného operátorem EXISTS
:
Code language: SQL (Structured Query Language) (sql)
Operátor EXISTS
vrací TRUE
, pokud výsledky vrací poddotaz; jinak vrátí FALSE
.
Na druhou stranu je NOT EXISTS
naproti EXISTS
operátor.
Následující dotaz vyhledá zákazníky, kteří si koupili produkty v roce 2017:
Pokud místo EXISTS
div použijete NOT EXISTS
>, najdete zákazníky, kteří si v roce 2017 nezakoupili žádné produkty.
Poddotaz na SQL Server v klauzuli FROM
Předpokládejme, že chcete najít průměr součtu objednávek všech prodejních pracovníků. Chcete-li to provést, můžete nejprve zjistit počet objednávek od zaměstnanců:
Potom můžete na tuto sadu výsledků použít funkci AVG()
. Protože dotaz vrací sadu výsledků, která vypadá jako virtuální tabulka, můžete celý dotaz umístit do klauzule FROM
jiného dotazu, jako je tento:
Dotaz, který umístíte do FROM
musí mít alias tabulky. V tomto příkladu jsme použili t jako alias tabulky pro poddotaz. Chcete-li přijít s konečným výsledkem, provede SQL Server následující kroky:
- Proveďte poddotaz v klauzuli
FROM
. - Použijte výsledek poddotazu a proveďte vnější dotaz.
V tomto kurzu jste se dozvěděli o konceptu poddotazu na serveru SQL Server a o tom, jak používat různé typy poddotazů k dotazování na data.