You are on page 1of 113

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
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,manager
where 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 employee
where employee.city = DELHI and employee.ename = emp_company.ename);

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 city
5. 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

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.cname
and employee_cmp1.ename = SUNIL
and employee_cmp2.cname = company2.cname
and company2.city = company1.city
/
list name of employees who don't have shift
select ename
from employee
minus
select ename
from emp_shift
/
Examples
1.list name of employees living in nagpur and working with company ACC
2.list name of employee living in Nagpur but not working in company ACC
3.list name of employee living in nagpur ,working in ACC and having shift A
4.list name of employee living in Nagpur and having company ACC ,don't have shift A
5.list name of employee who are living in nagpur or bombay
1.select ename from employee
where city = 'Nagpur'

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
----------

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 employees
2. List name of employee from ACC having highest salary in company ACC.
1. List name of company having highest number of employees
1. 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

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> edit
Wrote file afiedt.buf
1 select ename from emp_company
2 union
3* select ename from emp_shift
SQL> /
ENAME
---------Ajay
Anil
Jaya
Prakash
Shankar
Sunil
Vijay

prakash
8 rows selected.
SQL> edit
Wrote file afiedt.buf
1 select ename from emp_company
2 union all
3* select ename from emp_shift
SQL> /
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_shift
SQL> /
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

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 character
SQL> /
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 as
select ename
from employee
where ename like 'A/%%'
escape '/'
SQL> spool off
/
The null operator
insert into emp_company(ename,salary) values ('prakash',5000)
or
insert into emp_company values ('prakash',null,5000,null)
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
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>=8000


SQL> /
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

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

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> edit
Wrote file afiedt.buf
1* select substr('abcdef',3,5) from dual
SQL> /
SUBS
---cdef
SQL> edit
Wrote file afiedt.buf
1* select substr('abcdef',13,5) from dual
SQL> /
S
-- Finds first occurence of 'bb' in 'abbcdgbb' from position 1 and returns it's position
SQL> edit
Wrote file afiedt.buf
1 select instr('abbcdgbb','bb',1,1)
2* from dual
SQL> /
INSTR('ABBCDGBB','BB',1,1)
-------------------------2
SQL> edit
Wrote 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)

2* from dual
SQL> /
INSTR('ABBCDGBB','BB',1,2)
-------------------------7
Finds second occurence of 'bb' in 'abbcdgbb' from position 4 and returns it's position
SQL> edit
Wrote file afiedt.buf
1 select instr('abbcdgbb','bb',4,2)
2* from dual
SQL> /
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> edit
Wrote file afiedt.buf
1* select length(lpad('abc',8)) from dual
SQL> /
LENGTH(LPAD('ABC',8))
--------------------8
SQL> edit
Wrote file afiedt.buf
1* select length(lpad('abc',2)) from dual
SQL> /
LENGTH(LPAD('ABC',2))
--------------------2
SQL> edit
Wrote file afiedt.buf
1* select lpad('abc',2) from dual
SQL> /
LP
-ab
SQL> edit
----left padding using 'as' till the length 8 ie reached
1* select lpad('abc',8,'as') from dual
SQL> /

