This topic provides examples of using the SELECT statement.
The following example shows three code examples. This first code example returns all rows (no WHERE clause is specified) and all columns (using the *
) from the Product
table in the **AdventureWorks2012** database.
[!code-sqlSelect#SelectExamples1]
This example returns all rows (no WHERE clause is specified), and only a subset of the columns (Name
, ProductNumber
, ListPrice
) from the Product
table in the **AdventureWorks2012** database. Additionally, a column heading is added.
[!code-sqlSelect#SelectExamples2]
This example returns only the rows for Product
that have a product line of R
and that have days to manufacture that is less than 4
.
[!code-sqlSelect#SelectExamples3]
The following examples return all rows from the Product
table. The first example returns total sales and the discounts for each product. In the second example, the total revenue is calculated for each product.
[!code-sqlSelect#SelectExamples4]
This is the query that calculates the revenue for each product in each sales order.
[!code-sqlSelect#SelectExamples5]
The following example uses DISTINCT
to prevent the retrieval of duplicate titles.
[!code-sqlSelect#SelectExamples6]
The following first example creates a temporary table named #Bicycles
in tempdb
.
[!code-sqlSelect#SelectExamples7]
This second example creates the permanent table NewProducts
.
[!code-sqlSelect#SelectExamples8]
The following example shows queries that are semantically equivalent and illustrates the difference between using the EXISTS
keyword and the IN
keyword. Both are examples of a valid subquery that retrieves one instance of each product name for which the product model is a long sleeve logo jersey, and the ProductModelID
numbers match between the Product
and ProductModel
tables.
[!code-sqlSelect#SelectExamples9]
The following example uses IN
in a correlated, or repeating, subquery. This is a query that depends on the outer query for its values. The query is executed repeatedly, one time for each row that may be selected by the outer query. This query retrieves one instance of the first and last name of each employee for which the bonus in the SalesPerson
table is 5000.00
and for which the employee identification numbers match in the Employee
and SalesPerson
tables.
[!code-sqlSelect#SelectExamples10]
The previous subquery in this statement cannot be evaluated independently of the outer query. It requires a value for Employee.EmployeeID
, but this value changes as the SQL Server Database Engine examines different rows in Employee
.
A correlated subquery can also be used in the HAVING
clause of an outer query. This example finds the product models for which the maximum list price is more than twice the average for the model.
[!code-sqlSelect#SelectExamples11]
This example uses two correlated subqueries to find the names of employees who have sold a particular product.
[!code-sqlSelect#SelectExamples12]
The following example finds the total of each sales order in the database.
[!code-sqlSelect#SelectExamples13]
Because of the GROUP BY
clause, only one row containing the sum of all sales is returned for each sales order.
The following example finds the average price and the sum of year-to-date sales, grouped by product ID and special offer ID.
[!code-sqlSelect#SelectExamples14]
The following example puts the results into groups after retrieving only the rows with list prices greater than $1000
.
[!code-sqlSelect#SelectExamples15]
The following example groups by an expression. You can group by an expression if the expression does not include aggregate functions.
[!code-sqlSelect#SelectExamples16]
The following example finds the average price of each type of product and orders the results by average price.
[!code-sqlSelect#SelectExamples18]
The first example that follows shows a HAVING
clause with an aggregate function. It groups the rows in the SalesOrderDetail
table by product ID and eliminates products whose average order quantities are five or less. The second example shows a HAVING
clause without aggregate functions.
[!code-sqlSelect#SelectExamples19]
This query uses the LIKE
clause in the HAVING
clause.
USE AdventureWorks2012 ;
GO
SELECT SalesOrderID, CarrierTrackingNumber
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID, CarrierTrackingNumber
HAVING CarrierTrackingNumber LIKE '4BD%'
ORDER BY SalesOrderID ;
GO
The following example shows using GROUP BY
, HAVING
, WHERE
, and ORDER BY
clauses in one SELECT
statement. It produces groups and summary values but does so after eliminating the products with prices over $25 and average order quantities under 5. It also organizes the results by ProductID
.
[!code-sqlSelect#SelectExamples21]
The following example groups the SalesOrderDetail
table by product ID and includes only those groups of products that have orders totaling more than $1000000.00
and whose average order quantities are less than 3
.
[!code-sqlSelect#SelectExamples22]
To see the products that have had total sales greater than $2000000.00
, use this query:
[!code-sqlSelect#SelectExamples23]
If you want to make sure there are at least one thousand five hundred items involved in the calculations for each product, use HAVING COUNT(*) > 1500
to eliminate the products that return totals for fewer than 1500
items sold. The query looks like this:
[!code-sqlSelect#SelectExamples24]
The following example shows two ways to use the INDEX
optimizer hint. The first example shows how to force the optimizer to use a nonclustered index to retrieve rows from a table, and the second example forces a table scan by using an index of 0.
[!code-sqlSelect#SelectExamples45]
The following example shows how the OPTION (GROUP)
clause is used with a GROUP BY
clause.
[!code-sqlSelect#SelectExamples46]
The following example uses the MERGE UNION
query hint.
[!code-sqlSelect#SelectExamples47]
In the following example, the result set includes the contents of the ProductModelID
and Name
columns of both the ProductModel
and Gloves
tables.
[!code-sqlSelect#SelectExamples48]
In the following example, the INTO
clause in the second SELECT
statement specifies that the table named ProductResults
holds the final result set of the union of the designated columns of the ProductModel
and Gloves
tables. Note that the Gloves
table is created in the first SELECT
statement.
[!code-sqlSelect#SelectExamples49]
The order of certain parameters used with the UNION clause is important. The following example shows the incorrect and correct use of UNION
in two SELECT
statements in which a column is to be renamed in the output.
[!code-sqlSelect#SelectExamples50]
The following examples use UNION
to combine the results of three tables that all have the same 5 rows of data. The first example uses UNION ALL
to show the duplicated records, and returns all 15 rows. The second example uses UNION
without ALL
to eliminate the duplicate rows from the combined results of the three SELECT
statements, and returns 5 rows.
The third example uses ALL
with the first UNION
and parentheses enclose the second UNION
that is not using ALL
. The second UNION
is processed first because it is in parentheses, and returns 5 rows because the ALL
option is not used and the duplicates are removed. These 5 rows are combined with the results of the first SELECT
by using the UNION ALL
keywords. This does not remove the duplicates between the two sets of 5 rows. The final result has 10 rows.
[!code-sqlSelect#SelectExamples51]
CREATE TRIGGER (Transact-SQL)
CREATE VIEW (Transact-SQL)
DELETE (Transact-SQL)
EXECUTE (Transact-SQL)
Expressions (Transact-SQL)
INSERT (Transact-SQL)
LIKE (Transact-SQL)
UNION (Transact-SQL)
EXCEPT and INTERSECT (Transact-SQL)
UPDATE (Transact-SQL)
WHERE (Transact-SQL)
PathName (Transact-SQL)
INTO Clause (Transact-SQL)