139
SQL\Ch01 Ex.1 List name of companies located in BOMBAY. SQL> select cname from company where city =`BOMBAY'; Ex.2 list name of employees living in city `NAGPUR' SQL> select ename from employees where city = `Nagpur'; EX.3 list name of employees having company `ACC' AND RECEIVING SALARY GREATER THAN 1000.00 SQL> select ename from emp_company where cname=`ACC' and salary>1000; Example 4. List the names of employee who are not employee with the company ‘ACC’. SQL>select ename from emp_company where not (cname=‘ACC’); SQL>select ename from emp_company where cname<>‘ACC’; Example 5. Suppose you want the names of employee from company ‘ACC’ or ‘TATA’. SQL>select ename from emp_company where cname =‘ACC’ or cname = ‘TATA’; / ================================================================================ = SQL\Ch02 Example 1. Give name of employee whose company is located in city ‘DELHI’. SQL>select emp_company.ename from emp_company, company where emp_company.cname = company.cname and company.city = ’DELHI’; Example 2. Give name of employee living in the same city where their company is located. SQL>select employee.ename from employee,emp_company,company where employee.ename = emp_company.ename and emp_company.cname = company.cname and employee.city = company.city; Example 3. Give name of employee living in city BOMBAY and having company located in city DELHI. SQL>select employee.ename from employee,emp_company,company where employee.ename = emp_company.ename and emp_company.cname = company.cname and employee.city = ’BOMBAY’

SQL Oracle

Embed Size (px)

Citation preview

Page 1: SQL Oracle

SQL\Ch01

Ex.1 List name of companies located in BOMBAY.SQL> select cname from company where city =`BOMBAY';

Ex.2 list name of employees living in city `NAGPUR'SQL> select ename from employees where city = `Nagpur';

EX.3 list name of employees having company `ACC' AND RECEIVING SALARY GREATER THAN 1000.00SQL> select ename from emp_company where cname=`ACC' and salary>1000;

Example 4. List the names of employee who are not employee with the company ‘ACC’.SQL>select ename from emp_company where not (cname=‘ACC’);

SQL>select ename from emp_company where cname<>‘ACC’;

Example 5. Suppose you want the names of employee from company ‘ACC’ or ‘TATA’.SQL>select ename from emp_company where cname =‘ACC’ or cname = ‘TATA’;

/=================================================================================

SQL\Ch02

Example 1. Give name of employee whose company is located in city ‘DELHI’.SQL>select emp_company.ename

from emp_company, companywhere emp_company.cname = company.cnameand company.city = ’DELHI’;

Example 2. Give name of employee living in the same city where their company is located.SQL>select employee.ename

from employee,emp_company,companywhere employee.ename = emp_company.enameand emp_company.cname = company.cname and employee.city = company.city;

Example 3. Give name of employee living in city BOMBAY and having company located in city DELHI.SQL>select employee.enamefrom employee,emp_company,company where employee.ename = emp_company.ename and emp_company.cname = company.cnameand employee.city = ’BOMBAY’and company.city = ’DELHI’

Example. 4. Give name of manager and salary of employee SUNIL.SQL>select emp_company.salary,manager.mname

from emp_company,managerwhere emp_company.ename = ’SUNIL’and emp_company.ename = manager.ename;

/

Example 1. Give the salary of employee living in DELHI.SQL>select salary from emp_company where exists (select ‘X’ from employeewhere employee.city = ‘DELHI’ and employee.ename = emp_company.ename);

Page 2: SQL Oracle

Example 2. Give name of companies located in those cities where ‘TATA’ is located.SQL>select cname from company where not exists((select city from company cmp1 where cname = ’TATA’) minus (select cmp2.city from company cmp2 where cmp2.cname = company.cname));

try the following example using only in

1. List name of employees having living city same as 'Ajay'2. List name of Employees with their living city having shift B and company 'ACC' 3. List name of employees with their living city having company city 'Bombay'4. List name of employees having living city same as company city5. List name of employee having same company city as company city of 'Ajay'

1. select e.ename,e.city from employee e where exists (select 'X' from employee e1 where e1.ename='Ajay' and e.city = e1.city);

2. select e.ename,e.city from employee e where exists (select 'X' from emp_company c where c.cname='ACC'and e.ename=c.ename) // anil sunil and exists (select 'X' from emp_shift s where s.shift='B'and e.ename=s.ename); //ajay sunil

3. select e.ename,e.city from employee e where e.ename in (select c.ename --ajay sunil vijay from emp_company c where c.cname in (select m.cname -- ACC TATA from company m where m.city='Bombay') );

select e.ename,e.city from employee e where exists (select'X' --ajay sunil vijay from emp_company c where e.ename=c.ename and exists (select 'X' from company m where c.cname = m.cname and m.city='Bombay') );

4. select e1.ename from employee e1 where e1.city in (select c1.city from company c1 where c1.cname in (select m1.cname from emp_compay m1 where m1.ename=e1.ename)) ; using exists 4. select e1.ename ajay

Page 3: SQL Oracle

from employee e1 where exists (select 'X' from company c1 where c1.city = e1.city and exists (select 'X' from emp_compay m1 where m1.ename=e1.ename and c1.cname=m1.cname));

5. select e1.ename --all employees working in ACC,TATA from emp_company e1 where e1.cname in (select c1.cname -- ACC,TATA from company c1 where c1.city in (select c2.city --Bombay from company c2 where c2.cname in -- ACC (select e2.cname from emp_company e2 where e2.ename='Ajay'))); /

Example 1. List the employee living in city ‘BOMBAY’ and those having company located in city ‘DELHI’.SQL>select ename from emp_company where ename In (select ename from employee where city = ’BOMBAY’) and cname In (select cname from company where city = ’DELHI’);

Example 2. List the names of employee living in the same city as where SUNIL is living.SQL>select ename from employee where city in (select city from employee where ename = ’SUNIL’);/Example 1. Give name of employee having same company city as ‘SUNIL’.SQL>select employee_cmp2.ename

from emp_company employee_cmp1,company company1, emp_company employee_cmp2,company company2

Where employee_cmp1.cname = company1.cnameand employee_cmp1.ename = ’SUNIL’and employee_cmp2.cname = company2.cnameand company2.city = company1.city

/

list name of employees who don't have shift

select enamefrom employeeminusselect enamefrom emp_shift/

Examples1.list name of employees living in nagpur and working with company ACC2.list name of employee living in Nagpur but not working in company ACC3.list name of employee living in nagpur ,working in ACC and having shift A4.list name of employee living in Nagpur and having company ACC ,don't have shift A5.list name of employee who are living in nagpur or bombay

1.select ename from employee where city = 'Nagpur'

Page 4: SQL Oracle

intersect select ename from emp_company where cname = 'ACC' /

2.select ename from employee where city = 'Nagpur' minus select ename from emp_company where cname = 'ACC' /

3.select ename from employee where city = 'Nagpur' intersect select ename from emp_company where cname = 'ACC' intersect select ename from emp_shift where shift = 'A' /

4. (select ename from employee where city='Nagpur' intersect select ename from emp_company where cname='ACC') minus select ename from emp_shift where shift='A' /

5. select ename from employee where city='Nagpur' union select ename from employee where city='Bombay'/=================================================================================

SQL\ch03

SQL> select ename,salary from emp_company;

ENAME SALARY ---------- --------- Anil 1500 Shankar 2000 Jaya 1800 Sunil 1700 Vijay 5000 Prakash 3000 Ajay 8000

list name of employee having highest salary

SQL> select ename 2 from emp_company 3 where salary >= all(select salary from emp_company);

ENAME ----------

Page 5: SQL Oracle

Ajay

SQL> select ename 2 from emp_company 3 where salary > any(select salary from emp_company);

ENAME ---------- Shankar Jaya Sunil Vijay Prakash Ajay

6 rows selected.

list name of company having highest avg. deposit select e.cname,avg(e.salary) from emp_company e group by cname having avg(e.salary) > = all(select avg(c.salary) from emp_company c group by c.cname)

7 rows selected.

SQL> spool off

try these examples

1. List name of company having highest number of employees2. List name of employee from ACC having highest salary in company ACC.

1. List name of company having highest number of employees1. select e.cname,count(e.ename) from emp_company e group by cname having count(e.ename) > = all(select count(c.ename) from emp_company c group by c.cname);2. List name of employee from ACC having highest salary in company ACC.2. select e1.ename from emp_company e1 where e1.cname='ACC' and e1.salary >=All(select e2.salary from emp_company e2 where e2.cname='ACC')

/ DISTINCT OPERATOR

SQL> select distinct cname from emp_company;

CNAME ---------- Acc CMC TATA

Page 6: SQL Oracle

SQL> select cname from emp_company;

CNAME ---------- Acc TATA CMC CMC TATA TATA ACC

7 rows selected.

SQL> select count(cname) from emp_company;

COUNT(CNAME) ------------ 7

SQL> select count(distinct cname) from emp_company;

COUNT(DISTINCTCNAME) -------------------- 4

SQL> insert into emp_company(ename,salary) values('prakash',5000);1 row created.

SQL> commit;

Commit complete.

SQL> select count(cname) from emp_company;

COUNT(CNAME) ------------ 7

SQL> select count(distinct cname) from emp_company;

COUNT(DISTINCTCNAME) -------------------- 4

SQL> editWrote file afiedt.buf

1 select ename from emp_company 2 union 3* select ename from emp_shiftSQL> /

ENAME ---------- Ajay Anil Jaya Prakash Shankar Sunil Vijay

Page 7: SQL Oracle

prakash

8 rows selected.

SQL> editWrote file afiedt.buf

1 select ename from emp_company 2 union all 3* select ename from emp_shiftSQL> /

ENAME ---------- Anil Shankar Jaya Sunil Vijay Prakash Ajay prakash Anil Sunil Vijay Prakash

12 rows selected.

SQL> insert into emp_company(ename,salary) values('prakash',4000);

1 row created.

SQL>select ename from emp_company 2 minus 3* select ename from emp_shiftSQL> /

ENAME ---------- Ajay Jaya Shankar prakash

SQL> spool off

SQL> select ename from emp_company 2 union 3 select ename from emp_company 4 union all 5* select ename from emp_company 6 /

ENAME ---------- Ajay Anil Jaya Prakash

Page 8: SQL Oracle

Shankar Sunil Vijay prakash Anil Shankar Jaya Sunil Vijay Prakash Ajay prakash prakash prakash

18 rows selected.

SQL> spool off/ The Like operator

SQL> select * from employee where ename like 'A%'; --% means zero or more characters

ENAME CITY ---------- ---------- Anil Nagpur Ajay Madras

ename = 'A%' -- wrong

1* select * from employee where ename like 'A_ay%' -- '_' means any one characterSQL> /

ENAME CITY ---------- ---------- Ajay Madras

If your data is SQL> insert into employee values('A%B','bm');1 row created.You want to retrieve rows which starts with ‘A%’. here you want to shut down special meaning of character %. You can use essacpe character ‘/’ for doing this. You can write query asselect enamefrom employeewhere ename like 'A/%%'escape '/'

SQL> spool off

/ The null operator

insert into emp_company(ename,salary) values ('prakash',5000)orinsert into emp_company values ('prakash',null,5000,null)

SQL> select * from emp_company;

ENAME CNAME SALARY JDATE

Page 9: SQL Oracle

---------- ---------- --------- --------- Anil Acc 1500 01-MAY-89 Shankar TATA 2000 10-JUL-90 Jaya CMC 1800 07-JUN-91 Sunil CMC 1700 01-JAN-88 Vijay TATA 5000 03-JAN-88 Prakash TATA 3000 27-MAY-89 Ajay ACC 8000 30-APR-95 prakash 5000

8 rows selected.

SQL> select * from emp_company where cname='';

no rows selected

SQL> select * from emp_company where cname=null;

no rows selected

SQL> select * from emp_company where not(cname=null);

no rows selected

SQL> select * from emp_company where cname is null;

ENAME CNAME SALARY JDATE ---------- ---------- --------- --------- prakash 5000

compliment is not null

SQL> select 5*4 from dual;

5*4 --------- 20

SQL> select 5*4+null from dual;

5*4+NULL ---------

1* select * from emp_company where cname=null or salary>=8000SQL> /

ENAME CNAME SALARY JDATE ---------- ---------- --------- --------- Ajay ACC 8000 30-APR-95

SQL> select ename,nvl(cname,'No Company') from emp_company;

