Beruflich Dokumente
Kultur Dokumente
Views are known as logical tables. They represent the data of one of more tables. A view derives
its data from the tables on which it is based. These tables are called base tables. Views can be
based on actual tables or another view also.
Whatever DML operations you performed on a view they actually affect the base table of the
view. You can treat views same as any other table. You can Query, Insert, Update and delete
from views, just as any other table.
Views are very powerful and handy since they can be treated just like any other table but do not
occupy the space of a table.
The following sections explain how to create, replace, and drop views using SQL commands.
Creating Views
Suppose we have EMP and DEPT table. To see the empno, ename, sal, deptno, department name
and location we have to give a join query like this.
select e.empno,e.ename,e.sal,e.deptno,d.dname,d.loc
From emp e, dept d where e.deptno=d.deptno;
So everytime we want to see emp details and department names where they are working we have
to give a long join query. Instead of giving this join query again and again, we can create a view
on these table by using a CREATE VIEW command given below
create view emp_det as select e.empno,
e.ename,e.sal,e.deptno,d.dname,d.loc
from emp e, dept d where e.deptno=d.deptno;
Now to see the employee details and department names we dont have to give a join query, we
can just type the following simple query.
select * from emp_det;
This will show same result as you have type the long join query. Now you can treat this
EMP_DET view same as any other table.
For example, suppose all the employee working in Department No. 10 belongs to accounts
department and most of the time you deal with these people. So every time you have to give a
DML or Select statement you have to give a WHERE condition like .....WHERE
DEPTNO=10. To avoid this, you can create a view as given below
SQL>
SQL>
SQL>
2
3
create table t(
id number,
data varchar2(200) );
Table created.
SQL>
SQL>
SQL>
2
3
View created.
SQL>
SQL>
View altered.
SQL>
SQL>
SQL>
drop table t;
Table dropped.
SQL>
SQL>
2
3
create table t(
id number,
data varchar2(200) );
Table created.
SQL>
SQL>
SQL>
2
3
View created.
SQL>
SQL>
no rows selected
SQL>
SQL> drop table t;
Table dropped.
SQL>
2>
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
NOT NULL,
Table created.
SQL>
SQL> -- prepare data
SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_
2
values ('01','Jason',
'Martin', to_date('19960725','YYYYMMDD'), to_d
3 /
1 row created.
End_
2
3
values('06','Linda',
'Green',
to_date('19870730','YYYYMMDD'), to_d
1 row created.
FIRST_NAME
---------Jason
Alison
James
Celia
Robert
Linda
David
James
LAST_NAME
---------Martin
Mathews
Smith
Rice
Black
Green
Larry
Cat
START_DAT
--------25-JUL-96
21-MAR-76
12-DEC-78
24-OCT-82
15-JAN-84
30-JUL-87
31-DEC-90
17-SEP-96
END_DATE
SALARY CITY
--------- ---------- ---------25-JUL-06
1234.56 Toronto
21-FEB-86
6661.78 Vancouver
15-MAR-90
6544.78 Vancouver
21-APR-99
2344.78 Vancouver
08-AUG-98
2334.78 Vancouver
04-JAN-96
4322.78 New York
12-FEB-98
7897.78 New York
15-APR-02
1232.78 Vancouver
8 rows selected.
SQL>
SQL>
SQL>
SQL> -- Create View
SQL>
SQL>
SQL>
SQL>
SQL> CREATE VIEW EmployeeView AS
2
select First_Name, Last_Name from Employee;
View created.
SQL>
SQL>
SQL> SELECT * FROM EmployeeView ORDER BY First_Name;
FIRST_NAME LAST_NAME
DESCRIPTION
--------------Programmer
Tester
Tester
Manager
Tester
Tester
Manager
Tester
---------Alison
Celia
David
James
James
Jason
Linda
Robert
---------Mathews
Rice
Larry
Smith
Cat
Martin
Green
Black
8 rows selected.
SQL>
SQL> drop view EmployeeView;
View dropped.
SQL>
SQL>
SQL> -- clean the table
SQL> drop table Employee
2 /
Table dropped.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
View dropped.
SQL>
SQL>
SQL>
SQL>
SQL> CREATE TABLE employees
2 ( employee_id
3
last_name
4
email
5
hire_date
6
job_id
7
department_id
8
salary
9
manager_id
10 );
number(10)
varchar2(50)
varchar2(30),
date,
varchar2(30),
number(10),
number(6),
number(6)
not null,
not null,
Table created.
SQL>
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, sala
2
values ( 1001, 'Lawson', 'lawson@g.com', '01-JAN-2002','MGR', 3
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, sala
2
values ( 1002, 'Wells', 'wells@g.com', '01-JAN-2002', 'DBA', 20
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, sala
2
values( 1003, 'Bliss', 'bliss@g.com', '01-JAN-2002', 'PROG', 2
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, sala
2
values( 1004, 'Kyte', 'tkyte@a.com', SYSDATE-3650, 'MGR',2500
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, sala
2
values( 1005, 'Viper', 'sdillon@a .com', SYSDATE, 'PROG', 2000
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, sala
2
values( 1006, 'Beck', 'clbeck@g.com', SYSDATE, 'PROG', 20000,
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, sala
2
values( 1007, 'Java', 'java01@g.com', SYSDATE, 'PROG', 20000,
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, sala
2
values( 1008, 'Oracle', 'wvelasq@g.com', SYSDATE, 'DBA', 20000
1 row created.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
3
4
5
6
7
8
9
10
ERROR at line 8:
ORA-00439: feature not enabled: Materialized view rewrite
SQL>
SQL> set timing on
SQL> select * from my_orders_mv;
select * from my_orders_mv
*
ERROR at line 1:
ORA-00942: table or view does not exist
Elapsed: 00:00:00.07
SQL> set timing off
SQL> drop table employees;
Table dropped.
SQL>
SQL>
SQL>
SQL>
SQL> CREATE TABLE departments
2 (department_id
number(10)
not null,
3
department_name
varchar2(50)
not null,
4
CONSTRAINT departments_pk PRIMARY KEY (department_id)
5 );
Table created.
SQL>
SQL>
SQL>
SQL> insert into departments ( department_id, department_name )
2
values( 1,
'Data Group' );
1 row created.
SQL>
SQL> insert into departments ( department_id, department_name )
2
values( 2,
'Purchasing' );
1 row created.
SQL>
SQL> insert into departments ( department_id, department_name )
2
values( 3,
'Call Center' );
1 row created.
SQL>
SQL> insert into departments ( department_id, department_name )
2
values( 4,
'Communication' );
1 row created.
SQL>
SQL>
SQL>
SQL> CREATE TABLE employees
2 ( employee_id
3
last_name
4
email
5
hire_date
6
job_id
7
department_id
8
salary
9
manager_id
10
CONSTRAINT
11
CONSTRAINT
12 );
number(10)
not null,
varchar2(50)
not null,
varchar2(30),
date,
varchar2(30),
number(10),
number(6),
number(6),
employees_pk PRIMARY KEY (employee_id),
fk_departments FOREIGN KEY (department_id) REFERENCES d
Table created.
SQL>
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salar
2
values ( 1001, 'Lawson', 'lawson@g.com', '01-JAN-2002','MGR', 30
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salar
2
values ( 1002, 'Wells', 'wells@g.com', '01-JAN-2002', 'DBA', 200
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salar
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salar
2
values( 1004, 'Kyte', 'tkyte@a.com', SYSDATE-3650, 'MGR',25000
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salar
2
values( 1005, 'Viper', 'sdillon@a .com', SYSDATE, 'PROG', 20000
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salar
2
values( 1006, 'Beck', 'clbeck@g.com', SYSDATE, 'PROG', 20000, 2
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salar
2
values( 1007, 'Java', 'java01@g.com', SYSDATE, 'PROG', 20000, 3
1 row created.
SQL>
SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salar
2
values( 1008, 'Oracle', 'wvelasq@g.com', SYSDATE, 'DBA', 20000,
1 row created.
SQL>
SQL>
SQL>
SQL>
2
3
4
5
create or
select
from
where
with
View created.
SQL>
SQL>
SQL> drop table employees cascade constraints;
Table dropped.
SQL> drop table departments cascade constraints;
Table dropped.
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
create table
( empno
, ename
, init
, job
, mgr
, bdate
, sal
, comm
, deptno
) ;
emp
NUMBER(4)
VARCHAR2(8)
VARCHAR2(5)
VARCHAR2(8)
NUMBER(4)
DATE
NUMBER(6,2)
NUMBER(6,2)
NUMBER(2)
default 10
Table created.
SQL> insert into emp values(1,'Tom','N',
800 , NU
1 row created.
SQL> insert into emp values(2,'Jack','JAM', 'Tester',6,date '1961-02-20',
1600, 300,
1 row created.
SQL> insert into emp values(3,'Wil','TF' ,
'Tester',6,date '1962-02-22',
1250, 500,
1 row created.
SQL> insert into emp values(4,'Jane','JM',
2975, N
1 row created.
SQL> insert into emp values(5,'Mary','P',
1 row created.
'Tester',6,date '1956-09-28',
1250, 1400,
2850,
2450,
1 row created.
SQL> insert into emp values(7,'Chris','AB',
1 row created.
SQL> insert into emp values(8,'Smart','SCJ', 'TRAINER', 4,date '1959-11-26',
3000, N
1 row created.
SQL> insert into emp values(9,'Peter','CC',
'Designer',NULL,date '1952-11-17',
500
1 row created.
SQL> insert into emp values(10,'Take','JJ', 'Tester',6,date '1968-09-28',
1500, 0,
1 row created.
SQL> insert into emp values(11,'Ana','AA',
1100, NU
1 row created.
SQL> insert into emp values(12,'Jane','R',
'Manager',
6,date '1969-12-03',
800 ,
1 row created.
SQL> insert into emp values(13,'Fake','MG',
3000,
1 row created.
SQL> insert into emp values(14,'Mike','TJA','Manager',
7,date '1962-01-23',
1 row created.
SQL>
SQL>
2
3
4
5
6
Table created.
SQL>
SQL> insert into departments values (10,'ACCOUNTING','NEW YORK',7);
1 row created.
SQL> insert into departments values (20,'TRAINING',
1 row created.
'DALLAS',
4);
1300,
'CHICAGO', 6);
1 row created.
SQL> insert into departments values (40,'HR',
1 row created.
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
12
create
select
,
,
,
,
,
from
view empdept_v as
e.empno
e.ENAME
e.init
d.dname
d.location
m.ENAME
as Designer
emp
e
join
departments d using (deptno)
join
emp
m on (m.empno = d.mgr);
'BOSTON',
9);
3
4
5
6
SQL>
SQL>
2
3
4
SQL>
SQL>
SQL>
2
3
4
SQL>
SQL>
SQL>
2
3
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
City
State
Zip
/
VARCHAR2(25),
CHAR(2),
NUMBER);
NOT NULL
Table created.
SQL>
SQL> CREATE MATERIALIZED VIEW LOG ON emp
2
PCTFREE 5
3
TABLESPACE mv_logs
4
STORAGE (INITIAL 1M NEXT 1M) WITH ROWID;
SQL>
SQL>
SQL> drop view log;
SQL>
SQL> drop table emp;
Table dropped.
4
5
6
7
8
9
10
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
3
4
5
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
3
4
5
6
7
8
9
10
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2)
);
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
EMP
EMP
EMP
EMP
EMP
EMP
EMP
EMP
EMP
EMP
EMP
EMP
EMP
EMP
VALUES(7369,
VALUES(7499,
VALUES(7521,
VALUES(7566,
VALUES(7654,
VALUES(7698,
VALUES(7782,
VALUES(7788,
VALUES(7839,
VALUES(7844,
VALUES(7876,
VALUES(7900,
VALUES(7902,
VALUES(7934,
INTO
INTO
INTO
INTO
DEPT
DEPT
DEPT
DEPT
VALUES
VALUES
VALUES
VALUES
(10,
(20,
(30,
(40,
SQL>
SQL> begin
2
dbms_stats.set_table_stats( user, 'EMP', numrows => 100000 );
3
dbms_stats.set_table_stats( user, 'DEPT', numrows => 1000 );
4 end;
5 /
SQL>
SQL>
SQL> drop table emp;
SQL>
SQL> drop table dept;
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
NOT NULL,
Table created.
SQL>
SQL> -- prepare data
SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date,
En
2
values ('01','Jason',
'Martin', to_date('19960725','YYYYMMDD'), to
3 /
1 row created.
Table dropped.
SQL>
SQL>
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
NOT NULL,
Table created.
SQL>
SQL> -- prepare data
SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date,
En
2
values ('01','Jason',
'Martin', to_date('19960725','YYYYMMDD'), to
3 /
1 row created.
1 row created.
SQL>
SQL>
set linesize 78
set verify off
variable tname varchar2(200)
begin
:tname := upper('&1');
end;
/
prompt
select
from
where
/
prompt
select
from
where
order
/
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
default 10
Table created.
SQL>
SQL>
2
3
4
5
6
7
create table
( grade
, lowerlimit
, upperlimit
, bonus
, constraint
) ;
salary
NUMBER(2)
constraint S_PK primary key
NUMBER(6,2)
NUMBER(6,2)
NUMBER(6,2)
S_LO_UP_CHK check (lowerlimit <= upperlimit)
Table created.
SQL>
SQL> comment on table salary
2 is
'Salary grades and net bonuses';
Comment created.
SQL>
SQL> comment on column emp.comm
is
Comment created.
SQL>
SQL> select comments
2 from
user_tab_comments
3 where table_name = 'SALARY';
SQL>
SQL>
2
3
4
select
from
where
and
comments
user_col_comments
table_name = 'EMP'
column_name = 'COMM';
no rows selected
SQL>
SQL> drop table emp;
Table dropped.
SQL> drop table salary;
Table dropped.
SQL>
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
NOT NULL,
Table created.
SQL>
SQL> -- prepare data
SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_
2
values ('01','Jason',
'Martin', to_date('19960725','YYYYMMDD'), to_d
3 /
1 row created.
FIRST_NAME
---------Jason
Alison
James
Celia
Robert
Linda
David
James
LAST_NAME
---------Martin
Mathews
Smith
Rice
Black
Green
Larry
Cat
START_DAT
--------25-JUL-96
21-MAR-76
12-DEC-78
24-OCT-82
15-JAN-84
30-JUL-87
31-DEC-90
17-SEP-96
END_DATE
SALARY CITY
--------- ---------- ---------25-JUL-06
1234.56 Toronto
21-FEB-86
6661.78 Vancouver
15-MAR-90
6544.78 Vancouver
21-APR-99
2344.78 Vancouver
08-AUG-98
2334.78 Vancouver
04-JAN-96
4322.78 New York
12-FEB-98
7897.78 New York
15-APR-02
1232.78 Vancouver
8 rows selected.
SQL>
SQL>
SQL> DROP SYNONYM ShorterNameForEmployee;
Synonym dropped.
SQL>
SQL> -- clean the table
SQL> drop table Employee
2 /
Table dropped.
SQL>
DESCRIPTION
--------------Programmer
Tester
Tester
Manager
Tester
Tester
Manager
Tester
SQL>
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
NOT NULL,
Table created.
SQL>
SQL> -- prepare data
SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_
2
values ('01','Jason',
'Martin', to_date('19960725','YYYYMMDD'), to_d
3 /
1 row created.
1 row created.
FIRST_NAME
---------Jason
Alison
James
Celia
Robert
Linda
David
James
LAST_NAME
---------Martin
Mathews
Smith
Rice
Black
Green
Larry
Cat
START_DAT
--------25-JUL-96
21-MAR-76
12-DEC-78
24-OCT-82
15-JAN-84
30-JUL-87
31-DEC-90
17-SEP-96
END_DATE
SALARY CITY
--------- ---------- ---------25-JUL-06
1234.56 Toronto
21-FEB-86
6661.78 Vancouver
15-MAR-90
6544.78 Vancouver
21-APR-99
2344.78 Vancouver
08-AUG-98
2334.78 Vancouver
04-JAN-96
4322.78 New York
12-FEB-98
7897.78 New York
15-APR-02
1232.78 Vancouver
DESCRIPTION
--------------Programmer
Tester
Tester
Manager
Tester
Tester
Manager
Tester
8 rows selected.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> --To create an index on the LastName column of the Employee table
SQL>
SQL> CREATE INDEX LastNameIndex
2
ON Employee (Last_Name);
Index created.
SQL>
SQL>
SQL>
Index dropped.
SQL>
SQL>
SQL>
SQL>
SQL> -- clean the table
SQL> drop table Employee
2 /
Table dropped.
SQL>
SQL>
SQL>
Created an index based on the uppercase evaluation of the employe's first name field
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
NOT NULL,
Table created.
SQL>
SQL> -- prepare data
SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_
2
values ('01','Jason',
'Martin', to_date('19960725','YYYYMMDD'), to_d
3 /
1 row created.
1 row created.
FIRST_NAME
---------Jason
Alison
James
Celia
Robert
Linda
David
James
LAST_NAME
---------Martin
Mathews
Smith
Rice
Black
Green
Larry
Cat
START_DAT
--------25-JUL-96
21-MAR-76
12-DEC-78
24-OCT-82
15-JAN-84
30-JUL-87
31-DEC-90
17-SEP-96
END_DATE
SALARY CITY
--------- ---------- ---------25-JUL-06
1234.56 Toronto
21-FEB-86
6661.78 Vancouver
15-MAR-90
6544.78 Vancouver
21-APR-99
2344.78 Vancouver
08-AUG-98
2334.78 Vancouver
04-JAN-96
4322.78 New York
12-FEB-98
7897.78 New York
15-APR-02
1232.78 Vancouver
DESCRIPTION
--------------Programmer
Tester
Tester
Manager
Tester
Tester
Manager
Tester
8 rows selected.
SQL>
SQL>
SQL> -- Created an index based on the uppercase evaluation of the employe's first name fie
SQL>
SQL> CREATE INDEX employee_idx
2
ON employee (UPPER(first_name));
Index created.
SQL>
SQL>
Index dropped.
SQL>
SQL> -- clean the table
SQL> drop table Employee
2 /
Table dropped.
SQL>
SQL>
SQL> create table myCode(
2
codeValue VARCHAR2(1) primary key,
3
Description VARCHAR2(25)
4 );
Table created.
SQL>
SQL> create index i1 on myCode (codeValue, Description);
Index created.
SQL>
SQL>
SQL> drop index i1;
Index dropped.
SQL>
SQL> drop table myCode;
Table dropped.
SQL>
Table created.
SQL>
SQL> insert into registrations values (8,'JAV',date '2009-12-13',5
);
1 row created.
SQL> insert into registrations values (9,'JAV',date '2009-12-13',4
);
1 row created.
SQL> insert into registrations values (4,'JAV',date '2000-02-01',3
);
1 row created.
SQL> insert into registrations values (8,'JAV',date '2000-02-01',4
);
1 row created.
SQL> insert into registrations values (6,'JAV',date '2000-02-01',5
);
1 row created.
SQL> insert into registrations values (12,'XML',date '2000-02-03',4
);
1 row created.
SQL> insert into registrations values (2,'XML',date '2000-02-03',5
);
1 row created.
SQL> insert into registrations values (4,'PLS',date '2000-09-11',NULL);
1 row created.
SQL> insert into registrations values (2,'PLS',date '2000-09-11',NULL);
1 row created.
SQL> insert into registrations values (11,'PLS',date '2000-09-11',NULL);
1 row created.
SQL>
SQL> create unique index oau_reg on registrations
2 ( case course when 'OAU' then attendee else null end
3 , case course when 'OAU' then course
else null end );
Index created.
SQL>
SQL> insert into registrations values (12,'OAU',sysdate,null);
1 row created.
SQL>
SQL> drop index oau_reg;
Index dropped.
SQL> drop table registrations;
Table dropped.
SQL>
SQL> INSERT INTO EMP VALUES(7369, 'SMITH', 'CLERK', 7902,TO_DATE('17-DEC-1980', 'DD-MON-YY
1 row created.
SQL> INSERT INTO EMP VALUES(7521, 'WARD', 'SALESMAN', 7698,TO_DATE('22-FEB-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES(7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON1 row created.
1 row created.
SQL>
SQL> select count(*) from emp, dept where emp.deptno = dept.deptno and dept.dname = 'SALES
COUNT(*)
---------6
1 row selected.
Execution Plan
---------------------------------------------------------Plan hash value: 2157540364
------------------------------------| Id | Operation
| Name |
------------------------------------|
0 | SELECT STATEMENT
|
|
|
1 | SORT AGGREGATE
|
|
|
2 |
MERGE JOIN
|
|
|
3 |
SORT JOIN
|
|
|* 4 |
TABLE ACCESS FULL| DEPT |
|* 5 |
SORT JOIN
|
|
|
6 |
TABLE ACCESS FULL| EMP |
------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------4 - filter("DEPT"."DNAME"='SALES')
5 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")
filter("EMP"."DEPTNO"="DEPT"."DEPTNO")
Note
----- rule based optimizer used (consider using cbo)
Statistics
---------------------------------------------------------1 recursive calls
0 db block gets
6 consistent gets
0 physical reads
0 redo size
411 bytes sent via SQL*Net to client
380 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
1 rows processed
SQL>
SQL> set autotrace off;
SQL>
SQL> drop table emp;
Table dropped.
SQL>
SQL> CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,
2
ENAME VARCHAR2(10),
3
JOB VARCHAR2(9),
4
MGR NUMBER(4),
5
HIREDATE DATE,
6
SAL NUMBER(7, 2),
7
8
Table created.
SQL>
SQL> create index emp_empno_pk
2 on emp(empno) reverse;
Index created.
SQL>
SQL> drop table emp;
Table dropped.
SQL>
Function-based Indexes
SQL>
SQL> CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,
2
ENAME VARCHAR2(10),
3
JOB VARCHAR2(9),
4
MGR NUMBER(4),
5
HIREDATE DATE,
6
SAL NUMBER(7, 2),
7
COMM NUMBER(7, 2),
8
DEPTNO NUMBER(2));
Table created.
SQL>
SQL> create index upper_name_idx on emp(upper(ename));
Index created.
SQL>
SQL>
SQL> drop table EMP;
Table dropped.
SQL>
SQL>
integer
primary key
varchar2(20)
not null
varchar2(15)
not null
varchar2(1)
varchar2(30)
varchar2(20)
varchar2(2)
varchar2(5)
varchar2(4)
varchar2(3)
varchar2(8)
varchar2(50));
Table created.
SQL>
SQL> create index fullname on emp(lastname, firstname);
Index created.
SQL>
SQL>
SQL> drop table emp;
Table dropped.
SQL>
SQL>
integer
varchar2(20)
varchar2(15)
varchar2(1)
varchar2(30)
primary key
not null
not null
7
8
9
10
11
12
13
,city
,state
,zip
,shortZipCode
,area_code
,phone
,company_name
varchar2(20)
varchar2(2)
varchar2(5)
varchar2(4)
varchar2(3)
varchar2(8)
varchar2(50));
Table created.
SQL>
SQL> create index upper_emp_idx on emp upper(lastname);
Index created.
SQL>
SQL>
SQL> drop table emp;
Table dropped.
SQL>
SQL> CREATE TABLE myTable (
2
myTableID INT PRIMARY KEY NOT NULL,
3
Name
VARCHAR(50),
4
PhoneNo VARCHAR(15) DEFAULT 'Unknown Phone');
Table created.
SQL>
SQL> CREATE UNIQUE INDEX NameIndex ON myTable (Name);
Index created.
SQL>
SQL> drop table myTable;
Table dropped.
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
NOT NULL,
Table created.
SQL>
SQL> -- prepare data
SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_
2
values ('01','Jason',
'Martin', to_date('19960725','YYYYMMDD'), to_d
3 /
1 row created.
1 row created.
FIRST_NAME
---------Jason
Alison
James
Celia
Robert
Linda
David
James
LAST_NAME
---------Martin
Mathews
Smith
Rice
Black
Green
Larry
Cat
START_DAT
--------25-JUL-96
21-MAR-76
12-DEC-78
24-OCT-82
15-JAN-84
30-JUL-87
31-DEC-90
17-SEP-96
END_DATE
SALARY CITY
--------- ---------- ---------25-JUL-06
1234.56 Toronto
21-FEB-86
6661.78 Vancouver
15-MAR-90
6544.78 Vancouver
21-APR-99
2344.78 Vancouver
08-AUG-98
2334.78 Vancouver
04-JAN-96
4322.78 New York
12-FEB-98
7897.78 New York
15-APR-02
1232.78 Vancouver
8 rows selected.
SQL>
SQL>
SQL> CREATE INDEX employee_idx
2
ON employee (first_name, city)
3
COMPUTE STATISTICS;
Index created.
SQL>
SQL>
SQL> -- Collect Statistics on an Index
SQL>
SQL> ALTER INDEX employee_idx
2
REBUILD COMPUTE STATISTICS;
Index altered.
SQL>
SQL> select first_name, city from employee;
FIRST_NAME CITY
---------- ----------
DESCRIPTION
--------------Programmer
Tester
Tester
Manager
Tester
Tester
Manager
Tester
Jason
Alison
James
Celia
Robert
Linda
David
James
Toronto
Vancouver
Vancouver
Vancouver
Vancouver
New York
New York
Vancouver
8 rows selected.
SQL>
SQL> drop index employee_idx;
Index dropped.
SQL>
SQL> -- clean the table
SQL> drop table Employee
2 /
Table dropped.
SQL>
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
NOT NULL,
Table created.
SQL>
SQL> -- prepare data
SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_
2
values ('01','Jason',
'Martin', to_date('19960725','YYYYMMDD'), to_d
3 /
1 row created.
Employee's Fi
------------Jason
Alison
James
Celia
LAST_NAME
---------Martin
Mathews
Smith
Rice
START_DAT
--------25-JUL-96
21-MAR-76
12-DEC-78
24-OCT-82
END_DATE
SALARY CITY
--------- ---------- ---------25-JUL-06 $1,234.56 Toronto
21-FEB-86 $6,661.78 Vancouver
15-MAR-90 $6,544.78 Vancouver
21-APR-99 $2,344.78 Vancouver
DESCRIPTION
--------------Programmer
Tester
Tester
Manager
05
06
07
08
Robert
Linda
David
James
Black
Green
Larry
Cat
15-JAN-84
30-JUL-87
31-DEC-90
17-SEP-96
08-AUG-98
04-JAN-96
12-FEB-98
15-APR-02
$2,334.78
$4,322.78
$7,897.78
$1,232.78
8 rows selected.
SQL>
SQL>
SQL>
SQL> CREATE INDEX employee_idx
2
ON employee (first_name);
Index created.
SQL>
SQL>
SQL> drop index employee_idx;
Index dropped.
SQL>
SQL>
SQL> -- clean the table
SQL> drop table Employee
2 /
Table dropped.
SQL>
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
Table created.
SQL>
NOT NULL,
Vancouver
New York
New York
Vancouver
Tester
Tester
Manager
Tester
ID
---01
02
03
04
05
06
07
08
FIRST_NAME
---------Jason
Alison
James
Celia
Robert
Linda
David
James
LAST_NAME
---------Martin
Mathews
Smith
Rice
Black
Green
Larry
Cat
START_DAT
--------25-JUL-96
21-MAR-76
12-DEC-78
24-OCT-82
15-JAN-84
30-JUL-87
31-DEC-90
17-SEP-96
END_DATE
SALARY CITY
--------- ---------- ---------25-JUL-06
1234.56 Toronto
21-FEB-86
6661.78 Vancouver
15-MAR-90
6544.78 Vancouver
21-APR-99
2344.78 Vancouver
08-AUG-98
2334.78 Vancouver
04-JAN-96
4322.78 New York
12-FEB-98
7897.78 New York
15-APR-02
1232.78 Vancouver
8 rows selected.
SQL>
SQL>
SQL> CREATE INDEX employee_idx
2
ON employee (first_name, city)
3
COMPUTE STATISTICS;
Index created.
SQL>
SQL>
SQL>
SQL> ALTER INDEX employee_idx
2
RENAME TO employee_index_Newname;
Index altered.
SQL>
SQL>
SQL> drop index employee_index_Newname;
Index dropped.
SQL>
SQL>
SQL> -- clean the table
SQL> drop table Employee
2 /
Table dropped.
SQL>
SQL>
SQL>
SQL> CREATE SEQUENCE supplier_seq
DESCRIPTION
--------------Programmer
Tester
Tester
Manager
Tester
Tester
Manager
Tester
2
3
4
5
6
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;
Sequence created.
SQL>
SQL> select supplier_seq.nextval from dual;
NEXTVAL
---------1
SQL> select supplier_seq.nextval from dual;
NEXTVAL
---------2
SQL> select supplier_seq.nextval from dual;
NEXTVAL
---------3
SQL> select supplier_seq.nextval from dual;
NEXTVAL
---------4
SQL>
SQL> drop sequence supplier_seq;
Sequence dropped.
SQL>
SQL>
Table created.
SQL>
SQL> create sequence myTable_seq
2 /
Sequence created.
SQL>
SQL>
2
3
4
5
6
7
8
9
Trigger created.
SQL> drop table myTable;
Table dropped.
SQL> drop sequence myTable_seq;
Sequence dropped.
SQL>
SQL> create sequence deptno_seq
2 start with 50 increment by 10;
Sequence created.
SQL>
SQL> select deptno_seq.nextval, deptno_seq.currval
2 from
dual;
NEXTVAL
CURRVAL
---------- ---------50
50
SQL>
SQL> select deptno_seq.currval
2 from
dual;
CURRVAL
---------50
SQL>
SQL> select deptno_seq.currval, deptno_seq.nextval
2 from
dual;
CURRVAL
NEXTVAL
---------- ---------60
60
SQL>
SQL>
SQL> drop sequence deptno_seq;
Sequence dropped.
SQL>
SQL> create sequence emps_seq
2
start with 501
3
increment by 10;
Sequence created.
SQL>
SQL> drop sequence emps_seq;
Sequence dropped.
SQL>
SQL>
SQL>
SQL>
2
3
4
5
6
7
8
9
Table created.
SQL>
SQL> create table job(
2
empno
3
jobtitle
4 )
5 /
ENAME
---------Alison
James
Celia
Robert
Linda
David
Jode
7 rows selected.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
3
4
5
EMPNO
---------122
104
117
123
108
116
105
ENAME
ORIG_SALARY Avg. salary
---------- ----------- ----------Alison
45000
42000
Celia
53000
42000
David
78000
42000
James
23000
42000
Jode
21000
42000
Linda
43000
42000
Robert
31000
42000
7 rows selected.
SQL>
SQL>
SQL> -- clean the table
SQL> drop table Employee
2 /
Table dropped.
SQL>
SQL>
SQL>
'CLERK',
7902, TO_DATE('17-DEC-1980'
'SALESMAN',
7698, TO_DATE('20-FEB-1981'
'SALESMAN',
7698, TO_DATE('22-FEB-1981'
'MANAGER',
7839, TO_DATE('2-APR-1981',
1 row created.
SQL> INSERT INTO Employee VALUES (7499, 'ALLEN',
1 row created.
SQL> INSERT INTO Employee VALUES (7521, 'WARD',
1 row created.
SQL> INSERT INTO Employee VALUES (7566, 'JONES',
1 row created.
SQL> INSERT INTO Employee VALUES (7654, 'MARTIN', 'SALESMAN',
7698, TO_DATE('28-SEP-1981'
1 row created.
SQL> INSERT INTO Employee VALUES (7698, 'BLAKE',
'MANAGER',
7839, TO_DATE('1-MAY-1981',
1 row created.
SQL> INSERT INTO Employee VALUES (7782, 'CLARK',
'MANAGER',
7839, TO_DATE('9-JUN-1981',
'ANALYST',
7566, TO_DATE('09-DEC-1982'
1 row created.
SQL> INSERT INTO Employee VALUES (7788, 'SCOTT',
1 row created.
SQL> INSERT INTO Employee VALUES (7839, 'KING',
1 row created.
SQL> INSERT INTO Employee VALUES (7844, 'TURNER', 'SALESMAN',
7698, TO_DATE('8-SEP-1981',
1 row created.
SQL> INSERT INTO Employee VALUES (7876, 'ADAMS',
'CLERK',
7788, TO_DATE('12-JAN-1983'
'CLERK',
7698, TO_DATE('3-DEC-1981',
'ANALYST',
7566, TO_DATE('3-DEC-1981',
1 row created.
SQL> INSERT INTO Employee VALUES (7900, 'JAMES',
1 row created.
SQL> INSERT INTO Employee VALUES (7902, 'FORD',
1 row created.
SQL> INSERT INTO Employee VALUES (7934, 'MILLER', 'CLERK',
7782, TO_DATE('23-JAN-1982'
1 row created.
SQL>
SQL> CREATE TABLE Department(Department_ID NUMBER(2),
2
Department_Name VARCHAR2(14),
3
Location VARCHAR2(13)
4 );
Table created.
SQL>
SQL> INSERT INTO Department VALUES (10, 'ACCOUNTING', 'NEW YORK');
1 row created.
SQL> INSERT INTO Department VALUES (20, 'RESEARCH',
'DALLAS');
1 row created.
SQL> INSERT INTO Department VALUES (30, 'SALES',
1 row created.
'CHICAGO');
EMPLOYEE_N
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JOB
MANAGER_ID START_DAT
SALARY
COMM DEPARMENT_ID
--------- ---------- --------- ---------- ---------- -----------CLERK
7902 17-DEC-80
800
20
SALESMAN
7698 20-FEB-81
1600
300
30
SALESMAN
7698 22-FEB-81
1250
500
30
MANAGER
7839 02-APR-81
2975
20
SALESMAN
7698 28-SEP-81
1250
1400
30
MANAGER
7839 01-MAY-81
2850
30
MANAGER
7839 09-JUN-81
2450
10
ANALYST
7566 09-DEC-82
3000
20
PRESIDENT
17-NOV-81
5000
10
SALESMAN
7698 08-SEP-81
1500
0
30
CLERK
7788 12-JAN-83
1100
20
EMPLOYEE_ID
----------7900
7902
7934
EMPLOYEE_N
---------JAMES
FORD
MILLER
JOB
MANAGER_ID START_DAT
SALARY
COMM DEPARMENT_ID
--------- ---------- --------- ---------- ---------- -----------CLERK
7698 03-DEC-81
950
30
ANALYST
7566 03-DEC-81
3000
20
CLERK
7782 23-JAN-82
1300
10
14 rows selected.
SQL> select * from Department;
DEPARTMENT_ID
------------10
20
30
40
DEPARTMENT_NAM
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOCATION
------------NEW YORK
DALLAS
CHICAGO
BOSTON
SQL>
SQL>
SQL> -- Cross-joins
SQL>
SQL> SELECT e.Employee_ID, d.Department_ID
2 FROM Employee e, Department d;
EMPLOYEE_ID DEPARTMENT_ID
----------- ------------7369
10
7499
10
7521
10
7566
10
7654
10
7698
10
7782
10
7788
10
7839
10
7844
7876
10
10
EMPLOYEE_ID DEPARTMENT_ID
----------- ------------7900
10
7902
10
7934
10
7369
20
7499
20
7521
20
7566
20
7654
20
7698
20
7782
20
7788
20
EMPLOYEE_ID DEPARTMENT_ID
----------- ------------7839
20
7844
20
7876
20
7900
20
7902
20
7934
20
7369
30
7499
30
7521
30
7566
30
7654
30
EMPLOYEE_ID DEPARTMENT_ID
----------- ------------7698
30
7782
30
7788
30
7839
30
7844
30
7876
30
7900
30
7902
30
7934
30
7369
40
7499
40
EMPLOYEE_ID DEPARTMENT_ID
----------- ------------7521
40
7566
40
7654
40
7698
40
7782
40
7788
40
7839
40
7844
40
7876
40
7900
7902
40
40
EMPLOYEE_ID DEPARTMENT_ID
----------- ------------7934
40
56 rows selected.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> drop table Department cascade constraints;
Table dropped.
SQL> drop table Employee cascade constraints;
Table dropped.
SQL>
SQL>
'CLERK',
7902, TO_DATE('17-DEC-1980'
'SALESMAN',
7698, TO_DATE('20-FEB-1981'
'SALESMAN',
7698, TO_DATE('22-FEB-1981'
'MANAGER',
7839, TO_DATE('2-APR-1981',
1 row created.
SQL> INSERT INTO Employee VALUES (7521, 'WARD',
1 row created.
SQL> INSERT INTO Employee VALUES (7566, 'JONES',
1 row created.
SQL> INSERT INTO Employee VALUES (7654, 'MARTIN', 'SALESMAN',
7698, TO_DATE('28-SEP-1981'
1 row created.
SQL> INSERT INTO Employee VALUES (7698, 'BLAKE',
'MANAGER',
7839, TO_DATE('1-MAY-1981',
'MANAGER',
7839, TO_DATE('9-JUN-1981',
'ANALYST',
7566, TO_DATE('09-DEC-1982'
1 row created.
SQL> INSERT INTO Employee VALUES (7782, 'CLARK',
1 row created.
SQL> INSERT INTO Employee VALUES (7788, 'SCOTT',
1 row created.
SQL> INSERT INTO Employee VALUES (7839, 'KING',
1 row created.
SQL> INSERT INTO Employee VALUES (7844, 'TURNER', 'SALESMAN',
7698, TO_DATE('8-SEP-1981',
1 row created.
SQL> INSERT INTO Employee VALUES (7876, 'ADAMS',
'CLERK',
7788, TO_DATE('12-JAN-1983'
'CLERK',
7698, TO_DATE('3-DEC-1981',
'ANALYST',
7566, TO_DATE('3-DEC-1981',
1 row created.
SQL> INSERT INTO Employee VALUES (7900, 'JAMES',
1 row created.
SQL> INSERT INTO Employee VALUES (7902, 'FORD',
1 row created.
SQL> INSERT INTO Employee VALUES (7934, 'MILLER', 'CLERK',
1 row created.
SQL>
SQL> CREATE TABLE Department(Deparment_ID NUMBER(2),
2
Department_Name VARCHAR2(14),
3
Location VARCHAR2(13)
7782, TO_DATE('23-JAN-1982'
);
Table created.
SQL>
SQL> INSERT INTO Department VALUES (10, 'ACCOUNTING', 'NEW YORK');
1 row created.
SQL> INSERT INTO Department VALUES (20, 'RESEARCH',
'DALLAS');
1 row created.
SQL> INSERT INTO Department VALUES (30, 'SALES',
'CHICAGO');
1 row created.
SQL> INSERT INTO Department VALUES (40, 'OPERATIONS', 'BOSTON');
1 row created.
SQL>
SQL> alter table Employee add constraint Employee_pk primary key(Employee_ID);
Table altered.
SQL> alter table Department add constraint Department_pk primary key(Deparment_ID);
Table altered.
SQL> alter table Employee add constraint Employee_fk_Department foreign key(Deparment_ID)
Table altered.
SQL> alter table Employee add constraint Employee_fk_Employee foreign key(Manager_ID) refe
Table altered.
SQL>
SQL> select * from Employee;
EMPLOYEE_ID
----------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
EMPLOYEE_N
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JOB
MANAGER_ID START_DAT
SALARY
COMM DEPARMENT_ID
--------- ---------- --------- ---------- ---------- -----------CLERK
7902 17-DEC-80
800
20
SALESMAN
7698 20-FEB-81
1600
300
30
SALESMAN
7698 22-FEB-81
1250
500
30
MANAGER
7839 02-APR-81
2975
20
SALESMAN
7698 28-SEP-81
1250
1400
30
MANAGER
7839 01-MAY-81
2850
30
MANAGER
7839 09-JUN-81
2450
10
ANALYST
7566 09-DEC-82
3000
20
PRESIDENT
17-NOV-81
5000
10
SALESMAN
7698 08-SEP-81
1500
0
30
CLERK
7788 12-JAN-83
1100
20
MANAGER_ID START_DAT
SALARY
COMM DEPARMENT_ID
----------7900
7902
7934
---------JAMES
FORD
MILLER
14 rows selected.
SQL> select * from Department;
DEPARMENT_ID
-----------10
20
30
40
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
3
4
DEPARTMENT_NAM
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOCATION
------------NEW YORK
DALLAS
CHICAGO
BOSTON
EMPLOYEE_ID
----------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
START_DAT
--------17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
09-DEC-82
17-NOV-81
08-SEP-81
12-JAN-83
EMPLOYEE_N
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
DEPARTMENT_NAM
-------------RESEARCH
SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES
RESEARCH
LOCATION
------------DALLAS
CHICAGO
CHICAGO
DALLAS
CHICAGO
CHICAGO
NEW YORK
DALLAS
NEW YORK
CHICAGO
DALLAS
EMPLOYEE_ID
----------7900
7902
7934
START_DAT
--------03-DEC-81
03-DEC-81
23-JAN-82
EMPLOYEE_N
---------JAMES
FORD
MILLER
DEPARTMENT_NAM
-------------SALES
RESEARCH
ACCOUNTING
LOCATION
------------CHICAGO
DALLAS
NEW YORK
14 rows selected.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> drop table Department cascade constraints;
Table dropped.
SQL> drop table Employee cascade constraints;
Table dropped.
SQL>
SQL>
SQL>
SQL> CREATE TABLE emp (
2
empID INT NOT NULL PRIMARY KEY,
3
Name
VARCHAR(50) NOT NULL);
Table created.
SQL>
SQL>
SQL> INSERT INTO emp (empID,Name) VALUES (1,'Tom');
1 row created.
SQL> INSERT INTO emp (empID,Name) VALUES (2,'Jack');
1 row created.
SQL> INSERT INTO emp (empID,Name) VALUES (3,'Mary');
1 row created.
SQL> INSERT INTO emp (empID,Name) VALUES (4,'Bill');
1 row created.
SQL> INSERT INTO emp (empID,Name) VALUES (5,'Cat');
1 row created.
SQL> INSERT INTO emp (empID,Name) VALUES (6,'Victor');
1 row created.
SQL>
SQL> CREATE TABLE empExam (
2
empID INT NOT NULL,
3
4
5
6
7
ExamID
INT NOT NULL,
Mark
INT,
Taken
SMALLINT,
Comments
VARCHAR(255),
CONSTRAINT PK_empExam PRIMARY KEY (empID, ExamID));
Table created.
SQL>
SQL>
SQL> INSERT INTO empExam (empID,ExamID,Mark,Taken,Comments) VALUES (1,1,55,1,'Satisfactory
1 row created.
SELECT empExam.ExamID,
empExam.Mark,
emp.Name AS empName
FROM empExam JOIN emp
ON empExam.empID = emp.empID
WHERE empExam.Mark >= 80
ORDER BY ExamID;
no rows selected
SQL>
SQL>
SQL>
SQL> drop table empExam;
Table dropped.
SQL> drop table emp;
Table dropped.
SQL>
SQL>
SQL> INSERT INTO empExam (empID,ExamID,Mark,Taken,Comments) VALUES (1,1,55,1,'Satisfactory
1 row created.
1 row created.
SQL> INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7521, 'WARD',
1 row created.
SQL> INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER',
7839, TO_DATE('2-APR-1981',
'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON
1 row created.
SQL> INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YY
1 row created.
SQL> INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON1 row created.
SQL>
SQL> select * from emp;
EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
--------- ---------- ----------- ---------- ---------- ---------CLERK
7902 1980-DEC-17
800
20
SALESMAN
7698 1981-FEB-20
1600
300
30
SALESMAN
7698 1981-FEB-22
1250
500
30
MANAGER
7839 1981-APR-02
2975
20
SALESMAN
7698 1981-SEP-28
1250
1400
30
MANAGER
7839 1981-MAY-01
2850
30
MANAGER
7839 1981-JUN-09
2450
10
ANALYST
7566 1982-DEC-09
3000
20
PRESIDENT
1981-NOV-17
5000
10
SALESMAN
7698 1981-SEP-08
1500
0
30
CLERK
7788 1983-JAN-12
1100
20
CLERK
7698 1981-DEC-03
950
30
ANALYST
7566 1981-DEC-03
3000
20
CLERK
7782 1982-JAN-23
1300
10
14 rows selected.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
3
4
5
6
--A correlated subquery references one or more columns in the outer query.
--The subquery is known as a correlated subquery because the subquery is related to t
SELECT empno, mgr,ename, sal
FROM emp outer
WHERE sal >
(SELECT AVG(sal)
FROM emp inner
WHERE inner.empno = outer.mgr);
EMPNO
MGR ENAME
SAL
---------- ---------- ---------- ---------7788
7566 SCOTT
3000
7902
7566 FORD
3000
SQL>
SQL>
SQL> drop table emp;
Table dropped.
SQL>
SQL>
1 row created.
SQL> INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7521, 'WARD',
1 row created.
SQL> INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER',
7839, TO_DATE('2-APR-1981',
'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON
1 row created.
SQL> INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YY
1 row created.
SQL> INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON1 row created.
SQL>
SQL> select * from emp;
EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
--------- ---------- ----------- ---------- ---------- ---------CLERK
7902 1980-DEC-17
800
20
SALESMAN
7698 1981-FEB-20
1600
300
30
SALESMAN
7698 1981-FEB-22
1250
500
30
MANAGER
7839 1981-APR-02
2975
20
SALESMAN
7698 1981-SEP-28
1250
1400
30
MANAGER
7839 1981-MAY-01
2850
30
MANAGER
7839 1981-JUN-09
2450
10
ANALYST
7566 1982-DEC-09
3000
20
PRESIDENT
1981-NOV-17
5000
10
SALESMAN
7698 1981-SEP-08
1500
0
30
CLERK
7788 1983-JAN-12
1100
20
CLERK
7698 1981-DEC-03
950
30
ANALYST
7566 1981-DEC-03
3000
20
CLERK
7782 1982-JAN-23
1300
10
14 rows selected.
SQL>
SQL> --Using EXISTS with a Correlated Subquery
SQL>
SQL> SELECT empno, ename
2 FROM emp outer
3 WHERE EXISTS
4
(SELECT empno
5
FROM emp inner
6
WHERE inner.mgr = outer.empno);
EMPNO
---------7902
7698
7839
7566
7788
7782
ENAME
---------FORD
BLAKE
KING
JONES
SCOTT
CLARK
6 rows selected.
SQL>
SQL> drop table emp;
Table dropped.
SQL>
SQL>
1 row created.
SQL> INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7521, 'WARD',
1 row created.
SQL> INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER',
7839, TO_DATE('2-APR-1981',
'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON
1 row created.
SQL> INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YY
1 row created.
SQL> INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON1 row created.
SQL>
SQL> select * from emp;
EMPNO ENAME
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
---------- ---------- --------- ---------- ----------- ---------- ---------- ---------7369 SMITH
CLERK
7902 1980-DEC-17
800
20
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
7698
7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782
1981-FEB-20
1981-FEB-22
1981-APR-02
1981-SEP-28
1981-MAY-01
1981-JUN-09
1982-DEC-09
1981-NOV-17
1981-SEP-08
1983-JAN-12
1981-DEC-03
1981-DEC-03
1982-JAN-23
1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300
300
500
1400
30
30
20
30
30
10
20
10
30
20
30
20
10
14 rows selected.
SQL>
SQL>
SQL>
SQL>
2
3
4
5
6
EMPNO
---------7844
7521
7654
7499
7934
7369
7876
7900
ENAME
---------TURNER
WARD
MARTIN
ALLEN
MILLER
SMITH
ADAMS
JAMES
8 rows selected.
SQL>
SQL>
SQL> drop table emp;
Table dropped.
SQL>
SQL>
To delete the records of emps whose salary is below the average salary in th
SQL>
SQL>
SQL>
SQL> CREATE TABLE EMP(
2
EMPNO NUMBER(4) NOT NULL,
3
ENAME VARCHAR2(10),
4
JOB VARCHAR2(9),
5
MGR NUMBER(4),
6
HIREDATE DATE,
7
SAL NUMBER(7, 2),
8
COMM NUMBER(7, 2),
9
DEPTNO NUMBER(2)
10 );
Table created.
To update the salary of all emps to the maximum salary in the correspondin
SQL>
SQL>
SQL> CREATE TABLE EMP(
2
EMPNO NUMBER(4) NOT NULL,
3
ENAME VARCHAR2(10),
4
JOB VARCHAR2(9),
5
MGR NUMBER(4),
6
HIREDATE DATE,
7
SAL NUMBER(7, 2),
8
COMM NUMBER(7, 2),
9
DEPTNO NUMBER(2)
10 );
Table created.
1 row created.
SQL>
SQL>
SQL> -- create demo table
NOT NULL,
Table created.
SQL>
SQL> -- prepare data
SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_
2
values ('01','Jason',
'Martin', to_date('19960725','YYYYMMDD'), to_d
3 /
1 row created.
1 row created.
FIRST_NAME
---------Jason
Alison
James
Celia
Robert
Linda
David
James
LAST_NAME
---------Martin
Mathews
Smith
Rice
Black
Green
Larry
Cat
START_DAT
--------25-JUL-96
21-MAR-76
12-DEC-78
24-OCT-82
15-JAN-84
30-JUL-87
31-DEC-90
17-SEP-96
END_DATE
SALARY CITY
--------- ---------- ---------25-JUL-06
1234.56 Toronto
21-FEB-86
2334.78 Vancouver
15-MAR-90
2334.78 Vancouver
21-APR-99
2334.78 Vancouver
08-AUG-98
2334.78 Vancouver
04-JAN-96
2334.78 New York
12-FEB-98
2334.78 New York
15-APR-02
2334.78 Vancouver
DESCRIPTION
--------------Programmer
Tester
Tester
Manager
Tester
Tester
Manager
Tester
8 rows selected.
SQL>
SQL>
SQL>
SQL> -- set into a virtual table. Such a solution could look like this:
SQL>
SQL> SELECT id "Emp #", First_name "Name", salary "Salary", ROWNUM rank
2 FROM
3
(SELECT id, first_name, salary FROM employee ORDER BY salary);
Emp
---01
03
08
05
06
07
02
04
Name
Salary
RANK
---------- ---------- ---------Jason
1234.56
1
James
2334.78
2
James
2334.78
3
Robert
2334.78
4
Linda
2334.78
5
David
2334.78
6
Alison
2334.78
7
Celia
2334.78
8
8 rows selected.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> -- clean the table
SQL> drop table Employee;
Table dropped.
SQL>
SQL>
SQL> CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,
2
ENAME VARCHAR2(10),
3
JOB VARCHAR2(9),
4
MGR NUMBER(4),
5
HIREDATE DATE,
6
SAL NUMBER(7, 2),
7
COMM NUMBER(7, 2),
8
DEPTNO NUMBER(2));
Table created.
SQL>
SQL> INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK',
1 row created.
SQL> INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7521, 'WARD',
1 row created.
SQL> INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER',
7839, TO_DATE('2-APR-1981',
'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON
1 row created.
SQL> INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YY
1 row created.
SQL> INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON1 row created.
SQL>
SQL> CREATE TABLE DEPT (DEPTNO NUMBER(2),DNAME VARCHAR2(14),LOC VARCHAR2(13) );
Table created.
SQL>
SQL> INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
1 row created.
SQL> INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS');
1 row created.
SQL> INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO');
1 row created.
SQL> INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');
1 row created.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
3
4
5
ENAME
---------ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
ENAME
---------FORD
MILLER
13 rows selected.
SQL>
SQL>
SQL>
SQL> drop table dept;
Table dropped.
SQL> drop table emp;
Table dropped.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,
2
ENAME VARCHAR2(10),
3
JOB VARCHAR2(9),
4
MGR NUMBER(4),
5
HIREDATE DATE,
6
SAL NUMBER(7, 2),
7
COMM NUMBER(7, 2),
8
DEPTNO NUMBER(2));
Table created.
SQL>
SQL> INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK',
1 row created.
SQL> INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7521, 'WARD',
1 row created.
SQL> INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER',
7839, TO_DATE('2-APR-1981',
'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON
1 row created.
SQL> INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YY
1 row created.
SQL> INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON1 row created.
SQL>
SQL> CREATE TABLE DEPT (DEPTNO NUMBER(2),DNAME VARCHAR2(14),LOC VARCHAR2(13) );
Table created.
SQL>
SQL> INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
1 row created.
SQL> INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS');
1 row created.
SQL> INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO');
1 row created.
SQL> INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');
1 row created.
SQL>
SQL> select * from emp;
EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
--------- ---------- --------- ---------- ---------- ---------CLERK
7902 17-DEC-80
800
20
SALESMAN
7698 20-FEB-81
1600
300
30
SALESMAN
7698 22-FEB-81
1250
500
30
MANAGER
7839 02-APR-81
2975
20
SALESMAN
7698 28-SEP-81
1250
1400
30
MANAGER
7839 01-MAY-81
2850
30
MANAGER
7839 09-JUN-81
2450
10
ANALYST
7566 09-DEC-82
3000
20
PRESIDENT
17-NOV-81
5000
10
SALESMAN
7698 08-SEP-81
1500
0
30
CLERK
7788 12-JAN-83
1100
20
EMPNO
---------7900
7902
7934
ENAME
---------JAMES
FORD
MILLER
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
--------- ---------- --------- ---------- ---------- ---------CLERK
7698 03-DEC-81
950
30
ANALYST
7566 03-DEC-81
3000
20
CLERK
7782 23-JAN-82
1300
10
14 rows selected.
SQL>
SQL> select * from dept;
DEPTNO
---------10
20
30
40
SQL>
SQL>
SQL>
SQL>
SQL>
2
3
4
5
6
7
DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
ENAME
---------ALLEN
JONES
BLAKE
CLARK
SCOTT
KING
TURNER
FORD
8 rows selected.
SQL>
SQL>
SQL>
SQL>
SQL> drop table dept;
Table dropped.
SQL> drop table emp;
Table dropped.
SQL>
SQL>
SQL>
1 row created.
SQL> INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7521, 'WARD',
1 row created.
SQL> INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER',
7839, TO_DATE('2-APR-1981',
'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-M
1 row created.
SQL> INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON1 row created.
SQL> INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON
1 row created.
SQL> INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MO
1 row created.
SQL> INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YY
1 row created.
SQL> INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-Y
1 row created.
SQL> INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON1 row created.
SQL>
SQL>
SQL> select * from emp;
EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
--------- ---------- --------- ---------- ---------- ---------CLERK
7902 17-DEC-80
800
20
SALESMAN
7698 20-FEB-81
1600
300
30
SALESMAN
7698 22-FEB-81
1250
500
30
MANAGER
7839 02-APR-81
2975
20
SALESMAN
7698 28-SEP-81
1250
1400
30
MANAGER
7839 01-MAY-81
2850
30
MANAGER
7839 09-JUN-81
2450
10
ANALYST
7566 09-DEC-82
3000
20
PRESIDENT
17-NOV-81
5000
10
SALESMAN
7698 08-SEP-81
1500
0
30
CLERK
7788 12-JAN-83
1100
20
EMPNO
---------7900
7902
7934
ENAME
---------JAMES
FORD
MILLER
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
--------- ---------- --------- ---------- ---------- ---------CLERK
7698 03-DEC-81
950
30
ANALYST
7566 03-DEC-81
3000
20
CLERK
7782 23-JAN-82
1300
10
14 rows selected.
SQL>
SQL>
SQL>
2
3
4
5
6
7
8
SELECT *
FROM Emp
WHERE sal =(SELECT min(sal) FROM Emp
WHERE job = 'SALESMAN')
or
deptno = (SELECT distinct deptno
FROM Emp
WHERE job = 'SALESMAN');
EMPNO
---------7499
7521
7654
7698
7844
7900
ENAME
---------ALLEN
WARD
MARTIN
BLAKE
TURNER
JAMES
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
--------- ---------- --------- ---------- ---------- ---------SALESMAN
7698 20-FEB-81
1600
300
30
SALESMAN
7698 22-FEB-81
1250
500
30
SALESMAN
7698 28-SEP-81
1250
1400
30
MANAGER
7839 01-MAY-81
2850
30
SALESMAN
7698 08-SEP-81
1500
0
30
CLERK
7698 03-DEC-81
950
30
6 rows selected.
SQL>
SQL>
SQL> drop table emp;
Table dropped.
SQL>
SQL>
SQL>
Subqueries in a HAVING Clause: Uses a subquery in the HAVING clause of the outer query
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
NOT NULL,
Table created.
SQL>
SQL> -- prepare data
SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_
2
values ('01','Jason',
'Martin', to_date('19960725','YYYYMMDD'), to_d
3 /
1 row created.
FIRST_NAME
---------Jason
Alison
James
Celia
Robert
Linda
David
James
LAST_NAME
---------Martin
Mathews
Smith
Rice
Black
Green
Larry
Cat
START_DATE
----------1996-JUL-25
1976-MAR-21
1978-DEC-12
1982-OCT-24
1984-JAN-15
1987-JUL-30
1990-DEC-31
1996-SEP-17
END_DATE
SALARY CITY
----------- ---------- ---------2006-JUL-25
1234.56 Toronto
1986-FEB-21
6661.78 Vancouver
1990-MAR-15
6544.78 Vancouver
1999-APR-21
2344.78 Vancouver
1998-AUG-08
2334.78 Vancouver
1996-JAN-04
4322.78 New York
1998-FEB-12
7897.78 New York
2002-APR-15
1232.78 Vancouver
DESCRIPTION
--------------Programmer
Tester
Tester
Manager
Tester
Tester
Manager
Tester
8 rows selected.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
3
4
5
6
7
--Subqueries in a HAVING Clause: Uses a subquery in the HAVING clause of the outer qu
SELECT city, AVG(salary)
FROM employee
GROUP BY city
HAVING AVG(salary) <
(SELECT MAX(AVG(salary))
FROM employee
GROUP BY city);
CITY
AVG(SALARY)
---------- ----------Toronto
1234.56
Vancouver
3823.78
SQL>
SQL>
SQL> -- clean the table
SQL> drop table Employee
2 /
Table dropped.
SQL>
SQL>
SQL>