Skip to main Content

T-SQL Basics: Anatomy of the Select Statement

Global Knowledge
  • Date: 19 September, 2011

Relational databases are important not only because of the information they store but, more importantly, for the data we retrieve from them. The select statement allows us to ask the database a question. It’s the way we retrieve information from the database system.

There are two standards that govern SQL (Structured Query Language) — ANSI (American National Standards Institute) and ISO (International Standards Organization). Microsoft SQL Server supports both of these standards. Like other database products, Microsoft SQL Server has its own dialect of SQL. This dialect for SQL Server is called T-SQL or Transact-SQL.

The basics of the select statement are the same from one database to another. However, some options of the statement vary from product to product. We’ll specifically examine SQL Server’s select statement, although it is virtually identical to other select statements.

SQL Server is one of many relational database systems. Relational databases store information in a series of tables (rows and columns) that are “related” to each other.

Let’s say we have a customer database. This database has a few different sub-topics — or entities like customer, order, vendor, product, and employee. Entities can be translated to the topic of the table. We’ll only work with a single table to keep our examples very simple.

Our table has the following structure and records (rows):

CUSTOMER


























































CustomerIDLastNameFirstNameAddressCityStateZip
1000AdamsSusan101 Main StreetCaryNC27513
1001JohnsonJoAnne5402 Loop 1AustinTX78752
1002SmithRon2201 Thomas DrPanama CityFL32401
1003BakerPete2408 NW 119thOklahoma CityOK73120
1004SmithBill4407 12th AvenueAustinTX78746

Let’s begin by discussing the parts of the select statement. Then we will select information from one table only.

The select statement is comprised of multiple clauses. These are:

SELECT
FROM
WHERE
GROUP BY
ORDER BY
HAVING

Each of these clauses has information that follows it. These are:

SELECT column(s)
FROM table / view
WHERE condition / expression
GROUP BY column(s)
ORDER BY column(s)
HAVING aggregate function and condition / expression

The only two clauses that are required in a select statement are SELECT and FROM.

The SELECT clause identifies which columns we want to retrieve, and the FROM clause identifies the name of the table we are using. We might have something like this:

Select lastname, firstname
from customer

This gives us the output:




























LastNameFirstName
AdamsSusan
JohnsonJoAnne
SmithRon
BakerPete
SmithBill

Notice that the headings above the column data are not title case as they are in the table. This is because my query had them listed as lower case. Our select statement indicates exactly what we want to see in the output.

Now we’ll review the optional clauses.

WHERE

The WHERE clause is a filter for the query results and uses a condition or expression. We use the WHERE clause to specify our request for only particular rows.

If I want to retrieve only those individuals with the last name of Smith then I can add a WHERE clause.

Select lastname, firstname
from customer
where lastname = ‘Smith’

This gives us the output:































CustomerIDLastNameFirstNameAddressCityStateZip
1002SmithRon2201 Thomas DrPanama CityFL32401
1004SmithBill4407 12th AvenueAustinTX78746

GROUP BY

The purpose of the GROUP BY clause is to group or cluster records together based on a column or list of columns. In our example, I also use an aggregate function that counts the number of rows specifying our criteria. I also created an alias for the heading of the column with the function.

Select State, count(state) as ‘Count of Customers by State’
from customer
group by state

This gives us the output:
























StateCount of Customers by State
FL1
NC1
OK1
TX2

HAVING

The HAVING clause works in conjunction with the GROUP BY clause. It’s very much like the WHERE clause since it works as a filter. However, it works as a filter on the aggregate group.

Select State, count(state) as ‘Count of Customers Greater Than 1’
from customer
group by state
having count(state) > 1

This gives us the output:












StateCount of Customers Greater Than 1
TX2

ORDER BY

The ORDER BY clause indicates the sort order for the query results.

If I want to put my results in alphabetical order by lastname, I can add an ORDER BY clause.

Select lastname, firstname
from customer
order by lastname

This gives us the output:




























LastNameFirstName
AdamsSusan
BakerPete
JohnsonJoAnne
SmithRon
SmithBill

Notice that Ron Smith appears before Bill Smith in our example even though “Bill” comes before “Ron” alphabetically. This is because I didn’t order by firstname, only by lastname. To correct this, I can do the following.

Select lastname, firstname
from customer
order by lastname, firstname

This gives us the output:




























LastNameFirstName
AdamsSusan
BakerPete
JohnsonJoAnne
SmithBill
SmithRon

We saw the basics of selecting data from a single table. Look for Part II where we’ll explore querying from multiple tables.

 

Related Courses
Writing Queries Using Microsoft SQL Server 2008 Transact-SQL
SQL Server 2008 R2 for Administration
Designing and Implementing a SQL Server 2008 R2 Database