ENAME NVL(CNAME, ---------- ---------- Anil Acc Shankar TATA Jaya CMC Sunil CMC Vijay TATA

Page 10: SQL Oracle

Prakash TATA Ajay ACC prakash No Company

8 rows selected.

SQL> select max(cname) from emp_company;

MAX(CNAME) ---------- TATA SQL> select count(cname) from emp_company;

SQL> spool off/SQL> select ascii('Abc') from dual;

ASCII('ABC') ------------ 65

SQL> select chr(65) from dual;

C - A

SQL> select initcap('abcDe') from dual;

INITC ----- Abcde

SQL> select upper('abCfg') from dual;

UPPER ----- ABCFG

SQL> select lower('sfdsFG') from dual;

LOWER( ------ sfdsfg

SQL> select length('abcdf') from dual;

LENGTH('ABCDF') --------------- 5

SQL> select lengthb('abcdf') from dual;

LENGTHB('ABCDF') ---------------- 5

SQL> select lengthb(34) from dual;

LENGTHB(34) ----------- 2

Page 11: SQL Oracle

SQL> select lengthb(1000) from dual;

LENGTHB(1000) ------------- 4

SQL> select lengthb(516) from dual;

LENGTHB(516) ------------ 3

SQL> select lengthb(sysdate) from dual;

LENGTHB(SYSDATE) ---------------- 9

SQL> select substr('abcdef',3,2) from dual;

SU -- cd

SQL> editWrote file afiedt.buf

1* select substr('abcdef',3,5) from dualSQL> /

SUBS ---- cdef

SQL> editWrote file afiedt.buf

1* select substr('abcdef',13,5) from dualSQL> /

S -

-- Finds first occurence of 'bb' in 'abbcdgbb' from position 1 and returns it's positionSQL> editWrote file afiedt.buf

1 select instr('abbcdgbb','bb',1,1) 2* from dualSQL> /

INSTR('ABBCDGBB','BB',1,1) -------------------------- 2

SQL> editWrote file afiedt.buf--Finds second occurence of 'bb' in 'abbcdgbb' from position 1 and returns it's position

1 select instr('abbcdgbb','bb',1,2)

Page 12: SQL Oracle

2* from dualSQL> /

INSTR('ABBCDGBB','BB',1,2) -------------------------- 7 Finds second occurence of 'bb' in 'abbcdgbb' from position 4 and returns it's positionSQL> editWrote file afiedt.buf

1 select instr('abbcdgbb','bb',4,2) 2* from dualSQL> /

INSTR('ABBCDGBB','BB',4,2) -------------------------- 0

--left padding using blank till the length 8 ie reached

SQL> select lpad('abc',8) from dual;

LPAD('AB -------- abc

SQL> editWrote file afiedt.buf

1* select length(lpad('abc',8)) from dualSQL> /

LENGTH(LPAD('ABC',8)) --------------------- 8

SQL> editWrote file afiedt.buf

1* select length(lpad('abc',2)) from dualSQL> /

LENGTH(LPAD('ABC',2)) --------------------- 2

SQL> editWrote file afiedt.buf

1* select lpad('abc',2) from dualSQL> /

LP -- ab

SQL> edit----left padding using 'as' till the length 8 ie reached

1* select lpad('abc',8,'as') from dualSQL> /

Page 13: SQL Oracle

LPAD('AB -------- asasaabc

SQL> editWrote file afiedt.buf----right padding using 'as' till the length 8 ie reached

1* select rpad('abc',8,'as') from dualSQL> /

RPAD('AB -------- abcasasa

SQL> editWrote file afiedt.buf--right trimming of blanks

1* select rtrim('abc ') from dualSQL> /

RTR --- abc

SQL> editWrote file afiedt.buf

1* select length(rtrim('abc ')) from dualSQL> /

LENGTH(RTRIM('ABC')) -------------------- 3

SQL> edit

SQL> editWrote file afiedt.buf--right trimming of string i.e removing char 'c' from right end

1* select length(rtrim('abc ','c')) from dualSQL> /

LENGTH(RTRIM('ABC','C')) ------------------------ 5

SQL> editWrote file afiedt.buf

1* select length(rtrim('abcc','c')) from dualSQL> /

LENGTH(RTRIM('ABCC','C')) ------------------------- 2

SQL> editWrote file afiedt.buf--right trimming of string i.e removing char 'c' from right end

Page 14: SQL Oracle

1* select (rtrim('abcc','c')) from dualSQL> /

(R -- ab

SQL> editWrote file afiedt.buf--right trimming of string i.e removing char 'bc' from right end

1* select (rtrim('abcc','bc')) from dualSQL> /

( - a

SQL> select 'X' from dual where 'son'='sun';

no rows selected

SQL> editWrote file afiedt.buf

-- comparison true if both are producing same sound

1* select 'X' from dual where soundex('son')=soundex('sun')SQL> /

' - X

SQL> spool off/SQL> select sysdate from dual;

SYSDATE --------- 03-JAN-02

SQL> select to_char(sysdate,'mm') from dual;

TO -- 01

SQL> editWrote file afiedt.buf

1* select to_char(sysdate,'mmsp') from dualSQL> /

TO_CHA ------ one

SQL> editWrote file afiedt.buf

Page 15: SQL Oracle

1* select to_char(sysdate,'mmspth') from dualSQL> /

TO_CHAR( -------- first

SQL> select to_char(sysdate,'yyyyspth') from dualSQL> /

TO_CHAR(SYSDATE,'YYYYSPTH') -------------------------------------------- two thousand second

SQL> editWrote file afiedt.buf

1* select to_char(sysdate,'year') from dualSQL> /

TO_CHAR(SYSDATE,'YEAR') ------------------------------------------ two thousand two

SQL> select to_char(sysdate,'dd-mon-rr') from dual;

TO_CHAR(S --------- 03-jan-02

SQL> select new_time(sysdate,'GMT','PST') FROM DUAL;

NEW_TIME( --------- 03-JAN-02

SQL> EDITWrote file afiedt.buf

1* select TO_CHAR(new_time(sysdate,'GMT','PST'),'DD-MON-YYYY HH:MI:SS') FROM DUALSQL> /

TO_CHAR(NEW_TIME(SYS -------------------- 03-JAN-2002 12:21:08

SQL> SELECT TO_CHAR(SYSDATE,'HH12AM') FROM DUAL;

TO_C ---- 08PM

SQL> SELECT TO_CHAR(SYSDATE,'D') FROM DUAL;

T - 5

SQL> SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL;

TO --

Page 16: SQL Oracle

03

SQL> SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;

TO_ --- 003

SQL> SELECT TO_CHAR(SYSDATE,'DDDD') FROM DUAL;

TO_C ---- 0035

SQL> SELECT TO_CHAR(SYSDATE,'W') FROM DUAL;

T - 1

SQL> SELECT TO_CHAR(SYSDATE,'WW') FROM DUAL;

TO -- 01

SQL> EDITWrote file afiedt.buf

1* SELECT TO_CHAR(SYSDATE,'IW') FROM DUALSQL> /

TO -- 01

SQL> SELECT TO_CHAR(SYSDATE,'J') FROM DUAL;

TO_CHAR ------- 2452278

SQL> SQL> SQL> SQL> EDITWrote file afiedt.buf

1* SELECT TO_CHAR(SYSDATE,'SYYYY') FROM DUALSQL> /

TO_CH ----- 2002

SQL> SELECT TO_CHAR(SYSDATE,'DD-RM-YYYY') FROM DUAL;

TO_CHAR(SYSD ------------ 03-I -2002

SQL> SELECT TO_CHAR(SYSDATE,'RD') FROM DUAL;

Page 17: SQL Oracle

SELECT TO_CHAR(SYSDATE,'RD') FROM DUAL *ERROR at line 1:ORA-01821: date format not recognized

SQL> SELECT TRUNC(SYSDATE,'MM') FROM DUAL;

TRUNC(SYS --------- 01-JAN-02

SQL> EDITWrote file afiedt.buf

1* SELECT TRUNC(SYSDATE-10,'MM') FROM DUALSQL> /

TRUNC(SYS --------- 01-DEC-01

SQL> EDITWrote file afiedt.buf

1* SELECT TRUNC(SYSDATE-10,'YY') FROM DUALSQL> /

TRUNC(SYS --------- 01-JAN-01

SQL> EDITWrote file afiedt.buf

1* SELECT TRUNC(SYSDATE,'HH') FROM DUALSQL> /

TRUNC(SYS --------- 03-JAN-02

SQL> EDITWrote file afiedt.buf

1* SELECT TO_CHAR(TRUNC(SYSDATE,'HH'),'HH:MI:SS') FROM DUALSQL> /

TO_CHAR( -------- 08:00:00

SQL> EDITWrote file afiedt.buf

1* SELECT ROUND(SYSDATE+12,'MM') FROM DUALSQL> /

ROUND(SYS --------- 01-JAN-02

Page 18: SQL Oracle

SQL> EDITWrote file afiedt.buf

1* SELECT ROUND(SYSDATE+13,'MM') FROM DUALSQL> /

ROUND(SYS --------- 01-FEB-02

SQL> EDITWrote file afiedt.buf

1* SELECT ROUND(SYSDATE+13,'Q') FROM DUALSQL> /

ROUND(SYS --------- 01-JAN-02

SQL> SPOOL OFF/SQL> select '5' from dual;

' - 5

SQL> select round(123.556) from dual;

ROUND(123.556) -------------- 124

SQL> select round(123.456,1) from dual;

ROUND(123.456,1) ---------------- 123.5

SQL> editWrote file afiedt.buf

1* select round(123.456,2) from dualSQL> /

ROUND(123.456,2) ---------------- 123.46

SQL> editWrote file afiedt.buf

1* select round(123.456,3) from dualSQL> /

ROUND(123.456,3) ---------------- 123.456

SQL> editWrote file afiedt.buf

Page 19: SQL Oracle

1* select round(123.456,-1) from dualSQL> /

ROUND(123.456,-1) ----------------- 120

SQL> editWrote file afiedt.buf

1* select round(123.456,-2) from dualSQL> /

ROUND(123.456,-2) ----------------- 100

SQL> editWrote file afiedt.buf

1* select round(123.456,-3) from dualSQL> /

ROUND(123.456,-3) ----------------- 0

SQL> editWrote file afiedt.buf

1* select round(173.456,-2) from dualSQL> /

ROUND(173.456,-2) ----------------- 200

SQL> editWrote file afiedt.buf

1* select trunc(173.456,-2) from dualSQL> /

TRUNC(173.456,-2) ----------------- 100

SQL> editWrote file afiedt.buf

1* select trunc(173.456,-1) from dualSQL> /

TRUNC(173.456,-1) ----------------- 170

SQL> editWrote file afiedt.buf

1* select trunc(173.456,1) from dual

Page 20: SQL Oracle

SQL> /

TRUNC(173.456,1) ---------------- 173.4

SQL> editWrote file afiedt.buf

1* select trunc(173.456,2) from dualSQL> /

TRUNC(173.456,2) ---------------- 173.45

SQL> spool off

list statistics of employees in following way

salary_low salary_high No_of_employees0 999 11000 1999 32000 2999 2

select trunc(salary,-3) salary_low,trunc(salary,-3)+999 salary_high, count(ename)from emp_companygroup by trunc(salary,-3),trunc(salary,-3)+999

SALARY_LOW SALARY_HIGH COUNT(ENAME)---------- ----------- ------------ 1000 1999 3 2000 2999 1 3000 3999 3 5000 5999 2 6000 6999 1 7000 7999 1

6 rows selected.

1 select trunc(salary/5000)*5000 salary_low,trunc(salary/5000)*5000+4999 salary_high, count(ename) 2 from emp_company 3* group by trunc(salary/5000)*5000,trunc(salary/5000)*5000+4999SQL> /

SALARY_LOW SALARY_HIGH COUNT(ENAME)---------- ----------- ------------ 0 4999 7 5000 9999 4

/

SQL> select abs(-9) from dual;

ABS(-9) --------- 9

Page 21: SQL Oracle

SQL> select ceil(-9.3) from dual;

CEIL(-9.3) ---------- -9

SQL> select ceil(9.3) from dual;

CEIL(9.3) --------- 10

SQL> select floor(-9.3) from dual;

FLOOR(-9.3) ----------- -10

SQL> select floor(9.3) from dual;

FLOOR(9.3) ---------- 9

SQL> select sign(-5) from dual;

SIGN(-5) --------- -1

SQL> select sign(5) from dual;

SIGN(5) --------- 1

SQL> select sign(0) from dual;

SIGN(0) --------- 0

SQL> select power(3,2) from dual;

POWER(3,2) ---------- 9

SQL> select mod(7,3) from dual;

MOD(7,3) --------- 1

SQL> select sqrt(9) from dual;

SQRT(9) --------- 3

SQL> spool off/

Page 22: SQL Oracle

SQL> SELECT * FROM EMP_COMPANY WHERE ROWNUM < 4;

ENAME CNAME SALARY JDATE ---------- ---------- --------- --------- Anil Acc 1500 01-MAY-89 Shankar TATA 2000 10-JUL-90 Jaya CMC 1800 07-JUN-91

SQL> SELECT ENAME,CNAME FROM EMP_COMPANY ORDER BY SALARY;

ENAME CNAME ---------- ---------- Anil Acc Sunil CMC Jaya CMC Shankar TATA Prakash TATA Ashok TATA Vinod ACC prakash Vijay TATA Nitin ACC Ajay Tata

11 rows selected.

SQL> EDITWrote file afiedt.buf

1* SELECT ENAME,CNAME FROM EMP_COMPANY ORDER BY 1SQL> /

ENAME CNAME ---------- ---------- Ajay Tata Anil Acc Ashok TATA Jaya CMC Nitin ACC Prakash TATA Shankar TATA Sunil CMC Vijay TATA Vinod ACC prakash

11 rows selected.

SQL> EDITWrote file afiedt.buf

1* SELECT ENAME,CNAME FROM EMP_COMPANY ORDER BY 2,1SQL> /

ENAME CNAME ---------- ---------- Nitin ACC Vinod ACC Anil Acc Jaya CMC Sunil CMC Ashok TATA

Page 23: SQL Oracle

Prakash TATA Shankar TATA Vijay TATA Ajay Tata prakash

11 rows selected.

SQL> EDITWrote file afiedt.buf

1* SELECT ENAME,CNAME FROM EMP_COMPANY ORDER BY 2,1 DESCSQL> /

ENAME CNAME ---------- ---------- Vinod ACC Nitin ACC Anil Acc Sunil CMC Jaya CMC Vijay TATA Shankar TATA Prakash TATA Ashok TATA Ajay Tata prakash

11 rows selected.

SQL> SELECT ENAME FROM EMP_COMPANY WHERE ROWNUM = 2;

no rows selected

SQL> SQL> SQL> SQL> SQL> SQL> SELECT TRANSLATE('ABBCD','AB','*+') FROM DUAL;

TRANS ----- *++CD

SQL> EDITWrote file afiedt.buf

1* SELECT TRANSLATE('ABBCD','AB','*') FROM DUALSQL> /

TRA --- *CD

SQL> INSERT INTO EMP_COMPANY(ENAME,JDATE) VALUES('GORGE',TO_DATE('12-DEC-2001 12:45:10','DD-MON-YYYY HH:MI:SS'));

1 row created.

SQL> EDITWrote file afiedt.buf

Page 24: SQL Oracle

1* INSERT INTO EMP_COMPANY(ENAME,JDATE) VALUES('GORGE',TO_DATE('12-DEC-2001 12:45:10','DD-MON-YYYY HH:MI:SS'))SQL> SELECT TO_NUMBER('34') + 10 FROM DUAL;

TO_NUMBER('34')+10 ------------------ 44 /SQL> select rowid,ename,salary from emp_company;

ROWID ENAME SALARY ------------------ ---------- --------- AAAUuAAAIAAALPvAAA Anil 1500 AAAUuAAAIAAALPvAAB Shankar 2000 AAAUuAAAIAAALPvAAC Jaya 1800 AAAUuAAAIAAALPvAAD Sunil 1700 AAAUuAAAIAAALPvAAE Vijay 5100 AAAUuAAAIAAALPvAAF Prakash 3000 AAAUuAAAIAAALPvAAG Ajay 7700 AAAUuAAAIAAALPwAAA prakash 5000 AAAUuAAAIAAALPwAAB Nitin 6000 AAAUuAAAIAAALPwAAC Ashok 3000 AAAUuAAAIAAALPwAAD Vinod 3200 AAAUuAAAIAAALPwAAE GORGE

12 rows selected.

Rowid specifies position of row on disk.Rowid is unique for each row.It is constant throughout lifetime of that row.

SQL> select rowid,ename,salary from emp_company where rowid=chartorowid('AAAUuAAAIAAALPvAAB');

ROWID ENAME SALARY ------------------ ---------- --------- AAAUuAAAIAAALPvAAB Shankar 2000

SQL> select decode(sign(salary - 4000),-1,'low salary',1,'high salary') from emp_company;

DECODE(SIGN ----------- low salary low salary low salary low salary high salary low salary high salary high salary high salary low salary low salary

12 rows selected.

SQL> editWrote file afiedt.buf

1* select ename,salary,decode(sign(salary - 4000),-1,'low salary',1,'high salary') from emp_companySQL> /

Page 25: SQL Oracle

ENAME SALARY DECODE(SIGN ---------- --------- ----------- Anil 1500 low salary Shankar 2000 low salary Jaya 1800 low salary Sunil 1700 low salary Vijay 5100 high salary Prakash 3000 low salary Ajay 7700 high salary prakash 5000 high salary Nitin 6000 high salary Ashok 3000 low salary Vinod 3200 low salary GORGE

12 rows selected.

SQL> select least(45,23) from dual;

LEAST(45,23) ------------ 23

SQL> select greatest(23,45) from dual;

GREATEST(23,45) --------------- 45

SQL> select rowid,ename from emp_company where rowid > chartorowid('AAAUuAAAIAAALPwAAB');

ROWID ENAME ------------------ ---------- AAAUuAAAIAAALPwAAC Ashok AAAUuAAAIAAALPwAAD Vinod AAAUuAAAIAAALPwAAE GORGE

SQL> select vsize(ename),ename,vsize(salary),salary from emp_company;

VSIZE(ENAME) ENAME VSIZE(SALARY) SALARY ------------ ---------- ------------- --------- 10 Anil 2 1500 10 Shankar 2 2000 10 Jaya 2 1800 10 Sunil 2 1700 10 Vijay 2 5100 10 Prakash 2 3000 10 Ajay 2 7700 10 prakash 2 5000 10 Nitin 2 6000 10 Ashok 2 3000 10 Vinod 2 3200 10 GORGE

12 rows selected.

SQL> select ename,dump(ename) from emp_company;

ENAME ---------- DUMP(ENAME) ----------------------------------------------------------------------------------------------------

Page 26: SQL Oracle

Anil Typ=96 Len=10: 65,110,105,108,32,32,32,32,32,32 Shankar Typ=96 Len=10: 83,104,97,110,107,97,114,32,32,32 J

SQL> select user from dual;

USER ------------------------------ PSD

SQL> spool off/SQL> SELECT TO_CHAR(567898,'99,999,99') FROM DUAL;

TO_CHAR(56 ---------- 5,678,98

SQL> EDITWrote file afiedt.buf

1* SELECT TO_CHAR(567898,'99,999,99.99') FROM DUALSQL> /

TO_CHAR(56789 ------------- 5,678,98.00

SQL> EDITWrote file afiedt.buf

1* SELECT TO_CHAR(567898,'99G999G99D99') FROM DUALSQL> /

TO_CHAR(56789 ------------- 5,678,98.00

SQL> EDITWrote file afiedt.buf

1* SELECT TO_CHAR(567898,'99G999G99D99','NLS_NUMERIC_CHARACTERS=''*#''') FROM DUALSQL> /

TO_CHAR(56789 ------------- 5#678#98*00

SQL> SELECT TO_CHAR(-67895,'999999MI') FROM DUAL;

TO_CHAR ------- 67895-

SQL> EDITWrote file afiedt.buf

Page 27: SQL Oracle

1* SELECT TO_CHAR(-67895,'PR999999') FROM DUALSQL> /SELECT TO_CHAR(-67895,'PR999999') FROM DUAL *ERROR at line 1:ORA-01481: invalid number format model

SQL> EDITWrote file afiedt.buf

1* SELECT TO_CHAR(-67895,'999999PR') FROM DUALSQL> /

TO_CHAR( -------- <67895>

SQL> EDITWrote file afiedt.buf

1* SELECT TO_CHAR(67895,'C999999PR') FROM DUALSQL> /

TO_CHAR(678 ----------- USD67895

SQL> ALTER SESSION SET NLS_CURRENCY='RS.';

Session altered.

SQL> SELECT TO_CHAR(67895,'C999999PR') FROM DUAL;

TO_CHAR(678 ----------- USD67895

SQL> SELECT TO_CHAR(67895,'C999999PR') FROM DUAL;

TO_CHAR(678 ----------- USD67895

SQL> EDITWrote file afiedt.buf

1* SELECT TO_CHAR(67895,'L999999PR') FROM DUALSQL> /

TO_CHAR(67895,'L99 ------------------ RS.67895

SQL> EDITWrote file afiedt.buf

1* SELECT TO_CHAR(67895,'$999999PR') FROM DUALSQL> /

TO_CHAR(6

Page 28: SQL Oracle

--------- $67895

SQL> ALTER SESSION SET NLS_CURRENCY='RS.';

Session altered.

SQL> SELECT TO_CHAR(657656,'EEEE') FROM DUAL;SELECT TO_CHAR(657656,'EEEE') FROM DUAL *ERROR at line 1:ORA-01481: invalid number format model

SQL> EDITWrote file afiedt.buf

1* SELECT TO_CHAR(657656,'9.99EEEE') FROM DUALSQL> /

TO_CHAR(65 ---------- 6.58E+05

SQL> SPOOL OFF/=================================================================================

SQL\Ch04

Aggregate Functions

max,min,sum,avg,count,stdev

SQL> select * from emp_company;

ENAME CNAME SALARY JDATE ---------- ---------- --------- --------- Anil Acc 1500 01-MAY-89 Shankar TATA 2000 10-JUL-90 Jaya CMC 1800 07-JUN-91 Sunil CMC 1700 01-JAN-88 Vijay TATA 5000 03-JAN-88 Prakash TATA 3000 27-MAY-89 Ajay ACC 8000 30-APR-95 Abhay ACC 1800 1-APR-98 7 rows selected.

list maximum salary

SQL> select max(salary) from emp_company;

MAX(SALARY) ----------- 8000

SQL> select ename,max(salary) from emp_company;select ename,max(salary) from emp_company *ERROR at line 1:ORA-00937: not a single-group group function

Page 29: SQL Oracle

SQL> select ename from emp_company where salary in (select max(salary) from emp_company);

ENAME ---------- Ajay

list maximum of employees of ACCSQL> select max(salary) from emp_company where cname='ACC';

MAX(SALARY) ----------- 8000

SQL> select count(ename) from emp_company where cname='ACC';

COUNT(ENAME) ------------ 1

SQL> select avg(salary),sum(salary) from emp_company;

AVG(SALARY) SUM(SALARY) ----------- ----------- 3285.7143 23000

SQL> select max(salary) from emp_company where cname='l';

MAX(SALARY)-----------

Returns null value

SQL> editWrote file afiedt.buf

1* select count(salary) from emp_company where cname='l'SQL> /

COUNT(SALARY)------------- 0

SQL> editWrote file afiedt.buf

1* select nvl(max(salary),0) from emp_company where cname='l'SQL> /

NVL(MAX(SALARY),0)------------------ 0

SQL> spool off

try these examples

1. List the number of employees living in Bombay

Page 30: SQL Oracle

2. list the number of employees having shift A3. list name of employees with their living city having maximum salary in company TATA4. list name of employee having maximum salary in company where Sunil is working5. list name of employees having maximum salary in their company.

1. select count(ename) from employee where city='Bombay';

2. select count(*) from emp_shift where shift='A';

3. select e.ename,e.city from employee e where e.ename in (select c.ename from emp_company c where c.cname='TATA' and c.salary in // ensures the employee is having in TATA (select max(c1.salary) from emp_company c1 where c1.cname='TATA'));

4. select e.ename from emp_company e where e.salary in (select max(e1.salary) // this will find out maximum salary in Sunil company from emp_company e1 where e1.cname in (select e2.cname // this will find out company of sunil from emp_company e2 where e2.ename='Sunil') ) and e.cname in // this will ensure that employee should be from Sunil's company (select e3.cname from emp_company e3 where e3.ename='Sunil');

ENAME CNAME SALARY JDATE ---------- ---------- --------- --------- Anil ACC 1500 01-MAY-89 Shankar TATA 2000 10-JUL-90 Jaya CMC 1800 07-JUN-91 Sunil CMC 1700 01-JAN-88 Vijay TATA 5000 03-JAN-88 Prakash TATA 3000 27-MAY-89 Ajay ACC 8000 30-APR-95 Abhay ACC 1800 1-APR-98 7 rows selected.

5. select e1.ename from emp_company e1 where e1.salary in 1500(Anil) /8000(Ajay) (select max(e2.salary) 8000 from emp_company e2 where e1.cname=e2.cname); / Group By / Having Clause

SQL> select cname,max(salary) from emp_company group by cname; // group by expression

CNAME MAX(SALARY) ---------- ----------- ACC 8000 Acc 1500 CMC 1800 TATA 5000

SQL> select cname,count(ename) from emp_company group by cname;

Page 31: SQL Oracle

CNAME COUNT(ENAME) ---------- ------------ ACC 1 Acc 1 CMC 2 TATA 3

SQL> select cname,count(ename) from emp_company 2 group by cname 3 having count(ename) > 1;

CNAME COUNT(ENAME)---------- ------------CMC 2TATA 3

SQL> spool off

Try these examples

1. Find out avg. salary of each company2. Find out avg. salary of each company except 'ACC'3. Find out name of companies having average salary more than 15004. find out avg. salary of company only for employees living in delhi5. find out name of company having highest average salary

1. select cname,avg(salary) from emp_company group by cname;2. select cname,avg(salary) from emp_company where cname != 'ACC' group by cname ;3. select cname,avg(salary) from emp_company group by cname having avg(salary) > 1500;4. select cname,avg(e.salary) from emp_company e where e.ename in (select l.ename from employee l where l.city='Delhi') group by e.cname; 5. select e.cname,avg(e.salary) from emp_company e group by cname having avg(e.salary) > = all(select avg(c.salary) from emp_company c group by c.cname);/=================================================================================

SQL\Ch05

DELETE STATEMENT1. Delete all rows delete emp_company; or -- truncate table emp_company; -- triggers are fired in the case of delete (not for truncate)

Page 32: SQL Oracle

2. delete every employee of company ACC delete emp_company where cname='ACC';

3. Delete every employee from emp_company living in Delhi

delete emp_company where ename in (select e.ename from employee e where e.city = 'Delhi');

4. Delete rows of emp_company having salary greater than 8000.

delete emp_company where salary > 8000;

5. Delete rows of emp_company having salary greater than 8000 and employee having living city ‘MADRAS’ and company located in city ‘BOMBAY’.

delete emp_company where salary > 8000 and ename in (select ename from employee where city = ‘MADRAS’) and cname in (select cname from company where city = ‘BOMBAY’);

6. Write the above query using exists clause.

delete emp_company where salary > 8000 and exists (select employee ename from employee where employee ename and employee.city = ‘MADRAS’) and exists (select company.cname from company where emp_company.cname = company.cname and company. city = ’BOMBAY’);/Insert StatementSQL> create table emp_comp(ename char(10), cname char(10));

Table created.

SQL> insert into emp_comp 2 select ename,cname from emp_company where cname='ACC';

2 rows created.

SQL> commit;

Commit complete.

SQL> create table emp_comp1 as select ename,cname from emp_company;

Table created.

SQL> select * from emp_comp1;

ENAME CNAME ---------- ---------- Anil Acc Shankar TATA Jaya CMC

Page 33: SQL Oracle

Sunil CMC Vijay TATA Prakash TATA Ajay Tata prakash Nitin ACC Ashok TATA Vinod ACC

11 rows selected.

SQL> alter table emp_comp1 add (salary number(10,2));

Table altered.

SQL> alter table emp_comp1 modify(cname varchar2(10));

Table altered.

SQL> alter table emp_comp1 modify(cname char(12));

Table altered.

1* alter table emp_comp1 drop(salary)SQL> /

Table altered.

SQL> desc emp_comp1; Name Null? Type ------------------------------- -------- ---- ENAME CHAR(10) CNAME CHAR(12)

SQL> editWrote file afiedt.buf

1* alter table emp_comp1 drop(cname)SQL> /

Table altered.

SQL> rename emp_comp1 to emp_comp2SQL> /

Table renamed.

SQL> desc emp_comp2; Name Null? Type ------------------------------- -------- ---- ENAME CHAR(10)

SQL> create synonym emp_comp1 for emp_comp2;

Synonym created.

SQL> select * from emp_comp1;

Page 34: SQL Oracle

ENAME ---------- Anil Shankar Jaya Sunil Vijay Prakash Ajay prakash Nitin Ashok Vinod

11 rows selected.

SQL> delete emp_comp1;

11 rows deleted.

SQL> rollback;

Rollback complete.

no ddl operations

SQL> drop table emp_comp2;

Table dropped.

SQL> drop synonym emp_comp1;

Synonym dropped.

SQL> spool off/ Update

1. update salary of every employee by giving 10%raise update emp_company set salary = 1.1 * salary;

2. update salary of every employee by giving 10%raise for company ACC update emp_company set salary = 1.1 * salary where cname='ACC';

3. update salary of every employee by giving 10%raise for employees living in Delhi

update emp_company set salary = 1.1 * salary where ename in (select e.ename from employee e where e.city = 'Delhi');

Page 35: SQL Oracle

4. update salary of Ajay by adding 10%salary of Vijay update emp_company e1 set e1.salary = (select (e1.salary + 0.1 * e2.salary) from emp_company e2 where e2.ename='Vijay' ) where e1.ename = 'Ajay'; // the select in set should produce single row // for no row null is returned

5. Add 100 Rs to salary of Ajay and give him company TATA

update emp_company set salary=salary+100,cname='TATA' where ename='Ajay';

6. transfer 100 Rs from salary of Ajay to Vijay

update emp_company set salary = salary - 100 where ename='Ajay';

update emp_company set salary = salary + 100 where ename='Vijay';

Atomicity of Tranasaction -- Transaction is defined as set of DML statements between two successive commit -- one transaction is equivalent to one real life unit of work -- one real life unit of work may be implemented as multiple DML statements -- The concept of Transaction is to group such DML statement -- The effect of transaction should be full or null.Such transactions are called as atomic -- transactions. Transfer 100 Rs. from account of Ajay to account of Vijay Ajay Vijay 1000 1000 initial 900 1000 partial 900 1100 full commit; --1 update bank set amt = amt - 100 where ename='Ajay'; --2 update bank set amt = amt + 100 where ename='Vijay'; --3 commit; --4 commit; update sales; update inv_balance; commit;

7. transfer 100 Rs from salary of Ajay to Vijay if both are having same company

update emp_company e1 set e1.salary = e1.salary - 100 where e1.ename='Ajay' and

Page 36: SQL Oracle

exists(select 'X' from emp_company e2 where e2.ename='Vijay' and e1.cname=e2.cname);

update emp_company e1 set e1.salary = e1.salary + 100 where e1.ename='Vijay' and exists(select 'X' from emp_company e2 where e2.ename='Ajay' and e1.cname=e2.cname);

8. Decrease the salary of VIJAY by 100 if VIJAY and SUNIL both are living in city ‘MADRAS’SQL>update emp_company set salary = salary – 100 where ename = ’VIJAY’ and ename in(select e1.ename from employee e1 where e1.city = ’MADRAS’) and exists (select emp1.ename from employee emp1 where emp1.ename = ‘SUNIL and emp1.city = ’MADRAS’);

9. All employee of ‘ACC’ having salary greater than 8000 are shifted to ‘ TATA’. The living city of employee is BOMBAY.

SQL>update emp_company set cname = ‘TATA’

where cname = ’ACC’ and salary > 8000 and ename in (select ename from employee where city = ‘BOMBAY’);

10. All employee of ‘ACC’ having salary greater than 8000 are shifted to ‘TATA’. The living city of employee is BOMBAY. The salary in new company is 20% more than original salary;

SQL>update emp_company set cname = ‘TATA’,salary = 1.2 * salarywhere cname = ‘ACC’ and salary > 8000 and ename in

(select ename from employee where city = ’BOMBAY’);

11. Decrease salary of employee VIJAY by 100 and increase salary of employee SUNIL by 100.

The two update statements will be

SQL>update emp_company set salary = salary – 100 where cname = ‘VIJAY’;

SQL>update emp_companyset salary = salary + 100where cname = ‘SUNIL’;

12. Decrease salary of VIJAY by 100 and increase salary of SUNIL if both are having company ‘ACC’.

The two update statements can be written as

SQL>update emp_companyset salary = salary – 100 where ename = ‘VIJAY’ and cname = ‘ACC’and exists (select e1.ename from emp_company e1 where e1.ename = ’SUNIL’

Page 37: SQL Oracle

and e1.cname = ’ACC’);

SQL>update emp_companyset salary = salary + 100where ename = ’SUNIL’ and cname = ‘ACC’ and exists (select e1.ename from emp_company e1 where e1.ename =

’VIJAY’ande1.cname = ’ACC’);

13. Update salary of VIJAY, give him salary that is sum of his salary and SUNIL’s salary. SQL>update emp_company

Set salary = (select emp_company.salary + ec1.salary)From emp_company ec1 where ec1.ename = 'SUNIL');where ename = ‘VIJAY’;

14. Update salary and company of VIJAY, give him the same salary as that of ‘SUNIL’ and the same company as that of ‘ANIL’.

SQL>update emp_company set salary = (select ec1 salary from emp_company ec1 where ec1.ename = ’SUNIL’), cname = (select ec2.ename from emp_company ec2 where ec2.ename

= ’ANIL’) where ename = ‘VIJAY’;

15. Give the average salary of company ‘ACC’ to employee ‘VIJAY’.

SQL>update emp_company set salary =(select avg(salary) from emp_company where cname = ‘ACC’) where ename = ’VIJAY;

16. update salary of employee ‘VIJAY,’ give him max salary of company of ‘SUNIL’.

SQL>update emp_company ec1set salary = (select max(salary) from emp_company ec1where ec1.cname in (select ec2.cname from emp_company ec2 where ec2.ename = ‘SUNIL’))where ename = ‘VIJAY’;

/=================================================================================

SQL\CH06

create view acc_company asselect ename,cname,salaryfrom emp_companywhere cname='ACC'/Inline Views

select max(d.avg_salary)from( select cname,avg(salary) avg_salary from emp_company group by cname ) d/

Page 38: SQL Oracle

/* create view comp_avg_salary as select cname,avg(salary) avg_salary from emp_company group by cname

main query : select max(avg_salary) from comp_avg_salary */

List salary of employees of Vijay

create view tree_view as select s.ename,s.mnamefrom manager s connect by prior s.ename=s.mnamestart with s.ename='Vijay'/

SQL> select * from tree_view;

ENAME MNAME---------- ----------VijayShankar VijayPrakash Shankar

select * from (select s.ename,s.mnamefrom manager s connect by prior s.ename=s.mnamestart with s.ename='Vijay') tree_view

1 select v.ename,c.salary from tree_view v,emp_company c 2* where v.ename=c.enameSQL> /

ENAME SALARY---------- ---------Prakash 3000Shankar 2000Vijay 5000/create view s as(select m.ename ename, m.mname mname,e.salary salfrom manager m,emp_company ewhere e.ename=m.ename ) /select s.level,sum(s.sal)from s connect by prior s.ename=s.mnamestart with s.ename='Vijay'group by level/create view parent_childasselect p.a pa,p.b pb,c.a ca,c.c ccfrom parent p,child cwhere p.a=c.a/ Views

Page 39: SQL Oracle

- To give simplified representation of data

create or replace view s as(select m.ename ename, m.mname mname,e.salary salfrom manager m,emp_company ewhere e.ename=m.ename ) /

SQL> select * from s;

ENAME MNAME SAL---------- ---------- ---------Ajay 8000Anil Ajay 1500Jaya 1800Prakash Shankar 3000Shankar Vijay 2000Sunil Jaya 1700Vijay 5000

7 rows selected.

SQL> select sal from s where mname='Vijay'; // main query

SAL--------- 2000

SQL>

View for listing of employees of ACC

create view acc_company asselect ename,cname,salaryfrom emp_companywhere cname='ACC';

-- emp_company is base table

SQL> select * from acc_company;

ENAME CNAME SALARY---------- ---------- ---------Ajay ACC 8000

SQL> insert into acc_company values('Nitin','ACC',6000);

1 row created.

SQL> select * from emp_company;

ENAME CNAME SALARY JDATE---------- ---------- --------- ---------Anil Acc 1500 01-MAY-89Shankar TATA 2000 10-JUL-90Jaya CMC 1800 07-JUN-91Sunil CMC 1700 01-JAN-88Vijay TATA 5000 03-JAN-88Prakash TATA 3000 27-MAY-89Ajay ACC 8000 30-APR-95prakash 5000Nitin ACC 6000

Page 40: SQL Oracle

SQL> insert into acc_company values('Ashok','TATA',3000);

1 row created.

SQL> select * from acc_company;

ENAME CNAME SALARY---------- ---------- ---------Ajay ACC 8000Nitin ACC 6000

SQL> select * from emp_company;

ENAME CNAME SALARY JDATE---------- ---------- --------- ---------Anil Acc 1500 01-MAY-89Shankar TATA 2000 10-JUL-90Jaya CMC 1800 07-JUN-91Sunil CMC 1700 01-JAN-88Vijay TATA 5000 03-JAN-88Prakash TATA 3000 27-MAY-89Ajay ACC 8000 30-APR-95prakash 5000Nitin ACC 6000Ashok TATA 3000

With Check option-- providing security-- user can update rows only if they are selected by view query

create or replace view acc_company as select ename,cname,salary from emp_company where cname='ACC' with check option

SQL> insert into acc_company values('Vinod','TATA',3200);insert into acc_company values('Vinod','TATA',3200) *ERROR at line 1:ORA-01402: view WITH CHECK OPTION where-clause violation

SQL> insert into acc_company values('Vinod','ACC',3200);

1 row created.

SQL> update acc_company set cname='TATA' where ename='Vinod';update acc_company set cname='TATA' where ename='Vinod' *ERROR at line 1:ORA-01402: view WITH CHECK OPTION where-clause violationIn general-- DML operations are not permitted if view query contains-- joins,aggragate functions,having etc.(There is one exception)-- they are permitted if view query refers single table and column list -- in select is having simple name like ename,mname not like 10*salary

SQL> insert into s values('Vinod','Sachin',2000);insert into s values('Vinod','Sachin',2000)

Page 41: SQL Oracle

*ERROR at line 1:ORA-01779: cannot modify a column which maps to a non key-preserved table

Force View

-- it can be created even if base objects are not in existance

SQL> create force view v1 as select * from company_city;

Warning: View created with compilation errors.

SQL> select * from v1;select * from v1 *ERROR at line 1:ORA-04063: view "PSD.V1" has errors

SQL> create table company_city(city varchar2(12));

Table created.

SQL> select * from v1;

no rows selected

drop view v1;

Try following Examples using views

1. Find out maximum avg. salary of company.(view cname avg(salay)2. Find out name of employees having same living city as their company city. (view ename living_city company_city salary)3. Find out name of employee with salary in above case4. Find out name of employees working in that company having maximum number of employees (view cname count(ename))5. Find out name of employees living in same city where their manager is living (view ename employee_city mname manager_city)

1. create view comp_avg_salary as select cname,avg(salary) avg_salary from emp_company group by cname

main query : select max(avg_salary) from comp_avg_salary

2. create view emp_city_details as select e.ename ename , e.city living_city,c.city company_city,m.salary salary from employee e, emp_company m,company c where e.ename = m.ename and m.cname = c.cname main query : select e.ename from emp_city_details

Page 42: SQL Oracle

where e.living_city=e.company_city 3.4. create view comp_employees as select cname,count(ename) no_of_employees from emp_company group by cname

main query : select c.cname from comp_employees c where c.no_of_employees in (select max(no_of_employees) from comp_employees)

5. create view emp_mgr_city as select e.ename ename,e.city living_city,m.mname mname,e1.city manager_city from employee e,manager m , employee e1 where e.ename=m.ename and m.mname=e1.ename

main query : select e.name from emp_mgr_city e where e.living_city=e.manager_city/list salary of employees of Vijay

create view tree_view as select s.ename,s.mnamefrom manager s connect by prior s.ename=s.mnamestart with s.ename='Vijay'/

SQL> select * from tree_view;

ENAME MNAME---------- ----------VijayShankar VijayPrakash Shankar

1 select v.ename,c.salary from tree_view v,emp_company c 2* where v.ename=c.enameSQL> /

ENAME SALARY---------- ---------Prakash 3000Shankar 2000Vijay 5000/=================================================================================

SQL\Ch07

SQL\Ch07\ASSIGN1

Page 43: SQL Oracle

CREATE TABLE DEPOSIT (ACTNO VARCHAR2(5) ,CNAME VARCHAR2(18) , BNAME VARCHAR2(18) , AMOUNT NUMBER(8,2) ,ADATE DATE);

CREATE TABLE BRANCH(BNAME VARCHAR2(18),CITY VARCHAR2(18));

CREATE TABLE CUSTOMERS(CNAME VARCHAR2(19) ,CITY VARCHAR2(18));

CREATE TABLE BORROW(LOANNO VARCHAR2(5), CNAME VARCHAR2(18),BNAME VARCHAR2(18),AMOUNT NUMBER (8,2));/DESC DEPOSIT;

DESC BRANCH;

DESC CUSTOMERS;

DESC BORROW;/INSERT INTO DEPOSIT VALUES ('100',’ANIL',’VRCE',1000.00,'1-MAR-95');INSERT INTO DEPOSIT VALUES ('101','SUNIL','AJNI',5000.00 , '4-JAN-96' );INSERT INTO DEPOSIT VALUES ('102','MEHUL','KAROLBAGH',3500.00 ,'17-NOV-95' );INSERT INTO DEPOSIT VALUES ('104','MADHURI','CHANDNI',1200.00 , ‘17-DEC-95' );INSERT INTO DEPOSIT VALUES ('105','PRAMOD','M.G.ROAD',3000.00 '27-MAR-96’);INSERT INTO DEPOSIT VALUES ('106','SANDIP','ANDHERI',2000.00,'31-MAR-96');INSERT INTO DEPOSIT VALUES ('107','SHIVANI','VIRAR',1000.00,'5-SEP-95' );INSERT INTO DEPOSIT VALUES ('108','KRANTI','NEHRU PLACE',5000.00,’2-JUL-95');INSERT INTO DEPOSIT VALUES ('109','NAREN','POWAI',7000.00,'10-AUG-95');

INSERT INTO BRANCH VALUES ('VRCE','NAGPUR');INSERT INTO BRANCH VALUES ('AJNI','NAGPUR');INSERT INTO BRANCH VALUES ('KAROLBAGH','DELHI');INSERT INTO BRANCH VALUES ('CHANDNI','DELHI');INSERT INTO BRANCH VALUES ('DHARAMPETH','NAGPUR');INSERT INTO BRANCH VALUES ('M.G.ROAD','BANGLORE');INSERT INTO BRANCH VALUES ('ANDHERI','BOMBAY');INSERT INTO BRANCH VALUES ('VIRAR','BOMBAY');INSERT INTO BRANCH VALUES ('NEHRU PLACE','DELHI');INSERT INTO BRANCH VALUES ('POWAI','BOMBAY');

INSERT INTO CUSTOMERS VALUES ('ANIL','CALCUTTA');INSERT INTO CUSTOMERS VALUES ('SUNIL','DELHI');INSERT INTO CUSTOMERS VALUES ('MEHUL','BARODA');INSERT INTO CUSTOMERS VALUES ('MANDAR','PATNA');INSERT INTO CUSTOMERS VALUES ('MADHURI','NAGPUR');INSERT INTO CUSOTMERS VALUES ('PRAMOD','NAGPUR');INSERT INTO CUSTOMERS VALUES ('SANDIP','SURAT');INSERT INTO CUSTOMERS VALUES ('SHIVANI','BOMBAY');INSERT INTO CUSTOMERS VALUES ('KRANTI','BOMBAY');INSERT INTO CUSTOMERS VALUES ('NAREN','BOMBAY');

INSERT INTO BORROW VALUES ('201','ANIL','VRCE',1000.00);INSERT INTO BORROW VALUES ('206','MEHUL','AJNI',5000.00);INSERT INTO BORROW VALUES ('311','SUNIL','DHARAMPETH',3000.00);INSERT INTO BORROW VALUES ('321','MADHURI','ANDHERI',2000.00);INSERT INTO BORROW VALUES ('375','PRAMOD','VIRAR',8000.00);INSERT INTO BORROW VALUES ('481','KRANTI','NEHRU PLACE',3000.00);/=================================================================================

Page 44: SQL Oracle

SQL\Ch07\ASSIGN2

-- 1)LIST ALL DATA FROM TABLE DEPOSIT.SELECT * FROM DEPOSIT;/--2)LIST ALL DATA FROM TABLE BORROW.

SELECT * FROM BORROW;/--3)LIST ALL DATA FROM TABLE CUSTOMERS.

SELECT * FROM CUSTOMERS;/--4)LIST ALL DATA FROM TABLE BRANCH.

SELECT * FROM BRANCH;/--5)GIVE ACCOUNT NO AND AMOUNT OF DEPOSITORS.

SELECT ACTNO,AMOUNT FROM DEPOSIT;/--6)GIVE CNAME AND ACCOUNT NUMBER OF DEPOSITORS.

SELECT CNAME,ACTNO FROM DEPOSIT;/--7)GIVE NAME OF CUSTOMERS.

SELECT CNAME FROM CUSTOMERS;/--8)GIVE NAME OF BRANCHES.

SELECT BNAME FROM BRANCH;/--9)GIVE NAME OF BORROWERS.

SELECT CNAME FROM BORROW;/--10)GIVE NAME OF CUSTOMERS LIVING IN CITY NAGPUR.

SELECT CNAME FROM CUSTOMERS WHERE CITY='NAGPUR';/

--11)GIVE NAME OF DEPOSITORS HAVING AMOUNT GREATER THAN 4000.SELECT CNAME FROM DEPOSIT WHERE AMOUNT > 4000.00;

/

--12)GIVE ACCOUNT DATE OF CUSTOMERS ANIL.SELECT ADATE FROM DEPOSIT WHERE CNAME ='ANIL';

/--13)GIVE NAME OF ALL BRANCHES LOCATED IN CITY BOMBAY.

SELECT BNAME FROM BRANCH WHERE CITY='BOMBAY';/--14)GIVE NAME OF BORROWER HAVING LOAN NO 205.

SELECT CNAME FROM BORROW WHERE LOANNO='205';./--15)GIVE NAME OF DEPOSITORS HAVING ACCOUNT AT VRCE.

SELECT CNAME FROM DEPOSIT WHERE BNAME = 'VRCE';/--16)GIVE NAME OF ALL BRANCHES LOCATED IN CITY DELHI.

SELECT BNAME FROM BRANCH WHERE CITY ='DELHI';/--17)GIVE NAME OF CUSTOMERS WHO OPENED ACCOUNT AFTER DATE '1-12-96'.

SELECT CNAME FROM DEPOSIT WHERE ADATE > '1-DEC-96';/--18)GIVE ACCOUNT NO AND AMOUNT OF CUSTOMER HAVING ACCOUNT OPENED BETWEEN DATE 1-12-96 AND 1-6-96.

SELECT ACTNO , AMOUNT FROM DEPOSIT WHERE ADATE >= '1-DEC-95' AND ADATE <= '1-MAY-96';/--19)GIVE NAME OF CITY WHERE BRANCH KAROLBAGH IS LOCATED.

SELECT CITY FROM BRANCH WHERE BNAME ='KAROLBAGH';

Page 45: SQL Oracle

/--20)GIVE DETAILS OF CUSTOMER ANIL.

SELECT D1.ACTNO, D1.BNAME, D1.AMOUNT ,D1.CNAME , C1.CITY C1.CNAME,B1.BNAME,B1.CITY FROM DEPOSIT D1 ,CUSTOMERS C1 , BRANCH B1 WHERE D1.CNAME = C1.CNAME AND D1.BNAME = B1.BNAME AND D1.CNAME = 'ANIL';/=================================================================================

SQL\Ch07\Assign3

--1)GIVE NAME OF CUSTOMERS HAVING LIVING CITY BOMBAY AND BRANCH CITY NAGPUR.SELECT D1.CNAME,D1.BNAME,C1.CNAME,C1.CITY,B1.CITY,B1.BNAME FROM DEPOSIT

D1,CUSTOMERS C1,BRANCH B1 WHERE C1.CITY = 'BOMBAY' AND B1.CITY = 'NAGPUR' AND D1.CNAME = C1.CNAME AND D1.BNAME = B1.BNAME;/--2)GIVE NAME OF CUSTOMERS HAVING SAME LIVING CITY AS THEIR BRANCH CITY.

SELECT D1.CNAME,D1.BNAME,C1.CNAME,C1.CITY,B1.BNAME,B1.CITY FROM DEPOSIT D1,CUSTOMERS C1,BRANCH B1 WHERE C1.CITY =B1.CITY AND D1.CNAME = C1.CNAME AND D1.BNAME = B1.BNAME;/--3)GIVE NAME OF CUSTOMER WHO ARE BORROWERS AND DEPOSITORS AND HAVING LIVING CITY NAGPUR.

SELECT D1.CNAME C1.CNAME, C1.CITY, BR1.CNAME FROM CUSTOMERS C1, DEPOSIT D1,BORROW BR1 WHERE C1.CITY ='NAGPUR' AND C1.CNAME = D1.CNAME AND D1.CNAME = BR1.CNAME ;/--4) GIVE NAME OF CUSTOMERS WHO ARE DEPOSITORS HAVING SAME BRANCH CITY OF MR. SUNIL.

SELECT D1.BNAME, B1.BNAME FROM DEPOSIT D1,BRANCH B1 WHERE D1.BNAME AND B2.CITY IN (SELECT D2.CNAME, D2.BNAME FROM DEPOSIT D2,BRANCH B2 WHERE D2.CNAME = 'SUNIL' AND D2.BNAME = B1.BNAME);/--5) GIVE NAME OF DEPOSITORS HAVING SAME LIVING CITY AS MR. ANIL AND HAVING DEPOSIT AMOUNT GREATER THAN 2000.

SELECT D1.CNAME,D1.AMOUNT,C1.CNAME, C1.CITY FROM DEPOSIT D1,CUSTOMERS C1 WHERE D1.AMOUNT > 2000 AND D1.CNAME = C1.CNAME AND C1.CITY IN (SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME = 'ANIL');

/--6) GIVE NAME OF BORROWERS HAVING DEPOSIT AMOUNT GREATER THAN 1000 AND LOAN AMOUNT GREATER THAN 2000. SELECT BR1.CNAME, BR1.AMOUNT, D1.CNAME, D1.AMOUNT FROM BORROW BR1,DEPOSIT D1 WHERE D1.CNAME = BR1.CNAME AND D1.AMOUNT > 1000 AND BR1.AMOUNT > 2000;/--7)GIVE NAME OF DEPOSITORS HAVING SAME BRANCH AS BRANCH OF SUNIL.

SELECT D1.BNAME FROM DEPOSIT D1 WHERE D1.BNAME IN (SELECT D2.CNAME FROM DEPOSIT D2 WHERE D2.CNAME = 'SUNIL');/--8)GIVE NAME OF BORROWERS HAVING LOAN AMOUNT GREATER THAN AMOUNT OF PRAMOD.

SELECT BR1.CNAME,BR1.AMOUNT FROM BORROW BR1 WHERE BR1.AMOUNT > ALL (SELECT BR2.AMOUNT FROM BORROW BR2 WHERE BR2.CNAME = 'PRAMOD');

/--9)GIVE NAME OF CUSTOMERS LIVING IN SAME CITY WHERE BRANCH OF DEPOSITOR SUNIL IS LOCATED.

SELECT C1.CITY FROM CUSTOMERS C1 WHERE C1.CITY IN (SELECT D1.BNAME,D1.CNAME,B1.BNAME FROM BRANCH B1 ,DEPOSIT D1 WHERE D1.CNAME = 'SUNIL' AND D1.BNAME = B1.BNAME);/--10)GIVE LOANNO,LOAN AMOUNT OF BORROWERS HAVING SAME BRANCH WHERE SUNIL IS HAVING BRANCH.

SELECT BR1.LOANNO,BR1.AMOUNT FROM BORROW BR1 WHERE BR1.BNAME (SELECT D1.BNAME FROM DEPOSIT D1 WHERE D1.CNAME = 'SUNIL');

Page 46: SQL Oracle

/--11)GIVE LOANNO,LOAN AMOUNT,ACCOUNT NO,DEPOSIT AMOUNT OF CUSTOMERS LIVING IN CITY NAGPUR.

SELECT BR1.LOANNO , BR1.AMOUNT , D1.ACTNO , D1.AMOUNT FROM DEPOSIT D1,BORROW BR1,CUSTOMERS C1 WHERE C1.CNAME = D1.CNAME AND D1.CNAME = BR1.CNAME AND C1.CITY = 'NAGPUR'/--12)GIVE LOANNO,LOAN AMOUNT, ACCOUNT NO, DEPOSIT AMOUNT OF CUSTOMERS HAVING BRANCH LOCATED AT BOMBAY.

SELECT BR1.LOANNO , BR1.AMOUNT , D1.ACTNO , D1.AMOUNT FROM DEPOSIT D1,BORROW BR1,BRANCH B1 WHERE D1.CNAME = BR1.CNAME AND B1.CITY = 'BOMBAY' AND D1.BNAME = B1.BNAME;/--13)GIVE LOANNO,LOAN AMOUNT,ACCOUNT NO,DEPOSIT AMOUNT,BRANCH NAME, BRANCH CITY AND LIVING CITY OF PRAMOD.

SELECT BR1.LOANNO , BR1.AMOUNT , D1.ACTNO , D1.AMOUNT , D1.BNAME ,B1.CTTY,C1.CITY FROM BORROW BR1,DEPOSIT D1 , BRANCH B1, CUSTOMERS C1 WHERE C1.CNAME = 'PRAMOD' AND D1.CNAME = C1.CNAME AND D1.CNAME=BR1.CNAME AND D1.BNAME = B1.BNAME;/--14)GIVE DEPOSIT DETAILS AND LOAN DETAILS OF CUSTOMER IN SAME CITY WHERE PRAMOD IS LIVING.

SELECT D1.ACTNO , D1.CNAME,D1.BNAME ,D1.AMOUNT ,D1.ADATE , BR1.LOANNO , BR1.BNAME , BR1.AMOUNT FROM DEPOSIT D1 , BORROW BR1 , CUSTOMERS C1 WHERE C1.CNAME = D1.CNAME AND D1.CNAME = BR1.CNAME AND C1.CITY IN (SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME = 'PRAMOD');/--15)GIVE NAME OF DEPOSITORS HAVING SAME BRANCH CITY AS MR. SUNIL AND HAVING SAME LIVING CITY AS MR. ANIL.

SELECT D1.CNAME FROM DEPOSIT D1,CUSTOMERS C1,BRANCH B1 WHERE D1.CNAME = C1.CNAME AND D1.BNAME = B1.BNAME AND B1.CITY IN (SELECT B2.CITY FROM BRANCH B2,DEPOSIT D2 WHERE D2.CNAME = 'SUNIL'AND D2.BNAME = B2.BNAME) AND C1.CITY IN (SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME = 'ANIL');/--16) GIVE NAME OF DEPOSITORS HAVING AMOUNT GREATER THAN 5000 AND HAVING SAME LIVING CITY AS MR. PRAMOD.

SELECT D1.CNAME FROM DEPOSIT D1,CUSTOMERS C1 , CUSTOMERS C2 WHERE C1.CITY = C2.CITY AND C2.CNAME = 'PRAMOD' AND C1.CNAME = D1.CNAME AND D1.AMOUNT > 5000;/--17)GIVE CITY OF CUSTOMER HAVING BRANCH CITY SAME AS MR. PRAMOD.

