Enhanced Guide to Oracle 10g Chapter 3: Using SQL Queries to Insert,

advertisement
Enhanced Guide to Oracle 10g
Chapter 3:
Using SQL Queries to Insert,
Update, Delete, and View Data
1
SQL Scripts
 Script: text file that contains a
sequence of SQL commands
 Running a script:
SQL> START path_to_script_file;
OR
SQL> @ path_to_script_file;
Path cannot contain any blank spaces
2
Inserting a Value Into Every
Field in a Record
 Syntax:
INSERT INTO tablename VALUES
(column1_value, column2_value, …);
 You must insert a value or a NULL
placeholder for every field
 Fields must be entered in the order
they appear in the table when you
issue the DESCRIBE command
3
Inserting a Value Into Every
Field in a Record

Example:
4
Inserting Selected Table Fields
 Command to insert values for selected
record fields:
INSERT INTO tablename
(column1_name, column2_name, …)
VALUES
(column1_value, column2_value, …);
5
Inserting Selected Table Fields
 Example:
6
Format Masks


All data is stored in the database in a
standard binary format
Format masks are alphanumeric text
strings that specify the format of input
and output data


Table 3-1: Number format masks
Table 3-2: Date format masks
7
Inserting Date Values
 Date values must be converted
from characters to dates using the
TO_DATE function and a format
mask
 Example:
8
Inserting Text Data
 Must be enclosed in single quotes
 Is case-sensitive
 To insert a string with a single quote,
type the single quote twice
 Example:
'Mike''s Motorcycle Shop'
9
Inserting Interval Values
 Year To Month Interval:
TO_YMINTERVAL(‘years-months’)
e.g. TO_YMINTERVAL(‘3-2’)
 Day To Second Interval:
TO_DSINTERVAL(‘days HH:MI:SS.99’)
e.g. TO_DSINTERVAL(‘-0 01:15:00’)
10
Transactions
 Transaction
 Logical unit of work consisting of one or
more SQL DML commands
 INSERT, UPDATE, DELETE
 All transaction commands must succeed or
none can succeed
 Transaction results are not visible to
other users until they are “committed”
to the database
 Until a transaction is committed, it can
easily be “rolled back” (undone)
11
Transactions
 A transaction starts when you type
one or more DML commands in
SQL*Plus
 A transaction ends when you issue
either the COMMIT or ROLLBACK
command
SQL>COMMIT;
SQL>ROLLBACK;
12
Committing and Rolling Back
Data

COMMIT


Makes transaction command changes
permanent in the database and visible to
other users
ROLLBACK

Rolls back transaction command changes
and restores database to its state before
the transaction
13
Savepoints
 Used to mark
individual
sections of a
transaction
 You can roll
back a
transaction to a
savepoint
14
Updating Records
 Syntax:
UPDATE tablename
SET column1 = new_value,
column2 = new_value, …
WHERE search_condition;
 Each update statement can update
row(s) in one table only
 Can update multiple records if they all
match the search condition
15
Search Conditions
 Format:
WHERE fieldname operator expression
 Operators









Equal (=)
Greater than, Less than (>, <)
Greater than or Equal to (>=)
Less than or Equal to (<=)
Not equal (< >, !=, ^=)
LIKE
BETWEEN
IN
NOT IN
16
Search Condition Examples
WHERE s_name = ‘Sarah’
WHERE s_age > 18
WHERE s_class <> ‘SR’
 Text in single quotes is case sensitive
17
Deleting Records
 Syntax:
DELETE FROM tablename
WHERE search_condition;
 Deletes multiple records if search
condition specifies multiple records
 If search condition is omitted, all table
records are deleted
 You can’t delete a record if it contains a
primary key value that is referenced as
a foreign key
18
Truncating Tables

Removes ALL table data WITHOUT
saving any rollback information



Advantage: fast way to delete table data
Disadvantage: can’t be undone
Syntax:
TRUNCATE TABLE tablename;
19
Sequences
 Sequential list of numbers that is
automatically generated by the
database
 Used to generate values for
surrogate keys
20
Creating Sequences
 Syntax:
CREATE SEQUENCE sequence_name
[optional parameters];
 Example:
CREATE SEQUENCE f_id_sequence
START WITH 200;
21
Viewing Sequence Information

Query the SEQUENCE Data Dictionary
View:
22
Pseudocolumns



Acts like a column in a database query
Actually a command that returns a
specific values
Used to retrieve:



Current system date
Name of the current database user
Next value in a sequence
23
Pseudocolumn Examples
Pseudocolumn Output
Name
CURRVAL
Most recently retrieved
sequence value
NEXTVAL
Next value in a sequence
SYSDATE
Current system date from
database server
USER
Username of current user
24
Using Pseudocolumns
 Retrieving the current system date:
SELECT SYSDATE
FROM DUAL;

Retrieving the name of the current
user:
SELECT USER
FROM DUAL;
 DUAL is a system table that is used
with pseudocolumns
25
Using Pseudocolumns
With Sequences
 Accessing the next value in a sequence:
sequence_name.NEXTVAL
 Inserting a new record using a
sequence:
INSERT INTO my_faculty VALUES
(f_id_sequence.nextval, ‘Professor Jones’);
26
Object Privileges


Permissions that you can grant to other users
to allow them to access or modify your
database objects
Granting object privileges:
GRANT privilege1, privilege2, …
ON object_name
TO user1, user 2, …;

Revoking object privileges:
REVOKE privilege1, privilege2, …
ON object_name
FROM user1, user 2, …;
27
Examples of Object Privileges
Object Type
Privilege
Description
Table,
Sequence
ALTER
Allows user to change object’s structure
using the ALTER command
Table,
Sequence
DROP
Allows user to drop object
Table,
Sequence
SELECT
Allows user to view object
Table
INSERT,
UPDATE,
DELETE
Allows user to insert, update, delete table
data
Any database
object
ALL
Allows user to perform any operation on
object
28
Granting and Revoking Object
Privileges
29
Retrieving Data From
a Single Table
 Syntax:
SELECT column1, column2, …
FROM tablename
WHERE search_condition;
30
Retrieving Data From
a Single Table
 To retrieve every column in a table:
SELECT * FROM …
 To retrieve every record in a table,
omit the search condition
SELECT column1, column2, …
FROM tablename;
31
Qualifying Table Names

If you retrieve data from a table that is
owned by another user, you must
qualify the table name by prefacing it
with the owner’s name
32
Suppressing Duplicate Records
 Sometimes queries retrieve
duplicate records
 To suppress duplicate
outputs, use the DISTINCT
qualifier:
SELECT DISTINCT
column1, column2, …
FROM ...
33
Using Multiple Search
Conditions
 Combining search conditions
 AND: both conditions must be true
 OR: either condition can be true
 Combining AND and OR in a single
operation
 AND comparisons are evaluated first
 Always use parentheses to force
conditions to be evaluated in the correct
order
34
Searching for NULL Records
 NULL: not defined
 Use IS NULL search condition
SELECT s_name, s_class
FROM my_students
WHERE s_class IS NULL;
35
Searching for
NOT NULL Records
 Use IS NOT NULL operator
SELECT s_name, s_age
FROM my_students
WHERE s_class IS NOT NULL;
36
Using the IN and NOT IN
Operators

IN retrieves all values where the search
column value matches a set of values
SELECT *
FROM enrollment
WHERE grade IN (‘A’, ‘B’);
37
Using the IN and NOT IN
Operators

NOT IN retrieves all values where the
search column value matches a set of
values
SELECT *
FROM enrollment
WHERE grade NOT IN (‘A’, ‘B’);
38
Using the LIKE Operator

Performs inexact searches by matching
part of a character string
WHERE fieldname LIKE character_string;
39
Using the LIKE Operator

Character string must be in single quotes and
use wildcard characters




% represents multiple wildcard characters
_ represents a single wildcard character
Wildcard characters can be placed at beginning or
end of string
Examples:
WHERE s_class LIKE ‘_R’;
WHERE s_name LIKE ‘J%’;
40
Sorting Query Output
 Use the ORDER BY clause
 Specify sort key, which is column by
which output is sorted
SELECT s_name, s_age
FROM my_students
ORDER BY s_age;
41
Sorting Query Data
 Default sort order
 Numerical: ascending
 Character: A - Z
 Date: oldest - newest
 To force the sort order: use ASC or DESC
 Example
SELECT s_name, s_age
FROM my_students
ORDER BY s_age DESC;
42
Using Calculations in Queries
 Arithmetic operations on retrieved data




Addition (+)
Subtraction (-)
Multiplication (*)
Division (/)
 Example:
SELECT inv_id, qoh*price
FROM inventory;
43
Single-Row
Number Functions
 ABS - absolute value
 CEIL – rounds a number up to the next integer
 FLOOR – rounds a number down to the previous
integer
 MOD – returns the remainder of a number and a
divisor
 POWER - raises a number to an exponent
 ROUND - rounds a number
 SQRT – returns the square root of a value
 TRUNC - truncates a number to the nearest whole
number
44
Using Single-Row
Number Functions
 Example:
SELECT s_name,
TRUNC((SYSDATE - s_dob)/365)
FROM my_students;
45
Single-Row
Character Functions
 CONCAT – joins 2 character strings
 INITCAP – returns a string with the initial letter only
uppercase
 LENGTH – returns the length of a string
 LPAD, RPAD – returns a string with a specific
number of characters added on the left or right side
 LTRIM, RTRIM – returns a string with all instances of
a specific character trimmed from the left or right
side
 REPLACE – replaces all instances of a character with
another character
 UPPER/LOWER – returns a string in all upper/lower
case letters
46
Using Single-Row
Character Functions
 Example:
SELECT UPPER(s_name)
FROM my_students;
47
Date Arithmetic
 To find a date that is a specific
number of days before or after a
known date, add or subtract the
number from the known date
 Example:
SELECT order_date + 30
FROM cust_order;
48
Date Arithmetic
 To find the number of days
between two known dates,
subtract the later date from the
earlier date
 Example:
SELECT SYSDATE – s_dob
FROM my_students;
49
Date Functions
 ADD_MONTHS
 returns a date that is a specific number of
months after a given date
 Example:
SELECT ADD_MONTHS(SYSDATE, 6)
FROM dual;
50
Date Functions
 LAST_DATE
 Returns the date that is the last day
of the month specified in the current
date
 Example:
SELECT LAST_DATE(order_date)
FROM cust_order
WHERE order_id = 1057;
51
Date Functions
 MONTHS_BETWEEN
 Returns the number of months
between two input dates
 Example:
SELECT MONTHS_BETWEEN(order_date,
SYSDATE)
FROM cust_order
WHERE order_id = 1057;
52
Group Functions
 Used to perform an operation on a
field from a group of retrieved records





AVG (average of all retrieved values)
COUNT (number of records retrieved)
MAX (maximum value retrieved)
MIN (minimum value retrieved)
SUM (sum of all retrieved values)
53
Group Function Examples
SELECT
SELECT
SELECT
SELECT
AVG
MAX
MIN
SUM
(s_age)
(s_age)
(s_age)
(s_age)
FROM
FROM
FROM
FROM
my_students;
my_students;
my_students;
my_students;
54
Using the GROUP BY Clause
 GROUP BY must be used if some columns in
the SELECT clause are used in a group
function and some are not
 Group all fields that are not included in the
group function
 Example:
SELECT s_class, AVG(s_age)
FROM my_students
GROUP BY s_class;
55
Creating Alternate Column
Headings in SQL*Plus

Syntax:
SELECT column1 “heading1”, column2
“heading2”, …

Example:
SELECT (SYSDATE – s_dob) “Student Age”
FROM my_students;
56
Creating a Column Alias


Column alias: alternate column name
that can be referenced in the ORDER
BY and GROUP BY clauses
Syntax:
SELECT column1 AS alias1 …
 Example:
SELECT (SYSDATE – s_dob) AS age_alias
ORDER BY age_alias
57
Dynamic SQL Queries


Queries that allow users to specify
search conditions at runtime
Approaches


Substitution Values
Runtime Variables
58
Using Substitution Values


Created when search expression is
prefaced with an ampersand (&)
System then prompts user for value
59
Using Runtime Variables

Runtime variable: variable defined
in SQL*Plus environment

Syntax:
DEFINE variable_name = variable_value;

You can then substitute the variable
name for a query search condition
value
60
Using Runtime Variables

Example:
61
Formatting Data Using the
TO_CHAR Function


Used to display NUMBER and DATE values
using a specific format mask
Syntax:
TO_CHAR(fieldname, ‘format_mask’);
62
Join Queries


Retrieve data from multiple tables by
joining tables using foreign key
references
Join query types:




Inner (equality)
Outer
Self
Inequality
63
FACULTY
Inner Joins

One record is retrieved for each
matching row
64
Inner Joins
 Syntax:
SELECT column1, column2, …
FROM table1, table2
WHERE table1.join_column =
table2.join_column
Join condition
 You must include a join condition for every
link between 2 tables
65
Inner Joins
 Example:
SELECT s_name, f_name
FROM student, faculty
WHERE student.f_id =
faculty.f_id;
 If you have N tables in the FROM
clause, you must have (N - 1) join
conditions
66
Qualifying Field Names

If a field in the SELECT clause exists in
multiple tables in the FROM clause, you
must qualify the field name by prefacing
it with either table’s name
67
Process for Designing
Complex Inner Join Queries
1. Identify all of the tables involved in the
query, and label:



Display fields
Join fields
Search fields
2. Write the query




