Home > Articles > Data > SQL Server

This chapter is from the book


An expression is a combination of operands and operators, which evaluates to a scalar:

  • Scalar: a single data value such as number 13, date '1 Jan 2003' or string 'Jim Doe'

  • Operand: a constant (literal), column name, variable, scalar function subquery whose result set is a scalar value

  • Operator: any legal operator symbol allowed by the data type of the operand(s)

An expression generally assumes the data type of its component operands except that operands combined using comparison or logical operators result in a value of Boolean data type.

String, numeric and date expressions may usually be used anywhere a scalar value of their data type is required in INSERT, UPDATE, DELETE and SELECT statements. (See the SELECT example below.)

Boolean (logical) expressions may appear where a <search_condition> is specified as in a WHERE clause of UPDATE, DELETE or SELECT statements. They may evaluate to TRUE, FALSE or NULL (unknown). A Boolean expression may also be used in an IF or WHILE construct.


expression ::= operand | ( expression ) | unary_operator expression
               | expression binary_operator expression
operand ::= constant | [table_alias.]column_name | variable | scalar_function
               | ( scalar_subquery )
unary_operator ::= operator that operates on one expression: operator expression
               E.g., unary minus, -, as with ( - 6 ).
binary_operator ::= operator that operates on two expressions: expr operator expr.
               E.g., binary minus, -, as with ( 12 - 6 ).

For complete syntax see Books Online, Index: expressions, overview.

Example: Examples of string expressions:

  • ename

  • 'Mary Smith'

  • first_name || ' ' || last_name

Examples of numeric expressions:

  • salary

  • 123.45

  • 22 + 33

  • (salary + 22) * 1.2

  • AVG(salary)

  • 1.5 * AVG(salary)

Example of Boolean (logical) expressions:

qty > 45 -- evaluates to TRUE, FALSE or NULL (unknown, as if qty is NULL)

Example of subquery expression:

A subquery is a SELECT statement enclosed in parenthesis used inside another DML statement. See page 554 for more detail on subqueries.

  • The bold text in the following statement is a subquery expression

    • SELECT * FROM titles

      • WHERE price >=

      • ( SELECT AVG(price) FROM titles WHERE type = 'business')

Example of numeric, string and date expressions in SELECT list


SELECT   'Hello', 1 ,  (SELECT 1) + 2 ,   GETDATE()


-------            -----------       -----------       ------------------------------------
Hello              1                 3                 2001-05-11 16:28:27.140

Example of Boolean expression in WHERE clause <search condition>


SELECT ord_num, qty  FROM sales WHERE qty > 45


ord_num               qty
---------------       ------
A2976                 50
QA7442.3              75

2.3.1 Operators

An operator is a symbol specifying an action that is performed on one or more expressions. Microsoft SQL Server 2000 uses the following operator categories.

  • Arithmetic operators: all numeric data types

  • Assignment operators: all data types

  • Bitwise operators: all integer data types plus binary and varbinary data types

  • Comparison operators: all data types except text, ntext or image

  • Logical operators: operand data type depends on operator

  • String concatenation operators: character or binary string data types

  • Unary operators : all numeric data types

When two expressions of different compatible data types are combined by a binary operator the expression of lower precedence is implicitly converted to the data type of higher precedence, the operation is performed and the resulting value is of the higher precedence data type. See Data Type Precedence List on page 74. Arithmetic Operators

The arithmetic operators, as shown in Table 2-3, may be used with any of the numeric types. Addition and subtraction also work with datetime and smalldate-time for adding or subtracting a number of days.

Table 2-3. Arithmetic Operators



Subtraction and unary negation






Module (Remainder)

( )



Both symbols + and are unary and binary operators.

The symbol / returns the data type with the higher precedence as usual. So if both dividend (top) and divisor are integer types, the result is truncated (not rounded) to an integer.

The symbol % is modulo or remainder and returns the integer remainder of the division. Both operands must be integer data types. So 1%3 is 1 and 4%3 is also 1 as is 7%3.