SELECT C1.CITY FROM CUSTOMERS C1,DEPOSIT D1,DEPOSIT D2,BRANCH B1,BRANCH B2 WHERE D1.BNAME=B1.BNAME AND D2.BNAME = B2.BNAME AND D2.CNAME = 'PRAMOD' AND B1.CITY = B2.CITY AND C1.CNAME = D1.CNAME;/--18)GIVE BRANCH CITY AND LIVING CITY OF PRAMOD.

SELECT B1.CITY , C1.CITY FROM BRANCH B1,CUSTOMERS C1, DEPOSIT D1 WHERE C1.CNAME = 'PRAMOD' AND C1.CNAME = D1.CNAME AND D1.BNAME = B1.BNAME;/--19)GIVE BRANCH CITY OF SUNIL AND BRANCH CITY OF ANIL.

SELECT B1.CITY FROM DEPOSIT D1,BRANCH B1 WHERE D1.BNAME = B1.BNAME AND D1.CNAME = 'SUNIL' OR D1.CNAME = 'ANIL';/--20) GIVE LIVING CITY OF ASHOK AND LIVING CITY OF AJAY.

SELECT CNAME,CITY FROM CUSTOMERS WHERE CUSTOMERS.CNAME = 'ASHOK' OR CUSTOMERS.CNAME = 'AJAY';/=================================================================================

Page 47: SQL Oracle

SQL\Ch07\Assign4

SQL\Ch07\ASSIGN1

CREATE TABLE DEPOSIT (ACTNO VARCHAR2(5) ,CNAME VARCHAR2(18) , BNAME VARCHAR2(18) , AMOUNT NUMBER(8,2) ,ADATE DATE);

CREATE TABLE BRANCH(BNAME VARCHAR2(18),CITY VARCHAR2(18));

CREATE TABLE CUSTOMERS(CNAME VARCHAR2(19) ,CITY VARCHAR2(18));

CREATE TABLE BORROW(LOANNO VARCHAR2(5), CNAME VARCHAR2(18),BNAME VARCHAR2(18),AMOUNT NUMBER (8,2));/DESC DEPOSIT;

DESC BRANCH;

DESC CUSTOMERS;

DESC BORROW;/INSERT INTO DEPOSIT VALUES ('100',’ANIL',’VRCE',1000.00,'1-MAR-95');INSERT INTO DEPOSIT VALUES ('101','SUNIL','AJNI',5000.00 , '4-JAN-96' );INSERT INTO DEPOSIT VALUES ('102','MEHUL','KAROLBAGH',3500.00 ,'17-NOV-95' );INSERT INTO DEPOSIT VALUES ('104','MADHURI','CHANDNI',1200.00 , ‘17-DEC-95' );INSERT INTO DEPOSIT VALUES ('105','PRAMOD','M.G.ROAD',3000.00 '27-MAR-96’);INSERT INTO DEPOSIT VALUES ('106','SANDIP','ANDHERI',2000.00,'31-MAR-96');INSERT INTO DEPOSIT VALUES ('107','SHIVANI','VIRAR',1000.00,'5-SEP-95' );INSERT INTO DEPOSIT VALUES ('108','KRANTI','NEHRU PLACE',5000.00,’2-JUL-95');INSERT INTO DEPOSIT VALUES ('109','NAREN','POWAI',7000.00,'10-AUG-95');

INSERT INTO BRANCH VALUES ('VRCE','NAGPUR');INSERT INTO BRANCH VALUES ('AJNI','NAGPUR');INSERT INTO BRANCH VALUES ('KAROLBAGH','DELHI');INSERT INTO BRANCH VALUES ('CHANDNI','DELHI');INSERT INTO BRANCH VALUES ('DHARAMPETH','NAGPUR');INSERT INTO BRANCH VALUES ('M.G.ROAD','BANGLORE');INSERT INTO BRANCH VALUES ('ANDHERI','BOMBAY');INSERT INTO BRANCH VALUES ('VIRAR','BOMBAY');INSERT INTO BRANCH VALUES ('NEHRU PLACE','DELHI');INSERT INTO BRANCH VALUES ('POWAI','BOMBAY');

INSERT INTO CUSTOMERS VALUES ('ANIL','CALCUTTA');INSERT INTO CUSTOMERS VALUES ('SUNIL','DELHI');INSERT INTO CUSTOMERS VALUES ('MEHUL','BARODA');INSERT INTO CUSTOMERS VALUES ('MANDAR','PATNA');INSERT INTO CUSTOMERS VALUES ('MADHURI','NAGPUR');INSERT INTO CUSOTMERS VALUES ('PRAMOD','NAGPUR');INSERT INTO CUSTOMERS VALUES ('SANDIP','SURAT');INSERT INTO CUSTOMERS VALUES ('SHIVANI','BOMBAY');INSERT INTO CUSTOMERS VALUES ('KRANTI','BOMBAY');INSERT INTO CUSTOMERS VALUES ('NAREN','BOMBAY');

INSERT INTO BORROW VALUES ('201','ANIL','VRCE',1000.00);INSERT INTO BORROW VALUES ('206','MEHUL','AJNI',5000.00);INSERT INTO BORROW VALUES ('311','SUNIL','DHARAMPETH',3000.00);INSERT INTO BORROW VALUES ('321','MADHURI','ANDHERI',2000.00);INSERT INTO BORROW VALUES ('375','PRAMOD','VIRAR',8000.00);

Page 48: SQL Oracle

INSERT INTO BORROW VALUES ('481','KRANTI','NEHRU PLACE',3000.00);/=================================================================================

SQL\Ch07\ASSIGN2

-- 1)LIST ALL DATA FROM TABLE DEPOSIT.SELECT * FROM DEPOSIT;/

--2)LIST ALL DATA FROM TABLE BORROW.SELECT * FROM BORROW;

/--3)LIST ALL DATA FROM TABLE CUSTOMERS.

SELECT * FROM CUSTOMERS;/--4)LIST ALL DATA FROM TABLE BRANCH.

SELECT * FROM BRANCH;/--5)GIVE ACCOUNT NO AND AMOUNT OF DEPOSITORS.

SELECT ACTNO,AMOUNT FROM DEPOSIT;/--6)GIVE CNAME AND ACCOUNT NUMBER OF DEPOSITORS.

SELECT CNAME,ACTNO FROM DEPOSIT;/--7)GIVE NAME OF CUSTOMERS.

SELECT CNAME FROM CUSTOMERS;/--8)GIVE NAME OF BRANCHES.

SELECT BNAME FROM BRANCH;/--9)GIVE NAME OF BORROWERS.

SELECT CNAME FROM BORROW;/--10)GIVE NAME OF CUSTOMERS LIVING IN CITY NAGPUR.

SELECT CNAME FROM CUSTOMERS WHERE CITY='NAGPUR';/

--11)GIVE NAME OF DEPOSITORS HAVING AMOUNT GREATER THAN 4000.SELECT CNAME FROM DEPOSIT WHERE AMOUNT > 4000.00;

/--12)GIVE ACCOUNT DATE OF CUSTOMERS ANIL.

SELECT ADATE FROM DEPOSIT WHERE CNAME ='ANIL';/--13)GIVE NAME OF ALL BRANCHES LOCATED IN CITY BOMBAY.

SELECT BNAME FROM BRANCH WHERE CITY='BOMBAY';/--14)GIVE NAME OF BORROWER HAVING LOAN NO 205.

SELECT CNAME FROM BORROW WHERE LOANNO='205';/--15)GIVE NAME OF DEPOSITORS HAVING ACCOUNT AT VRCE.

SELECT CNAME FROM DEPOSIT WHERE BNAME = 'VRCE';/--16)GIVE NAME OF ALL BRANCHES LOCATED IN CITY DELHI.

SELECT BNAME FROM BRANCH WHERE CITY ='DELHI';/--17)GIVE NAME OF CUSTOMERS WHO OPENED ACCOUNT AFTER DATE '1-12-96'.

SELECT CNAME FROM DEPOSIT WHERE ADATE > '1-DEC-96';/--18)GIVE ACCOUNT NO AND AMOUNT OF CUSTOMER HAVING ACCOUNT OPENED BETWEEN DATE 1-12-96 AND 1-6-96.

SELECT ACTNO , AMOUNT FROM DEPOSIT WHERE ADATE >= '1-DEC-95' AND ADATE <= '1-MAY-96';

Page 49: SQL Oracle

/--19)GIVE NAME OF CITY WHERE BRANCH KAROLBAGH IS LOCATED.

SELECT CITY FROM BRANCH WHERE BNAME ='KAROLBAGH';/--20)GIVE DETAILS OF CUSTOMER ANIL.

SELECT D1.ACTNO, D1.BNAME, D1.AMOUNT ,D1.CNAME , C1.CITY C1.CNAME,B1.BNAME,B1.CITY FROM DEPOSIT D1 ,CUSTOMERS C1 , BRANCH B1 WHERE D1.CNAME = C1.CNAME AND D1.BNAME = B1.BNAME AND D1.CNAME = 'ANIL';/=================================================================================

SQL\Ch07\Assign3 --1)GIVE NAME OF CUSTOMERS HAVING LIVING CITY BOMBAY AND BRANCH CITY NAGPUR.

SELECT D1.CNAME,D1.BNAME,C1.CNAME,C1.CITY,B1.CITY,B1.BNAME FROM DEPOSIT D1,CUSTOMERS C1,BRANCH B1 WHERE C1.CITY = 'BOMBAY' AND B1.CITY = 'NAGPUR' AND D1.CNAME = C1.CNAME AND D1.BNAME = B1.BNAME;/--2)GIVE NAME OF CUSTOMERS HAVING SAME LIVING CITY AS THEIR BRANCH CITY.

SELECT D1.CNAME,D1.BNAME,C1.CNAME,C1.CITY,B1.BNAME,B1.CITY FROM DEPOSIT D1,CUSTOMERS C1,BRANCH B1 WHERE C1.CITY =B1.CITY AND D1.CNAME = C1.CNAME AND D1.BNAME = B1.BNAME;/--3)GIVE NAME OF CUSTOMER WHO ARE BORROWERS AND DEPOSITORS AND HAVING LIVING CITY NAGPUR.

SELECT D1.CNAME C1.CNAME, C1.CITY, BR1.CNAME FROM CUSTOMERS C1, DEPOSIT D1,BORROW BR1 WHERE C1.CITY ='NAGPUR' AND C1.CNAME = D1.CNAME AND D1.CNAME = BR1.CNAME ;/--4) GIVE NAME OF CUSTOMERS WHO ARE DEPOSITORS HAVING SAME BRANCH CITY OF MR. SUNIL.

SELECT D1.BNAME, B1.BNAME FROM DEPOSIT D1,BRANCH B1 WHERE D1.BNAME AND B2.CITY IN (SELECT D2.CNAME, D2.BNAME FROM DEPOSIT D2,BRANCH B2 WHERE D2.CNAME = 'SUNIL' AND D2.BNAME = B1.BNAME);/--5) GIVE NAME OF DEPOSITORS HAVING SAME LIVING CITY AS MR. ANIL AND HAVING DEPOSIT AMOUNT GREATER THAN 2000.

SELECT D1.CNAME,D1.AMOUNT,C1.CNAME, C1.CITY FROM DEPOSIT D1,CUSTOMERS C1 WHERE D1.AMOUNT > 2000 AND D1.CNAME = C1.CNAME AND C1.CITY IN (SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME = 'ANIL');

/--6) GIVE NAME OF BORROWERS HAVING DEPOSIT AMOUNT GREATER THAN 1000 AND LOAN AMOUNT GREATER THAN 2000. SELECT BR1.CNAME, BR1.AMOUNT, D1.CNAME, D1.AMOUNT FROM BORROW BR1,DEPOSIT D1 WHERE D1.CNAME = BR1.CNAME AND D1.AMOUNT > 1000 AND BR1.AMOUNT > 2000;/--7)GIVE NAME OF DEPOSITORS HAVING SAME BRANCH AS BRANCH OF SUNIL.

SELECT D1.BNAME FROM DEPOSIT D1 WHERE D1.BNAME IN (SELECT D2.CNAME FROM DEPOSIT D2 WHERE D2.CNAME = 'SUNIL');/--8)GIVE NAME OF BORROWERS HAVING LOAN AMOUNT GREATER THAN AMOUNT OF PRAMOD.

