Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Tento článek obsahuje příklady použití příkazu SELECT .
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Použití příkazu SELECT k načtení řádků a sloupců
Následující příklad ukazuje tři příklady kódu. Tento první příklad kódu vrátí všechny řádky (není zadána klauzule WHERE) a všechny sloupce (pomocí *) z Product tabulky v AdventureWorks2025 databázi.
USE AdventureWorks2022;
GO
SELECT *
FROM Production.Product
ORDER BY Name ASC;
-- Alternate way.
USE AdventureWorks2022;
GO
SELECT p.*
FROM Production.Product AS p
ORDER BY Name ASC;
GO
Tento příklad vrátí všechny řádky (není zadána klauzule WHERE) a pouze podmnožinu sloupců (Name, ProductNumber, ListPrice) z Product tabulky v AdventureWorks2025 databázi. Kromě toho se přidá záhlaví sloupce.
USE AdventureWorks2022;
GO
SELECT Name,
ProductNumber,
ListPrice AS Price
FROM Production.Product
ORDER BY Name ASC;
GO
Tento příklad vrátí pouze řádky pro Product produktovou řadu R a které mají dny k výrobě, které jsou menší než 4.
USE AdventureWorks2022;
GO
SELECT Name,
ProductNumber,
ListPrice AS Price
FROM Production.Product
WHERE ProductLine = 'R'
AND DaysToManufacture < 4
ORDER BY Name ASC;
GO
B. Použití příkazu SELECT s záhlavími sloupců a výpočty
Následující příklady vrátí všechny řádky z Product tabulky. První příklad vrátí celkové prodeje a slevy pro každý produkt. Ve druhém příkladu se celkové výnosy počítají pro každý produkt.
USE AdventureWorks2022;
GO
SELECT p.Name AS ProductName,
NonDiscountSales = (OrderQty * UnitPrice),
Discounts = ((OrderQty * UnitPrice) * UnitPriceDiscount)
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY ProductName DESC;
GO
Toto je dotaz, který vypočítá výnosy pro každý produkt v každé prodejní objednávce.
USE AdventureWorks2022;
GO
SELECT 'Total income is',
((OrderQty * UnitPrice) * (1.0 - UnitPriceDiscount)),
' for ',
p.Name AS ProductName
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY ProductName ASC;
GO
C. Použití FUNKCE DISTINCT s select
Následující příklad používá DISTINCT k zabránění načtení duplicitních názvů.
USE AdventureWorks2022;
GO
SELECT DISTINCT JobTitle
FROM HumanResources.Employee
ORDER BY JobTitle;
GO
D. Vytváření tabulek pomocí příkazu SELECT INTO
Následující první příklad vytvoří dočasnou tabulku pojmenovanou #Bicycles v tempdb.
USE tempdb;
GO
IF OBJECT_ID(N'#Bicycles', N'U') IS NOT NULL
DROP TABLE #Bicycles;
GO
SELECT *
INTO #Bicycles
FROM AdventureWorks2022.Production.Product
WHERE ProductNumber LIKE 'BK%';
GO
Tento druhý příklad vytvoří trvalou tabulku NewProducts.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.NewProducts', 'U') IS NOT NULL
DROP TABLE dbo.NewProducts;
GO
ALTER DATABASE AdventureWorks2022 SET RECOVERY BULK_LOGGED;
GO
SELECT *
INTO dbo.NewProducts
FROM Production.Product
WHERE ListPrice > $25
AND ListPrice < $100;
GO
ALTER DATABASE AdventureWorks2022 SET RECOVERY FULL;
GO
E. Použití korelovaných poddotazů
Korelovaný poddotaz je dotaz, který závisí na vnějším dotazu pro jeho hodnoty. Tento dotaz lze opakovaně spustit, jednou pro každý řádek, který může být vybrán vnějším dotazem.
První příklad ukazuje dotazy, které jsou sémanticky ekvivalentní k ilustraci rozdílu mezi použitím klíčového EXISTS slova a klíčového IN slova. Oba jsou příklady platného poddotazu, který načte jednu instanci každého názvu produktu, pro který je modelem produktu dlouhý rukáv s logem jersey, a ProductModelID čísla se shodují mezi Product tabulkami a ProductModel tabulkami.
USE AdventureWorks2022;
GO
SELECT DISTINCT Name
FROM Production.Product AS p
WHERE EXISTS (
SELECT *
FROM Production.ProductModel AS pm
WHERE p.ProductModelID = pm.ProductModelID
AND pm.Name LIKE 'Long-Sleeve Logo Jersey%'
);
GO
-- OR
USE AdventureWorks2022;
GO
SELECT DISTINCT Name
FROM Production.Product
WHERE ProductModelID IN (
SELECT ProductModelID
FROM Production.ProductModel AS pm
WHERE p.ProductModelID = pm.ProductModelID
AND Name LIKE 'Long-Sleeve Logo Jersey%'
);
GO
V dalším příkladu se používá IN a načte jedna instance křestního jména a rodinného jména každého zaměstnance, pro kterého je SalesPersonbonus v 5000.00 tabulce , a pro který se identifikační čísla zaměstnanců shodují v tabulkách Employee a SalesPerson tabulkách.
USE AdventureWorks2022;
GO
SELECT DISTINCT p.LastName,
p.FirstName
FROM Person.Person AS p
INNER JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = p.BusinessEntityID
WHERE 5000.00 IN (
SELECT Bonus
FROM Sales.SalesPerson AS sp
WHERE e.BusinessEntityID = sp.BusinessEntityID
);
GO
Předchozí poddotaz v tomto příkazu nelze vyhodnotit nezávisle na vnějším dotazu. Vyžaduje hodnotu pro Employee.EmployeeID, ale tato hodnota se změní, protože databázový stroj SQL Server zkoumá různé řádky v Employee.
Korelovaný poddotaz lze použít také v HAVING klauzuli vnějšího dotazu. Tento příklad najde modely produktů, pro které je maximální ceníková cena vyšší než dvojnásobek průměru modelu.
USE AdventureWorks2022;
GO
SELECT p1.ProductModelID
FROM Production.Product AS p1
GROUP BY p1.ProductModelID
HAVING MAX(p1.ListPrice) >= (
SELECT AVG(p2.ListPrice) * 2
FROM Production.Product AS p2
WHERE p1.ProductModelID = p2.ProductModelID
);
GO
Tento příklad používá dva korelované poddotazy k vyhledání jmen zaměstnanců, kteří prodali konkrétní produkt.
USE AdventureWorks2022;
GO
SELECT DISTINCT pp.LastName,
pp.FirstName
FROM Person.Person pp
INNER JOIN HumanResources.Employee e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE pp.BusinessEntityID IN (
SELECT SalesPersonID
FROM Sales.SalesOrderHeader
WHERE SalesOrderID IN (
SELECT SalesOrderID
FROM Sales.SalesOrderDetail
WHERE ProductID IN (
SELECT ProductID
FROM Production.Product p
WHERE ProductNumber = 'BK-M68B-42'
)
)
);
GO
F. Použití FUNKCE GROUP BY
Následující příklad najde celkový součet každé prodejní objednávky v databázi.
USE AdventureWorks2022;
GO
SELECT SalesOrderID,
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
GO
GROUP BY Z důvodu klauzule se pro každou prodejní objednávku vrátí jenom jeden řádek obsahující součet všech prodejů.
G. Použití GROUP BY s více skupinami
Následující příklad najde průměrnou cenu a součet prodejů od roku do data, seskupených podle ID produktu a ID speciální nabídky.
USE AdventureWorks2022;
GO
SELECT ProductID,
SpecialOfferID,
AVG(UnitPrice) AS [Average Price],
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY ProductID,
SpecialOfferID
ORDER BY ProductID;
GO
H. Použití FUNKCE GROUP BY a WHERE
Následující příklad vloží výsledky do skupin po načtení pouze řádků s cenami seznamu větší než $1000.
USE AdventureWorks2022;
GO
SELECT ProductModelID,
AVG(ListPrice) AS [Average List Price]
FROM Production.Product
WHERE ListPrice > $1000
GROUP BY ProductModelID
ORDER BY ProductModelID;
GO
I. Použití FUNKCE GROUP BY s výrazem
Následující příklad seskupí podle výrazu. Pokud výraz neobsahuje agregační funkce, můžete ho seskupit podle výrazu.
USE AdventureWorks2022;
GO
SELECT AVG(OrderQty) AS [Average Quantity],
NonDiscountSales = (OrderQty * UnitPrice)
FROM Sales.SalesOrderDetail
GROUP BY (OrderQty * UnitPrice)
ORDER BY (OrderQty * UnitPrice) DESC;
GO
J. Použití GROUP BY s ORDER BY
Následující příklad najde průměrnou cenu každého typu produktu a objednává výsledky podle průměrné ceny.
USE AdventureWorks2022;
GO
SELECT ProductID,
AVG(UnitPrice) AS [Average Price]
FROM Sales.SalesOrderDetail
WHERE OrderQty > 10
GROUP BY ProductID
ORDER BY AVG(UnitPrice);
GO
K. Použití klauzule HAVING
První příklad, který následuje, ukazuje HAVING klauzuli s agregační funkcí. Seskupuje řádky v SalesOrderDetail tabulce podle ID produktu a eliminuje produkty, jejichž průměrné množství objednávek je pět nebo méně. Druhý příklad ukazuje klauzuli HAVING bez agregačních funkcí.
USE AdventureWorks2022;
GO
SELECT ProductID
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING AVG(OrderQty) > 5
ORDER BY ProductID;
GO
Tento dotaz používá klauzuli LIKE v klauzuli HAVING .
USE AdventureWorks2022;
GO
SELECT SalesOrderID, CarrierTrackingNumber
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID, CarrierTrackingNumber
HAVING CarrierTrackingNumber LIKE '4BD%'
ORDER BY SalesOrderID ;
GO
L. Použití FUNKCE HAVING a GROUP BY
Následující příklad ukazuje použití GROUP BY, , HAVINGWHEREa ORDER BY klauzule v jednom SELECT příkazu. Vytváří skupiny a souhrnné hodnoty, ale dělá to po odstranění produktů s cenami nad 25 USD a průměrným množstvím objednávek pod 5. Také uspořádá výsledky podle ProductID.
USE AdventureWorks2022;
GO
SELECT ProductID
FROM Sales.SalesOrderDetail
WHERE UnitPrice < 25.00
GROUP BY ProductID
HAVING AVG(OrderQty) > 5
ORDER BY ProductID;
GO
M. Použití funkce HAVING s funkcí SUMa a AVG
Následující příklad seskupí SalesOrderDetail tabulku podle ID produktu a obsahuje pouze skupiny produktů, které mají objednávky celkem více než $1000000.00 a jejichž průměrné množství objednávek jsou menší než 3.
USE AdventureWorks2022;
GO
SELECT ProductID,
AVG(OrderQty) AS AverageQuantity,
SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > $1000000.00
AND AVG(OrderQty) < 3;
GO
Pokud chcete zobrazit produkty s celkovým prodejem větším než $2000000.00, použijte tento dotaz:
USE AdventureWorks2022;
GO
SELECT ProductID, Total = SUM(LineTotal)
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > $2000000.00;
GO
Pokud chcete zajistit, aby výpočty jednotlivých produktů zahrnovaly alespoň 1 500 položek, odstraňte HAVING COUNT(*) > 1500 produkty, které vracejí celkové hodnoty za méně než 1500 prodané položky. Dotaz vypadá takto:
USE AdventureWorks2022;
GO
SELECT ProductID, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING COUNT(*) > 1500;
GO
N. Použití nápovědy optimalizátoru INDEX
Následující příklad ukazuje dva způsoby použití nápovědy optimalizátoru INDEX . První příklad ukazuje, jak vynutit optimalizátor použití neclusterovaného indexu k načtení řádků z tabulky. Druhý příklad vynutí prohledávání tabulky pomocí indexu 0.
USE AdventureWorks2022;
GO
SELECT pp.FirstName,
pp.LastName,
e.NationalIDNumber
FROM HumanResources.Employee AS e WITH (INDEX (AK_Employee_NationalIDNumber))
INNER JOIN Person.Person AS pp
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
-- Force a table scan by using INDEX = 0.
USE AdventureWorks2022;
GO
SELECT pp.LastName,
pp.FirstName,
e.JobTitle
FROM HumanResources.Employee AS e WITH (INDEX = 0)
INNER JOIN Person.Person AS pp
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
M. Použití OPTION a tipů skupiny
Následující příklad ukazuje, jak OPTION (GROUP) se klauzule používá s klauzulí GROUP BY .
USE AdventureWorks2022;
GO
SELECT ProductID, OrderQty, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
GROUP BY ProductID, OrderQty
ORDER BY ProductID, OrderQty
OPTION (HASH GROUP, FAST 10);
GO
O. Použití nápovědy k dotazu UNION
Následující příklad používá nápovědu MERGE UNION k dotazu.
USE AdventureWorks2022;
GO
SELECT BusinessEntityID,
JobTitle,
HireDate,
VacationHours,
SickLeaveHours
FROM HumanResources.Employee AS e1
UNION
SELECT BusinessEntityID,
JobTitle,
HireDate,
VacationHours,
SickLeaveHours
FROM HumanResources.Employee AS e2
OPTION (MERGE UNION);
GO
P. Použití UNION
V následujícím příkladu sada výsledků obsahuje obsah ProductModelID a Name sloupce tabulek ProductModel i Gloves tabulek.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
-- Create Gloves table.
SELECT ProductModelID, Name
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO
-- Here is the simple union.
USE AdventureWorks2022;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO
Q. Použití příkazu SELECT INTO se sjednocením
V následujícím příkladu INTO klauzule ve druhém SELECT příkazu určuje, že tabulka s názvem ProductResults obsahuje konečnou sadu výsledků sjednocení určených sloupců ProductModel a Gloves tabulek. Tabulka Gloves se vytvoří v prvním SELECT příkazu.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.ProductResults', 'U') IS NOT NULL
DROP TABLE dbo.ProductResults;
GO
IF OBJECT_ID('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
-- Create Gloves table.
SELECT ProductModelID, Name
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO
USE AdventureWorks2022;
GO
SELECT ProductModelID, Name
INTO dbo.ProductResults
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves;
GO
SELECT ProductModelID, Name
FROM dbo.ProductResults;
R. Použití union dvou příkazů SELECT s ORDER BY
Pořadí určitých parametrů použitých s klauzulí UNION je důležité. Následující příklad ukazuje nesprávné a správné použití UNION ve dvou SELECT příkazech, ve kterých má být sloupec přejmenován ve výstupu.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
-- Create Gloves table.
SELECT ProductModelID, Name
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO
/* INCORRECT */
USE AdventureWorks2022;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
ORDER BY Name
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves;
GO
/* CORRECT */
USE AdventureWorks2022;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO
S. Použití funkce UNION tří příkazů SELECT k zobrazení účinků ALL a závorek
Následující příklady slouží UNION ke kombinování výsledků tří tabulek, které mají stejných pět řádků dat. První příklad používá UNION ALL k zobrazení duplicitních záznamů a vrátí všech 15 řádků. Druhý příklad používá UNION bez ALL odstranění duplicitních řádků z kombinovaných výsledků tří SELECT příkazů a vrátí pět řádků.
Třetí příklad používá ALL první UNION a závorky uzavře druhou UNION , která nepoužívá ALL. Druhá UNION se zpracuje jako první, protože je v závorkách, a vrátí pět řádků, protože ALL se tato možnost nepoužívá a duplicity se odeberou. Těchto pět řádků se zkombinuje s výsledky prvního SELECT pomocí UNION ALL klíčových slov. Tento příklad neodebere duplicity mezi dvěma sadami pěti řádků. Konečný výsledek má 10 řádků.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.EmployeeOne', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeOne;
GO
IF OBJECT_ID('dbo.EmployeeTwo', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeTwo;
GO
IF OBJECT_ID('dbo.EmployeeThree', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeThree;
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
INTO dbo.EmployeeOne
FROM Person.Person AS pp
INNER JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
INTO dbo.EmployeeTwo
FROM Person.Person AS pp
INNER JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
INTO dbo.EmployeeThree
FROM Person.Person AS pp
INNER JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
-- Union ALL
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeOne
UNION ALL
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeTwo
UNION ALL
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeThree;
GO
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeOne
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeTwo
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeThree;
GO
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeOne
UNION ALL
(
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeTwo
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeThree
);
GO
Související obsah
- VYTVOŘIT SPOUŠŤ (Transact-SQL)
- VYTVOŘIT ZOBRAZENÍ (Transact-SQL)
- DELETE (Transact-SQL)
- EXECUTE (Transact-SQL)
- Výrazy (Transact-SQL)
- INSERT (Transact-SQL)
- JAKO (Transact-SQL)
- Operátory sady – UNION (Transact-SQL)
- Množinové operátory – EXCEPT a INTERSECT (Transact-SQL)
- AKTUALIZACE (Transact-SQL)
- WHERE (Transact-SQL)
- PathName (Transact-SQL)
- SELECT - INTO – klauzule (Transact-SQL)