1 + 2

4 / 2

( 2.5 + 3 ) * 2 Relational Operators

These relational operators, shown in Table 2-4, may be used with string, numeric or date values.

Table 2-4. Relational Operators


equal to


not equal to


less than


less than or equal to


greater than


greater than or equal to Assignment Operator: =

There is one assignment operator, equal sign (=), used primarily with local variables.



                  SET  @MyInt = 123  -- Assignment Operation
                  PRINT @MyInt


123 Bitwise Operators

Bitwise operators work on all integer data types and bit data types. (See Transact-SQL Data Type Hierarchy, page 74.)

Binary and varbinary data types may be one operand if an integer type is the other operand. Table 2-5 shows the necessary symbols for this use.

Table 2-5. Bitwise Operators

Bitwise AND

Bitwise OR

Bitwise EOR






PRINT 1 | 2


3 Comparison Operators

Comparison operators, shown in Table 2-6, also called relational operators, work on all data types except text, ntext or image.

Table 2-6. Comparison Operators

Equal To

Greater Than

Less Than

Greater or Equal To

Less Than or Equal To

Not Equal To

Not Less Than

Not Greater Than









The result of a comparison is of Boolean type with three possible values: TRUE, FALSE or NULL (unknown). Boolean type may not be used as column or variable data types.

Comparisons are most often used in a WHERE clause or an IF statement.



SELECT price FROM titles WHERE price > 21


21.59 Logical Operators and Boolean Predicates

Logical operations test the truth of some condition and return a Boolean value: TRUE, FALSE or NULL (unknown). Acceptable operand data types of logical operations depend on the operator.

Books Online lists all of the entries in Table 2-7 as logical operators. They can all appear in a WHERE clause as a Boolean <search condition>.

Table 2-7. Logical Operators










The first three are the well-known logical operators from classical Boolean algebra. A significant difference of SQL Boolean logic from classical Boolean logic is the effect that NULL has in creating three-way logic (TRUE, FALSE, NULL).

Using NULL in SQL Boolean Logic

The ANSI SQL-99 Standard4 says the following about NULL.

Although the null value is neither equal to any other value nor not equal to any other value — it is unknown whether or not it is equal to any given value

So NULL can be read as UNKNOWN in SQL Boolean logic expressions.

In evaluating a WHERE clause as in a SELECT, UPDATE or DELETE statement,

WHERE <search_condition>

the <search_condition> is a Boolean predicate which evaluates to TRUE, FALSE or NULL. Only those rows that are known to be true are selected to be in the result set. So any row for which the WHERE predicate evaluates to FALSE (known to be FALSE) or NULL (unknown) will not be retained. See WHERE clause syntax page 478. The same is true when applied to the HAVING clause of a SELECT statement.

Example: Consider the rows in Table 2-8 of the titles table in the pubs database.

Table 2-8. Rows from Titles Table











Which of these rows will be returned by the following SELECT statement on that table?


SELECT  title_id, price
                  FROM   pubs.dbo.titles
                  WHERE price > 22

Of these rows only the first row is returned since, for the other two rows, the predicate evaluates to FALSE and NULL (unknown) respectively.


title_id         price
--------         ---------------------
PC1035           22.9500


The correct way to find all rows for which a column value is NULL is to use the IS NULL predicate.


SELECT  title_id, price
               FROM    pubs.dbo.titles
               WHERE  price IS NULL

This returns only PC9999 from the previous table.


title_id         price
--------         ---------------------
PC9999           NULL


The correct way to find all rows for which a column value is not NULL is to use the IS NOT NULL predicate or to negate the IS NULL predicate by preceding it with NOT.


SELECT  title_id, price
               FROM     pubs.dbo.titles
               WHERE  price IS NOT NULL   -- Or: WHERE  NOT price
                  graphics/ccc.gif  IS NULL

Either form returns both of the first two rows from the previous table.


Never use "columnname = NULL" or "columnname <> NULL" to find rows with NULL or non-NULL values. These forms are syntactically correct but logically of no value since they always return zero rows. Always use IS NULL.