SELECT BR1.CNAME,BR1.AMOUNT FROM BORROW BR1 WHERE BR1.AMOUNT > ALL (SELECT BR2.AMOUNT FROM BORROW BR2 WHERE BR2.CNAME = 'PRAMOD');

/--9)GIVE NAME OF CUSTOMERS LIVING IN SAME CITY WHERE BRANCH OF DEPOSITOR SUNIL IS LOCATED.

SELECT C1.CITY FROM CUSTOMERS C1 WHERE C1.CITY IN (SELECT D1.BNAME,D1.CNAME,B1.BNAME FROM BRANCH B1 ,DEPOSIT D1 WHERE D1.CNAME = 'SUNIL' AND D1.BNAME = B1.BNAME);/

Page 50: SQL Oracle

--10)GIVE LOANNO,LOAN AMOUNT OF BORROWERS HAVING SAME BRANCH WHERE SUNIL IS HAVING BRANCH.

SELECT BR1.LOANNO,BR1.AMOUNT FROM BORROW BR1 WHERE BR1.BNAME (SELECT D1.BNAME FROM DEPOSIT D1 WHERE D1.CNAME = 'SUNIL');

/--11)GIVE LOANNO,LOAN AMOUNT,ACCOUNT NO,DEPOSIT AMOUNT OF CUSTOMERS LIVING IN CITY NAGPUR.

SELECT BR1.LOANNO , BR1.AMOUNT , D1.ACTNO , D1.AMOUNT FROM DEPOSIT D1,BORROW BR1,CUSTOMERS C1 WHERE C1.CNAME = D1.CNAME AND D1.CNAME = BR1.CNAME AND C1.CITY = 'NAGPUR'/--12)GIVE LOANNO,LOAN AMOUNT, ACCOUNT NO, DEPOSIT AMOUNT OF CUSTOMERS HAVING BRANCH LOCATED AT BOMBAY.

SELECT BR1.LOANNO , BR1.AMOUNT , D1.ACTNO , D1.AMOUNT FROM DEPOSIT D1,BORROW BR1,BRANCH B1 WHERE D1.CNAME = BR1.CNAME AND B1.CITY = 'BOMBAY' AND D1.BNAME = B1.BNAME;/--13)GIVE LOANNO,LOAN AMOUNT,ACCOUNT NO,DEPOSIT AMOUNT,BRANCH NAME, BRANCH CITY AND LIVING CITY OF PRAMOD.

SELECT BR1.LOANNO , BR1.AMOUNT , D1.ACTNO , D1.AMOUNT , D1.BNAME ,B1.CTTY,C1.CITY FROM BORROW BR1,DEPOSIT D1 , BRANCH B1, CUSTOMERS C1 WHERE C1.CNAME = 'PRAMOD' AND D1.CNAME = C1.CNAME AND D1.CNAME=BR1.CNAME AND D1.BNAME = B1.BNAME;/--14)GIVE DEPOSIT DETAILS AND LOAN DETAILS OF CUSTOMER IN SAME CITY WHERE PRAMOD IS LIVING.

SELECT D1.ACTNO , D1.CNAME,D1.BNAME ,D1.AMOUNT ,D1.ADATE , BR1.LOANNO , BR1.BNAME , BR1.AMOUNT FROM DEPOSIT D1 , BORROW BR1 , CUSTOMERS C1 WHERE C1.CNAME = D1.CNAME AND D1.CNAME = BR1.CNAME AND C1.CITY IN (SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME = 'PRAMOD');/--15)GIVE NAME OF DEPOSITORS HAVING SAME BRANCH CITY AS MR. SUNIL AND HAVING SAME LIVING CITY AS MR. ANIL.

SELECT D1.CNAME FROM DEPOSIT D1,CUSTOMERS C1,BRANCH B1 WHERE D1.CNAME = C1.CNAME AND D1.BNAME = B1.BNAME AND B1.CITY IN (SELECT B2.CITY FROM BRANCH B2,DEPOSIT D2 WHERE D2.CNAME = 'SUNIL'AND D2.BNAME = B2.BNAME) AND C1.CITY IN (SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME = 'ANIL');/--16) GIVE NAME OF DEPOSITORS HAVING AMOUNT GREATER THAN 5000 AND HAVING SAME LIVING CITY AS MR. PRAMOD.

SELECT D1.CNAME FROM DEPOSIT D1,CUSTOMERS C1 , CUSTOMERS C2 WHERE C1.CITY = C2.CITY AND C2.CNAME = 'PRAMOD' AND C1.CNAME = D1.CNAME AND D1.AMOUNT > 5000;/--17)GIVE CITY OF CUSTOMER HAVING BRANCH CITY SAME AS MR. PRAMOD.

SELECT C1.CITY FROM CUSTOMERS C1,DEPOSIT D1,DEPOSIT D2,BRANCH B1,BRANCH B2 WHERE D1.BNAME=B1.BNAME AND D2.BNAME = B2.BNAME AND D2.CNAME = 'PRAMOD' AND B1.CITY = B2.CITY AND C1.CNAME = D1.CNAME;/--18)GIVE BRANCH CITY AND LIVING CITY OF PRAMOD.

SELECT B1.CITY , C1.CITY FROM BRANCH B1,CUSTOMERS C1, DEPOSIT D1 WHERE C1.CNAME = 'PRAMOD' AND C1.CNAME = D1.CNAME AND D1.BNAME = B1.BNAME;/--19)GIVE BRANCH CITY OF SUNIL AND BRANCH CITY OF ANIL.

SELECT B1.CITY FROM DEPOSIT D1,BRANCH B1 WHERE D1.BNAME = B1.BNAME AND D1.CNAME = 'SUNIL' OR D1.CNAME = 'ANIL';/--20) GIVE LIVING CITY OF ASHOK AND LIVING CITY OF AJAY.

SELECT CNAME,CITY FROM CUSTOMERS WHERE CUSTOMERS.CNAME = 'ASHOK' OR CUSTOMERS.CNAME = 'AJAY';/=================================================================================

Page 51: SQL Oracle

SQL\Ch07\Assign4

--1)LIST ALL THE CUSTOMERS WHO ARE DEPOSITORS BUT NOT BORROWERS.

SELECT CNAME FROM DEPOSITMINUS(SELECT CNAME FROM BORROW);

/--2)LIST ALL THE CUSTOMERS WHO ARE DEPOSITORS AND BORROWERS.

SELECT CNAME FROM DEPOSIT UNION

(SELECT CNAME FROM BORROW);/--3)LIST ALL THE CUSTOMERS WITH THEIR AMOUNT WHO ARE BORROWERS OR DEPOSITORS AND LIVING IN CITY NAGPUR.

SELECT D1.CNAME,D1.AMOUNT FROM DEPOSIT D1, CUSTOMERS C1 WHERE C1.CITY = 'NAGPUR' AND D1.CNAME = C1.CNAME

UNION ALL(SELECT BR1.CNAME,BR1.AMOUNT FROM BORROW BR1, CUSTOMERS C2 WHERE

C2.CITY = 'NAGPUR' AND BR1.CNAME=C2.CNAME);/--4)LIST ALL THE DEPOSITORS HAVING DEPOSIT IN ALL THE BRANCHES WHERE SUNIL IS HAVING BRANCHES.

SELECT D1.CNAME FROM DEPOSIT D1 WHERE D1.BNAME IN (SELECT D2.BNAME FROM DEPOSIT D2 WHERE D2.CNAME = 'SUNIL' );/--5)LIST ALL THE CUSTOMERS LIVING IN CITY NAGPUR AND HAVING BRANCH CITY BOMBAY OR DELHI.

SELECT C1.CNAME FROM CUSTOMERS C1,DEPOSIT D1, BRANCH B1 WHERE C1.CITY = 'NAGPUR' AND C1.CNAME = D1.CNAME AND D1.BNAME = B1.BNAME AND B1.CITY IN ('BOMBAY','DELHI');/--6)LIST ALL THE DEPOSITORS LIVING IN CITY NAGPUR.

SELECT D1.CNAME FROM DEPOSIT D1 WHERE D1.CNAME IN (SELECT C1.CNAME FROM CUSTOMERS C1 WHERE C1.CITY = 'NAGPUR');/--7)LIST ALL THE DEPOSITORS LIVING IN CITY NAGPUR AND HAVING BRANCH CITY BOMBAY.

SELECT D1.CNAME FROM DEPOSIT D1 WHERE D1.CNAME IN (SELECT D2.CNAME FROM DEPOSIT D2 , CUSTOMERS C1 WHERE C1.CITY = 'NAGPUR' AND D2.CNAME=C1.CNAME

INTERSECT(SELECT D3.CNAME FROM DEPOSIT D3, BRANCH B1 WHERE B1.CITY = 'BOMBAY' AND

D3.BNAME = B1.BNAME));/--8)LIST THE BRANCH CITIES OF ANIL AND SUNIL.

SELECT B1.CITY FROM DEPOSIT D1, BRANCH B1 WHERE D1.CNAME IN ('SUNIL','ANIL') AND B1.BNAME =D1.BNAME;/--9)LIST THE CUSTOMERS HAVING DEPOSIT GREATER THAN 1000 AND LOAN LESS THAN 10000.

SELECT D1.CNAME FROM DEPOSIT D1 WHERE D1.AMOUNT > 1000 AND D1.CNAME IN (SELECT BR1.CNAME FROM BORROW BR1 WHEREAMOUNT < 10000);/--10)LIST THE BORROWERS HAVING BRANCH CITY SAME AS MR. SUNIL.

SELECT BR1.CNAME FROM BORROW BR1, BRANCH B1 WHERE BR1.BNAME = B1.BNAME AND B1.CITY IN (SELECT B2.CITY FROM BORROW BR2 , BRANCH B2 WHERE BR2.CNAME = 'SUNIL' AND BR2.BNAME = B2.BNAME);/--11)LIST THE CITIES OF DEPOSITORS HAVING BRANCH VRCE.

SELECT C1.CITY FROM CUSTOMERS C1 WHERE C1.CNAME IN (SELECT D1.CNAME FROM DEPOSIT D1 WHERE D1.BNAME = 'VRCE');

Page 52: SQL Oracle

/--12)LIST THE DEPOSITORS HAVING SAME LIVING CITY AS MR. SUNIL AND SAME BRANCH CITY AS MR. ANIL.

SELECT D1.CNAME FROM DEPOSIT D1, CUSTOMERS C1, BRANCH B1 WHERE D1.CNAME = C1.CNAME AND D1.BNAME = B1.BNAME AND C1.CITY IN (SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME = 'SUNIL')

AND B1.CITY IN (SELECT B2.CITY FROM DEPOSIT D2, BRANCH B2 WHERE D2.CNAME = 'ANIL'

AND D2.BNAME = B2.BNAME);/--13)LIST THE DEPOSITORS HAVING AMOUNT LESS THAN 1000 AND LIVING IN SAME CITY AS MR. ANIL.

SELECT D1.CNAME FROM DEPOSIT D1, CUSTOMERS C1 WHERE D1.AMOUNT < 1000 AND D1.CNAME = C1.CNAME AND C1.CITY IN (SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME = 'ANIL');/--14)LIST ALL THE CUSTOMERS WHO ARE DEPOSITORS AND BORROWERS AND LIVING IN SAME CITY AS MR. ANIL.

SELECT C1.CNAME FROM CUSTOMERS C1 WHERE C1.CNAME IN((SELECT D1.CNAME FROM DEPOSIT D1)INTERSECT(SELECT BR1.CNAME FROM BORROW BR1))ANDC1.CITY IN(SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME = 'ANIL');

/--15)LIST ALL THE CITIES WHERE BRANCHES OF ANIL AND SUNIL IS LOCATED.

SELECT B1.CITY FROM BRANCH B1 WHERE B1.BNAME IN(SELECT D1.BNAME FROM DEPOSIT D1 WHERE D1.CNAME IN ('ANIL','SUNI'));

/--16)LIST ALL THE CUSTOMER NAME AMOUNT OF DEPOSITOR LIVING IN CITY WHERE ANIL OR SUNIL IS LIVING.

SELECT D1.CNAME , D1.AMOUNT FROM DEPOSIT D1, CUSTOMERS C1WHERE C1.CNAME = D1.CNAME AND C1.CITY IN(SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME IN ('SUNIL','ANIL'));

/--17)LIST AMOUNT OF DEPOSITORS LIVING IN CITY WHERE ANIL IS LIVING.

SELECT D1.AMOUNT FROM DEPOSIT D1, CUSTOMERS C1 WHERE D1.CNAME = C1.CNAME AND C1.CITY IN

(SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME = 'ANIL');/--18)LIST THE CITIES WHICH ARE BRANCH CITY OF ANIL OR LIVING CITY OF SUNIL.

SELECT B1.CITY FROM BRANCH B1,DEPOSIT D1 WHERE D1.CNAME IN ('ANIL') AND D1.BNAME = B1.BNAME

UNION(SELECT C1.CITY FROM CUSTOMERS C1 WHERE C1.CNAME IN ('SUNIL'));

/--19)LIST THE CUSTOMERS WHO ARE BORROWERS OR DEPOSITORS AND HAVING LIVING CITY NAGPUR AND BRANCH CITY SAME AS MR. SUNIL.

SELECT C1.CNAME FROM CUSTOMERS C1,BRANCH B1,DEPOSIT D3WHERE C1.CITY = 'NAGPUR' ANDC1.CNAME IN ((SELECT D1.CNAME FROM DEPOSIT D1)UNION(SELECT BR1.CNAME FROM BORROW BR1))ANDB1.CITY IN(SELECT B2.CITY FROM DEPOSIT D2 , BRANCH B2 WHERE D2.CNAME = 'SUNIL'AND D2.BNAME = B2.BNAME)ANDC1.CNAME = D3.CNAME AND D3.BNAME = B1.BNAME;

Page 53: SQL Oracle

/--20)LIST THE CUSTOMERS WHO ARE BORROWERS AND DEPOSITORS AND HAVING SAME BRANCH CITY AS MR. ANIL.

SELECT C1.CNAME FROM CUSTOMERS C1,DEPOSIT D1 , BRANCH B1 WHEREC1.CNAME IN((SELECT BR1.CNAME FROM BORROW BR1)

INTERSECT(SELECT D2.CNAME FROM DEPOSIT D2))ANDD1.CNAME = C1.CNAMEANDD1.BNAME = B1.BNAMEANDB1.CITY IN(SELECT B2.CITY FROM DEPOSIT D3 , BRANCH B2 WHERE D3.CNAME = 'ANIL' AND

D3.BNAME = B2.BNAME);

/=================================================================================

SQL\Ch07\Assign5

--1) LIST TOTAL LOAN.SELECT SUM (AMOUNT) FROM BORROW;

/--2)LIST TOTAL DEPOSIT.

SELECT SUM(AMOUNT) FROM DEPOSIT;/--3)LIST TOTAL LOAN FROM KAROLBAGH BRANCH. SELECT SUM(AMOUNT) FROM BORROW WHERE BNAME = 'KAROLBAGH';/--4)LIST TOTAL DEPOSIT OF CUSTOMER HAVING ACCOUNT DATE AFTER 1-JAN-96. SELECT SUM(AMOUNT) FROM DEPOSIT WHERE ADATE > '1-JAN-96';/--5)LIST TOTAL DEPOSIT OF CUSTOMERS LIVING IN CITY NAGPUR. SELECT SUM(D1.AMOUNT) FROM DEPOSIT D1 , CUSTOMERS C1 WHERE C1.CITY = 'NAGPUR' AND C1.CNAME = D1.CNAME;/--6)LIST MAXIMUM DEPOSIT OF CUSTOMERS LIVING IN BOMBAY.SELECT MAX(D1.AMOUNT) FROM DEPOSIT D1 , CUSTOMERS C1 WHERE C1.CITY = 'BOMBAY' AND C1.CNAME = D1.CNAME;/--7)LIST TOTAL DEPOSIT OF CUSTOMERS HAVING BRANCH CITY DELHI.

SELECT SUM(D1.AMOUNT) FROM DEPOSIT D1 , BRANCH B1 WHERE B1.CITY = 'DELHI' AND D1.BNAME = B1.BNAME;/--8)LIST TOTAL DEPOSIT OF CUSTOMERS LIVING IN SAME CITY WHERE SUNIL IS LIVING.

SELECT SUM(D1.AMOUNT) FROM DEPOSIT D1,CUSTOMERS C1 WHERE D1.CNAME=C1.CNAME AND C1.CITY IN

(SELECT C2.CITY FROM CUSTOMERS C2 WHERE C2.CNAME = 'SUNIL');/--9)COUNT TOTAL NUMBER OF BRANCH CITIES.

SELECT COUNT(DISTINCT (CITY)) FROM BRANCH ;/--10)COUNT TOTAL NUMBER OF CUSTOMER CITIES. SELECT COUNT(DISTINCT (CITY)) FROM CUSTOMERS ;/--11)GIVE BRANCH NAME AND BRANCHWISE DEPOSIT.SELECT BNAME , SUM(AMOUNT) FROM DEPOSIT GROUP BY BNAME;/

--12)GIVE CITY NAME AND CITYWISE DEPOSIT.

Page 54: SQL Oracle

SELECT C1.CITY , SUM(D1.AMOUNT) FROM CUSTOMERS C1 , DEPOSIT D1 WHERE D1.CNAME = C1.CNAME GROUP BY C1.CITY;/--13)GIVE CITYWISE NAME AND BRANCHWISE DEPOSIT.

SELECT B1.CITY,SUM(D1.AMOUNT) FROM DEPOSIT D1 , BRANCH B1 WHERE D1.BNAME = B1.BNAME GROUP BY D1.BNAME,B1.CITY;/--14)GIVE THE BRANCHWISE DEPOSIT OF CUSTOMER AFTER ACCOUNT DATE 1-JAN-96.

SELECT SUM(AMOUNT) FROM DEPOSIT WHERE ADATE > '1-JAN-96' GROUP BY BNAME;/--15)GIVE BRANCHWISE LOAN OF CUSTOMER LIVING IN NAGPUR.

SELECT SUM(BR1.AMOUNT) FROM BORROW BR1, CUSTOMERS C1 WHERE C1.CNAME=BR1.CNAME AND C1.CITY = 'NAGPUR' GROUP BY BR1.BNAME;/--16)COUNT TOTAL NUMER OF CUSTOMERS.

SELECT COUNT(DISTINCT (CNAME)) FROM CUSTOMERS;/--17)COUNT TOTAL NUMBER OF DEPOSITORS BRANCHWISE.

SELECT COUNT(DISTINCT (CNAME)) FROM DEPOSIT GROUP BY BNAME;/--18)GIVE MAXIMUM LOAN FROM BRANCH VRCE.

SELECT MAX(AMOUNT) FROM BORROW WHERE BNAME ='VRCE';/--19)GIVE LIVING CITYWISE LOAN OF BORROWERS.

SELECT SUM(BR1.AMOUNT) FROM BORROW BR1, CUSTOMERS C1 WHERE C1.CNAME =BR1.CNAME GROUP BY C1.CITY;/--20)GIVE NUMBER OF CUSTOMERS WHO ARE DEPOSITORS AND BORROWERS.

SELECT COUNT(DISTINCT (CNAME)) FROM CUSTOMERS WHERE CNAME IN((SELECT CNAME FROM DEPOSIT)INTERSECT(SELECT CNAME FROM BORROW));

/=================================================================================

SQL\Ch07\Assign6

--1)LIST THE BRANCHES HAVING SUM OF DEPOSIT MORE THAN 50000.SELECT BNAME FROM DEPOSIT GROUP BY BNAME HAVING SUM(AMOUNT) > 5000;

/--2)LIST THE BRANCHES HAVING SUM OF DEPOSIT MORE THAN 50000 AND LOCATED IN CITY BOMBAY.

SELECT D1.BNAME FROM DEPOSIT D1, BRANCH B1 WHERE D1.BNAME = B1.BNAMEAND B1.CITY ='BOMBAY' GROUP BY D1.BNAME HAVING SUM(D1.AMOUNT) > 5000;

/--3)LIST THE NAME OF CUSTOMERS HAVING DEPOSIT IN THE BRANCHES WHERE AVERAGE DEPOSIT IS MORE THAN 5000.

SELECT C1.CNAME FROM CUSTOMERS C1 WHERECNAME IN (SELECT D1.BNAME FROM DEPOSIT D1

GROUP BY D1.BNAMEHAVING AVG(D1.AMOUNT) > 5000);

/--4)LIST THE NAME OF CUSTOMERS HAVING MAXIMUM DEPOSIT.

SELECT D1.CNAME FROM DEPOSIT D1 WHERE D1.AMOUNT IN(SELECT MAX(D2.AMOUNT) FROM DEPOSIT D2);

/--5)LIST THE NAME OF CUSTOMERS HAVING MAXIMUM DEPOSIT IN THE CUSTOMERS LIVING IN NAGPUR.

SELECT D1.CNAME FROM DEPOSIT D1 , CUSTOMERS C1 WHERED1.CNAME = C1.CNAME AND C1.CITY = 'NAGPUR' AND D1.AMOUNT IN

Page 55: SQL Oracle

(SELECT MAX(D2.AMOUNT) FROM DEPOSIT D2);/--6)LIST THE NAME OF BRANCH HAVING HIGHEST NUMBER OF DEPOSITORS.

SELECT D1.BNAME FROM DEPOSIT D1 GROUP BY D1.BNAMEHAVING COUNT(D1.CNAME) > = ALL (SELECT COUNT(D2.CNAME) FROM DEPOSIT D2GROUP BY D2.BNAME);

/--7)COUNT THE NUMBER OF DEPOSITORS LIVING IN NAGPUR. SELECT COUNT (D2.CNAME) FROM DEPOSIT D2, CUSTOMERS C1 WHERE

C1.CITY = 'NAGPUR' AND C1.CNAME = D2.CNAME;/--8)GIVE NAME OF CUSTOMERS IN VRCE BRANCH HAVING MORE DEPOSIT THAN ALL CUSTOMERS FROM SB BRANCH. SELECT D1.CNAME FROM DEPOSIT D1 WHERE D1.BNAME = 'VRCE'GROUP BY D1.CNAME HAVING D1.AMOUNT > ALL

(SELECT D2.AMOUNT FROM DEPOSIT D2 WHERE D2.BNAME = 'SB');/--9)GIVE NAME OF CUSTOMERS IN VRCE BRANCH HAVING MORE DEPOSIT THAN ANY OTHER CUSTOMER IN SB BRANCH.

SELECT D1.CNAME FROM DEPOSIT D1 WHERE D1.BNAME = 'VRCE'AND D1.AMOUNT > ANY( SELECT D2.AMOUNT FROM DEPOSIT D2 WHERE D2.BNAME = 'VIRAR');

/--10)GIVE NAME OF CUSTOMERS HAVING HIGHEST DEPOSIT IN THE BRANCH WHERE -- SUNIL IS HAVING DEPOSIT.

SELECT D1.CNAME FROM DEPOSIT D1 GROUP BY D1.BNAME WHERED1.AMOUNT >= ALL (SELECT D2.AMOUNT FROM DEPOSIT D2 WHERED2.CNAME = 'SUNIL');

/--11)GIVE NAME OF CUSTOMERS HAVING HIGHEST DEPOSIT IN THE CITY WHERE BRANCH OF SUNIL IS LOCATED. SELECT D1.CNAME FROM DEPOSIT D1, BRANCH B1 WHERE D1.BNAME = B1.BNAME AND D1.AMOUNT >=ALL (SELECT D2.AMOUNT FROM DEPOSIT D2, BRANCH B2 WHERE D2.CNAME = 'SUNIL' AND D2.BNAME = B2.BNAME AND B1.BNAME = B2.BNAME);/--12)GIVE NAME OF CUSTOMERS HAVING MORE DEPOSIT THAN THE-- AVERAGE DEPOSIT IN THEIR RESPECTIVE BRANCHES.

SELECT D1.CNAME FROM DEPOSIT D1 WHERE D1.AMOUNT >= ALL (SELECT AVG(D2.AMOUNT) FROM DEPOSIT D2 WHERE

D1.BNAME = D2.BNAME GROUP BY D2.BNAME);/--13)GIVE NAME OF CUSTOMERS HAVING MAXIMUM DEPOSIT AMONG DEPOSIT OF NAGPUR FOR BRANCH VRCE. SELECT D1.CNAME FROM DEPOSIT D1, CUSTOMERS C1 WHERE D1.BNAME = 'VRCE' AND C1.CITY = 'NAGPUR' AND C1.CNAME = D1.CNAME AND D1.AMOUNT >= ALL(SELECT D2.AMOUNT FROM DEPOSIT D2,CUSTOMERS C2 WHERE D2.CNAME = C2.CNAME AND D2.BNAME = 'VRCE' AND C2.CITY = 'NAGPUR');/--14)GIVE THE NAME OF BRANCH WHERE NUMBER OF DEPOSITORS ARE MORE THAN 5.

SELECT D1.BNAME FROM DEPOSIT D1 GROUP BY D1.BNAMEHAVING COUNT(D1.CNAME) > 5;

/--15)GIVE NAME OF CITY HAVING MORE CUSTOMERS LIVING THAN NAGPUR.

SELECT C1.CITY FROM CUSTOMERS C1 GROUP BY C1.CITYHAVING COUNT (C1.CNAME) > ALL (SELECT COUNT(C2.CNAME)

FROM CUSTOMERS C2 WHERE C2.CITY = 'NAGPUR');/--16)GIVE NAME OF BRANCHES HAVING NUMBER OF DEPOSITORS MORE THAN NUMBER OF BORROWERS.

Page 56: SQL Oracle

SELECT D1.BNAME FROM DEPOSIT D1 GROUP BY D1.BNAMEHAVING COUNT(D1.CNAME) > ALL (SELECT COUNT(BR1.CNAME) FROM BORROW BR1WHERE BR1.BNAME = D1.BNAME GROUP BY BR1.BNAME);

/--17)GIVE THE NAME OF CITIES WHERE IN WHICH MAXIMUM BRANCHES ARE LOCATED.

SELECT B1.CITY FROM BRANCH B1 GROUP BY B1.CITYHAVING COUNT(B1.BNAME) > ALL(SELECT COUNT(B2.BNAME) FROM BRANCH B2 GROUP BY B2.CITY);

/--18)GIVE NAME OF CUSTOMERS LIVING IN SAME CITY WHERE MAXIMUM DEPOSITORS ARE LOCATED.

SELECT C1.CNAME FROM CUSTOMERS C1 WHERE C1.CITY IN(SELECT C2.CITY FROM DEPOSIT D1, CUSTOMERS C2 WHERE

C2.CNAME = D1.CNAMEGROUP BY C2.CITY HAVING COUNT(D1.CNAME) >= ALL(SELECT COUNT(D2.CNAME) FROM DEPOSIT D2,CUSTOMERS C3

WHERE D2.CNAME = C3.CNAMEGROUP BY C3.CITY));

/--19)GIVE NAME OF BORROWERS HAVING SAME BRANCH CITY AS HIGHEST BORROWERS.