LPAD('AB
-------asasaabc
SQL> edit
Wrote file afiedt.buf
----right padding using 'as' till the length 8 ie reached
1* select rpad('abc',8,'as') from dual
SQL> /
RPAD('AB
-------abcasasa
SQL> edit
Wrote file afiedt.buf
--right trimming of blanks
1* select rtrim('abc ') from dual
SQL> /
RTR
--abc
SQL> edit
Wrote file afiedt.buf
1* select length(rtrim('abc ')) from dual
SQL> /
LENGTH(RTRIM('ABC'))
-------------------3
SQL> edit
SQL> edit
Wrote file afiedt.buf
--right trimming of string i.e removing char 'c' from right end
1* select length(rtrim('abc ','c')) from dual
SQL> /
LENGTH(RTRIM('ABC','C'))
-----------------------5
SQL> edit
Wrote file afiedt.buf
1* select length(rtrim('abcc','c')) from dual
SQL> /
LENGTH(RTRIM('ABCC','C'))
------------------------2
SQL> edit
Wrote file afiedt.buf
--right trimming of string i.e removing char 'c' from right end

1* select (rtrim('abcc','c')) from dual


SQL> /
(R
-ab
SQL> edit
Wrote file afiedt.buf
--right trimming of string i.e removing char 'bc' from right end
1* select (rtrim('abcc','bc')) from dual
SQL> /
(
a
SQL> select 'X' from dual where 'son'='sun';
no rows selected
SQL> edit
Wrote 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> edit
Wrote file afiedt.buf
1* select to_char(sysdate,'mmsp') from dual
SQL> /
TO_CHA
-----one
SQL> edit
Wrote file afiedt.buf

1* select to_char(sysdate,'mmspth') from dual


SQL> /
TO_CHAR(
-------first
SQL> select to_char(sysdate,'yyyyspth') from dual
SQL> /
TO_CHAR(SYSDATE,'YYYYSPTH')
-------------------------------------------two thousand second
SQL> edit
Wrote file afiedt.buf
1* select to_char(sysdate,'year') from dual
SQL> /
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> EDIT
Wrote file afiedt.buf
1* select TO_CHAR(new_time(sysdate,'GMT','PST'),'DD-MON-YYYY HH:MI:SS') FROM DUAL
SQL> /
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
--

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> EDIT
Wrote file afiedt.buf
1* SELECT TO_CHAR(SYSDATE,'IW') FROM DUAL
SQL> /
TO
-01
SQL> SELECT TO_CHAR(SYSDATE,'J') FROM DUAL;
TO_CHAR
------2452278
SQL>
SQL>
SQL>
SQL> EDIT
Wrote file afiedt.buf
1* SELECT TO_CHAR(SYSDATE,'SYYYY') FROM DUAL
SQL> /
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;

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> EDIT
Wrote file afiedt.buf
1* SELECT TRUNC(SYSDATE-10,'MM') FROM DUAL
SQL> /
TRUNC(SYS
--------01-DEC-01
SQL> EDIT
Wrote file afiedt.buf
1* SELECT TRUNC(SYSDATE-10,'YY') FROM DUAL
SQL> /
TRUNC(SYS
--------01-JAN-01
SQL> EDIT
Wrote file afiedt.buf
1* SELECT TRUNC(SYSDATE,'HH') FROM DUAL
SQL> /
TRUNC(SYS
--------03-JAN-02
SQL> EDIT
Wrote file afiedt.buf
1* SELECT TO_CHAR(TRUNC(SYSDATE,'HH'),'HH:MI:SS') FROM DUAL
SQL> /
TO_CHAR(
-------08:00:00
SQL> EDIT
Wrote file afiedt.buf
1* SELECT ROUND(SYSDATE+12,'MM') FROM DUAL
SQL> /
ROUND(SYS
--------01-JAN-02

SQL> EDIT
Wrote file afiedt.buf
1* SELECT ROUND(SYSDATE+13,'MM') FROM DUAL
SQL> /
ROUND(SYS
--------01-FEB-02
SQL> EDIT
Wrote file afiedt.buf
1* SELECT ROUND(SYSDATE+13,'Q') FROM DUAL
SQL> /
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> edit
Wrote file afiedt.buf
1* select round(123.456,2) from dual
SQL> /
ROUND(123.456,2)
---------------123.46
SQL> edit
Wrote file afiedt.buf
1* select round(123.456,3) from dual
SQL> /
ROUND(123.456,3)
---------------123.456
SQL> edit
Wrote file afiedt.buf

1* select round(123.456,-1) from dual


SQL> /
ROUND(123.456,-1)
----------------120
SQL> edit
Wrote file afiedt.buf
1* select round(123.456,-2) from dual
SQL> /
ROUND(123.456,-2)
----------------100
SQL> edit
Wrote file afiedt.buf
1* select round(123.456,-3) from dual
SQL> /
ROUND(123.456,-3)
----------------0
SQL> edit
Wrote file afiedt.buf
1* select round(173.456,-2) from dual
SQL> /
ROUND(173.456,-2)
----------------200
SQL> edit
Wrote file afiedt.buf
1* select trunc(173.456,-2) from dual
SQL> /
TRUNC(173.456,-2)
----------------100
SQL> edit
Wrote file afiedt.buf
1* select trunc(173.456,-1) from dual
SQL> /
TRUNC(173.456,-1)
----------------170
SQL> edit
Wrote file afiedt.buf
1* select trunc(173.456,1) from dual

SQL> /
TRUNC(173.456,1)
---------------173.4
SQL> edit
Wrote file afiedt.buf
1* select trunc(173.456,2) from dual
SQL> /
TRUNC(173.456,2)
---------------173.45
SQL> spool off
list statistics of employees in following way
salary_low salary_high No_of_employees
0
999
1
1000
1999
3
2000
2999
2
select trunc(salary,-3) salary_low,trunc(salary,-3)+999 salary_high, count(ename)
from emp_company
group 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+4999
SQL> /
SALARY_LOW SALARY_HIGH COUNT(ENAME)
---------- ----------- -----------0
4999
7
5000
9999
4
/
SQL> select abs(-9) from dual;
ABS(-9)
--------9

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
/

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> EDIT
Wrote file afiedt.buf
1* SELECT ENAME,CNAME FROM EMP_COMPANY ORDER BY 1
SQL> /
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> EDIT
Wrote file afiedt.buf
1* SELECT ENAME,CNAME FROM EMP_COMPANY ORDER BY 2,1
SQL> /
ENAME
CNAME
---------- ---------Nitin
ACC
Vinod
ACC
Anil
Acc
Jaya
CMC
Sunil
CMC
Ashok
TATA

Prakash TATA
Shankar TATA
Vijay
TATA
Ajay
Tata
prakash
11 rows selected.
SQL> EDIT
Wrote file afiedt.buf
1* SELECT ENAME,CNAME FROM EMP_COMPANY ORDER BY 2,1 DESC
SQL> /
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> EDIT
Wrote file afiedt.buf
1* SELECT TRANSLATE('ABBCD','AB','*') FROM DUAL
SQL> /
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> EDIT
Wrote file afiedt.buf

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> edit
Wrote file afiedt.buf
1* select ename,salary,decode(sign(salary - 4000),-1,'low salary',1,'high salary') from emp_company
SQL> /

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)
------------ ---------- ------------- --------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

SALARY

12 rows selected.
SQL> select ename,dump(ename) from emp_company;
ENAME
---------DUMP(ENAME)
----------------------------------------------------------------------------------------------------

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> EDIT
Wrote file afiedt.buf
1* SELECT TO_CHAR(567898,'99,999,99.99') FROM DUAL
SQL> /
TO_CHAR(56789
------------5,678,98.00
SQL> EDIT
Wrote file afiedt.buf
1* SELECT TO_CHAR(567898,'99G999G99D99') FROM DUAL
SQL> /
TO_CHAR(56789
------------5,678,98.00
SQL> EDIT
Wrote file afiedt.buf
1* SELECT TO_CHAR(567898,'99G999G99D99','NLS_NUMERIC_CHARACTERS=''*#''') FROM DUAL
SQL> /
TO_CHAR(56789
------------5#678#98*00
SQL> SELECT TO_CHAR(-67895,'999999MI') FROM DUAL;
TO_CHAR
------67895SQL> EDIT
Wrote file afiedt.buf

1* SELECT TO_CHAR(-67895,'PR999999') FROM DUAL


SQL> /
SELECT TO_CHAR(-67895,'PR999999') FROM DUAL
*
ERROR at line 1:
ORA-01481: invalid number format model
SQL> EDIT
Wrote file afiedt.buf
1* SELECT TO_CHAR(-67895,'999999PR') FROM DUAL
SQL> /
TO_CHAR(
-------<67895>
SQL> EDIT
Wrote file afiedt.buf
1* SELECT TO_CHAR(67895,'C999999PR') FROM DUAL
SQL> /
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> EDIT
Wrote file afiedt.buf
1* SELECT TO_CHAR(67895,'L999999PR') FROM DUAL
SQL> /
TO_CHAR(67895,'L99
-----------------RS.67895
SQL> EDIT
Wrote file afiedt.buf
1* SELECT TO_CHAR(67895,'$999999PR') FROM DUAL
SQL> /
TO_CHAR(6

--------$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> EDIT
Wrote file afiedt.buf
1* SELECT TO_CHAR(657656,'9.99EEEE') FROM DUAL
SQL> /
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

SQL> select ename from emp_company where salary in (select max(salary) from emp_company);
ENAME
---------Ajay
list maximum of employees of ACC
SQL> 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> edit
Wrote file afiedt.buf
1* select count(salary) from emp_company where cname='l'
SQL> /
COUNT(SALARY)
------------0
SQL> edit
Wrote 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

2. list the number of employees having shift A


3. list name of employees with their living city having maximum salary in company TATA
4. list name of employee having maximum salary in company where Sunil is working
5. 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;

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
2
TATA
3
SQL> spool off
Try these examples
1. Find out avg. salary of each company
2. Find out avg. salary of each company except 'ACC'
3. Find out name of companies having average salary more than 1500
4. find out avg. salary of company only for employees living in delhi
5. 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 STATEMENT
1. Delete all rows
delete emp_company;
or
-- truncate table emp_company;
-- triggers are fired in the case of delete (not for truncate)

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 Statement
SQL> 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

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> edit
Wrote file afiedt.buf
1* alter table emp_comp1 drop(cname)
SQL> /
Table altered.

SQL> rename emp_comp1 to emp_comp2


SQL> /
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;

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
update emp_company
set salary = 1.1 * salary
where ename in (select e.ename
from employee e
where e.city = 'Delhi');

living in Delhi

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
1000
900
900

Vijay
1000 initial
1000 partial
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

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 * salary
where 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_company
set salary = salary + 100
where 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_company
set salary = salary 100
where ename = VIJAY
and cname = ACC
and exists
(select e1.ename from emp_company e1 where
e1.ename = SUNIL

and e1.cname = ACC);


SQL>update emp_company
set salary = salary + 100
where ename = SUNIL
and cname = ACC
and exists (select e1.ename from emp_company
VIJAYand
e1.cname = ACC);

e1 where e1.ename =

13. Update salary of VIJAY,


give him salary that is sum of his salary and SUNILs 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
ec1.ename
cname = (select ec2.ename from emp_company ec2
= ANIL)
where ename = VIJAY;

emp_company ec1 where


= SUNIL),
where ec2.ename

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 ec1
set salary = (select max(salary)
from emp_company ec1
where ec1.cname
in (select ec2.cname from
emp_company ec2
where ec2.ename = SUNIL))
where ename = VIJAY;
/=================================================================================
SQL\CH06
create view acc_company as
select ename,cname,salary
from emp_company
where cname='ACC'
/
Inline Views
select max(d.avg_salary)
from
( select cname,avg(salary) avg_salary
from emp_company
group by cname ) d
/

/* 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.mname
from manager s
connect by prior s.ename=s.mname
start with s.ename='Vijay'
/
SQL> select * from tree_view;
ENAME
MNAME
---------- ---------Vijay
Shankar Vijay
Prakash Shankar
select * from (select s.ename,s.mname
from manager s
connect by prior s.ename=s.mname
start with s.ename='Vijay') tree_view
1 select v.ename,c.salary from tree_view v,emp_company c
2* where v.ename=c.ename
SQL> /
ENAME
SALARY
---------- --------Prakash
3000
Shankar
2000
Vijay
5000
/
create view s as
(select m.ename ename, m.mname mname,e.salary sal
from manager m,emp_company e
where e.ename=m.ename )
/
select s.level,sum(s.sal)
from s
connect by prior s.ename=s.mname
start with s.ename='Vijay'
group by level
/
create view parent_child
as
select p.a pa,p.b pb,c.a ca,c.c cc
from parent p,child c
where p.a=c.a
/
Views

- To give simplified representation of data


create or replace view s as
(select m.ename ename, m.mname mname,e.salary sal
from manager m,emp_company e
where e.ename=m.ename )
/
SQL> select * from s;
ENAME
MNAME
SAL
---------- ---------- --------Ajay
8000
Anil
Ajay
1500
Jaya
1800
Prakash Shankar
3000
Shankar Vijay
2000
Sunil
Jaya
1700
Vijay
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 as
select ename,cname,salary
from emp_company
where 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-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
Nitin
ACC
6000

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


1 row created.
SQL> select * from acc_company;
ENAME
CNAME
SALARY
---------- ---------- --------Ajay
ACC
8000
Nitin
ACC
6000
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
prakash
5000
Nitin
ACC
6000
Ashok
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 violation
In 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)

*
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 case
4. 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

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.mname
from manager s
connect by prior s.ename=s.mname
start with s.ename='Vijay'
/
SQL> select * from tree_view;
ENAME
MNAME
---------- ---------Vijay
Shankar Vijay
Prakash Shankar
1 select v.ename,c.salary from tree_view v,emp_company c
2* where v.ename=c.ename
SQL> /
ENAME
SALARY
---------- --------Prakash
3000
Shankar
2000
Vijay
5000
/=================================================================================
SQL\Ch07
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);
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 <= '1MAY-96';
/
--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);
/
--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';
/=================================================================================

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);

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 <= '1MAY-96';

/
--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);
/

--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';
/=================================================================================

SQL\Ch07\Assign4
--1)LIST ALL THE CUSTOMERS WHO ARE DEPOSITORS BUT NOT BORROWERS.
SELECT CNAME FROM DEPOSIT
MINUS
(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 WHERE
AMOUNT < 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');

/
--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))
AND
C1.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 C1
WHERE 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 D3
WHERE C1.CITY = 'NAGPUR' AND
C1.CNAME IN ((SELECT D1.CNAME FROM DEPOSIT D1)
UNION
(SELECT BR1.CNAME FROM BORROW BR1))
AND
B1.CITY IN
(SELECT B2.CITY FROM DEPOSIT D2 , BRANCH B2 WHERE D2.CNAME = 'SUNIL'
AND D2.BNAME = B2.BNAME)
AND
C1.CNAME = D3.CNAME AND D3.BNAME = B1.BNAME;

/
--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 WHERE
C1.CNAME IN
((SELECT BR1.CNAME FROM BORROW BR1)
INTERSECT
(SELECT D2.CNAME FROM DEPOSIT D2))
AND
D1.CNAME = C1.CNAME
AND
D1.BNAME = B1.BNAME
AND
B1.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.

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.BNAME
AND 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 WHERE
CNAME IN (SELECT D1.BNAME FROM DEPOSIT D1
GROUP BY D1.BNAME
HAVING 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 WHERE
D1.CNAME = C1.CNAME AND C1.CITY = 'NAGPUR' AND D1.AMOUNT IN

(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.BNAME
HAVING COUNT(D1.CNAME) > = ALL (SELECT COUNT(D2.CNAME) FROM DEPOSIT D2
GROUP 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 WHERE
D1.AMOUNT >= ALL (SELECT D2.AMOUNT FROM DEPOSIT D2 WHERE
D2.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.BNAME
HAVING COUNT(D1.CNAME) > 5;
/
--15)GIVE NAME OF CITY HAVING MORE CUSTOMERS LIVING THAN NAGPUR.
SELECT C1.CITY FROM CUSTOMERS C1 GROUP BY C1.CITY
HAVING 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.

SELECT D1.BNAME FROM DEPOSIT D1 GROUP BY D1.BNAME


HAVING COUNT(D1.CNAME) > ALL (SELECT COUNT(BR1.CNAME) FROM BORROW BR1
WHERE 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.CITY
HAVING 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.CNAME
GROUP BY C2.CITY HAVING COUNT(D1.CNAME) >= ALL
(SELECT COUNT(D2.CNAME) FROM DEPOSIT D2,CUSTOMERS C3
WHERE D2.CNAME = C3.CNAME
GROUP 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.BNAME
HAVING COUNT(BR2.CNAME) >= ALL(SELECT COUNT(BR3.CNAME) FROM
BORROW 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 DEPOSIT
SET 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 DEPOSIT
SET AMOUNT = AMOUNT * 1.1;
/
--2)GIVE 10% INTEREST TO ALL DEPOSITORS HAVING BRANCH VRCE.
UPDATE DEPOSIT
SET AMOUNT = AMOUNT * 1.1 WHERE BNAME = 'VRCE';
/
--3)GIVE 10% INTEREST TO ALL DEPOSITORS LIVING IN NAGPUR.
UPDATE DEPOSIT
SET 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 DEPOSIT
SET AMOUNT = AMOUNT * 1.1 WHERE CNAME IN

(SELECT CNAME FROM CUSTOMERS WHERE CITY = 'NAGPUR')


AND
BNAME 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 DEPOSIT
SET AMOUNT = ( SELECT AVG(AMOUNT) FROM DEPOSIT WHERE
CNAME =
'ANIL')
WHERE CNAME = 'SUNIL';
UPDATE DEPOSIT
SET AMOUNT = AMOUNT + 100
WHERE CNAME = 'SUNIL';
UPDATE DEPOSIT
SET AMOUNT = AMOUNT + 100 WHERE CNAME = 'ANIL';
/
--6)CHANGE THE DEPOSIT OF VRCE BRANCH TO 1000 AND CHANGE THE
BRANCH AS
VRCE_AMBAZARI.
UPDATE DEPOSIT
SET AMOUNT = 1000,
BNAME = 'VRCE_AMBAZARI' WHERE BNAME = 'VRCE';
/
--7)ASSIGN TO DEPOSIT OF ANIL MAXIMUM DEPOSIT FROM VRCE BRANCH.
UPDATE DEPOSIT
SET AMOUNT = (SELECT MAX(AMOUNT) FROM DEPOSIT WHERE BNAME = 'VRCE') WHERE
CNAME = 'ANIL';
/
--8)CHANGE THE LIVING CITY OF VRCE BRANCH BORROWERS TO NAGPUR.
UPDATE CUSTOMERS
SET 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 DEPOSIT
SET 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 DEPOSIT
SET 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 DEPOSIT
SET AMOUNT = AMOUNT - 10 WHERE CNAME = 'ANIL';
UPDATE DEPOSIT
SET AMOUNT = AMOUNT + 10 WHERE CNAME = 'SUNIL';
/
--12) TRANSFER 10 RS FROM ACCOUNT OF ANIL TO SUNIL IF BOTH ARE HAVING SAME BRANCH.
UPDATE DEPOSIT
SET AMOUNT = AMOUNT - 10 WHERE CNAME = 'ANIL' AND BNAME IN
(SELECT D1.BNAME FROM DEPOSIT D1 WHERE D1.CNAME = 'SUNIL');
UPDATE DEPOSIT
SET
AMOUNT = AMOUNT + 10 WHERE CNAME = 'SUNIL' AND BNAME IN
(SELECT D2.BNAME FROM DEPOSIT D2 WHERE D2.CNAME = 'ANIL');

/
--13) TRANSFER 10 RS FROM ACCOUNT OF ANIL TO SUNIL IF BOTH ARE LIVING IN NAGPUR.
UPDATE DEPOSIT
SET AMOUNT = AMOUNT - 10 WHERE CNAME = 'ANIL' AND CNAME IN
(SELECT C1.CNAME FROM CUSTOMERS C1, CUSTOMERS C2 WHERE
C2.CNAME = 'SUNIL' AND C1.CITY = 'NAGPUR' AND C1.CITY=C2.CITY);
UPDATE DEPOSIT
SET
AMOUNT = AMOUNT + 10 WHERE CNAME = 'SUNIL' AND CNAME IN
(SELECT C2.CNAME FROM CUSTOMERS C2, CUSTOMERS C4 WHERE
C4.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 DEPOSIT
SET AMOUNT = AMOUNT + 10 WHERE CNAME = 'SUNIL' AND CNAME IN
(SELECT C3.CNAME FROM CUSTOMERS C3, CUSTOMERS C4
C3.CNAME='ANIL' AND C3.CITY = C4.CITY);

WHERE

/
--16)GIVE 100 RS MORE TO ALL DEPOSITORS IF THEY ARE MAXIMUM DEPOSITORS IN THEIR
RESPECTIVE BRANCH.
UPDATE DEPOSIT
SET 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 DEPOSIT
SET AMOUNT = AMOUNT + 10
WHERE CNAME IN
(SELECT D1.CNAME FROM DEPOSIT D1 GROUP BY D1.CNAME
HAVING 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 DEPOSIT
SET AMOUNT = AMOUNT + 10
WHERE CNAME IN
(SELECT D1.CNAME FROM DEPOSIT D1, BRANCH B1, CUSTOMERS C1
WHERE 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.

UPDATE DEPOSIT
SET 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');
/

--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;
/
--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.
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) ADDRESS
FROM ENQUIRY,ENROLLMENT
WHERE ENQUIRY.ENQUIRYNO=ENROLLMENT.ENQUIRYNO
AND 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.ROLLNO
AND 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;
/
--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 NAME
FROM 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
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)
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
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;
/
--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 EXPENDITURE
GROUP 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 FEESPAID
GROUP 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;
/=================================================================================
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 CAPITAL
AND 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 AS
LOW
HIGH
NO OF STUDENTS
1
1000
3
1001
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
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
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
TATA
CAL
TATA
DLH
Find out name of companies located in all those cities

where 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: 1
Enter value for amt: 100
old 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: 4
Enter value for amt: 300
old 1: insert into T values(&sn,&amt)
new 1: insert into T values(4,300)
1 row created.
SQL> /
Enter value for sn: 7
Enter value for amt: 200
old 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
--------- --------- --------- --------1
100
1
100
4
300
1
100

7
4
7
7

200
300
200
200

1
4
4
7

100
300
300
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.sn
SQL> /
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
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
DLH
Find out name of companies located in all those cities
where 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 CMP1
WHERE CMP1.CNAME='TATA');
/
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> edit
Wrote file afiedt.buf
1* select * from manager connect by prior mname=ename start with ename='Vijay'
SQL> /
ENAME
MNAME
---------- ---------Vijay
SQL> spool off
SQL> edit
Wrote 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 Vijay
psedocolumn => 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> edit
Wrote file afiedt.buf
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 level
SQL> /
LEVEL COUNT(ENAME)
--------- -----------1
1
2
2
3
1
Try these examples
1.Find out number of employees working under Vijay directly or indirectly
2.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);
1 row created.

## YOU CAN NOT MENTION SYSTEM DATE OR VARIABLES IN CHECK CONSTRAINT


SQL> 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> edit
Wrote file afiedt.buf
1* alter table ch_con1 enable novalidate constraint ck_con1
SQL> /
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);
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 100
linesize 1000
select * 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
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 IMMEDIATE
SQL> 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;
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> EDIT
Wrote file afiedt.buf
1 ALTER TABLE CON_EXCEPT ENABLE CONSTRAINT CK_CON_EXCEPT EXCEPTIONS
2* INTO EXCEPTIONS
SQL> /
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> EDIT
Wrote file afiedt.buf
1 SELECT T.A,T.B,R.CONSTRAINT
2 FROM CON_EXCEPT T , EXCEPTIONS R
3* WHERE T.ROWID=R.ROW_ID
SQL> /
A
B CONSTRAINT
--------- --------- -----------------------------1
7 PK_CON_EXCEPT

1
2

8 PK_CON_EXCEPT
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.
## 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 null
SQL> 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 null
SQL> /
Table altered.
SQL> select * from parent;
A
B
C
--------- --------- --------1
1
1
SQL> select * from child;
A

--------- --------- --------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 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 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.
#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> edit
SQL> 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;
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
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> edit
Wrote 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> edit
Wrote 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
1
1
null

4
3
7
3

6
8
6
2

###### 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;
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
5

10 root node
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);
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;
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> edit
Wrote file afiedt.buf
1* alter table uk_con2 enable novalidate constraint uk_con2
SQL> /
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

10
1

100
17

52
5

2
( N+ 1) ** L * N
100
3*2
101 * 1 * 100 10000
3 ** 2 *2 101 ** 2 * 10
/=================================================================================
2

50
35 60

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_data
group by to_char(timeid,'yyyy'),channelid
/
select to_char(timeid,'yyyy'), channelid,to_char(sum(amount),'999,999,999,999.99')
from sales_data
group 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_data
group 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_data
group 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_data
group 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 sales
group 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_data
group 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 sales
group 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_data
group by to_char(timeid,'yyyy'),channelid
/
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_data

group by to_char(timeid,'yyyy'),channelid
/
SELECT timeid,quantity
FROM SALES_data
WHERE CUSTID = 37290 AND timeid<'11-jan-1998'
/
SELECT timeid,quantity,width_bucket(quantity,3,29,4) bucket_up
FROM 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_sold
FROM 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 cnt
FROM 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) range
FROM SALES_data
WHERE CUSTID = 37290 AND timeid<'11-jan-1998'
/
select to_char(timeid,'mon'), min(amount) KEEP (DENSE_RANK last ORDER BY (timeid)) lastvalue
from sales_data
where to_char(timeid,'yyyy')='1998'
and CUSTID = 37290
group by to_char(timeid,'mon'), to_char(timeid,'mm')
order by to_char(timeid,'mm')
/
select to_char(timeid,'mon'), amount
from sales_data s
where to_char(timeid,'yyyy')='1998'
and CUSTID = 37290
and
timeid in
(select max(s1.timeid)
from sales_data s1
where to_char(s1.timeid,'yyyy')='1998'
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 AS
BEGIN
IF (TO_CHAR(FDATE,'DY') = 'MON') OR (TO_CHAR(FDATE,'DY')='TUE') THEN
RETURN(4);
ELSE
RETURN(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_price
from sales s
where to_char(s.time_id,'yyyy') = '1999'
and s.prod_id =5415
and s.channel_id = 'C'
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 Y
FROM DUAL
/
SELECT CHANNELID ,SUM(AMOUNT) SUM_AMT,MAX(SUM(AMOUNT)) OVER()
CALC_AMT,SUM(AMOUNT) / MAX(SUM(AMOUNT)) OVER() RATIO
FROM SALES_data
WHERE CUSTID = 37290 AND ROWNUM<11
GROUP BY CHANNELID
ORDER 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<11
ORDER 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<11
ORDER 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_data
WHERE CUSTID = 37290 AND ROWNUM<11
ORDER BY 1
/
SELECT TIMEID,AMOUNT,CHANNELID ,
SUM(AMOUNT) OVER(PARTITION BY CHANNELID ORDER BY CHANNELID,TIMEID ROWS
UNBOUNDED PRECEDING) CUM_AMT
FROM SALES_data
WHERE CUSTID = 37290 AND ROWNUM<11
ORDER 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<11
ORDER BY 3,1
/
SELECT TIMEID,AMOUNT,CHANNELID ,
AVG(AMOUNT) OVER( ORDER BY TIMEID ROWS UNBOUNDED PRECEDING ) LAST_AMT
FROM SALES_data

WHERE CUSTID = 37290 AND ROWNUM<11


ORDER 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<11
ORDER BY 1
/
SELECT TIMEID,AMOUNT,CHANNELID ,
AVG(AMOUNT) OVER( ORDER BY TIMEID RANGE BETWEEN '1' PRECEDING AND CURRENT
ROW) CALC_AMT
FROM SALES_data
WHERE CUSTID = 37290 AND ROWNUM<11
ORDER 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<11
ORDER 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 Processing
Financial Systems
Manufacturing Systems
Production Activities
Marketing Activities
Sales 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.

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
-----------------------------------------------------------------------------------------------

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
----- --------------- -------------------- ---------1996 central
pen_sales
75000
1996 central
book_sales
74000
1996 central
149000

1996 east
1996 east
1996 east
1996 west
1996 west
1996 west
1996
1997 central

pen_sales
book_sales

89000
115000
204000
pen_sales
87000
book_sales
86000
173000
526000
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
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 0
pen_sales
251000
1996 0
book_sales
275000
1996 0
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
1997 0
1997 0
1997 0
central
central
central
east
east
east
west
west
west
0
0
0

193000
279000
319000
598000
pen_sales
157000
book_sales
159000
316000
pen_sales
190000
book_sales
252000
442000
pen_sales
183000
book_sales
183000
366000
pen_sales
530000
book_sales
594000
1124000
pen_sales
book_sales

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
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
----- --------------- -------------------- ---------- ---------- ---------- ---------1996 central
pen_sales
75000
0
0
1996 central
book_sales
74000
0
0
1996 central
149000
0
0
1
1996 east
pen_sales
89000
0
0
1996 east
book_sales
115000
0
0
1996 east
204000
0
0
1
1996 west
pen_sales
87000
0
0
1996 west
book_sales
86000
0
0
1996 west
173000
0
0
1
1996
526000
0
1
1
1997 central
pen_sales
82000
0
0

D
0
0
0
0
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)
/
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.salary
from employee e , emp_company c
where e.ename=c.ename
/
select e.ename,city,salary
from employee e natural join emp_company c
/
select e.ename,e.city,c.salary
from employee e , emp_company c
/
select e.ename,city,salary
from employee e cross join emp_company c
/
select c.ename, m.mname,c.salary
from manager m , emp_company c
where c.ename=m.ename
/
select ename,mname,salary
from manager join emp_company using(ename)
where salary < 3000
/
select c.ename, m.mname,c.salary
from manager m , emp_company c
where c.ename=m.ename and salary > 3000
/
select c.ename, m.mname,c.salary
from manager m join emp_company c
on ( c.ename=m.ename and salary > 3000)
/
SELECT ENAME,MNAME,SHIFT
FROM MANAGER NATURAL JOIN EMP_SHIFT
/
SELECT M.ENAME,MNAME,SHIFT
FROM MANAGER M LEFT OUTER JOIN EMP_SHIFT S
ON (M.ENAME = S.ENAME)
/
SELECT M.ENAME,MNAME,SHIFT
FROM MANAGER M RIGHT OUTER JOIN EMP_SHIFT S
ON (M.ENAME = S.ENAME)
/
SELECT M.ENAME,MNAME,SHIFT
FROM MANAGER M FULL OUTER JOIN EMP_SHIFT S
ON (M.ENAME = S.ENAME)
/=================================================================================
SQL\Ch14
SELECT ENAME,SALARY,CNAME,(SELECT MAX(SALARY) FROM EMP_COMPANY R WHERE
R.CNAME=S.CNAME) MAX_SALARY
FROM EMP_COMPANY S
/
SELECT ENAME,SALARY,CNAME,(SELECT MAX(SALARY) FROM EMP_COMPANY R WHERE
R.CNAME=S.CNAME) MAX_SALARY
FROM EMP_COMPANY S

WHERE 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_SALARY
FROM EMP_COMPANY S
ORDER 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
WHEN 'A' THEN 'A_SHIFT'
WHEN 'B' THEN 'B_SHIFT'
WHEN 'C' THEN 'C_SHIFT'

ELSE 'ANY_SHIFT'
END ) AS SHIFT_NAME
FROM EMP_SHIFT
/
SELECT ENAME,(CASE
WHEN SHIFT < 'C' THEN 'MORNING_SHIFT'
WHEN SHIFT < 'D' THEN 'EVENING_SHIFT'
ELSE 'EVENING_SHIFT'
END ) AS SHIFT_NAME
FROM EMP_SHIFT
/
SELECT ENAME,NULLIF(SHIFT,'D') FROM EMP_SHIFT
/
SELECT C,COALESCE(A,B,0) RESULT
FROM 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
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> EDIT
Wrote 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: 10
Enter value for b: NULL
Enter value for c: 30
old 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: NULL
Enter value for b: 21
Enter value for c: 31
old 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: 12
Enter value for b: 22
Enter value for c: 32
old 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;
A
B
C
---------- ---------- ---------10
30

12

21
22

31
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 all
when cname='ACC' then
into emp_acc values(ename,salary,jdate)
when cname='TATA' then
into emp_tata values (ename,salary,jdate)
when cname='CMC' and ename in (select ename from emp_shift where shift='A') then
into emp_cmc values (ename,salary,jdate)
select ename,cname,salary,jdate
from emp_company
/
insert all
when cname='ACC' then
into emp_acc values(ename,salary,jdate)
when cname='TATA' then
into emp_tata values (ename,salary,jdate)
when cname='CMC' and ename in (select ename from emp_shift where shift='A') then
into emp_cmc values (ename,salary,jdate)
select ename,cname,salary,jdate
from emp_company
/
create table emp_cmp_shift(ename varchar2(30),
cname varchar2(30),
shift char(3))
/
insert first

when cname='ACC' then


into emp_cmc values(ename,salary,jdate)
when ename='TATA' then
into emp_cmc values(ename,salary,jdate)
else
into emp_all values(ename,salary,jdate)
select ename,cname,salary,jdate
from emp_company
/
insert all
into emp_cmp_shift values(ename,cname,shift)
into emp_cmp_mgr values(ename,cname,mname)
select e.ename,cname,mname,shift
from emp_company e ,manager,emp_shift
where e.ename=manager.ename
and e.ename = emp_shift.ename
/
insert all
into emp_cmp_mgr values (ename,cname,'ASHOK')
into emp_cmp_mgr values (ename,cname,'ASHWIN')
select ename,cname
from emp_cmp_shift
/
merge into emp_all a
using emp_company b
on(a.ename=b.ename)
when matched then
update set a.salary = b.salary+100
when 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> edit
Wrote file afiedt.buf
1 create table emp_tata as select ename,salary,jdate from emp_company
2* where rownum < 1
SQL> /
Table created.
SQL> edit
Wrote file afiedt.buf
1 create table emp_cmc as select ename,salary,jdate from emp_company
2* where rownum < 1
SQL> /
Table created.
SQL> create table emp_cmp_shift (ename varchar2(10),cname varchar2(10),shift varchar2(2));
Table created.
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_all
select ename,cname,mname,shift
*
ERROR at line 4:
ORA-00904: invalid column name
SQL> edit insert_all
SQL> @insert_all
select ename,cname,mname,shift
*
ERROR at line 4:
ORA-00918: column ambiguously defined
SQL> edit insert_all
SQL> @insert_all
and emp_company.ename = emp_shift.ename
*
ERROR at line 7:
ORA-00904: invalid column name
SQL> edit insert_all
SQL> @insert_all
into emp_cmp_mgr values(e.ename,cname,shift)
*
ERROR at line 3:
ORA-00904: invalid column name
SQL> edit insert_all
SQL> @insert_all
into emp_cmp_shift values(ename,cname,shift)
*
ERROR at line 2:
ORA-01401: inserted value too large for column
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.
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_insert
into emp_cmp_acc values(ename,salary,jdate)
*
ERROR at line 3:
ORA-00905: missing keyword
SQL> edit cond_insert
SQL> @cond_insert
into emp_cmp_acc values(ename,salary,jdate)
*
ERROR at line 3:
ORA-00905: missing keyword
SQL> edit cond_insert

SQL> @cond_insert
when 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_insert
into 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
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.
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
10-JUL-90
JAYA
07-JUN-91

TATA
CMC

2000
1800

ENAME
CNAME
SALARY
------------------------------ ------------------------------ ---------JDATE
--------SUNIL
CMC
1700
01-JAN-88
VIJAY
03-JAN-88
PRAKASH
27-MAY-89

TATA
TATA

5000
3000

ENAME
CNAME
SALARY
------------------------------ ------------------------------ ---------JDATE
--------AJAY
ACC
8000
30-APR-95
7 rows selected.
SQL> flagger OFF
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> 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
/=================================================================================

You might also like