Despite this caution, the = as an assignment operator is used in UPDATE to change a column value to NULL.

Updating a Value to NULL

A value may be set to NULL using the form UPDATE tablename SET columnname = NULL

Example: Change the price to NULL for title_id MC3021.


UPDATE   pubs.dbo.titles
                  SET price = NULL
                  WHERE title_id = 'MC3021'

Compound Predicates using AND, OR and NOT with NULL

The WHERE or HAVING predicate of a SELECT statement may include compound conditions using AND and OR operators.

Example: Consider the SELECT statement in Figure 2-1.

02fig01.gifFigure 2-1. Selected Statement.

When executed, the WHERE predicate is evaluated on each row in the table and only if both A and B are known to be TRUE then the row is included in the result set. So any row where price or pub_id is NULL will not appear in the final result set.

Tables 2-9, 2-10 and 2-11 are truth tables for AND, OR and NOT.

Table 2-9. Truth Table for A AND B























Hint: Read NULL as UNKNOWN

Table 2-10. Truth Table for A OR B























Table 2-11. Truth Table for NOT A









ANY and SOME are equivalent and may be used interchangeably.


scalar_expression { = | < > | ! = | > | > = | ! > | < | < = | ! < }
               { ANY | SOME } ( subquery )



This is any valid Microsoft SQL Server expression.

{ = | <> | != | > | >= | !> | < | <= | !< }

This is any valid comparison operator.


This is a SELECT statement that has a result set of one column. The data type of the column returned must be the same data type as scalar_expression.


Type: Boolean

ANY/SOME returns TRUE if the comparison specified is TRUE for ANY pair (scalar_expression, x) where x is a value in the single-column set. Otherwise, ANY/SOME returns FALSE.

Example: List all publishers' names that have a title in the titles table.


USE  pubs      --  Move to the pubs database
                  SELECT pub_id, pub_name FROM publishers
                  WHERE pub_id = ANY ( SELECT pub_id FROM titles )


pub_id          pub_name
------          -------------------------------
0736            New Moon Books
0877            Binnet & Hardley
1389            Algodata Infosystems

This same result can be obtained by using the IN and EXISTS operators (explained on the following pages) or by doing an INNER JOIN of publishers and titles.


SELECT DISTINCT p.pub_id, p.pub_name -- Same
                     graphics/ccc.gif result as previous query
                  FROM publishers p , titles t
                  WHERE p.pub_id = t.pub_id

ALL compares a scalar value with a single-column set of values.


scalar_expression { = | <> | != | > | >= | !> | < | <= | !< } ALL ( subquery )



This is any valid SQL Server (scalar) expression.

{ = | <> | != | > | >= | !> | < | <= | !< }

This is a comparison operator.


This is a subquery that returns a result set of one column. The data type of the returned column must be the same data type as the data type of scalar_expression. It may not contain an ORDER BY clause, COMPUTE clause or INTO keyword.


Type: Boolean

ALL returns TRUE if the specified comparison is TRUE for scalar_expression and every value in the single-column set returned from the subquery, otherwise ALL returns FALSE.

ALL can often be used to find the complement of an ANY/SOME query.

Example: List all publishers' names that have NO title in the titles table.


SELECT pub_id, pub_name FROM publishers
                  WHERE pub_id <>  ALL ( SELECT pub_id FROM titles )


pub_id           pub_name
------           -------------------------------
1622             Five Lakes Publishing
1756             Ramona Publishers
9901             GGG&G
9952             Scootney Books
9999             Lucerne Publishing BETWEEN

BETWEEN specifies inclusion in a specified range.


test_expr [ NOT ] BETWEEN begin_expr AND end_expr



This is the expression to test for in the range defined by begin_expr and end_expr.


Not specifies that the result of the predicate be negated.


This is any valid expression.


This too is any valid expression.


Type: Boolean

BETWEEN returns TRUE if the value of test_expr is greater than or equal to the value of begin_expr and less than or equal to the value of end_expr.