SELECT BR1.CNAME FROM BORROW BR1 WHERE BR1.BNAME IN ((SELECT BR2.BNAME FROM BORROW BR2 GROUP BY BR2.BNAMEHAVING COUNT(BR2.CNAME) >= ALL(SELECT COUNT(BR3.CNAME) FROMBORROW BR3 GROUP BY BR3.BNAME)));

/--20)COUNT NUMBER OF CUSTOMERS LIVING IN SAME CITY WHERE BRANCH -- IS LOCATED.

SELECT COUNT(C1.CNAME) FROM CUSTOMERS C1 , DEPOSIT D1, BRANCH B1 WHERE C1.CNAME = D1.CNAME AND B1.BNAME = D1.BNAME AND B1.CITY = C1.CITY;/=================================================================================

SQL\Ch07\Assign7

UPDATE DEPOSITSET AMOUNT = AMOUNT + 10

WHERE CNAME IN(SELECT D1.CNAME FROM DEPOSIT D1

WHERE CNAME IN(SELECT C1.CNAME FROM CUSTOMERS C1

WHERE C1.CNAME = D1.CNAME GROUP BY C1.CITY HAVING AVG(D1.AMOUNT)>= ALL (SELECT D2.AMOUNT FROM DEPOSIT D2,

CUSTOMERS C2 WHERE D2.CNAME = C2.CNAME AND C2.CITY = C1.CITY)))/

--1)GIVE 10% INTEREST TO ALL DEPOSITORS.UPDATE DEPOSITSET AMOUNT = AMOUNT * 1.1;

/--2)GIVE 10% INTEREST TO ALL DEPOSITORS HAVING BRANCH VRCE.

UPDATE DEPOSITSET AMOUNT = AMOUNT * 1.1 WHERE BNAME = 'VRCE';

/--3)GIVE 10% INTEREST TO ALL DEPOSITORS LIVING IN NAGPUR.

UPDATE DEPOSITSET AMOUNT = AMOUNT * 1.1 WHERE CNAME IN(SELECT CNAME FROM CUSTOMERS WHERE CITY = 'NAGPUR');

/--4)GIVE 10% INTEREST TO ALL DEPOSITORS LIVING IN NAGPUR AND HAVING BRANCH CITY BOMBAY.

UPDATE DEPOSITSET AMOUNT = AMOUNT * 1.1 WHERE CNAME IN

Page 57: SQL Oracle

(SELECT CNAME FROM CUSTOMERS WHERE CITY = 'NAGPUR')ANDBNAME IN(SELECT BNAME FROM BRANCH WHERE CITY = 'BOMBAY');

/--5)ADD TO DEPOSIT OF ANIL HUNDRED RUPEES AND ASSIGN IT TO SUNIL.--REM 3 QUERIES FOR ;

UPDATE DEPOSITSET AMOUNT = ( SELECT AVG(AMOUNT) FROM DEPOSIT WHERE CNAME =

'ANIL')WHERE CNAME = 'SUNIL';UPDATE DEPOSITSET AMOUNT = AMOUNT + 100WHERE CNAME = 'SUNIL';UPDATE DEPOSITSET AMOUNT = AMOUNT + 100 WHERE CNAME = 'ANIL';

/--6)CHANGE THE DEPOSIT OF VRCE BRANCH TO 1000 AND CHANGE THE BRANCH AS VRCE_AMBAZARI.

UPDATE DEPOSITSET AMOUNT = 1000,BNAME = 'VRCE_AMBAZARI' WHERE BNAME = 'VRCE';

/--7)ASSIGN TO DEPOSIT OF ANIL MAXIMUM DEPOSIT FROM VRCE BRANCH.

UPDATE DEPOSITSET AMOUNT = (SELECT MAX(AMOUNT) FROM DEPOSIT WHERE BNAME = 'VRCE') WHERE

CNAME = 'ANIL';/--8)CHANGE THE LIVING CITY OF VRCE BRANCH BORROWERS TO NAGPUR.

UPDATE CUSTOMERSSET CITY = 'NAGPUR' WHERE CNAME IN(SELECT CNAME FROM BORROW WHERE BNAME = 'VRCE');

/--9)UPDATE DEPOSIT OF ANIL , GIVE HIM MAXIMUM DEPOSIT FROM DEPOSITORS IN LIVING CITY NAGPUR.

UPDATE DEPOSITSET AMOUNT = (SELECT MAX(AMOUNT) FROM DEPOSIT, CUSTOMERS WHERE

DEPOSIT.CNAME = CUSTOMERS.CNAME AND CUSTOMERS.CITY= 'NAGPUR')WHERE CNAME = 'ANIL';

/--10)GIVE DEPOSIT TO ANIL, SUM OF DEPOSIT OF SUNIL AND VIJAY.

UPDATE DEPOSITSET AMOUNT = (SELECT SUM(AMOUNT) FROM DEPOSIT WHERE CNAME IN

('SUNIL','VIJAY')) WHERE CNAME = 'ANIL';/--11) TRANSFER 10 RS FROM ACCOUNT OF ANIL TO SUNIL.

UPDATE DEPOSITSET AMOUNT = AMOUNT - 10 WHERE CNAME = 'ANIL';UPDATE DEPOSITSET AMOUNT = AMOUNT + 10 WHERE CNAME = 'SUNIL';

/--12) TRANSFER 10 RS FROM ACCOUNT OF ANIL TO SUNIL IF BOTH ARE HAVING SAME BRANCH.

UPDATE DEPOSITSET AMOUNT = AMOUNT - 10 WHERE CNAME = 'ANIL' AND BNAME IN(SELECT D1.BNAME FROM DEPOSIT D1 WHERE D1.CNAME = 'SUNIL');

UPDATE DEPOSITSETAMOUNT = AMOUNT + 10 WHERE CNAME = 'SUNIL' AND BNAME IN(SELECT D2.BNAME FROM DEPOSIT D2 WHERE D2.CNAME = 'ANIL');

Page 58: SQL Oracle

/--13) TRANSFER 10 RS FROM ACCOUNT OF ANIL TO SUNIL IF BOTH ARE LIVING IN NAGPUR.

UPDATE DEPOSITSET AMOUNT = AMOUNT - 10 WHERE CNAME = 'ANIL' AND CNAME IN(SELECT C1.CNAME FROM CUSTOMERS C1, CUSTOMERS C2 WHEREC2.CNAME = 'SUNIL' AND C1.CITY = 'NAGPUR' AND C1.CITY=C2.CITY);UPDATE DEPOSITSETAMOUNT = AMOUNT + 10 WHERE CNAME = 'SUNIL' AND CNAME IN (SELECT C2.CNAME FROM CUSTOMERS C2, CUSTOMERS C4 WHEREC4.CNAME = 'ANIL' AND C2.CITY=C4.CITY);

/--14)TRANSFER 10 RS FROM ACCOUNT OF ANIL TO SUNIL IF BOTH ARE LIVING IN SAME CITY.

UPDATE DEPOSITSET AMOUNT = AMOUNT + 10 WHERE CNAME = 'SUNIL' AND CNAME IN (SELECT C3.CNAME FROM CUSTOMERS C3, CUSTOMERS C4 WHEREC3.CNAME='ANIL' AND C3.CITY = C4.CITY);

/--16)GIVE 100 RS MORE TO ALL DEPOSITORS IF THEY ARE MAXIMUM DEPOSITORS IN THEIR RESPECTIVE BRANCH.UPDATE DEPOSITSET AMOUNT = AMOUNT + 100

WHERE CNAME IN (SELECT D1.CNAME FROM DEPOSIT D1 WHERE BNAME IN ( SELECT D1.BNAME FROM DEPOSIT D1 GROUP BY D1.BNAME HAVING AVG(D1.AMOUNT) >= ALL

(SELECT MAX(D2.AMOUNT) FROM DEPOSIT D2 WHERE D1.BNAME = D2.BNAME GROUP BY D2.BNAME)));

/--17)GIVE 10 RS MORE TO ALL DEPOSITORS HAVING MORE DEPOSIT THAN THE AVERAGE DEPOSIT.

UPDATE DEPOSITSET AMOUNT = AMOUNT + 10WHERE CNAME IN(SELECT D1.CNAME FROM DEPOSIT D1 GROUP BY D1.CNAMEHAVING SUM(D1.AMOUNT) > ALL (SELECT AVG(D2.AMOUNT) FROM DEPOSIT D2));

/

--18)GIVE 10 RS MORE FOR ALL DEPOSITORS HAVING MORE DEPOSIT THAN THE AVERAGE DEPOSIT OF THEIR BRANCH.

UPDATE DEPOSIT SET AMOUNT = AMOUNT + 10 WHERE CNAME IN (SELECT D1.CNAME FROM DEPOSIT D1

GROUP BY D1.BNAME HAVING SUM(D1.AMOUNT) > ALL (SELECT AVG(D2.AMOUNT)FROM DEPOSIT D2

WHERE D2.BNAME = D1.BNAME GROUP BY D2.BNAME));/--19)GIVE 10 RS MORE FOR ALL CUSTOMERS LIVING IN SAME CITY WHERE THEIR BRANCH IS LOCATED.UPDATE DEPOSITSET AMOUNT = AMOUNT + 10

WHERE CNAME IN(SELECT D1.CNAME FROM DEPOSIT D1, BRANCH B1, CUSTOMERS C1WHERE B1.BNAME = D1.BNAME AND B1.CITY = C1.CITY AND

C1.CNAME = D1.CNAME);/--20)GIVE 10 RS MORE FOR ALL DEPOSITORS HAVING MORE DEPOSIT THAN AVERAGE DEPOSIT OF THEIR BRANCH.

Page 59: SQL Oracle

UPDATE DEPOSITSET AMOUNT = AMOUNT + 10

WHERE CNAME IN(SELECT D1.CNAME FROM DEPOSIT D1,CUSTOMERS C1

WHERE C1.CNAME = D1.CNAME GROUP BY C1.CITY,D1.CNAME HAVING SUM(D1.AMOUNT)

>= ALL (SELECT D2.AMOUNT FROM DEPOSIT D2, CUSTOMERS C2 WHERE D2.CNAME = C2.CNAME AND C2.CITY = C1.CITY))/=================================================================================

SQL\Ch07\Assign8

--1)DELETE FROM CUSTOMERS. DELETE FROM CUSTOMERS;/--2)DELETE DEPOSITORS OF BRANCHES HAVING NUMBER OF CUSTOMERS BETWEEN 1 TO 3. DELETE FROM DEPOSIT WHERE CNAME IN (SELECT D1.CNAME FROM DEPOSIT D1 GROUP BY D1.BNAME HAVING COUNT(D1.CNAME) BETWEEN 1 AND 3);/--3)DELETE BRANCHES HAVING AVERAGE DEPOSIT LESS THAN 5000. DELETE FROM BRANCH WHERE BNAME IN (SELECT BNAME FROM DEPOSIT GROUP BY BNAME HAVING AVG(AMOUNT) < 5000);/--4)DELETE BRANCHES HAVING MAXIMUM LOAN MORE THAN 5000. DELETE FROM BRANCH WHERE BNAME IN (SELECT BNAME FROM BORROW GROUP BY BNAME HAVING MAX(AMOUNT) > 5000);/--5)DELETE BRANCHES HAVING DEPOSIT FROM NAGPUR. DELETE FROM BRANCH WHERE BNAME IN (SELECT D1.BNAME FROM DEPOSIT D1,CUSTOMERS C1 WHERE D1.CNAME = C1.CNAME AND C1.CITY = 'NAGPUR');/--6)DELETE DEPOSIT OF ANIL AND SUNIL IF BOTH ARE HAVING BRANCH VIRAR. DELETE FROM DEPOSIT WHERE CNAME IN ('ANIL', 'SUNIL') AND EXISTS

(SELECT * FROM DEPOSIT D1, DEPOSIT D2 WHERE D1.CNAME = 'ANIL' AND D2.CNAME = ' SUNIL' AND D1.BNAME = D2.BNAME AND D1.BNAME='VIRAR');/--7)DELETE DEPOSIT OF ANIL AND SUNIL IF BOTH ARE HAVING LIVING CITY NAGPUR. DELETE FROM DEPOSIT WHERE CNAME IN ('ANIL', 'SUNIL') AND EXISTS (SELECT * FROM CUSTOMERS C1 , CUSTOMERS C2 WHERE C1.CNAME = 'ANIL' AND C2.CNAME = 'SUNIL'AND C1.CITY = C2.CITY AND C1.CITY = 'NAGPUR');/--8)DELETE DEPOSIT OF ANIL AND SUNIL IF BOTH ARE HAVING SAME LIVING CITY. DELETE FROM DEPOSIT WHERE CNAME IN ('ANIL', 'SUNIL') AND EXISTS (SELECT * FROM CUSTOMERS C1 , CUSTOMERS C2 WHERE C1.CNAME = 'ANIL' AND C2.CNAME = 'SUNIL' AND C1.CITY = C2.CITY);/--9)DELETE DEPOSIT OF ANIL AND SUNIL IF THEY ARE HAVING LESS DEPOSIT THAN VIJAY. DELETE FROM DEPOSIT WHERE CNAME IN ('ANIL','SUNIL') AND EXISTS (SELECT * FROM DEPOSIT D1 , DEPOSIT D2 D1.CNAME IN ('ANIL','SUNIL') AND D2.CNAME = 'VIJAY' AND D1.AMOUNT < D2.AMOUNT);/--10) DELETE DEPOSIT OF VIJAY. DELETE FROM DEPOSIT WHERE CNAME = 'VIJAY';/--11)DELETE DEPOSIT OF AJAY IF VIJAY IS NOT DEPOSITOR. DELETE FROM DEPOSIT WHERE CNAME = 'AJAY' AND NOT EXISTS (SELECT * FROM DEPOSIT WHERE CNAME = 'VIJAY');/

Page 60: SQL Oracle

--12)DELETE CUSTOMERS FROM BOMBAY CITY. DELETE FROM CUSTOMERS WHERE CITY = 'BOMBAY';/--13)DELETE IF DEPOSITORS BRANCH IS VIRAR AND DEPOSITOR NAME IS AJAY. DELETE FROM DEPOSIT WHERE CNAME = 'AJAY' AND BNAME = 'VIRAR';/--14)DELETE DEPOSITORS HAVING DEPOSIT LESS THAN 500. DELETE FROM DEPOSIT WHERE AMOUNT < 500;/--15)DELETE BORROWER HAVING LOAN MORE THAN 10000. DELETE FROM BORROW WHERE AMOUNT > 10000;/--16)DELETE BORROWER HAVING LOAN MORE THAN 1000 AND BRANCH KAROLBAGH. DELETE FROM BORROW WHERE AMOUNT > 1000 AND BNAME = 'KAROLBAGH';/--17)DELETE DEPOSITORS OF VRCE BRANCH AND LIVING IN CITY BOMBAY. DELETE FROM DEPOSIT WHERE BNAME = 'VRCE' AND CNAME IN (SELECT CNAME FROM CUSTOMERS WHERE CITY = 'BOMBAY');/--18)DELETE BORROWER HAVING BRANCH NAME CHANDNI. DELETE FROM BORROW WHERE BNAME = 'CHANDNI';/--19)DELETE BORROWER OF BRANCHES HAVING AVERAGE LOAN LESS THAN 1000. DELETE FROM BORROW WHERE CNAME IN (SELECT BR1.CNAME FROM BORROW BR1 GROUP BY BR1.BNAME HAVING AVG(BR1.AMOUNT) < 1000);/--20)DELETE BORROWER OF BRANCHES HAVING MINIMUM NUMBER OF CUSTOMERS. DELETE FROM BORROW WHERE CNAME IN (SELECT BR1.CNAME FROM BORROW BR1 GROUP BY BR1.BNAME HAVING COUNT(BR1.CNAME) <= ALL (SELECT COUNT(BR2.CNAME) FROM BORROW BR2 GROUP BY BR2.BNAME));/=================================================================================

SQL\Ch08

SQL\Ch08\ASSIGN1

--1) LIST CONTENTS OF COURSE. SELECT * FROM COURSE;/--2) LIST CONTENTS OF BATCH. SELECT * FROM BATCH;/--3)LIST CONTENTS OF BATCH FOR PARTICULAR COURSE. COURSE CODE =10.

SELECT * FROM BATCH WHERE COURSECODE=10;/--4)LIST CONTENTS OF BATCH WHICH STARTS FROM A PARTICULAR DATE SAY --STARTING DATE =23-JAN-1999. SELECT * FROM BATCH WHERE STARTINGDATE='23-JAN-99';/--5)LIST BATCH CODE OF BATCH HAVING NET INCOME MORE THAN 50000. SELECT BATCHCODE FROM BATCH WHERE NETINCOME >50000;/

Page 61: SQL Oracle

--6)LIST BATCH CODE OF BATCH HAVING EXPECTED INCOME MORE THAN NET INCOME --BY 2000. SELECT BATCHCODE FROM BATCH WHERE EXPECTEDINCOME-NETINCOME>2000;/-- 7) LIST ENQUIRIES FOR COURSE CODE 11. SELECT * FROM ENQUIRY WHERE COURSECODE=11;/--8) LIST NAME OF PERSONS HAVING CITY NAGPUR. SELECT FNAME FROM ENQUIRY WHERE CITY='NAGPUR';/--9) LIST ADVERTISEMENT DATE. SELECT ADVDATE FROM ADVERTISEMENT;/--10) LIST ROLLNO FOR PARTICULAR BATCH. SELECT ROLLNO FROM ENROLLMENT WHERE BATCHCODE=10001;/--11)LIST ALL EXPENDITURE TYPE FROM EXPMASTER. SELECT EXPTYPE FROM EXPMASTER;/--12) LIST DETAILS OF PERSON ENQUIRED FOR A PARTICULAR COURSE. SELECT * FROM ENQUIRY WHERE COURSECODE=11;/--13) LIST DETAIL ABOUT ENROLLMENT. SELECT * FROM ENROLLMENT;/--14) LIST CONTENTS OF EXPENDITURE. SELECT * FROM EXPENDITURE;/--15)LIST INSTALLMENTS HAVING STATUS 'N'. SELECT * FROM INSTALLMENT WHERE INSTALLSTATUS='N';/-- 16) LIST SYLLABUS OF PARTICULAR COURSE. SELECT SYLLABUS FROM COURSE WHERE COURSECODE=11;/--17)LIST CONTENTS OF EXPENDITURE MASTER. SELECT * FROM EXPMASTER;/--18) LIST CONTENTS OF FEESPAID.SELECT * FROM FEESPAID;/--19) LIST ALL DETAILS FOR EXPAUDIT.SELECT * FROM EXPAUDIT;/=================================================================================

SQL\Ch08\ASSIGN2

--1)LIST COURSENAME,STARTINGDATE OF ALL BATCHES.

Page 62: SQL Oracle

SELECT COURSENAME,BATCHCODE,STARTINGDATE FROM BATCH,COURSE WHERE BATCH.COURSECODE=COURSE.COURSECODE;/--2) LIST COURSE NAME,STARTINGDATE FOR A PARTICULAR BATCH.

SELECT COURSENAME,BATCHCODE,STARTINGDATE FROM BATCH,COURSE/--3)LIST MEDIA NAME,DATE OF ADVERTISEMENT FOR A SPECIFIED COURSE. SELECT MEDIANAME,ADVDATE FROM ENQUIRY,ADVERTISEMENT WHERE ENQUIRY.REFCODE=ADVERTISEMENT.REFCODE AND ENQUIRY.COURSECODE=11;/--4)LIST ROLL NO AND NAME OF STUDENTS FOR A PARTICULAR BATCH. SELECT ROLLNO,FNAME,SNAME FROM ENQUIRY,ENROLLMENT WHERE ENQUIRY.ENQUIRYNO=ENROLLMENT.ENQUIRYNO AND ENROLLMENT.BATCHCODE=11001;/5)LIST ROLLNO,ADDRESS OF STUDENTS IN SPECIFIED BATCH.SELECT ROLLNO,PLOTNO,STREET,CITY,PINCODE,PHONE FROM ENQUIRY,ENROLLMENT WHERE ENQUIRY.ENQUIRYNO=ENROLLMENT.ENQUIRYNO AND ENROLLMENT.BATCHCODE=11001;

OR SELECT ROLLNO,(PLOTNO||' '||STREET||' '||CITY||' '||PIN||' '||PHONE) ADDRESSFROM ENQUIRY,ENROLLMENTWHERE ENQUIRY.ENQUIRYNO=ENROLLMENT.ENQUIRYNOAND ENROLLMENT.BATCHCODE=11001;/6) LIST ROLLNO, NAME,AND FEESPAID FOR A PARTICULAR BATCH. SELECT ENROLLMENT.ROLLNO,SNAME,ENROLLMENT.BATCHCODE,FEESPAID.AMOUNT FROM ENQUIRY,ENROLLMENT,FEESPAID WHERE ENQUIRY.ENQUIRYNO=ENROLLMENT.ENQUIRYNO AND ENROLLMENT.ROLLNO=FEESPAID.ROLLNO AND ENROLLMENT.BATCHCODE=11001;/7)LIST ROLLNO,NAME,INSTALLMENT DATE,AMOUNT FOR A PARTICULAR BATCH. SELECT ENROLLMENT.ROLLNO,ENQUIRY.FNAME, INSTALLEMENT.INDATE,INSTALLEMENT.AMOUNT FROM ENQUIRY,ENROLLMENT,INSTALLMENT WHERE ENQUIRY.ENQUIRYNO=ENROLLMENT.ENQUIRYNO AND ENROLLMENT.ROLLNO=INSTALLMENT.ROLLNOAND ENROLLMENT.BATCHCODE=11001;/8)LIST COURSE NAME, AND DETAILS OF ALL BATCHES.SELECT COURSE.COURSENAME,BATCH.BATCHCODE,BATCH.STARTINGDATE,BATCH.DURATION, BATCH.COURSEFEES,BATCH.NETINCOME,BATCH.EXPECTEDINCOME,BATCH.LASTNO FROM COURSE,BATCH WHERE COURSE.COURSECODE=BATCH.COURSECODE;/

Page 63: SQL Oracle

--9.LIST ROLLNO, NAME OF STUDENTS WHO PAID FEES MORE THAN 5000 AT A TIME.

SELECT ENROLLMENT.ROLLNO,ENQUIRY.FNAME FROM ENQUIRY,ENROLLMENT,FEESPAID WHERE ENQUIRY.ENQUIRYNO=ENROLLMENT.ENQUIRYNO AND ENROLLMENT.ROLLNO=FEESPAID.ROLLNO AND FEESPAID.AMOUNT>5000;/=================================================================================

SQL\Ch08\Assign3

1)LIST NAME OF BATCHES HAVING NETINCOMECOME MORE THAN SPECIFIED BATCH. SELECT B.BATCHCODE FROM BATCH B WHERE B.NETINCOME >(SELECT B1.NETINCOME FROM BATCH B1 WHERE B1.BATCHCODE=11001);/--2) LIST NAME OF PERSONS HAVING ADDRESS IN ALL THOSE CITY WHERE A SPECIFIED --PERSON IS LIVING.

SELECT E1.FNAME NAMEFROM ENQUIRY E1,ENQUIRY E2 WHERE E1.CITY=E2.CITY AND E2.FNAME='SACHIN';/--3)LIST BATCHCODE OF BATCHES HAVING EXPECTED INCOME MORE THAN ANY SPECIFIED BATCH.ALL THE BATCHES SHOULD BE OF SAME COURSE.

SELECT B1.BATCHCODE FROM BATCH B1,BATCH B2 WHERE B1.EXPECTEDINCOME>B2.EXPECTEDINCOME AND B1.COURSECODE=B2.COURSECODE AND B2.BATCHCODE=10001;/--4)LIST NAME OF STUDENTS WHICH ARE IN SAME BATCH IN WHICH PERSON JAYANT IS --ENROLLED.SELECT E1.FNAME NAME FROM ENQUIRY E1,ENQUIRY E2,ENROLLMENT EN1,ENROLLMENT EN2 WHERE E2.FNAME='JAYANT' AND EN1.ENQUIRYNO=E2.ENQUIRYNO AND EN1.BATCHCODE=EN2.BATCHCODE AND EN2.ENQUIRYNO=E1.ENQUIRYNO;/--5.LIST NAME OF STUDENTS WHICH ARE ENROLLED IN SAME COURSE WHERE JAYANT --IS ENROLLED. SELECT E1.FNAME NAME FROM ENQUIRY E1,ENQUIRY E2,ENROLLMENT EN1,ENROLLMENT EN2,BATCH B1,BATCH B2 WHERE E2.FNAME='JAYANT' AND E2.ENQUIRYNO=EN1.ENQUIRYNO AND EN1.BATCHCODE=B1.BATCHCODE AND B1.COURSECODE=B2.COURSECODE AND B2.BATCHCODE=EN2.BATCHCODE AND EN2.ENQUIRYNO=E1.ENQUIRYNO;/================================================================================= SQL\Ch08\Assign4

--1)LIST DETAILS OF BATCH HAVING SPECIFIED COURSE NAME. SELECT * FROM BATCH WHERE COURSECODE IN (SELECT COURSECODE

Page 64: SQL Oracle

FROM COURSE WHERE COURSENAME='ORACLE');/--2. LIST NAME OF PERSONS ENROLLED IN SPECIFIED BATCH USING IN SELECT FNAME FROM ENQUIRY E1 WHERE E1.ENQUIRYNO IN (SELECT ENQUIRYNO FROM ENROLLMENT WHERE BATCHCODE=11001);/--3)LIST NAME OF PERSONS ENROLLED IN SPECIFIED COURSE

SELECT FNAME FROM ENQUIRY E1,ENROLLMENT EN1 WHERE E1.ENQUIRYNO=EN1.ENQUIRYNO AND EN1.BATCHCODE IN(SELECT BATCHCODE FROM BATCH WHERE COURSECODE=10);/--3)ASSUMING ONE PERSON IS ENROLLED IN MULTIPLE BATCHES,LIST ALL PERSONS --ENROLLED IN ALL THOSE BATCHES WHERE SOMESH HAS ENROLLED;

SELECT FNAME FROM ENQUIRY E1 WHERE NOT EXISTS((SELECT EN2.BATCHCODE FROM ENQUIRY E2,ENROLLMENT EN2 WHERE E2.FNAME='SOMESH' AND E2.ENQUIRYNO=EN2.ENQUIRYNO) MINUS SELECT EN3.BATCHCODE FROM ENQUIRY E3,ENROLLMENT EN3 WHERE E3.ENQUIRYNO=EN3.ENQUIRYNO AND E3.FNAME=E1.FNAME));/--4)ASSUMING ONE PERSON IS ENROLLED IN MULTIPLE COURSES,LIST NAME OF PERSONS ENROLLED IN ALL THOSE BATCHES.

SELECT FNAME FROM ENQUIRY E1 WHERE NOT EXISTS((SELECT EN2.BATCHCODE FROM ENQUIRY E2,ENROLLMENT EN2 WHERE E2.FNAME='ANIL' AND E2.ENQUIRYNO=EN2.ENQUIRYNO) MINUS (SELECT EN3.BATCHCODE FROM ENQUIRY E3,ENROLLMENT EN3 WHERE E3.ENQUIRYNO=EN3.ENQUIRYNO AND E3.FNAME=E1.FNAME))/Assuming one person is enrolled in multiple batches, list persons enrolled in all those batches where ANIL has enrolled.

