0% found this document useful (0 votes)
116 views54 pages

Chapter 3

This document discusses how to retrieve data from a single database table using SELECT statements in SQL. It covers the basic syntax of the SELECT statement and describes the different clauses and elements that can be used, including expressions, functions, operators, and more.

Uploaded by

Eckart Schneider
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
116 views54 pages

Chapter 3

This document discusses how to retrieve data from a single database table using SELECT statements in SQL. It covers the basic syntax of the SELECT statement and describes the different clauses and elements that can be used, including expressions, functions, operators, and more.

Uploaded by

Eckart Schneider
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 54

Chapter 3

How to retrieve data from


a single table

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 1
Objectives
Applied
 Code SELECT statements that require any of the language elements
presented in this chapter.

Knowledge
 Distinguish between the base table values and the calculated values in
SELECT statements.
 Describe the use of a column alias.
 Describe the use of the concatenation operator in string expressions.
 Describe the order of precedence and the use of parentheses for
arithmetic expressions.
 Describe the use of scalar functions.
 Describe the use of the Dual table, the DISTINCT keyword, and the
ROWNUM pseudo column.

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 2
Objectives (continued)
Knowledge
 Describe the use of comparison operators, logical operators, and
parentheses in WHERE clauses.
 Describe the use of the IN, BETWEEN, and LIKE operators in
WHERE clauses.
 Describe the use of IS NULL in a WHERE clause.
 Describe the use of column names, column aliases, calculated values,
and column numbers in ORDER BY clauses.

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 3
The simplified syntax of the SELECT statement
SELECT select_list
FROM table_source
[WHERE search_condition]
[ORDER BY order_by_list]

The four clauses of the SELECT statement


 SELECT
 FROM
 WHERE
 ORDER BY

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 4
A simple SELECT statement
SELECT *
FROM invoices

(114 rows selected)

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 5
A SELECT statement that retrieves and sorts
SELECT invoice_number, invoice_date, invoice_total
FROM invoices
ORDER BY invoice_total

(114 rows selected)

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 6
A SELECT statement that retrieves
a calculated value
SELECT invoice_id, invoice_total,
(credit_total + payment_total) AS total_credits
FROM invoices
WHERE invoice_id = 17

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 7
A SELECT statement that retrieves all invoices
between given dates
SELECT invoice_number, invoice_date, invoice_total
FROM invoices
WHERE invoice_date BETWEEN '01-MAY-2014'
AND '31-MAY-2014'
ORDER BY invoice_date

(70 rows selected)

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 8
A SELECT statement that returns
an empty result set
SELECT invoice_number, invoice_date, invoice_total
FROM invoices
WHERE invoice_total > 50000

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 9
The expanded syntax of the SELECT clause
SELECT [ALL|DISTINCT]
column_specification [[AS] result_column]
[, column_specification [[AS] result_column]] ...

Five ways to code column specifications


 All columns in base table
 Column name in base table
 Concatenation
 Calculation
 Scalar function

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 10
Column specifications that use base table values
The * is used to retrieve all columns
SELECT *
Column names are used to retrieve specific columns
SELECT vendor_name, vendor_city, vendor_state

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 11
Column specifications that use calculated values
An arithmetic expression that calculates balance_due
SELECT invoice_number,
invoice_total – payment_total – credit_total
AS balance_due
A string expression that derives full_name
SELECT first_name || ' ' || last_name AS full_name

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 12
Two SELECT statements that name the columns
A SELECT statement that uses the AS keyword
-- DATE is a reserved keyword.
-- As a result, it must be enclosed in quotations.
SELECT invoice_number AS "Invoice Number",
invoice_date AS "Date",
invoice_total AS total
FROM invoices
A SELECT statement that omits the AS keyword
SELECT invoice_number "Invoice Number",
invoice_date "Date",
invoice_total total
FROM invoices