List
List
List
List
all
all
all
all
display fields in the SELECT clause
table names in the FROM clause
join condition links in the WHERE clause
search fields in the WHERE clause
68
Outer Joins


Limitation of inner joins: some records
may be omitted if corresponding
records don’t exist in one of the tables
Example: retrieve records for all
students, along with their
corresponding ENROLLMENT
information
69
Outer Joins

Student 105 (Michael Connoly) does not
have any ENROLLMENT records
70
Outer Joins

No records retrieved for Michael:
71
Outer Joins

To include records in first (inner) table,
even when they do not have matching
records in second (outer) table, place
outer join marker (+) beside outer table
name in join clause
72
Outer Joins
Outer join marker
73
Self Joins

Used to join a table to itself when the
table has a hierarchical relationship
74
Self Joins


To create a self-join, you need to create
a table alias, which gives an alternate
name to the table so you can create a
join condition
Syntax to create table alias in FROM
clause:
FROM table1 alias1, table2 alias2
75
PARENT_PROJECT
P_ID
Self Joins
PROJECT_NAME
1 Hardware Support Intranet
CLIENT_ID
MGR_ID
PARENT_P_ID
2
105
2 Hardware Support Interface
2
103
1
3 Hardware Support Database
2
102
1
4 T eller Support System
4
105
5 Internet Advertising
6
105
6 Network Design
6
104
7 Exploration Database
5
102
5
SUB_PROJECT
P_ID
PROJECT_NAME
1 Hardware Support Intranet
CLIENT_ID
MGR_ID
PARENT_P_ID
2
105
2 Hardware Support Interface
2
103
1
3 Hardware Support Database
2
102
1
4 T eller Support System
4
105
5 Internet Advertising
6
105
6 Network Design
6
104
7 Exploration Database
5
102
5
PROJECT
P_ID
PROJECT_NAME
1 Hardware Support Intranet
CLIENT_ID
MGR_ID
PARENT_P_ID
2
105
2 Hardware Support Interface
2
103
1
3 Hardware Support Database
2
102
1
4 T eller Support System
4
105
5 Internet Advertising
6
105
6 Network Design
6
104
7 Exploration Database
5
102
5
76
Self Join Example
77
Inequality Joins


Join created by placing making join
condition satisfy an inequality
condition
Only makes sense when
primary/foreign key values are not
surrogate keys
78
Inequality Joins
79
Nested Queries

Created when a subquery is nested
within a main query


Main query: first query listed in SELECT
command
Subquery: retrieves one or more values
that specify the main query’s search
condition
80
Nested Query Where
Subquery Returns a Single Value

Syntax:
SELECT column1, column2, …
FROM table1, table2, …
WHERE join conditions
AND search_column1 = (SELECT column1
FROM table1, table2, …
Subquery
WHERE search and
that returns
join conditions)
one value
81
Nested Query Where
Subquery Returns Multiple Values

Syntax:
SELECT column1, column2, …
FROM table1, table2, …
WHERE join conditions
AND search_column1 IN (SELECT column1
FROM table1, table2, …
Subquery
WHERE search and
that returns
join conditions)
multiple
values
82
Using Set Operators in Queries


Performs set operations on outputs of
two unrelated queries
Both queries must have:


same number of display fields
corresponding display fields must have
same data type
83
Query Set Operators




UNION: combines results, suppresses
duplicate rows
UNION ALL: combines results, displays
duplicates
INTERSECT: finds matching rows
MINUS: returns the difference between
returned record sets
84
Database Views




Logical table based on a query
Does not physically exist in the
database
Presents data in a different format from
underlying tables
Uses:


Security
Simplifying complex queries
85
Database Views


Creating a view:
CREATE VIEW view_name AS
SQL_command;
Views can be queried just like tables:
SELECT *
FROM view_name;
86
Simple Views


Based on SQL query that retrieves data
from only one table
View can support all table DML
operations:



INSERT
UPDATE
DELETE
87
Complex Views


Based on query that retrieves data from
multiple tables
Can only be used to support SELECT
operations

No DML operations supported
88
Synonyms


Alternate name for a table
Allows you to not have to preface table
with owner’s username when you are
querying a table that belongs to
another user
89
Public Synonyms


Can only be created by a DBA
Syntax:
CREATE PUBLIC SYNONYM synonym_name
FOR owner_name.tablename;

All users with privileges to use table can
then use synonym instead of
owner_name.tablename
90
Private Synonyms



You can create private synonyms for
any tables that you have privileges to
use
Only you can use the synonym
Syntax:
CREATE SYNONYM synonym_name
FOR table_name.table_name;
91
Download