SQL>SELECT E1.FNAME 2 FROM ENQUIRY E1 3 WHERE NOT EXISTS 4 ((SELECT B1.COURSECODE 5 FROM BATCH B1,ENROLLMENT EN1,ENQUIRY E2 6 WHERE B1.BATCHCODE = EN1.BATCHCODE 7 AND EN1.ENQUIRYNO = E2.ENQUIRYNO 8 AND E2.FNAME = ’ANIL’)

Page 65: SQL Oracle

9 MINUS 10 (SELECT B2.COURSECODE 11 FROM BATCH B2,ENROLLMENT EN2 12 WHERE B2.BATCHCODE = EN2.BATCHCODE 13 AND EN2.ENQUIRYNO = E1.ENQUIRYNO));

/List names of students who have not paid any fees.

SQL>SELECT FNAME 2 FROM ENQUIRY E1 3 WHERE ENROLLSTATUS = ’Y’ 4 AND 5 NOT EXISTS 6 (SELECT * FROM ENROLLMENT EN1,FEESPAID F1 7 WHERE EN1.ENQUIRYNO = E1.ENQUIRYNO 8 AND EN1.ROLLNO = F1.ROLLNO);

/--8)LIST NAME OF PERSONS ENROLLED IN BATCH HAVING STARTING DATE MORE--THAN SPECIFIED DATE. SELECT FNAME FROM ENQUIRY E1,ENROLLMENT EN1,BATCH B1 WHERE E1.ENQUIRYNO=EN1.ENQUIRYNO AND EN1.BATCHCODE=B1.BATCHCOD AND EXISTS(SELECT * FROM BATCH B2 WHERE STARTINGDATE>'23-JAN-99' AND B2.BATCHCODE=B1.BATCHCODE );/--9. LIST NAME OF STUDENTS LIVING IN NAGPUR AND ENROLLED IN COURSE 10. SELECT FNAME FROM ENQUIRY E1 WHERE E1.CITY='NAGPUR' AND EXISTS(SELECT * FROM ENROLLMENT EN1,BATCH B1 WHERE EN1.BATCHCODE=B1.BATCHCODE AND EN1.ENQUIRYNO=E1.ENQUIRYNO AND B1.COURSECODE=10);/=================================================================================

SQL\Ch08\Assign5

--1) LIST AVG AMOUNT OF EACH BATCH;SELECT COURSECODE, AVG(NETINCOME) FROM BATCH GROUP BY BATCH.COURSECODE ;/-- 2. LIST NAME OF BATCH HAVING AVG ANOUNT >1000.

SELECT BATCHCODE FROM BATCH GROUP BY BATCH.BATCHCODE HAVING AVG(BATCH.NETINCOME)>1000;/3)FIND OUT NAME OF COURSE HAVING MAXIMUM NETINCOMECOME SELECT C.COURSENAME FROM COURSE C WHERE C.COURSECODE IN(SELECT B.COURSECODE FROM BATCH B GROUP BY B.COURSECODE HAVING SUM(B.NETINCOME)>=ALL ( SELECT SUM(B1.NETINCOME)FROM BATCH B1 GROUP BY (B1.COURSECODE))) ;/--4)FIND OUT NAME OF COURSE HAVING MAXIMUM DIFFERENCE OF NETINCOMECOME

Page 66: SQL Oracle

AND EXPECTED INCOME. SELECT C.COURSENAME FROM COURSE C WHERE C.COURSECODE IN(SELECT B.COURSECODE FROM BATCH B GROUP BY B.COURSECODE HAVING (SUM(B.EXPECTEDINCOME)-SUM(B.NETINCOME))>=ALL ( SELECT (SUM(B1.EXPECTEDINCOME)-SUM(B1.NETINCOME))FROM BATCH B1 GROUP BY (B1.COURSECODE))) ;/--5). FIND OUT TOTAL FEES PAID BY A PARTICULAR STUDENT. SELECT SUM(AMOUNT) FROM FEESPAID WHERE ROLLNO = 11001100;/--6)FIND OUT DIFFERENCE BETWEEN EXPECTED FEES AND TOTAL FEES FOR A --PARTICULAR ROLL NUMBER. SELECT (BATCH.COURSEFEES-F1.TOTAL) FROM (SELECT ROLLNO ROLLNO1, SUM(AMOUNT) TOTAL FROM FEESPAID GROUP BY (ROLLNO)) F1 ,BATCH,ENROLLMENT WHERE F1.ROLLNO1=ENROLLMENT.ROLLNO AND ENROLLMENT.BATCHCODE=BATCH.BATCHCODE AND F1.ROLLNO1=11001100;/--7)FIND OUT COURSE WISE INCOME. SELECT A.COURSECODE,SUM(B.NETINCOME) FROM COURSE A,BATCH B WHERE A.COURSECODE=B.COURSECODE GROUP BY A.COURSECODE;/--8)FIND OUT SUM OF FEES AND ROLLNO FOR A SEPCIFIED COURSE; SELECT D.ROLLNO,SUM(A.AMOUNT) FROM FEESPAID A,COURSE B,BATCH C,ENROLLMENT D WHERE B.COURSENAME='JAVA' AND A.ROLLNO=D.ROLLNO AND D.BATCHCODE=C.BATCHCODE AND C.COURSECODE=B.COURSECODE GROUP BY D.ROLLNO/--9) FIND OUT TOTAL AMOUNT COLLECTED

SELECT COUNT(ENQUIRYNO) FROM ENQUIRY WHERE COURSECODE=11 /--10) FIND OUT NUMBER OF ENQUIRES FOR A SPECIFIED ADVERTISEMENT CODE SELECT COUNT(ENQUIRYNO) FROM ENQUIRY WHERE ADVCODE=11 /--11)FIND OUT NUMBER OF ENQUIRES FOR SPECIFIED COURSE SELECT COUNT(ENQUIRYNO) FROM ENQUIRY WHERE COURSECODE=11/=================================================================================

SQL\Ch08\Assign6

--1) FIND OUT SUM OF AMOUNT COLLECTED MONTHWISE.

SELECT TO_CHAR(A.PAYDATE,'MM'),TO_CHAR(A.PAYDATE,'MON'), SUM(A.AMOUNT) FROM FEESPAID A GROUP BY TO_CHAR(A.PAYDATE,'MM'),TO_CHAR(A.PAYDATE,'MON') ORDER BY 1;

Page 67: SQL Oracle

/--2)FIND OUT SUM OF AMOUNT COLLECTED WEEKLY (YEARLY WEEK).

SELECT TO_CHAR(PAYDATE,'IW'),SUM(AMOUNT) FROM FEESPAID GROUP BY TO_CHAR(PAYDATE,'IW');/--3. FIND OUT MONTHLY ,WEEKLY INCOME. SELECT TO_CHAR(PAYDATE,'MON'),TO_CHAR(PAYDATE,'W'),SUM(AMOUNT) FROM FEESPAID GROUP BY TO_CHAR(PAYDATE,'MON'),TO_CHAR(PAYDATE,'W') / --4)FIND OUT ROLL NO AND NAME OF STUDENT WHO HAS NOT PAID AMOUNT ACCORDING TO THEIR INSTALLMENT DATE

SELECT EN1.ROLLNO,E1.FNAME FROM ENROLLMENT EN1,ENQUIRY E1,INSTALLMENT I1 WHERE EN1.ENQUIRYNO=E1.ENQUIRYNO AND EN1.ROLLNO=I1.ROLLNO AND NOT EXISTS (SELECT * FROM FEESPAID F1 WHERE I1.ROLLNO=F1.ROLLNO AND I1.AMOUNT=F1.AMOUNT AND I1.INDATE=F1.PAYDATE) /--5.FIND OUT EXPENDITURE MONTHWISE.

SELECT TO_CHAR(EXPDATE,'MM'),TO_CHAR(EXPDATE,'MON'), SUM(AMOUNT) FROM EXPENDITUREGROUP BY TO_CHAR(EXPDATE,'MM'),TO_CHAR(EXPDATE,'MON') ORDER BY 1;/--6) FIND OUT ENROLLMENT DATEWISE FOR PREVIOUS 15 DAYS.

SELECT A.ENROLLDATE, TO_DATE(SYSDATE)- A.ENROLLDATE,COUNT(A.ROLLNO) FROM ENROLLMENT A WHERE TO_DATE(SYSDATE)-A.ENROLLDATE BETWEEN 1 AND 15 AND BATCHCODE=1003 GROUP BY A.ENROLLDATE, TO_DATE(SYSDATE)- A.ENROLLDATE ORDER BY 1;/--7) FIND OUT QUARTERLY INCOME FOR SPECIFIED COURSE.

SELECT TO_CHAR(STARTINGDATE,'Q'),SUM(NETINCOME) FROM BATCH WHERE BATCHCODE=11001 GROUP BY TO_CHAR(STARTINGDATE,'Q')/--8) FIND OUT MONTHLY AVG INCOME AND AVG EXPENDITURE.

SELECT TO_CHAR(PAYDATE,'MM'),TO_CHAR(PAYDATE,'MON'), AVG(AMOUNT)FROM FEESPAIDGROUP BY TO_CHAR(PAYDATE,'MM'),TO_CHAR(PAYDATE,'MON')ORDER BY 1;/--9) CALULATE DATEWISE REPONSE FOR AN ADVERTISEMENT. SELECT TO_CHAR(ENQDATE),JDAD.REFCODE,COUNT(ENQUIRYNO) FROM ADVERTISEMENT JDAD,ENQUIRY WHERE JDAD.REFCODE=ENQUIRY.REFCODE GROUP BY TO_CHAR(ENQDATE),JDAD.REFCODE ORDER BY 2;

Page 68: SQL Oracle

/================================================================================= SQL\Ch08\Assign7

--1) FIND OUT DETAILS OF PERSONS HAVING SPELLING LIKE VIJAY. SELECT * FROM ENQUIRY WHERE FNAME LIKE 'VIJAY' /--2) FIND OUT NUMBER OF PERSONS WHOSE NAME STARTS WITH 'J'.

SELECT COUNT(FNAME) FROM ENQUIRY WHERE FNAME LIKE ‘J%';/--3)REPLACE ALL NAME WITH FIRST CHARACTER CAPITALAND OTHER LOWER CASES.

SELECT INITCAP(FNAME),INITCAP(LNAME) FROM ENQUIRY UPDATE ENQUIRY SET FNAME=INITCAP(FNAME);/-- 4) DISPLAY AMOUNT IN FORMAT RS 99,999,99.

SELECT TO_CHAR(NETINCOME,'09,999,99') FROM BATCH /5) PRODUCE STATICSTICS OF FEES COLLECTED ASLOW HIGH NO OF STUDENTS1 1000 31001 2000 5

SELECT TRUNC(A.AMOUNT,-3) + 1, ROUND((TRUNC(A.AMOUNT,- 3)+500),-3),COUNT(*) FROM FEESPAID A 3* GROUP BY TRUNC(A.AMOUNT,-3), ROUND((TRUNC(A.AMOUNT,- 3)+500),-3);/--6) FIND STATISTICS FOR A PARTICULAR COURSE. SELECT TRUNC(A.AMOUNT,-3), ROUND((TRUNC(A.AMOUNT,-3)+500),- 3),COUNT(*) FROM FEESPAID A,ENROLLMENT B,BATCH C WHERE A.ROLLNO=B.ROLLNO AND B.BATCHCODE=C.BATCHCODE AND C.COURSECODE=10 GROUP BY TRUNC(A.AMOUNT,-3), ROUND((TRUNC(A.AMOUNT,-3)+500),-3); /8) FIND OUT CLOSING AMOUNT FOR EACH BATCH

SELECT P1.PAYDATE,SUM(P2.AMOUNT) FROM FEESPAID P1,FEESPAID P2 WHERE P1.PAYDATE>=P2.PAYDATE GROUP BY P1.PAYDATE ORDER BY 1;/=================================================================================

SQL\Ch08\Assign8

--1) delete all rows from course delete course;/--1) delete all rows from course

Page 69: SQL Oracle

delete course;/--2) delete all rows from BATCH having specified BATCHCODE delete BATCH where BATCHCODE=11001;/--3) delete all rows from BATCH which is not having any specified expected income delete BATCH where EXPECTEDINCOME=0;/--4) delete all rows from enq for a specified coursename delete enquiry where coursecode in select coursecode from course where coursename='oracle');/--5)delete all rows from enq which are six months before --systime and are not having enrollment. delete enquiry where months_between(SYSDATE,ENQDATE)>6 and ENROLLSTATUS='n';/--6) update BATCH set NETINCOME according to feespaid;

UPDATE BATCH B SET B.NETINCOME=(SELECT SUM(AMOUNT) FROM FEESPAID F1,ENROLLMENT EN1,BATCH B1 WHERE F1.ROLLNO=EN1.ROLLNO AND EN1.BATCHCODE=B1.BATCHCODE AND B1.BATCHCODE=B.BATCHCODE) WHERE EXISTS (SELECT * FROM FEESPAID F2,ENROLLMENT EN2,BATCH B2 WHERE F2.ROLLNO=EN2.ROLLNO AND EN2.BATCHCODE=B2.BATCHCODE AND B2.BATCHCODE=B.BATCHCODE);/--7) UPDATE SET EXPECTED INCOME FROM INSTALLMENT update BATCH d set EXPECTEDINCOME=(select sum(a.AMOUNT) from INSTALLEMENT a,ENROLLMENT b,BATCH c where a.ROLLNO=b.ROLLNO and b.BATCHCODE=c.BATCHCODE and b.BATCHCODE=d.BATCHCODE) where d.BATCHCODE in (SELECT BATCHCODE from ENROLLMENT,INSTALLEMENT WHERE ENROLLMENT.ROLLNO=INSTALLEMENT.ROLLNO AND ENROLLMENT.BATCHCODE=d.BATCHCODE);/--8)UPDATE LASTNO OF COURSE HAVING DATA FROM BATCH. UPDATE COURSE C1 SET C1.LASTNO=(SELECT COUNT(*) FROM BATCH B1 WHERE B1.COURSECODE=C1.COURSECODE) WHERE C1.COURSECODE IN (SELECT B2.COURSECODE FROM BATCH B2

Page 70: SQL Oracle

WHERE B2.COURSECODE=C1.COURSECODE);/--9) DELETE DUPLICATE ROWS FROM ENQUIRY.

DELETE ENQUIRY A WHERE A.ROWID NOT IN (SELECT MAX(A1.ROWID) FROM ENQUIRY A1 WHERE A1.ENQUIRYNO=A.ENQUIRYNO);/=================================================================================

SQL\Ch09

1. Suppose data is T Sn Amt n(2) n(4) 1 100 4 300 7 200 produce the output Sn ClAmt 1 100 4 400 7 600

2. For the above query find our Sn for which clamt is maximum

3. Suppose data is T Sn Amt 1 100 4 300 7 200 11 400 15 150

Find out Sn where Amount is 3rd maximum ( Sn=7)

4 Suppose data is T Sn Amt 1 100 4 300 4 300 11 400 15 150

delete duplicate rows and produce Sn Amt 1 100 4 300 11 400 15 150

5 Suppose data is company cname city ACC NGP ACC CAL HLL NGP HLL MUM TATA NGP

Page 71: SQL Oracle

TATA CAL TATA DLHFind out name of companies located in all those citieswhere ACC is located(TATA).

Solution: 1

SQL> create table t (sn number(2),amt number(4

Table created.

SQL> insert into T values(&sn,&amt);Enter value for sn: 1Enter value for amt: 100old 1: insert into T values(&sn,&amt)new 1: insert into T values(1,100)

1 row created.

SQL> edit sql_advanced_queries

SQL> /Enter value for sn: 4Enter value for amt: 300old 1: insert into T values(&sn,&amt)new 1: insert into T values(4,300)

1 row created.

SQL> /Enter value for sn: 7Enter value for amt: 200old 1: insert into T values(&sn,&amt)new 1: insert into T values(7,200)

1 row created.

SQL> commit;

SQL> select t1.sn,t1.amt,t2.sn,t2.amt from t t1,t t2;

SN AMT SN AMT--------- --------- --------- --------- 1 100 1 100 4 300 1 100 7 200 1 100 1 100 4 300 4 300 4 300 7 200 4 300 1 100 7 200 4 300 7 200 7 200 7 200

9 rows selected.

Now you apply the condition t1.sn > t2.sn

SQL> select t1.sn,t1.amt,t2.sn,t2.amt from t t1,t t2 where t1.sn >=t2.sn;

SN AMT SN AMT

Page 72: SQL Oracle

--------- --------- --------- --------- 1 100 1 100 4 300 1 100 7 200 1 100 4 300 4 300 7 200 4 300 7 200 7 200

Now make group by t1.sn and take sum(t2.amt)

1 select t1.sn,sum(t2.amt) 2 from t t1,t t2 3 where t1.sn >=t2.sn 4* group by t1.snSQL> /

SN SUM(T2.AMT)--------- ----------- 1 100 4 400 7 600

2. For the above query find our Sn for which clamt is maximum

use the above solution and in

3. Suppose data is T Sn Amt 1 100 4 300 7 200

Find out Sn where Amount is 3rd maximum ( Sn=1)SQL> select t1.sn,t1.amt,t2.sn,t2.amt from t t1,t t2;

SN AMT SN AMT--------- --------- --------- --------- 1 100 1 100 4 300 1 100 7 200 1 100 1 100 4 300 4 300 4 300 7 200 4 300 1 100 7 200 4 300 7 200 7 200 7 200

9 rows selected.

SQL> select t1.sn,t1.amt,t2.sn,t2.amt from t t1,t t2 where t1.amt < t2.amt;

SN AMT SN AMT--------- --------- --------- --------- 1 100 4 300 7 200 4 300 1 100 7 200

Page 73: SQL Oracle

SQL> select t1.sn,count(t1.amt) from t t1,t t2 where t1.amt < t2.amt group by t1.sn;

SN COUNT(T1.AMT)--------- ------------- 1 2 7 1

SQL> select t1.sn,count(t1.amt) from t t1,t t2 where t1.amt < t2.amt group by t1.sn having count(t1.amt) = 2;

SN COUNT(T1.AMT)--------- ------------- 1 2

4 Suppose data is T Sn Amt 1 100 4 300 4 300 11 400 15 150

delete duplicate rows and produce Sn Amt 1 100 4 300 11 400 15 150

delete t t1 where t1.rowid > any (select rowid from t t2 where t1.sn=t2.sn and t1.amt = t2.amt) or delete t t1 where 1 <= (select count(*) from t t2 where t2.sn=t1.sn and t2.amt = t1.amt and t2.rowid > t1.rowid)

5 Suppose data is company cname city ACC NGP ACC CAL HLL NGP HLL MUM TATA NGP TATA CAL TATA DLHFind out name of companies located in all those citieswhere ACC is located(TATA). (Hint use not exists and minus)

SELECT DISTINCT(CNAME) FROM COMPANY WHERE CNAME<>'TATA' AND CITY IN (SELECT CITY FROM COMPANY CMP1WHERE CMP1.CNAME='TATA');/

Page 74: SQL Oracle

tree structured query/hierachical query

SQL> select * from manager;

ENAME MNAME ---------- ---------- Anil Ajay Shankar Vijay Jaya Sunil Jaya Vijay Prakash Shankar Ajay

7 rows selected.

SQL> select ename,mname from manager connect by prior ename=mname start with ename='Vijay';

ENAME MNAME ---------- ---------- Vijay Shankar Vijay Prakash Shankar

SQL> editWrote file afiedt.buf

1* select * from manager connect by prior mname=ename start with ename='Vijay'SQL> /

ENAME MNAME ---------- ---------- Vijay

SQL> spool off

SQL> editWrote file afiedt.buf

1* select level,ename,mname from manager connect by prior mname=ename start with ename='Prakash'SQL> /

LEVEL ENAME MNAME--------- ---------- ---------- 1 Prakash Shankar 2 Shankar Vijay 3 Vijaypsedocolumn => level 1* select level,ename,mname from manager connect by prior ename=mname start with ename='Vijay'SQL> /

LEVEL ENAME MNAME--------- ---------- ---------- 1 Vijay 2 Shankar Vijay 3 Prakash Shankar 2 Abhay Vijay

SQL> editWrote file afiedt.buf

Page 75: SQL Oracle

count number of employees at each level

1 select level,count(ename) from manager connect by prior ename=mname start with ename='Vijay' 2* group by levelSQL> /

LEVEL COUNT(ENAME)--------- ------------ 1 1 2 2 3 1

Try these examples

1.Find out number of employees working under Vijay directly or indirectly2.Find out name of employees working under Vijay at level 3

2. select level,ename,mname from manager where level = 3 connect by prior ename=mname start with ename='Vijay' /

LEVEL ENAME MNAME----- ---------- ---------- 3 Prakash Shankar 3 Sachin Abhay

/=================================================================================

SQL\Ch10

CHECK CONSTRAINT

## CHECK CONSTRAINT TESTS WHETHER CONDITION IS SATISFIED BY DML OPERATION

1 create table ch_con1(a number(2),b number(2),c number(2), 2* constraint ck_con1 check(a > 20),constraint ck_con2 check ((a+b)>50) )SQL> /

Table created.

SQL> insert into ch_con1 values (10,20,40);insert into ch_con1 values (10,20,40)*ERROR at line 1:ORA-02290: check constraint (PSD.CK_CON2) violated

SQL> insert into ch_con1 values(5,60,70);insert into ch_con1 values(5,60,70)*ERROR at line 1:ORA-02290: check constraint (PSD.CK_CON1) violated

SQL> insert into ch_con1 values(30,60,70);

Page 76: SQL Oracle

1 row created.

## YOU CAN NOT MENTION SYSTEM DATE OR VARIABLES IN CHECK CONSTRAINTSQL> create table ch_con2(a date,b number(2), 2 constraint ck_ch_con2 check (a < sysdate));constraint ck_ch_con2 check (a < sysdate)) *ERROR at line 2:ORA-02436: date or system variable wrongly specified in CHECK constraint

SQL> alter table ch_con1 disable constraint ck_con1;

Table altered.

SQL> insert into ch_con1 values(2,50,30);

1 row created.

## CHECK CONSTRAINT CAN BE ENABLE USING NOVALIDATE OPTION EVEN IF DATA IS NOT ACCORDING ## TO CONSTRAINT

SQL> editWrote file afiedt.buf

1* alter table ch_con1 enable novalidate constraint ck_con1SQL> /

Table altered.

SQL> insert into ch_con1 values(2,50,30);insert into ch_con1 values(2,50,30)*ERROR at line 1:ORA-02290: check constraint (PSD.CK_CON1) violated

SQL> spool off/create table defer_con(a number(2),b number(2), constraint pk_defer_con primary key (a) initially deferred , constraint ck_defer_con check (b > 5))/

deferred constraints

## Deferred constraints are imposed at the end of transaction if data is not according to constraint then the whole transaction is rolled back## immediate constraint is imposed at the end of dml statement.

SQL> create table defer_con(a number(2),b number(2), 2 constraint pk_defer_con primary key (a) initially deferred , 3 constraint ck_defer_con check (b > 5));

Table created.

SQL> insert into defer_con values(1,7);

Page 77: SQL Oracle

1 row created.

SQL> insert into defer_con values(2,8);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from defer_con;

A B --------- --------- 1 7 2 8

SQL> insert into defer_con values(3,8);

1 row created.

SQL> insert into defer_con values(1,9);

1 row created.

SQL> commit;commit*ERROR at line 1:ORA-02091: transaction rolled back ORA-00001: unique constraint (PSD.PK_DEFER_CON) violated

SQL> select * from defer_con;

A B --------- --------- 1 7 2 8

## DEFAULT SETTING OF CONSTRAINT IS "NOT DEFERRABLE" AND " IMMEDIATE"

SQL> blockterminator "." (hex 2e)linesize 100linesize 1000select * from user_constraints where TABLE_NAME LIKE 'DEFER_CON%';

OWNER CONSTRAINT_NAME C TABLE_NAME SEARCH_CONDITION R_OWNER R_CONSTRAINT_NAME DELETE_RU STATUS DEFERRABLE DEFERRED VALIDATED GENERATED BAD RELY LAST_CHAN ------------------------------ ------------------------------ - ------------------------------ -------------------------------------------------------------------------------- ------------------------------ ------------------------------ --------- -------- -------------- --------- ------------- -------------- --- ---- --------- PSD CK_DEFER_CON C DEFER_CON b > 5 ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED USER NAME 09-JAN-02 PSD PK_DEFER_CON P DEFER_CON ENABLED DEFERRABLE DEFERRED VALIDATED USER NAME 09-JAN-02

## THE CONSTRAINT WHICH IS DEFERREBLE CAN BE MADE IMMEDIATE OR DEFERRED USING SET COMMAND

Page 78: SQL Oracle

SQL> SET CONSTRAINT PK_DEFER_CON IMMEDIATE;

Constraint set.

SQL> INSERT INTO DEFER_CON VALUES(1,8);INSERT INTO DEFER_CON VALUES(1,8)*ERROR at line 1:ORA-00001: unique constraint (PSD.PK_DEFER_CON) violated

SQL> SET CONSTRAINT PK_DEFER_CON DEFERRED;

Constraint set.

SQL> INSERT INTO DEFER_CON VALUES(1,8);

1 row created.

SQL> COMMIT;COMMIT*ERROR at line 1:ORA-02091: transaction rolled back ORA-00001: unique constraint (PSD.PK_DEFER_CON) violated

##THE CONSTRAINT WHICH IS "NOT DEFERREBLE" CAN BE MADE IMMEDIATE OR DEFERRED USING SET COMMAND## IT IS HAVING SETTING IMMEDIATESQL> SET CONSTRAINT CK_DEFER_CON DEFERRED;set CONSTRAINT CK_DEFER_CON DEFERRED*ERROR at line 1:ORA-02447: cannot defer a constraint that is not deferrable ## SETTING FOR "initially IMMDEDIATE" AND " DEFERRABLE"

create table defer_con(a number(2),b number(2), 2 constraint pk_defer_con primary key (a) initially IMMDEDIATE DEFERRABLE , 3 constraint ck_defer_con check (b > 5));

SQL> SPOOL OFF/ EXCEPTION TABLE ## SCRIPT UTLEXCPT rdbms/admin

create table exceptions(row_id rowid,

owner varchar2(30), table_name varchar2(30),

constraint varchar2(30));

SQL> CREATE TABLE CON_EXCEPT(A NUMBER(2),B NUMBER(2), 2 CONSTRAINT PK_CON_EXCEPT PRIMARY KEY (A), 3 CONSTRAINT CK_CON_EXCEPT CHECK(B > 5) );

Table created.

SQL> INSERT INTO CON_EXCEPT VALUES(1,7);

1 row created.

SQL> ALTER TABLE CON_EXCEPT DISABLE CONSTRAINT PK_CON_EXCEPT;

Page 79: SQL Oracle

Table altered.

SQL> ALTER TABLE CON_EXCEPT DISABLE CONSTRAINT CK_CON_EXCEPT;

Table altered.

SQL> INSERT INTO CON_EXCEPT VALUES(1,8);

1 row created.

SQL> INSERT INTO CON_EXCEPT VALUES(2,2);

1 row created.

## ROWS ARE APPENDED IN EXCEPTION TABLE AND CONSTRAINT IS NOT VALIDATED

SQL> ALTER TABLE CON_EXCEPT ENABLE CONSTRAINT PK_CON_EXCEPT EXCEPTIONS 2 INTO EXCEPTIONS; ALTER TABLE CON_EXCEPT ENABLE CONSTRAINT PK_CON_EXCEPT EXCEPTIONS*ERROR at line 1:ORA-02437: cannot validate (PSD.PK_CON_EXCEPT) - primary key violated

SQL> EDITWrote file afiedt.buf

1 ALTER TABLE CON_EXCEPT ENABLE CONSTRAINT CK_CON_EXCEPT EXCEPTIONS 2* INTO EXCEPTIONSSQL> / ALTER TABLE CON_EXCEPT ENABLE CONSTRAINT CK_CON_EXCEPT EXCEPTIONS *ERROR at line 1:ORA-02293: cannot validate (PSD.CK_CON_EXCEPT) - check constraint violated

SQL> SELECT * FROM EXCEPTIONS;

ROW_ID OWNER TABLE_NAME CONSTRAINT ------------------ ------------------------------ ------------------------------ ------------------------------ AAAVJ6AAIAAALTLAAA PSD CON_EXCEPT PK_CON_EXCEPT AAAVJ6AAIAAALTLAAB PSD CON_EXCEPT PK_CON_EXCEPT AAAVJ6AAIAAALTLAAC PSD CON_EXCEPT CK_CON_EXCEPT

SQL> SELECT * FROM CON_EXCEPT WHERE ROWID IN (SELECT ROW_ID FROM EXCEPTIONS);

A B --------- --------- 1 7 1 8 2 2

SQL> EDITWrote file afiedt.buf

1 SELECT T.A,T.B,R.CONSTRAINT 2 FROM CON_EXCEPT T , EXCEPTIONS R 3* WHERE T.ROWID=R.ROW_IDSQL> /

Page 80: SQL Oracle

A B CONSTRAINT --------- --------- ------------------------------ 1 7 PK_CON_EXCEPT 1 8 PK_CON_EXCEPT 2 2 CK_CON_EXCEPT

SQL> SPOOL OFF/

Foreign Key

student(rollno,name)student_marks(rollno,subject,marks) rollno is foreign key

SQL> create table parent(a number(2),b number(2),c number(2),constraint uk_parent unique(a,b));

Table created.

SQL> insert into parent values(1,1,1);

1 row created.

SQL> insert into parent values(2,2,2);

1 row created.

### foreign key columns (a,b) in child table references unique key or primary key## in parent table . default is primary key i.e if onle parent table is mentioned

Wrote file afiedt.buf

1 create table child(a number(2),b number(2),d number(2),constraint fk_child foreign 2* key (a,b) references parent(a,b) on delete cascade)SQL> /

Table created.

SQL> insert into child values(1,1,5);

1 row created.## it will not accept values which are not in parent table

SQL> insert into child values(1,2,4);insert into child values(1,2,4)*ERROR at line 1:ORA-02291: integrity constraint (PSD.FK_CHILD) violated - parent key not found

SQL> insert into child(2,2,3);insert into child(2,2,3) *ERROR at line 1:ORA-00928: missing SELECT keyword

SQL> insert into child values(2,2,4);

1 row created.

SQL> insert into child values(2,2,7);

1 row created.

Page 81: SQL Oracle

## if there is null value in any of the foreign key column it is accepted## match none implementation## if parent row is 1 1 1 then following rows are accepted in child rows according to ## type of implementation

## match full => (1,1,4) or (null,null,4)## match partial => above rows + (null,1,5) or (1,null,3)## match none => above rows+ all rows having one null value in any foreign key column## oracle uses match none implementation

SQL> insert into child values(null,5,6);

1 row created.

SQL> select * from parent;

A B C --------- --------- --------- 1 1 1 2 2 2

SQL> select * from child;

A B D --------- --------- --------- 1 1 5 2 2 4 2 2 7 5 6 ## on delete cascade means if parent row is deleted corrosponding child rows are also deleted

SQL> delete parent where a=2;

1 row deleted.

SQL> select * from child;

A B D --------- --------- --------- 1 1 5 5 6

## set to nullSQL> alter table child drop constraint fk_child;

Table altered.

1 alter table child add constraint fk_child foreign key (a,b) references parent(a,b) 2* on delete set nullSQL> /

Table altered.

SQL> select * from parent;

A B C--------- --------- --------- 1 1 1

Page 82: SQL Oracle

SQL> select * from child;

A B D--------- --------- --------- 1 1 5 5 6

SQL> delete parent;

1 row deleted.

SQL> select * from child;

A B D--------- --------- --------- 5 5 6

SQL> ## set to default is not implementedSQL> create table child_2(a number(2) default 1,b number(2) default 1,c number(2), 2 constraint fk_child_2 foreign key (a,b) references parent(a,b) on delete set default);constraint fk_child_2 foreign key (a,b) references parent(a,b) on delete set default) *ERROR at line 2:ORA-03001: unimplemented feature

Wrote file afiedt.buf

1 create table child_2(a number(2) default 1,b number(2) default 1,c number(2), 2* constraint fk_child_2 foreign key (a,b) references parent(a,b))SQL> /

Table created.

# #default means if no value is mentioned then default value is assumed instead of null value

SQL> insert into child_2(c) values(4);

1 row created.

SQL> select * from child_2;

A B C--------- --------- --------- 1 1 4

## if null is explicitly mentioned then it is inserted

SQL> insert into child_2 values(null,null,5);

1 row created.

SQL> select * from child_2;

A B C--------- --------- --------- 5

SQL> drop table child_2;

Table dropped.

Page 83: SQL Oracle

#on update cascad is not implemented

SQL> create table child_2(a number(2) default 1,b number(2) default 1,c number(2), 2 constraint fk_child_2 foreign key (a,b) references parent(a,b) on update cascade);constraint fk_child_2 foreign key (a,b) references parent(a,b) on update cascade) *ERROR at line 2:ORA-00905: missing keyword

SQL> editSQL> alter table child disable constraint fk_child;

Table altered.

SQL> insert into child values(1,4,5);

1 row created.

SQL> alter table child enable constraint fk_child;alter table child enable constraint fk_child *ERROR at line 1:ORA-02298: cannot validate (PSD.FK_CHILD) - parent keys not found

## foreign key constraint is enabled with novalidate option even if data is not## according to constraint## the constraints are enforced on next dml operations##later on existing data can be validated using enable validate

SQL> alter table child enable novalidate constraint fk_child;

Table altered.

SQL> insert into child values(1,4,5);insert into child values(1,4,5)*ERROR at line 1:ORA-02291: integrity constraint (PSD.FK_CHILD) violated - parent key not found

SQL> alter table child enable validate constraint fk_child;alter table child enable validate constraint fk_child *ERROR at line 1:ORA-02298: cannot validate (PSD.FK_CHILD) - parent keys not found

SQL> delete child where b=4;

1 row deleted.

SQL> alter table child enable validate constraint fk_child;

Table altered.

SQL> spool off/## you can not drop the parent table if child table is in existance

SQL> drop table parent;

Page 84: SQL Oracle

drop table parent *ERROR at line 1:ORA-02449: unique/primary keys in table referenced by foreign keys

SQL> drop table child;

Table dropped.

SQL> drop table parent;

Table dropped./

Integrity Constraints

1* create table con1(a number(4) not null,b number(4))SQL> /

Table created.

SQL> desc con1 Name Null? Type ------------------------------- -------- ---- A NOT NULL NUMBER(4) B NUMBER(4)

SQL> insert into con1 values(3,6);

1 row created.

SQL> insert into con1 values(null,4);insert into con1 values(null,4) *ERROR at line 1:ORA-01400: cannot insert NULL into ("PSD"."CON1"."A")

SQL> insert into con1(b) values(4);insert into con1(b) values(4) *ERROR at line 1:ORA-01400: cannot insert NULL into ("PSD"."CON1"."A")

SQL> alter table con1 modify(a null);

Table altered.

SQL> insert into con1 values(null,4);

1 row created.

SQL> alter table con1 modify(a not null);alter table con1 modify(a not null)*ERROR at line 1:ORA-02296: cannot enable (PSD.) - null values found

Page 85: SQL Oracle

SQL> delete con1 where a is null;

1 row deleted.

SQL> alter table con1 modify(a not null);

Table altered.

SQL> insert into con1 values(null,4); insert into con1 values(null,4) *ERROR at line 1:ORA-01400: cannot insert NULL into ("PSD"."CON1"."A")

SQL> spool off/ Primary Key

#######column style constraint definition

SQL> create table pk_con1(a number(4) primary key,b number(4));

Table created.

######## Table style constraint definition recommended SQL> create table pk_con2(a number(4),b number(4), 2 constraint pk_con2 primary key(a));

Table created.

SQL> editWrote file afiedt.buf

1 create table pk_con3(a number(4),b number(4),c number(4), 2* constraint pk_con2 primary key(a,c))SQL> /constraint pk_con2 primary key(a,c)) *ERROR at line 2:ORA-02264: name already used by an existing constraint

