Mega Code Archive

 
Categories / Oracle PLSQL Tutorial / View
 

Query a view with subquery

SQL> SQL> create table employees(   2    empno      NUMBER(4)   3  , ename      VARCHAR2(8)   4  , init       VARCHAR2(5)   5  , job        VARCHAR2(8)   6  , mgr        NUMBER(4)   7  , bdate      DATE   8  , msal       NUMBER(6,2)   9  , comm       NUMBER(6,2)  10  , deptno     NUMBER(2) ) ; Table created. SQL> SQL> insert into employees values(1,'Jason',  'N',  'TRAINER', 2,   date '1965-12-18',  800 , NULL,  10); 1 row created. SQL> insert into employees values(2,'Jerry',  'J',  'SALESREP',3,   date '1966-11-19',  1600, 300,   10); 1 row created. SQL> insert into employees values(3,'Jord',   'T' , 'SALESREP',4,   date '1967-10-21',  1700, 500,   20); 1 row created. SQL> insert into employees values(4,'Mary',   'J',  'MANAGER', 5,   date '1968-09-22',  1800, NULL,  20); 1 row created. SQL> insert into employees values(5,'Joe',    'P',  'SALESREP',6,   date '1969-08-23',  1900, 1400,  30); 1 row created. SQL> insert into employees values(6,'Black',  'R',  'MANAGER', 7,   date '1970-07-24',  2000, NULL,  30); 1 row created. SQL> insert into employees values(7,'Red',    'A',  'MANAGER', 8,   date '1971-06-25',  2100, NULL,  40); 1 row created. SQL> insert into employees values(8,'White',  'S',  'TRAINER', 9,   date '1972-05-26',  2200, NULL,  40); 1 row created. SQL> insert into employees values(9,'Yellow', 'C',  'DIRECTOR',10,  date '1973-04-27',  2300, NULL,  20); 1 row created. SQL> insert into employees values(10,'Pink',  'J',  'SALESREP',null,date '1974-03-28',  2400, 0,     30); 1 row created. SQL> SQL> create table registrations   2  ( attendee    NUMBER(4)   3  , course      VARCHAR2(6)   4  , begindate   DATE   5  , evaluation  NUMBER(1)) ; Table created. SQL> SQL> insert into registrations values (1, 'SQL',date '1999-04-12',4   ); 1 row created. SQL> insert into registrations values (2, 'SQL',date '1999-12-13',NULL); 1 row created. SQL> insert into registrations values (3, 'SQL',date '1999-12-13',NULL); 1 row created. SQL> insert into registrations values (4, 'OAU',date '1999-08-10',4   ); 1 row created. SQL> insert into registrations values (5, 'OAU',date '2000-09-27',5   ); 1 row created. SQL> insert into registrations values (6, 'JAV',date '1999-12-13',2   ); 1 row created. SQL> insert into registrations values (7, 'JAV',date '2000-02-01',4   ); 1 row created. SQL> insert into registrations values (8, 'JAV',date '2000-02-01',5   ); 1 row created. SQL> insert into registrations values (9, 'XML',date '2000-02-03',4   ); 1 row created. SQL> insert into registrations values (10,'XML',date '2000-02-03',5   ); 1 row created. SQL> insert into registrations values (1, '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 (3, 'PLS',date '2000-09-11',NULL); 1 row created. SQL> SQL> create table courses   2  ( code        VARCHAR2(6)   3  , description VARCHAR2(30)   4  , category    CHAR(3)   5  , duration    NUMBER(2)) ; Table created. SQL> SQL> insert into courses values('SQL','SQL course',    'GEN',4); 1 row created. SQL> insert into courses values('OAU','Oracle course', 'GEN',1); 1 row created. SQL> insert into courses values('JAV','Java course',   'BLD',4); 1 row created. SQL> insert into courses values('PLS','PL/SQL course', 'BLD',1); 1 row created. SQL> insert into courses values('XML','XML course',    'BLD',2); 1 row created. SQL> insert into courses values('ERM','ERM course',    'DSG',3); 1 row created. SQL> insert into courses values('PMT','UML course',    'DSG',1); 1 row created. SQL> insert into courses values('RSD','C# course',     'DSG',2); 1 row created. SQL> insert into courses values('PRO','C++ course',    'DSG',5); 1 row created. SQL> insert into courses values('GEN','GWT course',    'DSG',4); 1 row created. SQL> SQL> create or replace view course_days as   2  select   e.empno   3  ,        e.ename   4  ,        sum(c.duration) as days   5  from     registrations  r   6           join courses   c on (c.code  = r.course)   7           join employees e on (e.empno = r.attendee)   8  group by e.empno   9  ,        e.ename; View created. SQL> select *   2  from   course_days   3  where  days > (select avg(days)   4                  from   course_days);  EMPNO      last_name         DAYS ------ -------------------- ------      7 Red                       4      2 Jerry                     5      6 Black                     4      1 Jason                     5      3 Jord                      5      8 White                     4 6 rows selected. SQL> SQL> drop table registrations; Table dropped. SQL> SQL> drop table courses; Table dropped. SQL> SQL> drop table employees; Table dropped. SQL>