NOT BETWEEN returns TRUE if the value of test_expr is less than the value of begin_expr or greater than the value of end_expr.


test_expr, begin_expr and end_expr must be the same data type.

If any input to the BETWEEN or NOT BETWEEN predicate is NULL, the result is UNKNOWN.

The BETWEEN operator is a shorthand equivalent to

( test_expr >= begin_expr AND test_expr <= end_expr )

Example: Find all publishers with pub_id values between 500 and 900 — use both forms.


SELECT pub_id, pub_name FROM publishers
                  WHERE pub_id BETWEEN 500 AND 900
                  SELECT pub_id, pub_name FROM publishers  --
                     graphics/ccc.gif equivalent result
                  WHERE pub_id >= 500 AND pub_id <= 900


pub_id           pub_name
------           --------------------------------------
0736             New Moon Books
0877             Binnet & Hardley

Example: Find all publishers with pub_id values outside of 500 and 900—use both forms.


SELECT pub_id, pub_name FROM publishers
                  WHERE pub_id NOT BETWEEN 500 AND 900
                  SELECT pub_id, pub_name FROM publishers --
                     graphics/ccc.gif equivalent result
                  WHERE NOT (pub_id >= 500 AND pub_id <= 900)


pub_id            pub_name
------            -------------------------------------
1389              Algodata Infosystems
1622              Five Lakes Publishing
. . .                 . . . IN

IN determines if a given value matches any value in a subquery or a list.


test_expression [ NOT ] IN
    (      subquery   | expression [ ,...n ]     )



This is any valid Microsoft SQL Server expression.


A subquery has a result set of one column. This column must have the same data type as test_expression.

expression [,...n]

This is a list of expressions to test for a match. All expressions must be of the same type as test_expression.


Type: Boolean

If the value of test_expression is equal to any value returned by subquery or is equal to any expression from the comma-separated list, the result value is TRUE. Otherwise, the result value is FALSE.

Using NOT IN negates the returned value.

Example with subquery: List all publishers' names with a title in the titles table.


SELECT pub_id, pub_name FROM publishers
                  WHERE pub_id IN ( SELECT pub_id FROM titles )


Same as shown above using ANY.

Example: With expression list, list all publishers' names with a pub_id of 0736 or 0877.


SELECT pub_id, pub_name FROM publishers
                  WHERE pub_id IN ( 0736 , 0877 )


pub_id        pub_name
------        ----------------------
0736          New Moon Books
0877          Binnet & Hardley EXISTS

EXISTS is used only with a subquery (a SELECT statement enclosed in parentheses used inside another DML statement). It is TRUE if the subquery result set is nonempty.

See page 702 for more detail on subqueries.


EXISTS subquery


Type: Boolean

EXISTS returns TRUE if the subquery returns any rows at all (nonempty result set).

Example: List all publishers' names that have a title in the titles table.


SELECT pub_id, pub_name FROM publishers p
                  WHERE EXISTS
                  ( SELECT pub_id FROM titles WHERE pub_id = p.pub_id)


The result of this is the same as that shown above using ANY. LIKE

LIKE provides pattern matching searching of character strings. LIKE determines whether or not a given character string matches a specified pattern. A pattern can include regular characters and wildcard characters. During pattern matching, regular characters must exactly match the characters specified in the character string. Wildcard characters, however, can be matched with arbitrary fragments of the character string. If any of the arguments are not of character string data type, SQL Server converts them to character string data type, if possible.


match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]



This is any valid SQL Server expression of character string data type.


This syntax is the pattern to search for in match_expression, and can include the valid SQL Server wildcard characters shown in Table 2-12.

Table 2-12. Valid Wildcard Characters

LIKE Wildcard


% (percent)

Any string of zero or more characters

_ (underscore)

Exactly one of any character

[ ]

Any single among those listed inside the [ ]. E.g., a, b, c or d will match [abcd] or its shortcut form [a-d].

[^ ]