#### composite primary key (a,c)

SQL> editWrote file afiedt.buf

1 create table pk_con3(a number(4),b number(4),c number(4), 2* constraint pk_con3 primary key(a,c))SQL> /alter table pk_con3 add constraint pk_con3 primary key(a,c))/

Table created.

1 4 61 3 81 7 6null 3 2

Page 86: SQL Oracle

###### null values are not accepted in primary key columns

SQL> insert into pk_con2 values(3,7);

1 row created.

SQL> insert into pk_con2 values(null,4);insert into pk_con2 values(null,4) *ERROR at line 1:ORA-01400: cannot insert NULL into ("PSD"."PK_CON2"."A")

###### Duplicate values are not accepted

SQL> insert into pk_con2 values(3,9);insert into pk_con2 values(3,9)*ERROR at line 1:ORA-00001: unique constraint (PSD.PK_CON2) violated

SQL> insert into pk_con3 values(3,4,7);

1 row created.

SQL> insert into pk_con3 values(null,2,7);insert into pk_con3 values(null,2,7) *ERROR at line 1:ORA-01400: cannot insert NULL into ("PSD"."PK_CON3"."A")

###### for composite primary key(a,c) uniqueness is determined by combination

SQL> insert into pk_con3 values(3,6,7);insert into pk_con3 values(3,6,7)*ERROR at line 1:ORA-00001: unique constraint (PSD.PK_CON3) violated

SQL> insert into pk_con3 values(3,5,8);

1 row created.

SQL> select * from pk_con3;

A B C --------- --------- --------- 3 4 7 3 5 8

SQL> alter table disable constraint pk_con3;alter table disable constraint pk_con3 *ERROR at line 1:ORA-01735: invalid ALTER TABLE option

SQL> alter table pk_con3 disable constraint pk_con3;

Page 87: SQL Oracle

Table altered.

SQL> insert into pk_con3 values(3,9,7);

1 row created.

###### primary constraint is not enabled if existing data is against the constraint###### even if novalidate clause is used

SQL> alter table pk_con3 enable constraint pk_con3;alter table pk_con3 enable constraint pk_con3*ERROR at line 1:ORA-02437: cannot validate (PSD.PK_CON3) - primary key violated

SQL> alter table pk_con3 enable novalidate constraint pk_con3;alter table pk_con3 enable novalidate constraint pk_con3*ERROR at line 1:ORA-02437: cannot validate (PSD.PK_CON3) - primary key violated

SQL> select * from pk_con3;

A B C --------- --------- --------- 3 4 7 3 5 8 3 9 7

SQL> delete pk_con3 where b=9;

1 row deleted.

SQL> alter table pk_con3 enable constraint pk_con3;

Table altered.

SQL> create table pk_con4(a number(2) primary key,b number(2) primary key,c number(2));create table pk_con4(a number(2) primary key,b number(2) primary key,c number(2)) *ERROR at line 1:ORA-02260: table can have only one primary key

SQL> spool off

Binary Search Tree

10 root node 5 15 11 17/ unique key

SQL> create table uk_con1(a number,b number,constraint uk_con1 unique(a));

Table created.

SQL> insert into uk_con1 values(3,6);

Page 88: SQL Oracle

1 row created.

SQL> insert into uk_con1 values(3,5);insert into uk_con1 values(3,5)*ERROR at line 1:ORA-00001: unique constraint (PSD.UK_CON1) violated

###uniqueness is determined by combination

SQL> insert into uk_con1 values(null,3);

1 row created.

SQL> insert into uk_con1 values(null,2);

1 row created.

SQL> create table uk_con2(a number(2),b number(2),constraint uk_con2 unique(a,b));

Table created.

SQL> insert into uk_con2 values(2,6);

1 row created.

SQL> insert into uk_con2 values(null,6);

1 row created.

SQL> insert into uk_con2 values(null,6);insert into uk_con2 values(null,6)*ERROR at line 1:ORA-00001: unique constraint (PSD.UK_CON2) violated

SQL> insert into uk_con2 values(6,null);

1 row created.

SQL> insert into uk_con2 values(6,null);insert into uk_con2 values(6,null)*ERROR at line 1:ORA-00001: unique constraint (PSD.UK_CON2) violated #### if all unique key columns are having null values then it is not inserted in index hence ##### uniqueness is not enforced

SQL> insert into uk_con2 values(null,null);

1 row created.

SQL> insert into uk_con2 values(null,null);

1 row created.

SQL> alter table uk_con2 disable constraint uk_con2;

Page 89: SQL Oracle

Table altered.

SQL> select * from uk_con2;

A B --------- --------- 2 6 6 6

SQL> insert into uk_con2 values(2,6);

1 row created.

####unique constraint is not enabled if duplicate data is in table

SQL> alter table uk_con2 enable constraint uk_con2;alter table uk_con2 enable constraint uk_con2*ERROR at line 1:ORA-02299: cannot validate (PSD.UK_CON2) - duplicate keys found

SQL> editWrote file afiedt.buf

1* alter table uk_con2 enable novalidate constraint uk_con2SQL> /alter table uk_con2 enable novalidate constraint uk_con2*ERROR at line 1:ORA-02299: cannot validate (PSD.UK_CON2) - duplicate keys found

SQL> delete uk_con2 where a = 2;

2 rows deleted.

SQL> alter table uk_con2 enable constraint uk_con2;

Table altered.

SQL> spool off;

###### same columns can not be unique or primary key columns

SQL> alter table uk_con1 add constraint pk_uk_con1 primary key (a);alter table uk_con1 add constraint pk_uk_con1 primary key (a) *ERROR at line 1:ORA-02261: such unique or primary key already exists in the table

SQL> alter table uk_con1 add constraint pk_uk_con1 primary key (a,b);

Table altered. index (B tree index)

89

Page 90: SQL Oracle

10 100 1 17 52

5 50 2 ( N+ 1) ** L * N 100 2 35 60 3 * 2 101 * 1 * 100 10000 3 ** 2 *2 101 ** 2 * 10/=================================================================================

SQL\Ch11

select rank() over (order by sum(amount) ) default_rank ,to_char(timeid,'yyyy'),channelid,to_char(sum(amount),'999,999,999,999.99')from sales_datagroup by to_char(timeid,'yyyy'),channelid/select to_char(timeid,'yyyy'), channelid,to_char(sum(amount),'999,999,999,999.99')from sales_datagroup by to_char(timeid,'yyyy'),channelid/select rank() over ( order by sum(amount) ) default_rank ,to_char(timeid,'yyyy'),channelid,to_char(sum(amount),'999,999,999,999.99')from sales_datagroup by to_char(timeid,'yyyy'),channelid/select rank() over ( order by trunc(sum(amount),-6) ) default_rank ,to_char(timeid,'yyyy'),channelid,to_char(trunc(sum(amount),-6),'999,999,999,999.99')from sales_datagroup by to_char(timeid,'yyyy'),channelid/select dense_rank() over ( order by trunc(sum(amount),-6) ) default_rank ,to_char(timeid,'yyyy'),channelid,to_char(trunc(sum(amount),-6),'999,999,999,999.99')from sales_datagroup by to_char(timeid,'yyyy'),channelid/select rank() over ( order by trunc(sum(amount),-6) ,to_char(sum(quantity),'999,999,99') desc) default_rank ,to_char(timeid,'yyyy'),channelid,to_char(trunc(sum(amount),-6),'999,999,999,999.99'),to_char(sum(quantity),'999,999,99')from salesgroup by to_char(time,'yyyy'),channel/select * from (select rank() over ( order by trunc(sum(amount),-6) ,to_char(sum(quantity),'999,999,99') desc) default_rank ,to_char(timeid,'yyyy'),channelid,to_char(trunc(sum(amount),-6),'999,999,999,999.99'),to_char(sum(quantity),'999,999,99')from sales_datagroup by to_char(timeid,'yyyy'),channelid)where default_rank < 6/select rank() over ( order by sum(amount) ) default_rank,cume_dist() over ( order by sum(amount) ) default_dist,to_char(timeid,'yyyy'),channelid,to_char(sum(amount),'999,999,999,999.99')from salesgroup by to_char(timeid,'yyyy'),channelid/select rank() over ( order by sum(amount) ) default_rank,percent_rank() over ( order by sum(amount) ) per_rank,to_char(timeid,'yyyy'),channelid,to_char(sum(amount),'999,999,999,999.99')from sales_datagroup by to_char(timeid,'yyyy'),channelid/

Page 91: SQL Oracle

select rank() over ( order by trunc(sum(amount),-6) ) default_rank,row_number() over ( order by trunc(sum(amount),-6) ) rw_num,to_char(timeid,'yyyy'),channelid,to_char(trunc(sum(amount),-6),'999,999,999,999.99')from sales_datagroup by to_char(timeid,'yyyy'),channelid/SELECT timeid,quantityFROM SALES_data WHERE CUSTID = 37290 AND timeid<'11-jan-1998'

/SELECT timeid,quantity,width_bucket(quantity,3,29,4) bucket_upFROM SALES_data WHERE CUSTID = 37290 AND timeid<'11-jan-1998'order by 3/SELECT timeid,quantity,(case when quantity < 5 then 5 else quantity end) calc_quantity_soldFROM SALES_data WHERE CUSTID = 37290 AND timeid<'11-jan-1998'/SELECT timeid,quantity,(case when quantity between 0 and 17 then 1 else 0 end) "17",(case when quantity between 18 and 37 then 1 else 0 end) "37" FROM SALES_data WHERE CUSTID = 37290 AND timeid<'11-jan-1998'/SELECT (case when quantity between 0 and 17 then '0-17' when quantity between 18 and 37 then '18-37' else 'HIGH' end) range,count(*) as cntFROM SALES_data WHERE CUSTID = 37290 AND timeid<'11-jan-1998'group by (case when quantity between 0 and 17 then '0-17' when quantity between 18 and 37 then '18-37' else 'HIGH' end)/SELECT quantity,(case when quantity between 0 and 17 then '0-17' when quantity between 18 and 37 then '18-37' else 'HIGH' end) rangeFROM SALES_data WHERE CUSTID = 37290 AND timeid<'11-jan-1998'/select to_char(timeid,'mon'), min(amount) KEEP (DENSE_RANK last ORDER BY (timeid)) lastvaluefrom sales_datawhere to_char(timeid,'yyyy')='1998'and CUSTID = 37290group by to_char(timeid,'mon'), to_char(timeid,'mm')order by to_char(timeid,'mm')/select to_char(timeid,'mon'), amountfrom sales_data swhere to_char(timeid,'yyyy')='1998'and CUSTID = 37290and timeid in(select max(s1.timeid) from sales_data s1 where to_char(s1.timeid,'yyyy')='1998'

Page 92: SQL Oracle

and s1.CUSTID = 37290 and to_char(s.timeid,'mon')=to_char(s1.timeid,'mon'))order by to_char(timeid,'mm')/SELECT rank(10) WITHIN GROUP (ORDER BY quantity) AS hrank, percent_rank(10) WITHIN GROUP (ORDER BY quantity) AS perc_rank, cume_dist(10) WITHIN GROUP (ORDER BY quantity) AS cume_rank FROM SALES_data WHERE CUSTID = 37290 AND timeid<'11-jan-1998'/SELECT TIMEID,CHANNELID,AMOUNT FROM SALES_data WHERE CUSTID = 37290 AND TIMEID < '11-JAN-1998'/SELECT TIMEID,CHANNELID,AMOUNT ,LAG(AMOUNT,1)OVER( ORDER BY TIMEID)LG1, AMOUNT/LAG(AMOUNT,1)OVER( ORDER BY TIMEID) RATIO_LAG , LEAD(AMOUNT,1)OVER(ORDER BY TIMEID) LD1, AMOUNT/LEAD(AMOUNT,1)OVER(ORDER BY TIMEID) RATIO_LEAD FROM SALES_data WHERE CUSTID = 37290 AND TIMEID < '11-JAN-1998'ORDER BY 1/CREATE OR REPLACE FUNCTION CALC_DAYS(FDATE DATE) RETURN NUMBER ASBEGINIF (TO_CHAR(FDATE,'DY') = 'MON') OR (TO_CHAR(FDATE,'DY')='TUE') THENRETURN(4);ELSERETURN(2);END IF;END;/SELECT timeid,quantity FROM SALES_data WHERE CUSTID = 37290 AND timeid<'11-jan-1998'/SELECT timeid,quantity ,cume_dist()over(order by quantity) FROM SALES_data WHERE CUSTID = 37290 AND timeid<'11-jan-1998'/SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY quantity) AS perc_disc, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY quantity) AS perc_cont FROM SALES_data WHERE CUSTID = 37290 AND timeid<'11-jan-1998'/

SELECT timeid,quantity,PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY quantity) over()AS perc_disc, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY quantity)over() AS perc_cont FROM SALES_data WHERE CUSTID = 37290 AND timeid<'11-jan-1998'/select to_char(s.time_id,'mm') Month, sum(s.quantity_sold) total_qty,sum(s.amount_sold)/sum(s.quantity_sold) avg_pricefrom sales swhere to_char(s.time_id,'yyyy') = '1999'and s.prod_id =5415and s.channel_id = 'C'

Page 93: SQL Oracle

group by to_char(s.time_id,'mm')order by 1/SELECT REGR_SLOPE(s.quantity_sold, s.avg_price) SLOPE,REGR_INTERCEPT(s.quantity_sold, s.avg_price) INTCPT,REGR_R2(s.quantity_sold, s.avg_price) RSQR,REGR_COUNT(s.quantity_sold, s.avg_price) COUNT,REGR_AVGX(s.quantity_sold, s.avg_price) AVG_AVG_PRICE,REGR_AVGY(s.quantity_sold, s.avg_price) AVG_QUANTITY_SOLD FROM sale_price s/SELECT 95 X,-2.5330396*95+351.674009 YFROM DUAL/SELECT CHANNELID ,SUM(AMOUNT) SUM_AMT,MAX(SUM(AMOUNT)) OVER() CALC_AMT,SUM(AMOUNT) / MAX(SUM(AMOUNT)) OVER() RATIOFROM SALES_dataWHERE CUSTID = 37290 AND ROWNUM<11GROUP BY CHANNELIDORDER BY 1/

SELECT TIMEID,AMOUNT,CHANNELID ,SUM(AMOUNT) OVER(PARTITION BY CHANNELID ) CALC_AMT ,AMOUNT/SUM(AMOUNT) OVER(PARTITION BY CHANNELID ) perc FROM SALES_data WHERE CUSTID = 37290 AND ROWNUM<11ORDER BY 3,1/

SELECT TIMEID,AMOUNT,CHANNELID ,SUM(AMOUNT) OVER(PARTITION BY CHANNEL_ID ) CALC_AMT,RATIO_TO_REPORT(AMOUNT) OVER(PARTITION BY CHANNELID ) RAT FROM SALES_data WHERE CUST_ID = 37290 AND ROWNUM<11ORDER BY 3,1/

SELECT * FROM SALES_data WHERE CUSTID = 37290 AND ROWNUM<11/SELECT TIMEID,AMOUNT,SUM(AMOUNT) OVER(ORDER BY TIMEID ROWS UNBOUNDED PRECEDING) CUM_AMT FROM SALES_dataWHERE CUSTID = 37290 AND ROWNUM<11ORDER BY 1/SELECT TIMEID,AMOUNT,CHANNELID ,SUM(AMOUNT) OVER(PARTITION BY CHANNELID ORDER BY CHANNELID,TIMEID ROWS UNBOUNDED PRECEDING) CUM_AMT FROM SALES_dataWHERE CUSTID = 37290 AND ROWNUM<11ORDER BY 3,1/SELECT TIMEID,AMOUNT,CHANNELID ,LAST_VALUE(AMOUNT) OVER(PARTITION BY CHANNELID ORDER BY TIMEID ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) LAST_AMT FROM SALES_data WHERE CUSTID = 37290 AND ROWNUM<11ORDER BY 3,1

Page 94: SQL Oracle

/SELECT TIMEID,AMOUNT,CHANNELID ,AVG(AMOUNT) OVER( ORDER BY TIMEID ROWS UNBOUNDED PRECEDING ) LAST_AMT FROM SALES_dataWHERE CUSTID = 37290 AND ROWNUM<11ORDER BY 1/SELECT TIMEID,AMOUNT,CHANNELID ,AVG(AMOUNT) OVER( ORDER BY TIMEID RANGE INTERVAL '7' DAY PRECEDING ) LAST_AMT FROM SALES_data WHERE CUSTID = 37290 AND ROWNUM<11ORDER BY 1/SELECT TIMEID,AMOUNT,CHANNELID ,AVG(AMOUNT) OVER( ORDER BY TIMEID RANGE BETWEEN '1' PRECEDING AND CURRENT ROW) CALC_AMT FROM SALES_dataWHERE CUSTID = 37290 AND ROWNUM<11ORDER BY 1/SELECT TIMEID,AMOUNT,CHANNELID ,AVG(AMOUNT_SOLD) OVER( ORDER BY TIMEID RANGE BETWEEN CALC_DAYS(TIMEID) PRECEDING AND CURRENT ROW) CALC_AMT FROM SALES_data WHERE CUSTID = 37290 AND ROWNUM<11ORDER BY 1/=================================================================================

SQL\Ch12

ROLLUP AND CUBE--These are analytical functions.

ROLLUP

Is an extension to the Group By clause.--ROLLUP creates subtotals at increasing levels of aggregation, from the most detailed up to a grand total.

Transaction ProcessingFinancial SystemsManufacturing SystemsProduction ActivitiesMarketing ActivitiesSales Activities

ROLLUP IS HELPFUL IN--Creating Reports--Improved efficiency when creating the reports for the above mentioned areas will reduce system load.--It makes calculations easier and more efficient, thereby enhancing database performance, scalability, and simplicity.

WHEN TO USE ROLLUP

