SELECT first_name, last_name, salary FROM employees a WHERE

advertisement
Database Administration
ISQA 436
SQL Review,
Oracle Objects
and Data Types,
SQL*Plus
SQL
• Structured Query Language
• Declaritive language vs. procedural
• Three types of SQL statements
– Data Manipulation Language (DML)
– SELECT, INSERT, UPDATE, DELETE
– Data Definition Language (DDL)
– CREATE/ALTER/DROP TABLE, VIEW, INDEX
– Data Control Language (DCL)
– GRANT, REVOKE
Data Manipulation Commands
(DML)
• SELECT
– Retrieve data from the database
• INSERT
– Add new rows to the database
• UPDATE
– Modify data in the database
• DELETE
– Remove rows from the database
SELECT
• SELECT, columns, FROM and table names are mandatory.
The rest are optional.
• SELECT * will select all columns.
SELECT col1, col2, …
FROM table1, table2, …
[ WHERE search_condition
AND search_condition
OR search_condition]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ]]
Joins
• Joins are queries that select from two or
more tables
• A table may be joined with itself in a selfjoin
• Tables are joined on one or more columns to
combine similar rows from each
• The join is done in the WHERE clause of
the SELECT statement
Join - Example
SELECT first_name, last_name, department_name
FROM employees, departments
WHERE employees.department_id = departments.department_id;
FIRST_NAME
-----------Nancy
Daniel
John
Ismael
Jose Manuel
Luis
Shelley
William
LAST_NAME
-----------Greenberg
Faviet
Chen
Sciarra
Urman
Popp
Higgins
Gietz
DEPARTMENT_NAME
--------------Finance
Finance
Finance
Finance
Finance
Finance
Accounting
Accounting
Join Example
select a.first_name, a.last_name, b.last_name as
manager
from employees a, employees b
where a.manager_id = b.employee_id
order by b.last_name;
FIRST_NAME
-----------William
Elizabeth
Sundita
Alexander
Clara
Danielle
LAST_NAME
-----------Smith
Bates
Kumar
Hunold
Vishney
Greene
MANAGER
------------------------Cambrault
Cambrault
Cambrault
De Haan
Errazuriz
Errazuriz
Subqueries
• Subquery is a query within a query
• Subqueries are necessary when a condition
can’t be adequately defined in the WHERE
clause
• Example, find employee with the highest
salary:
select first_name, last_name, salary
from employees
where salary =
(select max(salary) from employees);
Correlated Subquery
• A correlated subquery joins the subquery
(inner query) with the outer query.
• Example, find employees making more than
their department average:
SELECT first_name, last_name, salary
FROM employees a
WHERE a.salary > (select avg(salary)
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND e.department_id = a.department_id);
Subquery Exists Example
• Combine subquery with EXISTS to
determine conditions of existence or nonexistence
• Find all products that have not sold:
SELECT product_id, product_name
FROM product_information p
WHERE NOT EXISTS (SELECT order_id
FROM order_items o
WHERE o.product_id = p.product_id);
Inline View
• Oracle provides an optimization to the
subquery
• The query can be included in the FROM
clause as an inline view.
SELECT first_name, last_name, salary
FROM employees e,
(SELECT avg(salary) avg_sal, d.department_id
FROM departments d, employees e
where d.department_id = e.department_id
GROUP BY d.department_id) dept_avg
WHERE e.salary > dept_avg.avg_sal
AND e.department_id = dept_avg.department_id;
• INSERT
INSERT INTO table (col1, col2,…) VALUES (val1, val2, …)
• UPDATE
UPDATE table SET col1 = val1, col2 = val2, …
WHERE [condition]
• DELETE
DELETE FROM table WHERE [condition]
INSERT
• Two styles: with or without column names:
• Style 1 – insert values in order of columns
– as defined by CREATE TABLE – see object browser.
– All columns must be included or NULL
INSERT INTO item VALUES (21, 'Camoflage Pants', 'C',
'Khaki');
• Style 2 – indicate columns explicitly.
(Not all columns need appear, but must match up with
values)
INSERT INTO item (itemno, itemname, itemtype)
VALUES (22, 'Hunting Vest', 'C');
UPDATE
• Modify data in a table
• UPDATE locks rows during update
• Without a WHERE clause, updates ALL rows!
– Give all employees a 10% raise:
UPDATE emp SET empsalary = 1.10*(empsalary);
– Move all employees in Personnel to Marketing:
UPDATE emp SET deptname = 'Marketing'
WHERE deptname = 'Personnel';
DELETE
• Remove entire rows from table
• Again, without WHERE clause, deletes ALL rows!
DELETE FROM employees;
DELETE FROM employees
WHERE employee_id = 195;
Three options for deleting a table
1.
DELETE FROM emp;
– Safest: Logs the delete transactions in a log file for undo
– Does not delete the table
– Does not reclaim space
2.
TRUNCATE TABLE emp;
– Faster than delete, does not log transactions
– Does not delete the table
– Reclaims space
3.
DROP TABLE emp;
– Fast, does not log deletions
– Deletes the table as well as the rows
– Reclaims all space
Data Definition Language (DDL)
• CREATE
– TABLE
– VIEW
– INDEX
• ALTER
– TABLE
– VIEW
– INDEX
• DROP
– TABLE
– VIEW
– INDEX
CREATE TABLE
• Creates a base table
CREATE TABLE table_name
(col1_name col1_type DEFAULT constraints,
col2_name col2_type DEFAULT constraints,
…,
PRIMARY KEY (pk_col1, pk_col2, …),
FOREIGN KEY (fk_col1, fk_col2, …)
REFERENCES ref_table (ref_col1, ref_col2,…),
CHECK (check conditions));
Constraints
• Primary key
CONSTRAINT pk_stock PRIMARY KEY(stkcode)
• Foreign key
CONSTRAINT fk_stock_nation
FOREIGN KEY(natcode) REFERENCES nation
• Unique
CONSTRAINT unq_stock_stkname UNIQUE(stkname)
• Check
CONSTRAINT item_color_cons
CHECK (itemcolor IN ('White', 'Brown', 'Khaki'))
Index
• An index is a sorted list of rows from a
table
• Only a subset of one or more columns is
stored, along with the address of each row.
• Data retrieval is much faster with an index.
• Types of index
–
–
–
–
–
B-tree (most common)
bitmap
reverse
hash
cluster
Views - virtual tables
• An imaginary table constructed by the DBMS when required –
not a base table.
• Only the definition of the view is stored, not the result
• Usually can’t be updated except in special circumstances
CREATE VIEW view_name
(col1, col2, …)
AS select statement;
Create View example
CREATE VIEW emp_sal AS
(SELECT first_name, last_name, salary FROM
employees);
SELECT * FROM emp_sal;
FIRST_NAME
-------------------Donald
Douglas
Jennifer
Michael
Pat
Susan
Hermann
LAST_NAME
SALARY
------------------------- ---------OConnell
2600
Grant
2600
Whalen
4400
Hartstein
13000
Fay
6000
Mavris
6500
Baer
10000
ORACLE DATABASE OBJECTS
•
•
•
•
•
•
•
•
•
•
Table
Index
View
Materialized View
Synonym
Sequence
Procedure
Function
Package
Trigger
Tables
• Tables contain rows of data with a column for
each datum.
• Each column is of a specific data type
• Columns without data are NULL
• Each table has a primary key – a column that has
unique values that identify rows
• Columns may have foreign key references to a
column in another table. The value in the
foreign table must exist and be identical.
DUAL Table
• ORACLE provides a special dummy table for
using select on data not contained in a table, such
as SYSDATE
SELECT SYSDATE FROM DUAL;
SYSDATE
--------08-FEB-04
SELECT 'This is a test' AS message FROM DUAL;
MESSAGE
-------------This is a test
DUAL Table
• The DUAL table has just one row with one
column, who’s value is ‘X’;
SELECT * FROM DUAL;
D
X
SYSDATE Function
• The SYSDATE function returns the current date
and time:
SELECT SYSDATE FROM DUAL;
SYSDATE
--------08-FEB-04
ROWNUM Column
• Every Oracle query has a pseudo-column
named “rownum”
• rownum can be used to limit output to a
certain number of rows
SELECT * FROM customers
WHERE rownum < 5;
CUST_ID CUST_FIRST_NAME
CUST_LAST_NAME
---------- -------------------- -------------------10 Abigail
Kessel
20 Abner
Everett
30 Abraham
Odenwalld
40 Absolom
Sampson
4 rows selected.
Materialized Views
• Oracle has an object called a materialized
view. It is a view that actually contains
data.
• Data is updated periodically
• Useful for derived data, such as statistical
data
SYNONYMS
•
•
Synonyms are aliases for objects, a name
that can be referred to without the schema
name.
Synonyms are public or private
–
–
–
public = all users can use it
private = only the owner can use it
Example:
CREATE PUBLIC SYNONYM employees FOR employees;
–
Now anyone can select from the employees
table
SELECT * FROM employees;
Sequence
• A sequence generates a sequential integer
value
• Note – sequence numbers may be skipped.
• Useful for serial numbers
CREATE SEQUENCE customers_seq START WITH 1000
INCREMENT BY 1;
• Use nextval to get the next incremental
number
INSERT INTO employees VALUES (employees_seq.nextval,
'John', 'Doe', 'jdoe', '555-1212', TO_DATE(SYSDATE),
'PU_CLERK', 2500, null, null, 30);
SCHEMA
• Generally: A data model diagram
• Oracle: a collection of database objects
belonging to a single user
• The schema has the name of the owner
• Normally, only the owner has access to the
schema
• Other users can access using the user name
prefix if they have been granted privileges:
select * from hr.employees;
Miscellaneous SQL notes
• In Oracle, SQL statements are terminated
with a semi-colon ;
• By convention, uppercase SQL reserved
words and lowercase data-specific words
(not mandatory):
SELECT last_name FROM employees
WHERE employee_id = 197;
• Object names are not case-sensitive, but
string literals are:
SELECT employee_id FROM EMPLOYEES
WHERE last_name = ‘Smith’;
ORACLE DATATYPES
CHAR(size)
Fixed-length character string
VARCHAR2(size) Variable-length character string
NUMBER(p,s)
Floating point number with
precision = p and scale = s
DATE
A date and time
CLOB
Large character string, up to 4GB
BLOB
Large binary object, up to 4GB
BFILE
Pointer to an external file
ROWID
Internal row address
ORACLE DATATYPES - NUMBER
• NUMBER(p,s)
– precision is number of digits to store
– scale is number of digits to the right of the
decimal place
– p is an integer between 1 and 38 (inclusive)
– s is an integer between -84 and 127 (inclusive)
– s = 0 is a decimal integer
– negative s pads zeroes to the left of the decimal
point
– specifying neither p nor s assumes maximum
values
NUMBER EXAMPLES
Actual Data
Specified as
Stored as
1234567.89
NUMBER
1234567.89
NUMBER(9)
1234568
NUMBER(9,2)
1234567.89
NUMBER(9,1)
1234567.9
NUMBER(6,2)
Exceeds precision
NUMBER(9, -2)
1234600
NUMBER(6,8)
.00123456
NUMBER(6,6)
.001235
NUMBER(4,6)
Exceeds precision
.00123456
ORACLE DATE
• Dates and times are stored internally as a
number in Oracle
• To insert or select a date or time in a way
that is readable, it has to be converted to or
from a string using a date format.
– Example: 09-FEB-2004 is in date format DDMON-YYYY
ORACLE DATE
• You can insert a date as a literal string
– Use date format DD-MON-YYYY (day-monthyear)
– Can’t insert the time this way
– Time will be 12:00:00 am
INSERT INTO employees (employee_id, first_name,
last_name, email, hire_date, job_id)
VALUES (208, 'Brown', 'John', 'jbrown@yahoo.com',
'28-JAN-2004', 'SA_REP');
ORACLE DATE
• DATE type includes date and time information.
• To insert a date, use the TO_DATE function and
specify the date, time and date format as strings:
TO_DATE(’08-FEB-2004’, ‘DD-MON-YYYY’)
TO_DATE(’08-FEB-2004 13:44:00’, ‘DD-MON-YYYY
HH24:MI:SS’)
insert into employees (employee_id, first_name,
last_name, email, hire_date, job_id)
values (207, 'Brown', 'John', 'jb@yahoo.com',
TO_DATE('27-JAN-2004', 'DD-MON-YYYY'), 'SA_REP');
ORACLE DATE
• Likewise, when selecting a date from a
table, you can display the date in different
formats using the TO_CHAR function.
select TO_CHAR(SYSDATE, 'DD/MM/YY HH:MI:SS PM') as
"current time" FROM DUAL
current time
-------------------08/02/04 02:37:05 PM
DATE FORMAT ELEMENTS
Element
Meaning
DD
Two-digit day
DAY
Day of week spelled out
MM
Two-digit month
MON
Three-character month, i.e. JAN
MONTH
Month spelled out, i.e. January
YY
Two-digit year – beware: 98 = 2098
YYYY
Four-digit year – safest!
RR
Two-digit year in 20th century, i.e. 98 = 1998
HH
Hour, 11 am and 11 pm are the same
HH24
Military hour, i.e. 14:00 = 2pm
MI
Minutes
SS
Seconds
PM
Show PM or AM for HH
See Table 8-6 on page 224 of textbook for complete listing
DATE FORMAT ELEMENTS
• Examples
SELECT TO_CHAR(SYSDATE, 'DAY MONTH DD, YYYY
HH:MI:SS PM') AS "current time" FROM DUAL;
current time
---------------------------------------SUNDAY
FEBRUARY 08, 2004 04:38:05 PM
SELECT TO_CHAR(SYSDATE, 'MM+DD+RR HH24:MI:SS')
AS "current time" FROM DUAL;
current time
----------------02+08+04 16:40:16
Oracle Date Functions
• TO_CHAR converts date to a character string
• TO_DATE converts a character string to a date
• TRUNC returns date with no time (time is set to
00:00:00. Use this when you want to compare the
date and not the time
• ADD_MONTHS, returns date incremented by a
specified number of monts
• Addition: adding integers to a date adds that many
days to the date
See Table 8-5 on page 220 for complete list
TRUNC example
insert into emp
(first_name, last_name, email, job_id, hire_date)
values
('Mark', 'Freeman', 'markf@pdx.edu', 50, '06-OCT2004');
1 row created.
SELECT * FROM emp WHERE hire_date = SYSDATE;
no rows selected
SELECT * FROM emp WHERE hire_date = trunc(SYSDATE);
FIRST_NAME
LAST_NAME…
-------------------- ------------------------Mark
Freeman…
1 row selected.
SELECT SYSDATE FROM DUAL;
SYSDATE
--------06-OCT-04
Date Arithmetic
Examples
SELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL;
ADD_MONTH
--------06-JAN-05
SELECT SYSDATE + 7 AS "Next Week" FROM DUAL;
Next Week
--------13-OCT-04
PL/SQL Procedures
• PL/SQL stands for procedural language.
• A procedures is a group of SQL statements
with programming logic
• A function is a procedure that returns a
value
• A trigger is a procedure that fires when a
database event occurs, such as an insert or
update
• A package is a named group of procedures
and functions
SQL*Plus
• Oracle’s command-line SQL interpreter
• Two kinds of commands
– SQL commands
– SQL*Plus commands
• SQL*Plus commands are special formatting
and control commands that are not part of
SQL
• SQL*Plus commands are not case-sensitive
and can be abbreviated
SQL*Plus Transactions
• By default SQL*Plus does not run in autocommit
mode.
• DELETE’s, UPDATE’s and INSERT’s do not
become permanent until a COMMIT statement is
explicitely executed
• This means you can use ROLLBACK to undo
changes
• If you end a session with out committing, Oracle
will automatically rollback your changes
• Autocommit can be enaabled with the SET
AUTOCOMMIT ON comand
SQL*Plus Commands - DESCRIBE
• DESCRIBE
– Lists the description of an Oracle object
– Can be abbreviated as ‘DESC’
desc move_ccuser
PROCEDURE move_ccuser
Argument Name Type
-------------- ----------------------CCUSER
VARCHAR2
TSPACE
VARCHAR2
In/Out Default?
------ -------IN
IN
SQL*Plus Commands - DESCRIBE
DESCRIBE employees
Name
---------------EMPLOYEE_ID
FIRST_NAME
LAST_NAME
EMAIL
PHONE_NUMBER
HIRE_DATE
JOB_ID
SALARY
COMMISSION_PCT
MANAGER_ID
DEPARTMENT_ID
Null?
Type
-------- ------------NOT NULL NUMBER(6)
VARCHAR2(20)
NOT NULL VARCHAR2(25)
NOT NULL VARCHAR2(25)
VARCHAR2(20)
NOT NULL DATE
NOT NULL VARCHAR2(10)
NUMBER(8,2)
NUMBER(2,2)
NUMBER(6)
NUMBER(4)
SQL*Plus Commands - spool
• spool opens a file and sends all output to the
file
• Filename cannot contain spaces
spool h:\test.out
• Turn off with the spool
off
command
SQL*Plus Commands - SET
• The SET command sets certain parameters
affecting the output display
• SET ECHO [ON/OFF]
– Controls display of SQL commands in reports
• SET HEADING [ON/OFF]
– Control display of column headings
• SET LINESIZE int
– Width of a line before wrapping
• SET PAGESIZE int
– Number of lines to print between headers
– Set to 0 turns off all heading and page breaks
• SET UNDERLINE char
– Sets the underline character at column headings to char
SQL*Plus Commands - SHOW
• The SHOW command displays parameter settings
• SHOW SGA
– Shows memory configuration
• SHOW PARAMETER parameter name
– Shows setting of an init.ora parameter
• SHOW ERROR
– Displays PL/SQL error messages
• SHOW USER
• SHOW SPOOL
• SHOW ALL
SQL*Plus Commands - HELP
• HELP topic displays information about other commands
help spool
SPOOL
----Stores query results in an operating system
file, or sends the
file to a printer.
In iSQL*Plus, output can be directed to a
file.
SPO[OL] [file_name[.ext] | OFF | OUT]
Not available in iSQL*Plus
Download