Any single character NOT listed in the [ ].

E.g., any character other than a, b, c or d will match [^abcd] or [^a-d].

Note: The [ ] and [^ ] notations are not included in the ANSI SQL standard and are thus not guaranteed to be portable. The rest of the LIKE notation does comply with SQL-92 and 99.


This is any valid SQL Server expression of any of the character string data types. The escape_character has no default and may consist of only one character.

For example, if you want to search for a literal percent sign (%) embedded in text, you could declare an escape character that does not occur in the text, e.g., \, and use it to escape the %. A sample search might be as follows.

SELECT * FROM titles
       WHERE notes LIKE '% 30\% discount %'
       ESCAPE '\'

The first and last % are wildcards, the \% causes the search for a literal %.

Some people prefer to use % as the escape character so that %% becomes a literal percent sign and a single % is a wildcard.


Type: Boolean

LIKE returns TRUE if the match_expression (usually a column name) matches the specified pattern.

Example: List all authors whose last names begin with Gr.


SELECT au_lname FROM authors WHERE au_lname LIKE 'Gr%'




When you perform string comparisons with LIKE, all characters in the pattern string are significant, including leading or trailing spaces.

For example, using LIKE 'abc ' (abc followed by one space), a row with the value abc (without a space) is not returned. However, trailing blanks, in the expression to which the pattern is matched, are ignored. For example, using LIKE'abc'(abc without a space), all rows that start with abc followed by zero or more trailing blanks are returned. Performance Note: Anywhere Search

A LIKE query which begins with a wildcard, either % or _, is called an Anywhere Search and is usually not recommended if it can be avoided.

WHERE  au_lname  LIKE '%st%'

, or

WHERE  au_lname  LIKE '%st'

, or

WHERE  au_lname  LIKE '_st'

The reason to avoid anywhere searches is the impact on performance, especially if the table being searched is large. This is because an index, if one exists on the au_lname column, can not be used in an anywhere search. Queries on large tables will take a very, very, very long time if no index is used.

To see why an anywhere search disables the use of an index, think of an index being similar to a telephone book and imagine the usefulness of the telephone book if looking for each of the queries above.

On the other hand, the following query does NOT disable the use of an index on au_lname if one exists since the match string does not BEGIN with a wildcard: WHERE au_lname LIKE 'st%' String Concatenation Operator: +

There is one concatenation operator, plus sign (+), and it may be used with character or binary string data types.



SELECT lname, fname, lname + ', ' + fname FROM
                     graphics/ccc.gif employee


lname           fname
-------         -------         ----------------
Cruz            Aria            Cruz, Aria

Note: The ANSI SQL concatenation operator is "||" used in Oracle, DB2 and others. The + string concatenation operator in SQL Server is not portable to other RDBMSs. Unary Operators

Unary operators work on a single numeric operand expression.

Bitwise NOT only works with integer data types, the other two take any numeric data type. See Table 2-13.

Table 2-13. Unary Operators



Bitwise NOT




Positive (+) means the numeric value is positive.

Negative (–) means the numeric value is negative.

Bitwise NOT returns the ones complement of the number.



print  1  +  -3    -- + is binary operator, - is unary


-2 Operator Precedence

When a complex expression has multiple operators, operator precedence determines the sequence in which the operations are performed. Operators have the precedence levels shown in Table 2-14. An operator on higher levels is evaluated before an operator on a lower level. In case of two operators of equal precedence evaluation proceeds from left to right

Table 2-14. Operator Precedence


+ (Positive), – (Negative), ~ (Bitwise NOT)

* (Multiply), / (Division), % (Modulo)

+ (Add), (+ Concatenate), – (Subtract)

=, >, <, >=, <=, <>, !=, !>, !< (Comparison operators)

^ (Bitwise Exclusive OR), & (Bitwise AND), | (Bitwise OR)




= (Assignment)

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information

To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.


Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.


If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information

Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.


This site is not directed to children under the age of 13.


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information

If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information

Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents

California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure

Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact

Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice

We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020