Single Table Queries
Download
Report
Transcript Single Table Queries
Single-Table
Queries 1: Basics
CS 320 Online
Review: SQL Command Types
Data Definition Language (DDL)
Used to create and modify database objects
Data Manipulation Language (DML)
Used to insert, update, delete, and view the
data in database objects
Database Queries
Query: question represented in a way
a database can understand
SQL query components:
SELECT: columns whose values you want
to retrieve
FROM: tables that contain the columns in
the SELECT clause
WHERE: optional search condition to
restrict which records are retrieved
Programming Note:
Before you can run SELECT queries, your
database must contains data
Run the scripts to insert the records in the
CANDY database
CANDY database tables (with revised field names)
CANDY_CUSTOMER
CUST_ID CUST_NAME
CUST_TYPE CUST_ADDR
CUST_ZIP CUST_PHONE CUST_USERNAME CUST_PASSWORD
1 Jones, Joe
P
1234 Main St.
91212 434-1231
jonesj
2 Armstrong,Inc.
R
231 Globe Blvd.
91212 434-7664
armstrong
3 Sw edish Burgers
R
1889 20th N.E.
91213 434-9090
sw edburg
4 Pickled Pickles
R
194 CityView
91289 324-8909
pickpick
5 The Candy Kid
W
2121 Main St.
91212 563-4545
kidcandy
6 Waterman, Al
P
23 Yankee Blvd.
91234
w ateral
7 Bobby Bon Bons
R
12 Nichi Cres.
91212 434-9045
bobbybon
8 Crow sh, Elias
P
7 77th Ave.
91211 434-0007
crow el
9 Montag, Susie
P
981 Montview
91213 456-2091
montags
10 Columberg Sw eets W
239 East Falls
91209 874-9092
columsw e
1234
3333
2353
5333
2351
8900
3011
1033
9633
8399
CANDY_PURCHASE
CANDY_CUST_TYPE
CUST_TYPE_ID
CUST_TYPE_DESC
PURCH_ID
PROD_ID
CUST_ID
PURCH_
DATE
PURCH_
DELIVERY_ PURCH_
DATE
POUNDS
PURCH_
STATUS
P
Private
1
1
5 28-Oct-04
28-Oct-04
3.5 PAID
R
Retail
2
2
6 28-Oct-04
30-Oct-04
15 PAID
W
Wholesale
3
1
9 28-Oct-04
28-Oct-04
2 PAID
3
3
9 28-Oct-04
28-Oct-04
3.7 PAID
4
3
2 28-Oct-04
5
1
7 29-Oct-04
29-Oct-04
3.7 NOT PAID
5
2
7 29-Oct-04
29-Oct-04
1.2 NOT PAID
29-Oct-04
4.4 NOT PAID
CANDY_PRODUCT
PROD_ID
PROD_DESC
PROD_COSTPROD_PRICE
3.7 PAID
1 Celestial Cashew Crunch
$
7.45
$
10.00
5
3
7 29-Oct-04
2 Unbrittle Peanut Paradise
$
5.75
$
9.00
6
2
7 29-Oct-04
3 Mystery Melange
$
7.75
$
10.50
7
2
10 29-Oct-04
14 NOT PAID
4 Millionaire’s Macadamia Mix
$
12.50
$
16.00
7
5
10 29-Oct-04
4.8 NOT PAID
5 Nuts Not Nachos
$
6.25
$
9.50
8
1
4 29-Oct-04
8
5
4 29-Oct-04
9
5
4 29-Oct-04
3 PAID
29-Oct-04
1 PAID
7.6 PAID
29-Oct-04
3.5 NOT PAID
Retrieving Data From a Single
Table
Basic syntax:
SELECT field1, field2, …
FROM tablename
WHERE search_condition
SELECT cust_id, cust_name
FROM candy_customer
WHERE cust_id = 1
Retrieving All Fields or All Records
To retrieve all fields in the table: use the
"*" wildcard character
SELECT *
FROM tablename
WHERE search_condition
To retrieve all records in a table: omit the
search condition
Examples of Queries that Retrieve all
Fields and all Records
SELECT *
FROM candy_purchase;
SELECT *
FROM candy_cust_type;
Search Conditions
General format:
FieldName Operator TargetValue
Operators:
=, <, >, <=, >=, <> or !=,
BETWEEN, IN, LIKE
Examples:
prod_id = 1
purch_pounds > 5
prod_cost >= 9.99
purch_status != 'PAID'
purch_pounds BETWEEN 5 AND 10
prod_id IN (1, 3, 5)
SearchTarget Values
Numbers
Just
type the number
Text strings
Enclose
in single or
double quotes
Search for strings with
embedded single quotes
by typing \' or \"
prod_id = 1
prod_cost >= 9.99
Dates
Enter
as a text string in
'yyyy-mm-dd' format
cust_name = 'Jones, Joe'
prod_desc =
'Millionaire\'s Macadamia
Mix'
purch_date = '2004-10-28'
Using IN and BETWEEN
IN: retrieves all matching values within a
set of values
BETWEEN: retrieves all matching values
within a range of values (inclusive)
WHERE cust_zip IN ('91211', '91212')
WHERE prod_id BETWEEN 1 AND 3
Partial-Text Searches Using
LIKE
Partial-text search: searches for part of a string
within a character field
Use
the % wildcard character to match 0 or more
characters
Examples:
WHERE cust_zip LIKE '9121%'
WHERE cust_name LIKE '%s'
WHERE cust_name LIKE '%s%'
Searching for NULL Values
NULL: undefined
Search conditions for NULL and nonNULL values:
WHERE fieldname IS NULL
WHERE fieldname IS NOT NULL
WHERE cust_phone IS NULL
WHERE purch_delivery_date IS NOT NULL
Compound Search Conditions
Formed by connecting two or more search
conditions using the AND or OR operator
AND: query only retrieves records for
which both conditions are true
OR: query retrieves records for which
either condition is true
Example Compound Search
Conditions
WHERE Condition1 AND Condition2
WHERE Condition1 OR Condition2
WHERE prod_id = 1
AND purch_date = '2008-10-28'
WHERE prod_id = 1
OR prod_id = 3
Using AND and OR in Search
Conditions
Every expression must be well-formed:
Do
this:
WHERE purch_date > '2004-10-28'
AND purch_date < '2004-11-1'
Not
this:
WHERE purch_date > '2004-10-28'
AND < '2004-11-1'
Order of AND/OR Evaluation
MySQL evaluates AND expressions first,
then OR expressions
To force a specific evaluation order, place
conditions to be evaluated first in
parentheses!
SELECT cust_id
FROM candy_customer
WHERE cust_type = 'W'
AND (cust_zip = '91209'
OR cust_zip = '91212')
Test Yourself: How many fields and
how many records will the following
query retrieve?
SELECT *
FROM candy_purchase;
a.
b.
c.
d.
7 fields and 14 records
14 fields and 7 records
7 fields and 9 records
None of the above
Test Yourself: How many fields and
how many records will the following
query retrieve?
SELECT *
FROM candy_purchase;
a.
b.
c.
d.
7 fields and 14 records
14 fields and 7 records
7 fields and 9 records
None of the above
Test Yourself: How many
CANDY_CUSTOMER records will the
following query retrieve?
SELECT cust_id
FROM candy_customer
WHERE cust_name LIKE '%s'
a.
b.
c.
d.
e.
4
8
9
10
None of the above
Test Yourself: How many
CANDY_CUSTOMER records will the
following query retrieve?
SELECT cust_id
FROM candy_customer
WHERE cust_name LIKE '%s'
a.
b.
c.
d.
e.
4
8
9
10
None of the above
Test Yourself: How many records
will the following query retrieve?
SELECT *
FROM candy_purchase
WHERE purch_status LIKE '%Paid%'
a.
b.
c.
d.
0
8
14
None of the above
Test Yourself: How many records
will the following query retrieve?
SELECT *
FROM candy_purchase
WHERE purch_status LIKE '%Paid%'
a.
b.
c.
d.
0
8
14
None of the above
Test Yourself: How many records will
the following query retrieve?
SELECT *
FROM candy_purchase
WHERE purch_delivery_date = NULL
AND purch_status = 'PAID'
a.
b.
c.
d.
e.
0
3
5
8
None of the above
Test Yourself: How many records will
the following query retrieve?
SELECT *
FROM candy_purchase
WHERE purch_delivery_date = NULL
AND purch_status = 'PAID'
a.
b.
c.
d.
e.
0
3
5
8
None of the above