The result set for both SELECT statements

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 13
A SELECT statement that doesn’t provide a name
for a calculated column
SELECT invoice_number, invoice_date, invoice_total,
invoice_total – payment_total – credit_total
FROM invoices

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 14
How to concatenate string data
SELECT vendor_city, vendor_state,
vendor_city || vendor_state
FROM vendors

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 15
How to format string data using literal values
SELECT vendor_name,
vendor_city || ', '
|| vendor_state
|| ' '
|| vendor_zip_code
AS address
FROM vendors

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 16
How to include apostrophes in literal values
SELECT vendor_name || '''s address: ',
vendor_city || ', '
|| vendor_state
|| ' '
|| vendor_zip_code
FROM vendors

Terms to know
 String expression
 Literal value
 String literal (string constant)
 Concatenation operator

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 17
The arithmetic operators in order of precedence
* Multiplication
/ Division
+ Addition
- Subtraction

A SELECT statement that calculates balance due


SELECT invoice_total, payment_total, credit_total,
invoice_total – payment_total – credit_total
AS balance_due
FROM invoices

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 18
A SELECT statement that uses parentheses
SELECT invoice_id,
invoice_id + 7 * 3 AS order_of_precedence,
(invoice_id + 7) * 3 AS add_first
FROM invoices
ORDER BY invoice_id

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 19
What determines the sequence of operations
 Order of precedence
 Parentheses

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 20
A SELECT statement that uses SUBSTR
SELECT vendor_contact_first_name,
vendor_contact_last_name,
SUBSTR(vendor_contact_first_name, 1, 1) ||
SUBSTR(vendor_contact_last_name, 1, 1) AS initials
FROM vendors

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 21
A SELECT statement that uses TO_CHAR
SELECT 'Invoice: # '
|| invoice_number
|| ', dated '
|| TO_CHAR(payment_date, 'MM/DD/YYYY')
|| ' for $'
|| TO_CHAR(payment_total)
AS "Invoice Text"
FROM invoices

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 22
A SELECT statement that uses the SYSDATE and
ROUND functions
SELECT invoice_date,
SYSDATE AS today,
ROUND(SYSDATE - invoice_date) AS invoice_age_in_days
FROM invoices

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 23
A SELECT statement that uses the MOD function
SELECT invoice_id,
MOD(invoice_id, 10) AS Remainder
FROM invoices
ORDER BY invoice_id

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 24
A SELECT statement that uses the Dual table
SELECT 'test' AS test_string,
10-7 AS test_calculation,
SYSDATE AS test_date
FROM Dual

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 25
A SELECT statement that returns all rows
SELECT vendor_city, vendor_state
FROM vendors
ORDER BY vendor_city

(122 rows selected)

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 26
A SELECT statement with no duplicate rows
SELECT DISTINCT vendor_city, vendor_state
FROM vendors
ORDER BY vendor_city

(53 rows selected)

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 27
A SELECT statement that uses the ROWNUM
pseudo column to limit the number of rows
SELECT vendor_id, invoice_total
FROM invoices
WHERE ROWNUM <= 5

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 28
A SELECT statement that sorts the result set after
the WHERE clause
SELECT vendor_id, invoice_total
FROM invoices
WHERE ROWNUM <= 5
ORDER BY invoice_total DESC

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 29
A SELECT statement that sorts the result set
before the WHERE clause
SELECT vendor_id, invoice_total
FROM (SELECT * FROM invoices
ORDER BY invoice_total DESC)
WHERE ROWNUM <= 5

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 30
The syntax of the WHERE clause with comparison
operators
WHERE expression_1 operator expression_2

The comparison operators


 =
 >
 <
 <=
 >=
 <>

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 31
Examples of WHERE clauses that retrieve…
Vendors located in Iowa
WHERE vendor_state = 'IA'
Invoices with a balance due (two variations)
WHERE invoice_total – payment_total – credit_total > 0
WHERE invoice_total > payment_total + credit_total
Vendors with names from A to L
WHERE vendor_name < 'M'
Invoices on or before a specified date
WHERE invoice_date <= '31-MAY-14'
Invoices on or after a specified date
WHERE invoice_date >= '01-MAY-14'
Invoices with credits that don’t equal zero
WHERE credit_total <> 0

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 32
Warning about date comparisons
 All DATE data types include both a date and time.
 The value returned by the SYSDATE function includes a date and
a time.
 When you code a date literal like ‘31-May-2014’, the time defaults
to 00:00:00 on a 24-hour clock.
 If you ignore the times, a date comparison may not yield the results
you expect.

Notes
 Chapter 8 provides solutions for this problem.

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 33
The syntax of the WHERE clause with logical
operators
WHERE [NOT] search_condition_1
{AND|OR} [NOT] search_condition_2 ...

Examples of queries using logical operators


A search condition that uses the AND operator
WHERE vendor_state = 'NJ' AND vendor_city = 'Springfield'
A search condition that uses the OR operator
WHERE vendor_state = 'NJ' OR vendor_city = 'Pittsburgh'
A search condition that uses the NOT operator
WHERE NOT (invoice_total >= 5000
OR NOT invoice_date <= '01-JUL-2014')
The same condition rephrased to eliminate NOT
WHERE invoice_total < 5000
AND invoice_date <= '01-JUL-2008'

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 34
A compound condition without parentheses
SELECT invoice_number, invoice_date, invoice_total
FROM invoices
WHERE invoice_date > '01-MAY-2014' OR invoice_total > 500
AND invoice_total – payment_total – credit_total > 0
ORDER BY invoice_number

(91 rows selected)

The order of precedence for compound conditions


 NOT
 AND
 OR

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 35
The same compound condition with parentheses
WHERE (invoice_date > '01-MAY-2014'
OR invoice_total > 500)
AND invoice_total – payment_total – credit_total > 0
ORDER BY invoice_number

(39 rows selected)

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 36
The syntax of the WHERE clause with the IN
operator
WHERE test_expression
[NOT] IN ({subquery|expression_1 [, expression_2]...})

Examples of the IN operator


The IN operator with a list of numeric literals
WHERE terms_id IN (1, 3, 4)
The IN operator preceded by NOT
WHERE vendor_state NOT IN ('CA', 'NV', 'OR')
The IN operator with a subquery
WHERE vendor_id IN
(SELECT vendor_id
FROM invoices
WHERE invoice_date = '01-MAY-2014')

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 37
The syntax of the WHERE clause with the
BETWEEN operator
WHERE test_expression
[NOT] BETWEEN begin_expression AND end_expression

Examples of the BETWEEN operator


The BETWEEN operator with literal values
WHERE invoice_date
BETWEEN '01-MAY-2014' AND '31-MAY-2014'
The BETWEEN operator preceded by NOT
WHERE vendor_zip_code NOT BETWEEN 93600 AND 93799
The BETWEEN operator with a calculated value
WHERE invoice_total – payment_total – credit_total
BETWEEN 200 AND 500
The BETWEEN operator with upper and lower limits
WHERE invoice_due_date BETWEEN SYSDATE AND (SYSDATE + 30)

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 38
The syntax of the WHERE clause with the LIKE
operator
WHERE match_expression [NOT] LIKE pattern

Wildcard symbols
%
_

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 39
WHERE clauses that use the LIKE operator
Example 1
WHERE vendor_city LIKE 'SAN%'
Cities that will be retrieved
“San Diego” and “Santa Ana”

Example 2
WHERE vendor_name LIKE 'COMPU_ER%'
Vendors that will be retrieved
“Compuserve” and “Computerworld”

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 40
The syntax of the WHERE clause with the Is null
condition
WHERE expression IS [NOT] NULL

The contents of the Null_Sample table


SELECT *
FROM null_sample

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 41
A SELECT statement that retrieves rows
with zero values
SELECT *
FROM null_sample
WHERE invoice_total = 0

A SELECT statement that retrieves rows


with non-zero values
SELECT *
FROM null_sample
WHERE invoice_total <> 0

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 42
A SELECT statement that retrieves rows
with null values
SELECT *
FROM null_sample
WHERE invoice_total IS NULL

A SELECT statement that retrieves rows


without null values
SELECT *
FROM null_sample
WHERE invoice_total IS NOT NULL

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 43
The expanded syntax of the ORDER BY clause
ORDER BY expression [ASC|DESC]
[, expression [ASC|DESC]] ...

An ORDER BY clause that sorts by one column


SELECT vendor_name,
vendor_city || ', ' || vendor_state || ' ' ||
vendor_zip_code AS address
FROM vendors
ORDER BY vendor_name

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 44
The default sequence for an ascending sort
 Special characters
 Capital letters
 Lowercase letters
 Null values

Notes
 This causes problems when sorting mixed-case columns.
 Chapter 8 provides the solutions.

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 45
An ORDER BY clause that sorts by one column
in descending sequence
SELECT vendor_name,
vendor_city || ', ' || vendor_state || ' ' ||
vendor_zip_code AS address
FROM vendors
ORDER BY vendor_name DESC

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 46
An ORDER BY clause that sorts by three columns
SELECT vendor_name,
vendor_city || ', ' || vendor_state || ' ' ||
vendor_zip_code AS address
FROM vendors
ORDER BY vendor_state, vendor_city, vendor_name

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 47
An ORDER BY clause that uses an alias
SELECT vendor_name,
vendor_city || ', ' || vendor_state || ' ' ||
vendor_zip_code AS address
FROM vendors
ORDER BY address, vendor_name

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 48
An ORDER BY clause that uses an expression
SELECT vendor_name,
vendor_city || ', ' || vendor_state || ' ' ||
vendor_zip_code AS address
FROM vendors
ORDER BY vendor_contact_last_name
|| vendor_contact_first_name

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 49
An ORDER BY clause that uses column positions
SELECT vendor_name,
vendor_city || ', ' || vendor_state || ' ' ||
vendor_zip_code AS address
FROM vendors
ORDER BY 2, 1

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 50
The syntax of the row limiting clause
(12c and later)
[ OFFSET offset { ROW | ROWS } ]
[ FETCH { FIRST | NEXT } [ { rowcount | percent PERCENT } ]
{ ROW | ROWS } { ONLY | WITH TIES } ]

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 51
A FETCH clause that retrieves the first five rows
SELECT vendor_id, invoice_total
FROM invoices
ORDER BY invoice_total DESC
FETCH FIRST 5 ROWS ONLY

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 52
An OFFSET clause that starts with the third row
and fetches three rows
SELECT invoice_id, vendor_id, invoice_total
FROM invoices
ORDER BY invoice_id
OFFSET 2 ROWS FETCH NEXT 3 ROWS ONLY

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 53
An OFFSET clause that starts with the 101st row
SELECT invoice_id, vendor_id, invoice_total
FROM invoices
ORDER BY invoice_id
OFFSET 100 ROWS FETCH NEXT 1000 ROWS ONLY

Murach’s Oracle SQL and


PL/SQL, C3 © 2014, Mike Murach & Associates, Inc. Slide 54

You might also like