--Use the ROLLUP extension in tasks involving subtotals. --It is very helpful for subtotaling along a hierarchical dimension such as time or geography. For instance, a query could specify a ROLLUP(y, m, day) or ROLLUP(country, state, city). --For data warehouse administrators using summary tables, but not yet utilizing materialized views, ROLLUP may simplify and speed up the maintenance of summary tables.

Page 95: SQL Oracle

CUBE--CUBE is an extension similar to ROLLUP, enabling a single statement to calculate all possible combinations of subtotals. --CUBE can generate the information needed in cross-tabulation reports with a single query.

HOW THESE ARE HELPFUL IN MANAGERIAL DECISIONS--calculate period-to-period changes--

DECISION SUPPORT SYSTEM--This is multi-dimensional in nature and analysis is required to be done from all the possible dimensions like time, geography, product, department, and distribution channel, but the potential dimensions are as endless as the varieties of enterprise activity.

MULTI DIMENSIONAL REPORTS INCLUDE--Show total sales across all products at increasing aggregation levels for a geography dimension: from state to country to region for 1998 and 1999. --Create a cross-tabular analysis of our operations showing expenses by territory in North India for 1998 and 1999. Include all possible subtotals. --List the top 10 sales representatives in India according to 1999 sales revenue for pharma products, and rank their commissions.

All the requests above involve multiple dimensions. Many multidimensional questions require aggregated data and comparisons of data sets, often across time, geography or budgets.

WHEN TO USE CUBE

--The examples in this chapter show ROLLUP and CUBE used with the SUM() function. While this is the most common type of aggregation, these extensions can also be used with all other functions available to the GROUP BY clause, for example, COUNT, AVG, MIN, MAX, STDDEV, and VARIANCE. COUNT, which is often needed in cross-tabular analyses, is likely to be the second most helpful function.

/

ROLLUP EXAMPLES

SQL> SELECT TIME, REGION, DEPT, SUM(PROFIT) AS PROFIT FROM SALES GROUP BY TIME, REGION, DEPT;

OUTPUT

TIME REGION DEPT PROFIT------ --------------- -------------------- ---------- 1996 central pen_sales 75000 1996 central book_sales 74000 1996 east pen_sales 89000 1996 east book_sales 115000 1996 west pen_sales 87000 1996 west book_sales 86000 1997 central pen_sales 82000 1997 central book_sales 85000 1997 east pen_sales 101000 1997 east book_sales 137000 1997 west pen_sales 96000 1997 west book_sales 97000

12 rows selected

Page 96: SQL Oracle

-----------------------------------------------------------------------------------------------

SQL> SELECT Time, Region, Dept, SUM(Profit) AS Profit FROM sales GROUP BY ROLLUP(Time,region,dept);

OUTPUT

TIME REGION DEPT PROFIT---------- --------------- -------------------- ---------- 1996 central pen_sales 75000 1996 central book_sales 74000 1996 central 149000 1996 east pen_sales 89000 1996 east book_sales 115000 1996 east 204000 1996 west pen_sales 87000 1996 west book_sales 86000 1996 west 173000 1996 526000 TIME REGION DEPT PROFIT---------- --------------- -------------------- ---------- 1997 central pen_sales 82000 1997 central book_sales 85000 1997 central 167000 1997 east pen_sales 101000 1997 east book_sales 137000 1997 east 238000 1997 west pen_sales 96000 1997 west book_sales 97000 1997 west 193000 1997 598000 1124000

21 rows selected-------------------------------------------------------------------------------------------------

COMPARISION

--Regular aggregation rows that would be produced by GROUP BY without using ROLLUP --First-level subtotals aggregating across Department for each combination of Time and Region --Second-level subtotals aggregating across Region and Department for each Time value --A grand total row

----------------------------------------------------------------------------------------------

PARTIAL ROLLUP EXAMPLE

SQL> SELECT Time, Region, Dept, SUM(Profit) AS Profit FROM sales GROUP BY Time, ROLLUP(Region, Dept);

OUTPUT

TIME REGION DEPT PROFIT----- --------------- -------------------- ----------

Page 97: SQL Oracle

1996 central pen_sales 75000 1996 central book_sales 74000 1996 central 149000 1996 east pen_sales 89000 1996 east book_sales 115000 1996 east 204000 1996 west pen_sales 87000 1996 west book_sales 86000 1996 west 173000 1996 526000 1997 central pen_sales 82000

TIME REGION DEPT PROFIT----- --------------- -------------------- ---------- 1997 central book_sales 85000 1997 central 167000 1997 east pen_sales 101000 1997 east book_sales 137000 1997 east 238000 1997 west pen_sales 96000 1997 west book_sales 97000 1997 west 193000 1997 598000

20 rows selected--------------------------------------------------------------------------------------------------COMPARISION

--Regular aggregation rows that would be produced by GROUP BY without using ROLLUP --First-level subtotals aggregating across Department for each combination of Time and Region --Second-level subtotals aggregating across Region and Department for each Time value --It does not produce a grand total row

---------------------------------------------------------------------------------------------------CUBE EXAMPLES

SQL>SELECT Time,nvl(region,0) Region, Dept, SUM(Profit) AS Profit FROM sales GROUP BY CUBE(Time, Region, Dept);

OUTPUT

TIME REGION DEPT PROFIT---- --------------- -------------------- ----------1996 central pen_sales 750001996 central book_sales 740001996 central 1490001996 east pen_sales 890001996 east book_sales 1150001996 east 2040001996 west pen_sales 870001996 west book_sales 860001996 west 1730001996 0 pen_sales 2510001996 0 book_sales 2750001996 0 5260001997 central pen_sales 820001997 central book_sales 850001997 central 1670001997 east pen_sales 1010001997 east book_sales 137000

Page 98: SQL Oracle

1997 east 2380001997 west pen_sales 960001997 west book_sales 970001997 west 1930001997 0 pen_sales 2790001997 0 book_sales 3190001997 0 598000 central pen_sales 157000 central book_sales 159000 central 316000 east pen_sales 190000 east book_sales 252000 east 442000 west pen_sales 183000 west book_sales 183000 west 366000 0 pen_sales 530000 0 book_sales 594000 0 1124000

36 rows selected

PARTIAL CUBE EXAMPLE

SQL>SELECT Time, Region, Dept, SUM(Profit) AS Profit FROM sales GROUP BY Time CUBE(Region, Dept);

OUTPUT

TIME REGION DEPT PROFIT----- --------------- -------------------- ---------- 1996 central pen_sales 75000 1996 central book_sales 74000 1996 central 149000 1996 east pen_sales 89000 1996 east book_sales 115000 1996 east 204000 1996 west pen_sales 87000 1996 west book_sales 86000 1996 west 173000 1996 pen_sales 251000 1996 book_sales 275000

TIME REGION DEPT PROFIT----- --------------- -------------------- ---------- 1996 526000 1997 central pen_sales 82000 1997 central book_sales 85000 1997 central 167000 1997 east pen_sales 101000 1997 east book_sales 137000 1997 east 238000 1997 west pen_sales 96000 1997 west book_sales 97000 1997 west 193000 1997 pen_sales 279000

TIME REGION DEPT PROFIT----- --------------- -------------------- ---------- 1997 book_sales 319000 1997 598000

Page 99: SQL Oracle

24 rows selected

SQL> SELECT Time, Region, Dept, SUM(Profit) AS Profit, GROUPING (Time) as T, GROUPING (Region) as R, GROUPING (Dept) as D FROM Sales GROUP BY ROLLUP (Time, Region, Dept);

OUTPUT

TIME REGION DEPT PROFIT T R D----- --------------- -------------------- ---------- ---------- ---------- ---------- 1996 central pen_sales 75000 0 0 0 1996 central book_sales 74000 0 0 0 1996 central 149000 0 0 1 1996 east pen_sales 89000 0 0 0 1996 east book_sales 115000 0 0 0 1996 east 204000 0 0 1 1996 west pen_sales 87000 0 0 0 1996 west book_sales 86000 0 0 0 1996 west 173000 0 0 1 1996 526000 0 1 1 1997 central pen_sales 82000 0 0 0

TIME REGION DEPT PROFIT T R D----- --------------- -------------------- ---------- ---------- ---------- ---------- 1997 central book_sales 85000 0 0 0 1997 central 167000 0 0 1 1997 east pen_sales 101000 0 0 0 1997 east book_sales 137000 0 0 0 1997 east 238000 0 0 1 1997 west pen_sales 96000 0 0 0 1997 west book_sales 97000 0 0 0 1997 west 193000 0 0 1 1997 598000 0 1 1 1124000 1 1 1

21 rows selected/create table sales(time number(4),region varchar2(15),dept varchar2(20),profit number(10,2))/insert into sales values(1996,'central','pen_sales',75000.00)/insert into sales values(1996,'central','book_sales',74000.00)/insert into sales values(1996,'east','pen_sales',89000.00)/insert into sales values(1996,'east','book_sales',115000.00)/insert into sales values(1996,'west','pen_sales',87000.00)/insert into sales values(1996,'west','book_sales',86000.00)/insert into sales values(1997,'central','pen_sales',82000.00)/insert into sales values(1997,'central','book_sales',85000.00)/insert into sales values(1997,'east','pen_sales',101000.00)/

Page 100: SQL Oracle

insert into sales values(1997,'east','book_sales',137000.00)/insert into sales values(1997,'west','pen_sales',96000.00)/insert into sales values(1997,'west','book_sales',97000.00)/===========================================================================================

SQL\Ch13

select e.ename,e.city,c.salaryfrom employee e , emp_company cwhere e.ename=c.ename/select e.ename,city,salaryfrom employee e natural join emp_company c/ select e.ename,e.city,c.salaryfrom employee e , emp_company c/select e.ename,city,salaryfrom employee e cross join emp_company c/select c.ename, m.mname,c.salaryfrom manager m , emp_company cwhere c.ename=m.ename/select ename,mname,salaryfrom manager join emp_company using(ename)where salary < 3000/select c.ename, m.mname,c.salaryfrom manager m , emp_company cwhere c.ename=m.ename and salary > 3000/select c.ename, m.mname,c.salaryfrom manager m join emp_company con ( c.ename=m.ename and salary > 3000)/SELECT ENAME,MNAME,SHIFTFROM MANAGER NATURAL JOIN EMP_SHIFT/SELECT M.ENAME,MNAME,SHIFTFROM MANAGER M LEFT OUTER JOIN EMP_SHIFT SON (M.ENAME = S.ENAME)/SELECT M.ENAME,MNAME,SHIFTFROM MANAGER M RIGHT OUTER JOIN EMP_SHIFT SON (M.ENAME = S.ENAME)/SELECT M.ENAME,MNAME,SHIFTFROM MANAGER M FULL OUTER JOIN EMP_SHIFT SON (M.ENAME = S.ENAME)/=================================================================================

SQL\Ch14

SELECT ENAME,SALARY,CNAME,(SELECT MAX(SALARY) FROM EMP_COMPANY R WHERE R.CNAME=S.CNAME) MAX_SALARYFROM EMP_COMPANY S/

Page 101: SQL Oracle

SELECT ENAME,SALARY,CNAME,(SELECT MAX(SALARY) FROM EMP_COMPANY R WHERE R.CNAME=S.CNAME) MAX_SALARYFROM EMP_COMPANY SWHERE SALARY = (SELECT MAX(SALARY) FROM EMP_COMPANY R WHERE R.CNAME=S.CNAME)

/SELECT ENAME,SALARY,CNAME,(SELECT MAX(SALARY) FROM EMP_COMPANY R WHERE R.CNAME=S.CNAME) MAX_SALARYFROM EMP_COMPANY SORDER BY (SELECT MAX(SALARY) FROM EMP_COMPANY R WHERE R.CNAME=S.CNAME) /

SQL> @SCALE1

ENAME SALARY CNAME MAX_SALARY ------------------------------ ---------- ------------------------------ ---------- ANIL 1500 ACC 8000 SHANKAR 2000 TATA 5000 JAYA 1800 CMC 1800 SUNIL 1700 CMC 1800 VIJAY 5000 TATA 5000 PRAKASH 3000 TATA 5000 AJAY 8000 ACC 8000

7 rows selected.

SQL> EDIT SCALE1

SQL> EDIT SCALE1

SQL> EDIT SCALE2

SQL> @SCALE2

ENAME SALARY CNAME MAX_SALARY ------------------------------ ---------- ------------------------------ ---------- JAYA 1800 CMC 1800 VIJAY 5000 TATA 5000 AJAY 8000 ACC 8000

SQL> EDIT SCALE2

SQL> @SCALE3

ENAME SALARY CNAME MAX_SALARY ------------------------------ ---------- ------------------------------ ---------- JAYA 1800 CMC 1800 SUNIL 1700 CMC 1800 SHANKAR 2000 TATA 5000 PRAKASH 3000 TATA 5000 VIJAY 5000 TATA 5000 ANIL 1500 ACC 8000 AJAY 8000 ACC 8000

7 rows selected.

SQL> SPOOL OFF/=================================================================================

SQL\Ch15

SELECT ENAME,(CASE SHIFT

Page 102: SQL Oracle

WHEN 'A' THEN 'A_SHIFT' WHEN 'B' THEN 'B_SHIFT' WHEN 'C' THEN 'C_SHIFT' ELSE 'ANY_SHIFT' END ) AS SHIFT_NAMEFROM EMP_SHIFT/ SELECT ENAME,(CASE WHEN SHIFT < 'C' THEN 'MORNING_SHIFT' WHEN SHIFT < 'D' THEN 'EVENING_SHIFT' ELSE 'EVENING_SHIFT' END ) AS SHIFT_NAMEFROM EMP_SHIFT/SELECT ENAME,NULLIF(SHIFT,'D') FROM EMP_SHIFT/SELECT C,COALESCE(A,B,0) RESULTFROM TEST1/SQL> SELECT * FROM EMP_SHIFT;

ENAME SHI ------------------------------ --- ANIL A SHANKAR B C D

SQL> @CASE1

ENAME SHIFT_NAM ------------------------------ --------- ANIL A_SHIFT SHANKAR B_SHIFT C_SHIFT ANY_SHIFT

SQL> EDIT CASE1

SQL> @CASE2

ENAME SHIFT_NAME ------------------------------ ------------- ANIL MORNING SHIFT SHANKAR MORNING SHIFT EVENING_SHIFT NIGHT_SHIFT

SQL> EDIT CASE2

SQL> @CASE2

ENAME SHI ------------------------------ --- ANIL A SHANKAR B C D

SQL> EDIT CASE2

SQL> EDIT CASE1

Page 103: SQL Oracle

SQL> EDIT CASE2

SQL> EDIT CASE2

SQL> @CASE3

ENAME NUL ------------------------------ --- ANIL A SHANKAR B C

SQL> CREATE TABLE TEST(A NUMBER,B NUMBER,C NUMBER);CREATE TABLE TEST(A NUMBER,B NUMBER,C NUMBER) *ERROR at line 1:ORA-00955: name is already used by an existing object

SQL> EDITWrote file afiedt.buf

1* CREATE TABLE TEST1(A NUMBER,B NUMBER,C NUMBER)SQL> /

Table created.

SQL> INSERT INTO TEST1 VALUES(&A,&B,&C);Enter value for a: 10Enter value for b: NULLEnter value for c: 30old 1: INSERT INTO TEST1 VALUES(&A,&B,&C)new 1: INSERT INTO TEST1 VALUES(10,NULL,30)

1 row created.

SQL> /Enter value for a: NULLEnter value for b: 21Enter value for c: 31old 1: INSERT INTO TEST1 VALUES(&A,&B,&C)new 1: INSERT INTO TEST1 VALUES(NULL,21,31)

1 row created.

SQL> /Enter value for a: 12Enter value for b: 22Enter value for c: 32old 1: INSERT INTO TEST1 VALUES(&A,&B,&C)new 1: INSERT INTO TEST1 VALUES(12,22,32)

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT * FROM TEST1;

Page 104: SQL Oracle

A B C ---------- ---------- ---------- 10 30 21 31 12 22 32

SQL> EDIT CASE4

SQL> @CASE4

C RESULT ---------- ---------- 30 10 31 21 32 12

SQL> EDIT CASE4

SQL> INSERT INTO TEST1 VALUES(NULL,NULL,33);

1 row created.

SQL> COMMIT;

Commit complete.

SQL> @CASE4

C RESULT ---------- ---------- 30 10 31 21 32 12 33 0

SQL> SPOOL OFF/=================================================================================

SQL\Ch16

insert allwhen cname='ACC' theninto emp_acc values(ename,salary,jdate)when cname='TATA' theninto emp_tata values (ename,salary,jdate)when cname='CMC' and ename in (select ename from emp_shift where shift='A') theninto emp_cmc values (ename,salary,jdate)select ename,cname,salary,jdatefrom emp_company/insert allwhen cname='ACC' theninto emp_acc values(ename,salary,jdate)when cname='TATA' theninto emp_tata values (ename,salary,jdate)when cname='CMC' and ename in (select ename from emp_shift where shift='A') theninto emp_cmc values (ename,salary,jdate)select ename,cname,salary,jdatefrom emp_company/ create table emp_cmp_shift(ename varchar2(30), cname varchar2(30),

Page 105: SQL Oracle

shift char(3))/insert firstwhen cname='ACC' theninto emp_cmc values(ename,salary,jdate)when ename='TATA' theninto emp_cmc values(ename,salary,jdate)elseinto emp_all values(ename,salary,jdate)select ename,cname,salary,jdatefrom emp_company/ insert allinto emp_cmp_shift values(ename,cname,shift)into emp_cmp_mgr values(ename,cname,mname)select e.ename,cname,mname,shiftfrom emp_company e ,manager,emp_shiftwhere e.ename=manager.ename and e.ename = emp_shift.ename/insert allinto emp_cmp_mgr values (ename,cname,'ASHOK')into emp_cmp_mgr values (ename,cname,'ASHWIN')select ename,cnamefrom emp_cmp_shift/merge into emp_all ausing emp_company bon(a.ename=b.ename)when matched then update set a.salary = b.salary+100when not matched then insert (ename,salary,jdate) values(ename,salary,jdate)/create table emp_acc as select ename,salary,jdate from emp_company 2 where rownum < 1;

Table created.

SQL> editWrote file afiedt.buf

1 create table emp_tata as select ename,salary,jdate from emp_company 2* where rownum < 1SQL> /

Table created.

SQL> editWrote file afiedt.buf

1 create table emp_cmc as select ename,salary,jdate from emp_company 2* where rownum < 1SQL> /

Table created.

SQL> create table emp_cmp_shift (ename varchar2(10),cname varchar2(10),shift varchar2(2));

Table created.

Page 106: SQL Oracle

SQL> create table emp_cmp_mgr(ename varchar2(10),cname varchar2(10),mname varchar2(10));

Table created.

SQL> desc emp_cmp_shift Name Null? Type ----------------------------------------- -------- ---------------------------- ENAME VARCHAR2(10) CNAME VARCHAR2(10) SHIFT VARCHAR2(2)

SQL> desc emp_cmp_mgr Name Null? Type ----------------------------------------- -------- ---------------------------- ENAME VARCHAR2(10) CNAME VARCHAR2(10) MNAME VARCHAR2(10)

SQL> edit insert_all

SQL> @insert_allselect ename,cname,mname,shift *ERROR at line 4:ORA-00904: invalid column name

SQL> edit insert_all

SQL> @insert_allselect ename,cname,mname,shift *ERROR at line 4:ORA-00918: column ambiguously defined

SQL> edit insert_all

SQL> @insert_alland emp_company.ename = emp_shift.ename *ERROR at line 7:ORA-00904: invalid column name

SQL> edit insert_all

SQL> @insert_allinto emp_cmp_mgr values(e.ename,cname,shift) *ERROR at line 3:ORA-00904: invalid column name

SQL> edit insert_all

SQL> @insert_allinto emp_cmp_shift values(ename,cname,shift) *ERROR at line 2:ORA-01401: inserted value too large for column

Page 107: SQL Oracle

SQL> desc emp_shift Name Null? Type ----------------------------------------- -------- ---------------------------- ENAME VARCHAR2(30) SHIFT CHAR(3)

SQL> select * from emp_shift;

ENAME SHI ------------------------------ --- ANIL A SHANKAR B C D

SQL> drop table emp_cmp_shift 2 ;

Table dropped.

SQL> edit crtab_emp_sh

SQL> @crtab_emp_sh

Table created.

SQL> @insert_all

4 rows created.

SQL> select * from emp_cmp_shift;

ENAME CNAME SHI ------------------------------ ------------------------------ --- ANIL ACC A SHANKAR TATA B

SQL> select * from emp_cmp_mgr;

ENAME CNAME MNAME ---------- ---------- ---------- ANIL ACC A SHANKAR TATA B

SQL> edit insert_all

SQL> delete emp_cmp_mgr;

2 rows deleted.

SQL> delete emp_cmp_shift;

2 rows deleted.

SQL> commit;

Commit complete.

SQL> @insert_all

4 rows created.

Page 108: SQL Oracle

SQL> select * from emp_cmp_mgr;

ENAME CNAME MNAME ---------- ---------- ---------- ANIL ACC AJAY SHANKAR TATA VIJAY

SQL> commit;

Commit complete.

SQL> delete emp_cmp_mgr;

2 rows deleted.

SQL> commit;

Commit complete.

SQL> edit insert_pivot

SQL> @insert_pivot

4 rows created.

SQL> select * from emp_cmp_shift;

ENAME CNAME SHI ------------------------------ ------------------------------ --- ANIL ACC A SHANKAR TATA B

SQL> select * from emp_cmp_mgr;

ENAME CNAME MNAME ---------- ---------- ---------- ANIL ACC ASHOK SHANKAR TATA ASHOK ANIL ACC ASHWIN SHANKAR TATA ASHWIN

SQL> commit;

Commit complete.

SQL> edit cond_insert

SQL> @cond_insertinto emp_cmp_acc values(ename,salary,jdate)*ERROR at line 3:ORA-00905: missing keyword

SQL> edit cond_insert

SQL> @cond_insertinto emp_cmp_acc values(ename,salary,jdate)*ERROR at line 3:ORA-00905: missing keyword

Page 109: SQL Oracle

SQL> edit cond_insert

SQL> @cond_insertwhen cname='CMC' and ename in (select ename from emp_shift where shift='A') then *ERROR at line 6:ORA-00904: invalid column name

SQL> edit cond_insert

SQL> edit cond_insert

SQL> @cond_insertinto emp_cmp_cmc values (ename,salary,jdate) *ERROR at line 7:ORA-00942: table or view does not exist

SQL> select * from tab;

TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- ADD_FORMULA_STR TABLE ADD_FORMULA_STR_ORDER TABLE ADD_FORMULA_STR_PARTITION TABLE BONUS TABLE CHILD TABLE COMPANY TABLE DEPT TABLE DIM0 TABLE DIM1 TABLE DIM2 TABLE DIM3 TABLE

TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- DIMOBJ TABLE DIMSPECDETAIL TABLE DIMSPECS TABLE DRIVER_FORMULA TABLE EMP TABLE EMPLOYEE TABLE EMP_ACC TABLE EMP_CMC TABLE EMP_CMP_MGR TABLE EMP_CMP_SHIFT TABLE EMP_COMPANY TABLE

TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- EMP_SHIFT TABLE EMP_TATA TABLE FACT TABLE MANAGER TABLE NEWTIMEFRM TABLE PARENT TABLE PK_CON1 TABLE PK_CON2 TABLE

Page 110: SQL Oracle

PK_VIEW VIEW SALGRADE TABLE TEMP TABLE

TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- TEMPDATE TABLE TEST TABLE TEST1 TABLE TIMEFRAME TABLE TIMEFRAMEDETAIL TABLE TIMEINPUT TABLE TIMEINPUTDETAIL TABLE

40 rows selected.

SQL> SQL> edit cond_insert

SQL> @cond_insert

5 rows created.

SQL> select emp_acc;select emp_acc *ERROR at line 1:ORA-00923: FROM keyword not found where expected

SQL> select * from emp_acc;

ENAME SALARY JDATE ------------------------------ ---------- --------- ANIL 1500 01-MAY-89 AJAY 8000 30-APR-95

SQL> select * from emp_tata;

ENAME SALARY JDATE ------------------------------ ---------- --------- SHANKAR 2000 10-JUL-90 VIJAY 5000 03-JAN-88 PRAKASH 3000 27-MAY-89

SQL> create table emp_all as select ename,salary,jdate from emp_company;

Table created.

SQL> delete emp_all;

7 rows deleted.

SQL> commit;

Commit complete.

SQL> edit insert_first

SQL> @insert_first

7 rows created.

Page 111: SQL Oracle

SQL> commit;

Commit complete.

SQL> select * from emp_all;

ENAME SALARY JDATE ------------------------------ ---------- --------- SHANKAR 2000 10-JUL-90 JAYA 1800 07-JUN-91 SUNIL 1700 01-JAN-88 VIJAY 5000 03-JAN-88 PRAKASH 3000 27-MAY-89

SQL> select distinct from emp_acc;select distinct from emp_acc *ERROR at line 1:ORA-00936: missing expression

SQL> select distinct * from emp_acc;

ENAME SALARY JDATE ------------------------------ ---------- --------- AJAY 8000 30-APR-95 ANIL 1500 01-MAY-89

SQL> select distinct * from emp_tata;

ENAME SALARY JDATE ------------------------------ ---------- --------- PRAKASH 3000 27-MAY-89 SHANKAR 2000 10-JUL-90 VIJAY 5000 03-JAN-88

SQL> select * from emp_company;

ENAME CNAME SALARY ------------------------------ ------------------------------ ---------- JDATE --------- ANIL ACC 1500 01-MAY-89 SHANKAR TATA 2000 10-JUL-90 JAYA CMC 1800 07-JUN-91

ENAME CNAME SALARY ------------------------------ ------------------------------ ---------- JDATE --------- SUNIL CMC 1700 01-JAN-88 VIJAY TATA 5000 03-JAN-88

Page 112: SQL Oracle

PRAKASH TATA 3000 27-MAY-89

ENAME CNAME SALARY ------------------------------ ------------------------------ ---------- JDATE --------- AJAY ACC 8000 30-APR-95

7 rows selected.

SQL> flagger OFFselect * from emp_all;

ENAME SALARY JDATE ------------------------------ ---------- --------- SHANKAR 2000 10-JUL-90 JAYA 1800 07-JUN-91 SUNIL 1700 01-JAN-88 VIJAY 5000 03-JAN-88 PRAKASH 3000 27-MAY-89

SQL> edit merge

SQL> @merge

7 rows merged.

SQL> select * from emp_all;

ENAME SALARY JDATE ------------------------------ ---------- --------- AJAY 8000 30-APR-95 ANIL 1500 01-MAY-89 SHANKAR 2100 10-JUL-90 JAYA 1900 07-JUN-91 SUNIL 1800 01-JAN-88 VIJAY 5100 03-JAN-88 PRAKASH 3100 27-MAY-89

7 rows selected.

SQL> commit;

Commit complete.

SQL> spool off/=================================================================================

Page 113: SQL Oracle