Oracle SQL Overview
1.
Writing Basic SQL Statements 2. Restricting and Sorting Data 3. Displaying Data from Multiple Tables 4. Manipulating Data: INSERT, UPDATE, DELETE 5. Creating and Managing Tables 6. Creating Views
1. Writing Basic SQL Statements
Capabilities of SQL SELECT Statements
Selection Projection
Table 1
Join
Table 1
Table 1
Table 2
Basic SELECT Statement
SELECT FROM [DISTINCT] {*, column [alias],...} table;
SELECT identifies what columns. FROM identifies which table.
Writing SQL Statements
SQL statements are not case sensitive. SQL statements can be on one or more lines. Keywords cannot be abbreviated or split across lines.
Clauses are usually placed on separate lines.
Tabs and indents are used to enhance readability.
Selecting All Columns
SQL> SELECT * 2 FROM dept; DEPTNO --------10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON
Selecting Specific Columns
SQL> SELECT deptno, loc 2 FROM dept; DEPTNO --------10 20 30 40 LOC ------------NEW YORK DALLAS CHICAGO BOSTON
Arithmetic Expressions
Create expressions on NUMBER and DATE data by using arithmetic operators.
Operator + Description Add Subtract
*
/
Multiply
Divide
Using Arithmetic Operators
SQL> SELECT ename, sal, sal+300 2 FROM emp; ENAME SAL SAL+300 ---------- --------- --------KING 5000 5300 BLAKE 2850 3150 CLARK 2450 2750 JONES 2975 3275 MARTIN 1250 1550 ALLEN 1600 1900 ... 14 rows selected.
Operator Precedence
* / +
Multiplication and division take priority over addition and subtraction.
Operators of the same priority are evaluated from left to right. Parentheses are used to force prioritized evaluation and to clarify statements.
10
Operator Precedence
SQL> SELECT ename, sal, 12*sal+100 2 FROM emp; ENAME SAL 12*SAL+100 ---------- --------- ---------KING 5000 60100 BLAKE 2850 34300 CLARK 2450 29500 JONES 2975 35800 MARTIN 1250 15100 ALLEN 1600 19300 ... 14 rows selected.
11
Using Parentheses
SQL> SELECT ename, sal, 12*(sal+100) 2 FROM emp; ENAME SAL 12*(SAL+100) ---------- --------- ----------KING 5000 61200 BLAKE 2850 35400 CLARK 2450 30600 JONES 2975 36900 MARTIN 1250 16200 ... 14 rows selected.
12
Defining a Null Value
A null is a value that is unavailable, unassigned, unknown, or inapplicable. A null is not the same as zero or a blank space.
SQL> SELECT 2 FROM ename, job, comm emp;
ENAME JOB COMM ---------- --------- --------KING PRESIDENT BLAKE MANAGER ... TURNER SALESMAN 0 ... 14 rows selected.
13
Null Values in Arithmetic Expressions
Arithmetic expressions containing a null value evaluate to null.
SQL> select ename, 12*sal+comm 2 from emp 3 WHERE ename='KING';
ENAME 12*SAL+COMM ---------- ----------KING
14
Defining a Column Alias
Renames a column heading Is useful with calculations Immediately follows column name; optional AS keyword between column name and alias Requires double quotation marks if it contains spaces or special characters or is case sensitive
15
Using Column Aliases
SQL> SELECT ename AS name, sal salary 2 FROM emp; NAME SALARY ------------- --------...
SQL> SELECT ename "Name", 2 sal*12 "Annual Salary" 3 FROM emp;
Name Annual Salary ------------- -------------
...
16
Concatenation Operator
Concatenates columns or character strings to other columns Is represented by two vertical bars (||) Creates a resultant column that is a character expression
17
Using the Concatenation Operator
SQL> SELECT 2 FROM ename||job AS "Employees" emp;
Employees ------------------KINGPRESIDENT BLAKEMANAGER CLARKMANAGER JONESMANAGER MARTINSALESMAN ALLENSALESMAN ... 14 rows selected.
18
Literal Character Strings
A literal is a character, expression, or number included in the SELECT list. Date and character literal values must be enclosed within single quotation marks.
Each character string is output once for each row returned.
19
Using Literal Character Strings
SQL> SELECT ename ||' '||'is a'||' '||job 2 AS "Employee Details" 3 FROM emp; Employee Details ------------------------KING is a PRESIDENT BLAKE is a MANAGER CLARK is a MANAGER JONES is a MANAGER MARTIN is a SALESMAN ... 14 rows selected.
20
Duplicate Rows
The default display of queries is all rows, including duplicate rows.
SQL> SELECT deptno 2 FROM emp;
DEPTNO --------10 30 10 20 ... 14 rows selected.
21
Eliminating Duplicate Rows
Eliminate duplicate rows by using the DISTINCT keyword in the SELECT clause.
SQL> SELECT DISTINCT deptno 2 FROM emp;
DEPTNO --------10 20 30
22
SQL and SQL*Plus Interaction
SQL Statements
Buffer
SQL Statements
Server
SQL*Plus
SQL*Plus Commands Formatted Report
Query Results
23
SQL Statements Versus SQL*Plus Commands
SQL A language ANSI standard Keyword cannot be abbreviated Statements manipulate data and table definitions in the database
SQL statements SQL buffer
SQL*Plus An environment Oracle proprietary Keywords can be abbreviated Commands do not allow manipulation of values in the database
SQL*Plus commands
SQL*Plus buffer
24
Overview of SQL*Plus
Log in to SQL*Plus.
Describe the table structure.
Edit your SQL statement. Execute SQL from SQL*Plus. Save SQL statements to files and append SQL statements to files. Execute saved files. Load commands from file to buffer to edit.
25
Logging In to SQL*Plus
From Windows environment:
From command line: sqlplus [username[/password [@database]]]
26
Displaying Table Structure
Use the SQL*Plus DESCRIBE command to display the structure of a table.
DESC[RIBE] tablename
27
Displaying Table Structure
SQL> DESCRIBE dept
Name Null? ----------------- -------DEPTNO NOT NULL DNAME LOC
Type -----------NUMBER(2) VARCHAR2(14) VARCHAR2(13)
28
2. Restricting and Sorting Data
Objectives
After completing this lesson, you should be able to do the following: Limit the rows retrieved by a query Sort the rows retrieved by a query
32
Limiting Rows Using a Selection
EMP
EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER ... DEPTNO 10 30 10 20
"retrieve all employees in department 10"
EMP
EMPNO ENAME JOB ... DEPTNO 10 10 10
7839 KING PRESIDENT 7782 CLARK MANAGER 7934 MILLER CLERK
33
Limiting Rows Selected
Restrict the rows returned by using the WHERE clause.
SELECT FROM [WHERE [DISTINCT] {*| column [alias], ...} table condition(s)];
The WHERE clause follows the FROM clause.
34
Using the WHERE Clause
SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE job='CLERK';
ENAME ---------JAMES SMITH ADAMS MILLER
JOB DEPTNO --------- --------CLERK 30 CLERK 20 CLERK 20 CLERK 10
35
Character Strings and Dates
Character strings and date values are enclosed in single quotation marks. Character values are case sensitive and date values are format sensitive.
The default date format is DD-MON-YY.
SQL> SELECT 2 FROM 3 WHERE ename, job, deptno emp ename = 'JAMES';
36
Comparison Operators
Operator
= > >= < <= <>
Meaning
Equal to Greater than Greater than or equal to Less than Less than or equal to Not equal to
37
Using the Comparison Operators
SQL> SELECT ename, sal, comm 2 FROM emp 3 WHERE sal<=comm;
ENAME SAL COMM ---------- --------- --------MARTIN 1250 1400
38
Other Comparison Operators
Operator BETWEEN ...AND... IN(list) LIKE IS NULL Meaning Between two values (inclusive)
Match any of a list of values Match a character pattern Is a null value
39
Using the BETWEEN Operator
Use the BETWEEN operator to display rows based on a range of values.
SQL> SELECT 2 FROM 3 WHERE ename, sal emp sal BETWEEN 1000 AND 1500;
ENAME SAL ---------- --------MARTIN 1250 TURNER 1500 WARD 1250 ADAMS 1100 MILLER 1300
Lower limit
Higher limit
40
Using the IN Operator
Use the IN operator to test for values in a list.
SQL> SELECT 2 FROM 3 WHERE empno, ename, sal, mgr emp mgr IN (7902, 7566, 7788);
EMPNO --------7902 7369 7788 7876
ENAME SAL MGR ---------- --------- --------FORD 3000 7566 SMITH 800 7902 SCOTT 3000 7566 ADAMS 1100 7788
41
Using the LIKE Operator
Use the LIKE operator to perform wildcard searches of valid search string values.
Search conditions can contain either literal characters or numbers.
% denotes zero or many characters.
_ denotes one character.
SQL> SELECT 2 FROM 3 WHERE ename emp ename LIKE 'S%';
42
Using the LIKE Operator
You can combine pattern-matching characters.
SQL> SELECT 2 FROM 3 WHERE ENAME ---------MARTIN JAMES WARD ename emp ename LIKE '_A%';
You can use the ESCAPE identifier to search for "%" or "_".
43
Using the IS NULL Operator
Test for null values with the IS NULL operator.
SQL> SELECT 2 FROM 3 WHERE ename, mgr emp mgr IS NULL;
ENAME MGR ---------- --------KING
44
Logical Operators
Operator AND OR Meaning Returns TRUE if both component conditions are TRUE Returns TRUE if either component condition is TRUE Returns TRUE if the following condition is FALSE
NOT
45
Using the AND Operator
AND requires both conditions to be TRUE.
SQL> 2 3 4 SELECT FROM WHERE AND empno, ename, job, sal emp sal>=1100 job='CLERK'; JOB SAL --------- --------CLERK 1100 CLERK 1300
EMPNO --------7876 7934
ENAME ---------ADAMS MILLER
46
Using the OR Operator
OR requires either condition to be TRUE.
SQL> 2 3 4 SELECT FROM WHERE OR empno, ename, job, sal emp sal>=1100 job='CLERK'; JOB SAL --------- --------PRESIDENT 5000 MANAGER 2850 MANAGER 2450 MANAGER 2975 SALESMAN 1250 CLERK 950
EMPNO ENAME --------- ---------7839 KING 7698 BLAKE 7782 CLARK 7566 JONES 7654 MARTIN ... 7900 JAMES ... 14 rows selected.
47
Using the NOT Operator
SQL> SELECT ename, job 2 FROM emp 3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST');
ENAME ---------KING MARTIN ALLEN TURNER WARD
JOB --------PRESIDENT SALESMAN SALESMAN SALESMAN SALESMAN
48
Rules of Precedence
Order Evaluated 1 2 3 4 Operator All comparison operators NOT AND OR
Override rules of precedence by using parentheses.
49
Rules of Precedence
SQL> 2 3 4 5 SELECT FROM WHERE OR AND ename, job, sal emp job='SALESMAN' job='PRESIDENT' sal>1500;
ENAME ---------KING MARTIN ALLEN TURNER WARD
JOB SAL --------- --------PRESIDENT 5000 SALESMAN 1250 SALESMAN 1600 SALESMAN 1500 SALESMAN 1250
50
Rules of Precedence
Use parentheses to force priority.
SQL> 2 3 4 5 SELECT FROM WHERE OR AND ename, job, sal emp (job='SALESMAN' job='PRESIDENT') sal>1500;
ENAME ---------KING ALLEN
JOB SAL --------- --------PRESIDENT 5000 SALESMAN 1600
51
ORDER BY Clause
Sort rows with the ORDER BY clause ASC: ascending order, default DESC: descending order The ORDER BY clause comes last in the SELECT statement.
SQL> SELECT ename, job, deptno, hiredate 2 FROM emp 3 ORDER BY hiredate;
ENAME JOB DEPTNO HIREDATE ---------- --------- --------- --------SMITH CLERK 20 17-DEC-80 ALLEN SALESMAN 30 20-FEB-81 ... 14 rows selected.
52
Sorting in Descending Order
SQL> SELECT ename, job, deptno, hiredate 2 FROM emp 3 ORDER BY hiredate DESC; ENAME JOB DEPTNO HIREDATE ---------- --------- --------- --------ADAMS CLERK 20 12-JAN-83 SCOTT ANALYST 20 09-DEC-82 MILLER CLERK 10 23-JAN-82 JAMES CLERK 30 03-DEC-81 FORD ANALYST 20 03-DEC-81 KING PRESIDENT 10 17-NOV-81 MARTIN SALESMAN 30 28-SEP-81 ... 14 rows selected.
53
Sorting by Column Alias
SQL> SELECT empno, ename, sal*12 annsal 2 FROM emp 3 ORDER BY annsal; EMPNO ENAME ANNSAL --------- ---------- --------7369 SMITH 9600 7900 JAMES 11400 7876 ADAMS 13200 7654 MARTIN 15000 7521 WARD 15000 7934 MILLER 15600 7844 TURNER 18000 ... 14 rows selected.
54
Sorting by Multiple Columns
The order of ORDER BY list is the order of sort.
SQL> SELECT ename, deptno, sal 2 FROM emp 3 ORDER BY deptno, sal DESC; ENAME DEPTNO SAL ---------- --------- --------KING 10 5000 CLARK 10 2450 MILLER 10 1300 FORD 20 3000 ... 14 rows selected.
You can sort by a column that is not in the SELECT list. 55
Summary
SELECT FROM [WHERE [ORDER BY [DISTINCT] {*| column [alias], ...} table condition(s)] {column, expr, alias} [ASC|DESC]];
56
3. Displaying Data from Multiple Tables
Objectives
After completing this lesson, you should be able to do the following: Write SELECT statements to access data from more than one table using equality and nonequality joins
View data that generally does not meet a join condition by using outer joins
Join a table to itself
58
Obtaining Data from Multiple Tables
EMP
EMPNO -----7839 7698 ... 7934 ENAME ----KING BLAKE ... DEPTNO ... -----... 10 ... 30 10
DEPT
DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON
MILLER ...
EMPNO DEPTNO LOC ----- ------- -------7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO ... 14 rows selected.
59
What Is a Join?
Use a join to query data from more than one table.
SELECT FROM WHERE table1.column, table2.column table1, table2 table1.column1 = table2.column2;
Write the join condition in the WHERE clause. Prefix the column name with the table name when the same column name appears in more than one table.
60
Cartesian Product
A Cartesian product is formed when:
A join condition is omitted A join condition is invalid All rows in the first table are joined to
all rows in the second table
To avoid a Cartesian product, always include a valid join condition in a WHERE clause.
61
Generating a Cartesian Product
EMP (14 rows)
EMPNO -----7839 7698 ... 7934 ENAME ----KING BLAKE ... DEPTNO ... -----... 10 ... 30 10
DEPT (4 rows)
DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON
MILLER ...
Cartesian product: 14*4=56 rows
ENAME DNAME --------------KING ACCOUNTING BLAKE ACCOUNTING ... KING RESEARCH BLAKE RESEARCH ... 56 rows selected.
62
Types of Joins
Equijoin Non-equijoin Outer join Self join
63
What Is an Equijoin?
EMP
EMPNO ENAME DEPTNO ------ ------- ------7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20 ... 14 rows selected.
DEPT
DEPTNO ------10 30 10 20 30 30 30 30 30 20 20 ... 14 rows DNAME ---------ACCOUNTING SALES ACCOUNTING RESEARCH SALES SALES SALES SALES SALES RESEARCH RESEARCH selected. LOC -------NEW YORK CHICAGO NEW YORK DALLAS CHICAGO CHICAGO CHICAGO CHICAGO CHICAGO DALLAS DALLAS
Foreign key
Primary key
64
Retrieving Records with Equijoins
SQL> SELECT 2 3 FROM 4 WHERE emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc emp, dept emp.deptno=dept.deptno;
EMPNO ENAME DEPTNO DEPTNO LOC ----- ------ ------ ------ --------7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS ... 14 rows selected.
65
Qualifying Ambiguous Column Names
Use table prefixes to qualify column names that are in multiple tables. Improve performance by using table prefixes. Distinguish columns that have identical names but reside in different tables by using column aliases.
66
Additional Search Conditions Using the AND Operator
EMP
EMPNO ENAME DEPTNO ------ ------- ------7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20 ... 14 rows selected.
DEPT
DEPTNO DNAME ------ --------10 ACCOUNTING 30 SALES 10 ACCOUNTING 20 RESEARCH 30 SALES 30 SALES 30 SALES 30 SALES 30 SALES 20 RESEARCH 20 RESEARCH ... 14 rows selected. LOC -------NEW YORK CHICAGO NEW YORK DALLAS CHICAGO CHICAGO CHICAGO CHICAGO CHICAGO DALLAS DALLAS
67
Using Table Aliases
Simplify queries by using table aliases.
SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno;
SQL> SELECT e.empno, e.ename, e.deptno, 2 d.deptno, d.loc 3 FROM emp e, dept d 4 WHERE e.deptno=d.deptno;
68
Joining More Than Two Tables
CUSTOMER
NAME CUSTID ---------------JOCKSPORTS 100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST TENNIS 103 K+T SPORTS 105 SHAPE UP 106 WOMENS SPORTS 107 ... ... 9 rows selected.
ORD
CUSTID ORDID ------- ------101 610 102 611 104 612 106 601 102 602 ITEM 106 604 ORDID ITEMID 106 605 ------ ------... 610 3 21 rows selected. 611 1 612 1 601 1 602 1 ... 64 rows selected.
69
Non-Equijoins
EMP
EMPNO ENAME SAL ------ ------- -----7839 KING 5000 7698 BLAKE 2850 7782 CLARK 2450 7566 JONES 2975 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950 ... 14 rows selected.
SALGRADE
GRADE LOSAL HISAL ----- ----- -----1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999
salary in the EMP table is between low salary and high salary in the SALGRADE table
70
Retrieving Records with Non-Equijoins
SQL> 2 3 4 SELECT FROM WHERE BETWEEN e.ename, e.sal, s.grade emp e, salgrade s e.sal s.losal AND s.hisal;
ENAME SAL GRADE ---------- --------- --------JAMES 950 1 SMITH 800 1 ADAMS 1100 1 ... 14 rows selected.
71
Outer Joins
EMP
ENAME ----KING BLAKE CLARK JONES ... DEPTNO -----10 30 10 20
DEPT
DEPTNO -----10 30 10 20 ... 40 DNAME ---------ACCOUNTING SALES ACCOUNTING RESEARCH OPERATIONS
No employee in the OPERATIONS department
72
Outer Joins
You use an outer join to also see rows that do not usually meet the join condition. Outer join operator is the plus sign (+).
SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column(+) = table2.column; SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column = table2.column(+);
73
Using Outer Joins
SQL> 2 3 4 SELECT FROM WHERE ORDER BY e.ename, d.deptno, d.dname emp e, dept d e.deptno(+) = d.deptno e.deptno;
ENAME DEPTNO DNAME ---------- --------- ------------KING 10 ACCOUNTING CLARK 10 ACCOUNTING ... 40 OPERATIONS 15 rows selected.
74
Self Joins
EMP (WORKER)
EMPNO ----7839 7698 7782 7566 7654 7499 ENAME -----KING BLAKE CLARK JONES MARTIN ALLEN MGR ---7839 7839 7839 7698 7698
EMP (MANAGER)
EMPNO ENAME ----- -------7839 7839 7839 7698 7698 KING KING KING BLAKE BLAKE
MGR in the WORKER table is equal to EMPNO in the MANAGER table
75
Joining a Table to Itself
SQL> SELECT worker.ename||' works for '||manager.ename 2 FROM emp worker, emp manager 3 WHERE worker.mgr = manager.empno;
WORKER.ENAME||'WORKSFOR'||MANAG ------------------------------BLAKE works for KING CLARK works for KING JONES works for KING MARTIN works for BLAKE ... 13 rows selected.
76
Summary
SELECT FROM WHERE table1.column, table2.column table1, table2 table1.column1 = table2.column2;
Equijoin Non-equijoin Outer join Self join
77
4. Manipulating Data: INSERT, UPDATE, DELETE
Data Manipulation Language
A DML statement is executed when you:
Add new rows to a table Modify existing rows in a table
Remove existing rows from a table
A transaction consists of a collection of DML statements that form a logical unit of work.
80
Adding a New Row to a Table
50 DEVELOPMENT DETROIT
New row DEPT
DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON
insert a new row into DEPT table
DEPT
DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON
50 DEVELOPMENT DETROIT
81
The INSERT Statement
Add new rows to a table by using the INSERT statement.
INSERT INTO VALUES table [(column [, column...])] (value [, value...]);
Only one row is inserted at a time with this syntax.
82
Inserting New Rows
Insert a new row containing values for each column. List values in the default order of the columns in the table. Optionally list the columns in the INSERT clause.
SQL> INSERT INTO 2 VALUES 1 row created. dept (deptno, dname, loc) (50, 'DEVELOPMENT', 'DETROIT');
Enclose character and date values within single quotation marks. 83
Inserting Rows with Null Values
Implicit method: Omit the column from the column list.
SQL> INSERT INTO 2 VALUES 1 row created. dept (deptno, dname ) (60, 'MIS');
Explicit method: Specify the NULL keyword.
SQL> INSERT INTO 2 VALUES 1 row created. dept (70, 'FINANCE', NULL);
84
Copying Rows from Another Table
Write your INSERT statement with a subquery.
SQL> INSERT INTO managers(id, name, salary, hiredate) 2 SELECT empno, ename, sal, hiredate 3 FROM emp 4 WHERE job = 'MANAGER'; 3 rows created.
Do not use the VALUES clause. Match the number of columns in the INSERT clause to those in the subquery.
89
Changing Data in a Table
EMP
EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER ... DEPTNO 10 30 10 20
update a row in EMP table
EMP
EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER ... DEPTNO 10 30 20 10 20
90
The UPDATE Statement
Modify existing rows with the UPDATE statement.
UPDATE SET [WHERE table column = value [, column = value, ...] condition];
Update more than one row at a time, if required.
91
Updating Rows in a Table
Specific row or rows are modified when you specify the WHERE clause.
SQL> UPDATE emp 2 SET deptno = 20 3 WHERE empno = 7782; 1 row updated.
All rows in the table are modified if you omit the WHERE clause.
SQL> UPDATE employee 2 SET deptno = 20; 14 rows updated.
92
Updating Rows Based on Another Table
Use subqueries in UPDATE statements to update rows in a table based on values from another table.
SQL> UPDATE employee 2 SET deptno = 3 4 5 WHERE job = 6 7 2 rows updated. (SELECT FROM WHERE (SELECT FROM WHERE deptno emp empno = 7788) job emp empno = 7788);
94
Removing a Row from a Table
DEPT
DEPTNO -----10 20 30 40 50 60 ... DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON DEVELOPMENT DETROIT MIS
delete a row from DEPT table
DEPT
DEPTNO -----10 20 30 40 60 ... DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS MIS LOC -------NEW YORK DALLAS CHICAGO BOSTON
96
The DELETE Statement
You can remove existing rows from a table by using the DELETE statement.
DELETE [FROM] [WHERE table condition];
97
Deleting Rows from a Table
Specific rows are deleted when you specify the WHERE clause.
SQL> DELETE FROM 2 WHERE 1 row deleted. department dname = 'DEVELOPMENT';
All rows in the table are deleted if you omit the WHERE clause.
SQL> DELETE FROM 4 rows deleted. department;
98
Database Transactions
Consist of one of the following statements: DML statements that make up one consistent change to the data One DDL statement One DCL statement
101
Committing Data
Make the changes.
SQL> UPDATE emp 2 SET deptno = 10 3 WHERE empno = 7782; 1 row updated.
Commit the changes.
SQL> COMMIT; Commit complete.
108
Read Consistency
Read consistency guarantees a consistent view of the data at all times.
Changes made by one user do not conflict with changes made by another user.
Read consistency ensures that on the same data:
Readers do not wait for writers Writers do not wait for readers
112
Implementation of Read Consistency
UPDATE emp SET sal = 2000 WHERE ename = 'SCOTT';
Data blocks Rollback segments
User A
SELECT * FROM emp;
Read consistent image
changed and unchanged data before change old data
User B
113
Locking
Oracle locks: Prevent destructive interaction between concurrent transactions Require no user action Automatically use the lowest level of restrictiveness Are held for the duration of the transaction Have two basic modes: Exclusive Share
114
Summary
Statement INSERT UPDATE DELETE COMMIT SAVEPOINT ROLLBACK Description Adds a new row to the table Modifies existing rows in the table Removes existing rows from the table Makes all pending changes permanent Allows a rollback to the savepoint marker Discards all pending data changes
115
5. Creating and Managing Tables
Database Objects
Object
Table
Description
Basic unit of storage; composed of rows and columns
View
Logically represents subsets of data from one or more tables
Sequence Index Synonym
Generates primary key values Improves the performance of some queries Gives alternative names to objects
118
Naming Conventions
Must begin with a letter Can be 130 characters long Must contain only AZ, az, 09, _, $, and # Must not duplicate the name of another object owned by the same user Must not be an Oracle Server reserved word
119
The CREATE TABLE Statement
You must have :
CREATE TABLE privilege A storage area
CREATE TABLE [schema.]table (column datatype [DEFAULT expr][, ...]);
You specify:
Table name Column name, column datatype, and
column size 120
Referencing Another Users Tables
Tables belonging to other users are not in the users schema. You should use the owners name as a prefix to the table.
121
Creating Tables
Create the table.
SQL> CREATE TABLE dept 2 (deptno NUMBER(2), 3 dname VARCHAR2(14), 4 loc VARCHAR2(13)); Table created.
Confirm table creation.
SQL> DESCRIBE dept
Name Null? --------------------------- -------DEPTNO DNAME LOC Type --------NUMBER(2) VARCHAR2(14) VARCHAR2(13)
123
Datatypes
Datatype VARCHAR2(size) CHAR(size) Description Variable-length character data Fixed-length character data
NUMBER(p,s)
DATE LONG
Variable-length numeric data
Date and time values Variable-length character data up to 2 gigabytes
CLOB
RAW and LONG RAW BLOB
Single-byte character data up to 4 gigabytes
Raw binary data Binary data up to 4 gigabytes
BFILE
Binary data stored in an external file; up to 4 gigabytes
126
The ALTER TABLE Statement
Use the ALTER TABLE statement to: Add a new column
Modify an existing column
Define a default value for the new column
ALTER TABLE table ADD (column datatype [DEFAULT expr] [, column datatype]...);
ALTER TABLE table MODIFY (column datatype [DEFAULT expr] [, column datatype]...);
129
Adding a Column
DEPT30
EMPNO -----7698 7654 7499 7844 ... ENAME ANNSAL ---------- -------BLAKE 34200 MARTIN 15000 ALLEN 19200 TURNER 18000
New column
HIREDATE JOB
01-MAY-81 28-SEP-81 20-FEB-81 08-SEP-81
add a new column into DEPT30 table
DEPT30
EMPNO -----7698 7654 7499 7844 ... ENAME ANNSAL ---------- -------BLAKE 34200 MARTIN 15000 ALLEN 19200 TURNER 18000 HIREDATE 01-MAY-81 28-SEP-81 20-FEB-81 08-SEP-81 JOB
130
Adding a Column
You use the ADD clause to add columns.
SQL> ALTER TABLE dept30 2 ADD (job VARCHAR2(9)); Table altered.
The new column becomes the last column.
EMPNO ENAME ANNSAL HIREDATE JOB --------- ---------- --------- --------- ---7698 BLAKE 34200 01-MAY-81 7654 MARTIN 15000 28-SEP-81 7499 ALLEN 19200 20-FEB-81 7844 TURNER 18000 08-SEP-81 ... 6 rows selected.
131
Modifying a Column
You can change a columns datatype, size, and default value.
ALTER TABLE dept30 MODIFY (ename VARCHAR2(15)); Table altered.
A change to the default value affects only subsequent insertions to the table.
132
Dropping a Table
All data and structure in the table is deleted. Any pending transactions are committed. All indexes are dropped. You cannot roll back this statement.
SQL> DROP TABLE dept30; Table dropped.
133
Changing the Name of an Object
To change the name of a table, view, sequence, or synonym, you execute the RENAME statement.
SQL> RENAME dept TO department; Table renamed.
You must be the owner of the object.
134
Summary
Statement CREATE TABLE Description Creates a table
ALTER TABLE
DROP TABLE RENAME TRUNCATE COMMENT
Modifies table structures
Removes the rows and table structure Changes the name of a table, view, sequence, or synonym Removes all rows from a table and releases the storage space Adds comments to a table or view
137
6. Creating Views
Objectives
After completing this lesson, you should be able to do the following:
Describe a view
Create a view Retrieve data through a view Alter the definition of a view Insert, update, and delete data through a view Drop a view
139
Database Objects
Object Table Description Basic unit of storage; composed of rows and columns Logically represents subsets of data from one or more tables Generates primary key values Improves the performance of some queries Alternative name for an object
View
Sequence Index Synonym
140
What Is a View?
EMP Table
EMPNO ENAME JOB JOB MGR HIREDATE SAL COMM DEPTNO SAL COMM DEPTNO ----- ------- --------- ----- --------- ----- ----- -------
----- KING 7839 --------PRESIDENT ---- 17-NOV-81 ------ ----- ---------------------- 5000 10
-7698 BLAKE 7839 CLARK 7782 KING 10 7566 JONES MANAGER MANAGER 7839 01-MAY-81 7839 02-APR-81 2850 2450 5000 2975 1250 1400 1500 300 1600 300 30 10 20 30 30 MANAGER PRESIDENT 7839 09-JUN-81 17-NOV-81
7782 MARTIN 7654 CLARK MANAGER 7839 09-JUN-81 EMPVU10 ViewSALESMAN 7698 28-SEP-81 10 7499 ALLEN SALESMAN 7698 20-FEB-81 EMPNO 7844 TURNER CLERK ENAME JOB 7698 08-SEP-81 ------ 7934 MILLER SALESMAN 7782 23-JAN-82 -------- ----------10 7900 JAMES CLERK 7698 03-DEC-81 7839 7566 WARD SALESMAN 7698 22-FEB-81 KING PRESIDENT 7521 JONES MANAGER 7839 02-APR-81 7902 7782 20 FORD ANALYST 7566 03-DEC-81 CLARK MANAGER 7369 SCOTT 7566 7934 7788 SMITH CLERK MILLER ANALYST 7902 17-DEC-80 CLERK 09-DEC-82 20 7788 SCOTT ANALYST 7566 09-DEC-82 7782 23-JAN-82 7902 17-DEC-80 7566 03-DEC-81
1500 1300
950 1250 2975 3000 3000 800 3000
0
500
30
30 30 20 20 20
7876 ADAMS 7876
20 7934 MILLER 7369 20 7902 20 FORD SMITH
CLERK CLERK
CLERK CLERK ANALYST
7788 12-JAN-83
1100 1100
1300 800 3000
20
10
7698
BLAKE
MANAGER
7839 01-MAY-81
2850
141
Why Use Views?
To restrict database access To make complex queries easy To allow data independence To present different views of the same data
142
Simple Views and Complex Views
Feature Number of tables Contain functions Contain groups of data Simple Views Complex Views One No No One or more Yes Yes
DML through view
Yes
Not always
143
Creating a View
You embed a subquery within the CREATE VIEW statement.
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY]
The subquery can contain complex SELECT syntax. The subquery cannot contain an ORDER BY clause.
144
Creating a View
Create a view, EMPVU10, that contains details of employees in department 10.
SQL> 2 3 4 View CREATE VIEW AS SELECT FROM WHERE created. empvu10 empno, ename, job emp deptno = 10;
Describe the structure of the view by using the SQL*Plus DESCRIBE command.
SQL> DESCRIBE empvu10
145
Creating a View
Create a view by using column aliases in the subquery.
SQL> 2 3 4 5 View CREATE VIEW AS SELECT FROM WHERE created. salvu30 empno EMPLOYEE_NUMBER, ename NAME, sal SALARY emp deptno = 30;
Select the columns from this view by the given alias names.
146
Retrieving Data from a View
SQL> 2 SELECT * FROM salvu30; NAME SALARY ---------- --------BLAKE 2850 MARTIN 1250 ALLEN 1600 TURNER 1500 JAMES 950 WARD 1250
EMPLOYEE_NUMBER --------------7698 7654 7499 7844 7900 7521
6 rows selected.
147
Querying a View
SQL*Plus USER_VIEWS
SELECT * FROM empvu10;
EMPVU10
SELECT FROM WHERE empno, ename, job emp deptno = 10;
7839 7782 7934
KING PRESIDENT CLARK MANAGER MILLER CLERK
EMP
148
Modifying a View
Modify the EMPVU10 view by using CREATE OR REPLACE VIEW clause. Add an alias for each column name.
SQL> 2 3 4 5 View CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT empno, ename, job FROM emp WHERE deptno = 10; created.
Column aliases in the CREATE VIEW clause are listed in the same order as the columns in the subquery.
149
Creating a Complex View
Create a complex view that contains group functions to display values from two tables.
SQL> 2 3 4 5 6 7 View CREATE VIEW AS SELECT dept_sum_vu (name, minsal, maxsal, avgsal) d.dname, MIN(e.sal), MAX(e.sal), AVG(e.sal) emp e, dept d e.deptno = d.deptno d.dname;
FROM WHERE GROUP BY created.
150
Rules for Performing DML Operations on a View
You can perform DML operations on simple views. You cannot remove a row if the view contains the following:
Group functions A GROUP BY clause The DISTINCT keyword
151
Rules for Performing DML Operations on a View
You cannot modify data in a view if it contains: Any of the conditions mentioned in the previous slide Columns defined by expressions The ROWNUM pseudocolumn You cannot add data if:
The view contains any of the conditions
mentioned above or in the previous slide There are NOT NULL columns in the base tables that are not selected by the view
152
You can ensure that DML on the view stays within the domain of the view by using the WITH CHECK OPTION clause.
SQL> 2 3 4 5 View CREATE OR REPLACE VIEW empvu20 AS SELECT * FROM emp WHERE deptno = 20 WITH CHECK OPTION CONSTRAINT empvu20_ck; created.
Using the WITH CHECK OPTION Clause
Any attempt to change the department number for any row in the view will fail because it violates the WITH CHECK OPTION constraint.
153
Denying DML Operations
You can ensure that no DML operations occur by adding the WITH READ ONLY option to your view definition.
SQL> 2 3 4 5 6 View CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT empno, ename, job FROM emp WHERE deptno = 10 WITH READ ONLY; created.
Any attempt to perform a DML on any row in the view will result in Oracle Server error.
154
Removing a View
Remove a view without losing data because a view is based on underlying tables in the database.
DROP VIEW view;
SQL> DROP VIEW empvu10; View dropped.
155
Summary
A view is derived from data in other tables or other views. A view provides the following advantages:
Restricts database access Simplifies queries Provides data independence
Allows multiple views of the same data
Can be dropped without removing the
underlying data
156