DBMS Lab
DBMS Lab
2. Add a column commission to the EMP table. Commission should be numeric with null
values allowed.
Query:
SQL>Alter table empadd(commission number(4));
Output:
Table altered.
1
3. Modify the column width of the job field of emp table.
Query:
SQL>Alter table emp modify(job varchar2(15));
Output:
Table altered.
5. Add constraint to the emp table that is empno as primary key and deptno as foreign key.
Query:
SQL>alter table emp add constraint emp_id_pk primary key(empno);
SQL>alter table dept add constraint pk primary key(deptno);
2
Output:
Table altered
6. Add constraints to the emp table to check the empno value while entering
i.eempno>100. Salary value by default is 5000, otherwise it should accept the values from
the user. Query:
SQL>alter table emp add check (empno>100);
SQL>alter table emp modify sal default 5000;
Output:
7. Add column DOB to the emp table Add and drop a column DOJ to the emp table.
Query:
SQL>alter table emp add(dob
date); SQL>alter table emp add(doj
date); SQL>alter table emp
drop(doj);
Output:
3
4
TASK – 2
DML COMMANDS (Insert, Select, Update, Delete)
1. Insert 5 records into dept table.Insert few rows and truncate those from emp1 table and
also drop it. .
Query:
SQL>Insert into dept values(&deptno,’&dname’,’&loc’);
SQL>create table emp1 as select * from emp;
SQL>insert into emp1 values(7000, ’King’, ‘Pres’, 10, 20,10000,500, ’12-Jan-92’);
SQL>insert into emp1 values(7010, ‘Jack’, ‘VP’, 10, 30, 9000, 300, ’19-Jul-92’);
SQL>Truncate table emp1;
SQL>Drop table emp1;
Output:
5
2. Insert 11 records into the emp table.
Query:
SQL>insert into emp values(&no, ’&name’, ’&job’, &mgr, &deptno, &sal,
&comm, ‘&dob’);
Note: Repeat execution of this statement for 11 times for 11 record insertions
6
Output:
3. Update the emp table to set the default commission of all employees to Rs.1000 /- who are
working as managers.
7
Query:
SQL>update emp set commission=1000 where job like ‘%Manager%’;
Output:
TASK-3
TCL COMMANDS (Save Point, Rollback Commit).
8
Commit command is used to permanently save any transaction into the database.
When we use any DML command like Insert, Update and Delete the changes made by these
commands are not permanent, until the current session is closed, the changes made by these
commands can be rolled back.
To avoid that, we use Commit command to mark the changes as permanent.
Following is commit command's syntax,
Commit;
Roll back
This command restores the database to last committed state. It is also used with
savepoint command to jump to a savepoint in an ongoing transaction.
If we have used the Update command to make some changes into the database, and realise
that those changes were not required, then we can use the Rollback command to rollback
those changes, if they were not commited using the Commit command.
Following is rollback command's syntax,
ROLLBACK TO savepoint_name;
Save Point
This command is used to temporarily save a transaction so that you can rollback to that point
whenever required.
Syntax:
SAVEPOINT savepoint_name;
9
10
11
TASK – 4
SQL Operators
1. List the records in the emp table order by salary in descending order.
Query:
SQL>select * from emp order by sal desc;
Output:
12
3. Display deptno from the table employee avoiding the duplicate values.
Query:
SQL>select distinct deptno from emp;
Output:
4. List all employee names, salary and 15% rise in salary.Label the column as New Sal.
Query:
SQL>select ename, sal, (sal*1.15) “New Sal” from emp;
Output:
13
6. Display all the employees in dept 10 and 20 in alphabetical order of names.
Query:
SQL>select empno, ename, deptno from emp where deptno in(10,20) order by ename;
Output:
8. Display all the details of the records with 5 character names with ‘S’ as starting
character. Query:
SQL>select * from employees where lengty(last_name)=5 and last_name like ‘s%’;
14
9.Display joining date of all employees in the year of 1998.
Query:
SQL>select employee_id ,hire_date from employees where hire_date between ‘1-jan-
1998’ and ’31-dec-1998’;
15
10. List out the employee names whose salary is greater than 5000and lesser than 6000.
Query:
SQL>select ename from emp where sal>5000 and sal>6000;
Output:
16
TASK – 5
SQL Aggregate Functions, Group By clause, Having clause
1. Count the total records in the emp table.
Query: select count(*) from emp;
Output:
3. Determine the maximum and minimum salary of the employees and rename the columns
max_salalary and min_salary.
Query: select max(sal) “max_salary”, min(sal) “min_salary” from emp;
Output:
17
6. Display maximum salaries of all departments having maximum salary>2000.
Query: select deptno, max(sal) from emp group by deptno having max(sal)>2000;
Output:
7. Display job wise sum, avg, max and min salaries in department 10 having
average salary>1000 and result is ordered by sum of salary in desc order.
Query: select job, sum(sal), avg(sal), max(sal), min(sal) from emp where deptno=10 group
by job having avg(sal)>1000 order by sum(sal) desc;
Output:
TASK - 6
18
Exercise on SQL Functions
19
1. Display the employee name concatenated with empno.
Query:
select concat(empno, concat(' ', ename)) from emp;
Output:
2. Display half of employee name in upper case and half in lower case.
Query:
Select upper(substr(ename,0,length(ename)/2))||lower(substr(ename,(length(ename)/
2)+1,length(ena me))) “Name” from emp;
Output:
20
4. Display the DOB of all employees in the format 'dd-mm-yy'.
Query:
select to_char(dob,'dd-mm-yy') from emp;
Output:
7. Display the rounded date in the year format, month format, day format in the employee.
Query:
select round(dob, 'dd'), round(dob, 'month'), round(dob, 'year') from emp;
Output:
21
8.Display the commissions earned by employees. If they do not earn commission, display it as
“No Commission”.
Query:
select employee_id,last_name,nvl(to_char(commission_pct),’No Commission’)”commission”
from employees;
TASK – 7
Nested Queries
1. Find the third highest salary of the employees.
Query:
22
select max(sal) from emp where sal<(select max(sal) from emp where sal<(select max(sal)
from emp));
Output:
2. Display all the employee names and salary whose salary is greater than the minimum
salary and job title starts with 'M'.
Query:
select ename, sal from emp where sal>(select min(sal) from emp) and job like 'M%';
Output:
3. Write a Query to display information about employees who earn more than any employee
in department 30.
Query:
select empno, ename, sal, deptno from emp where sal>any (select sal from emp where
deptno=30);
Output:
4. Display the employees who have the same job as Jones and whose salary>=Fords.
Query:
select empno, ename, sal, job from emp where job= (select job from emp where
ename='Jones') and sal>= (select sal from emp where ename='Fords');
Output:
23
5. List out the employee names who get the salary> maximum salary of dept with deptno 20,30.
Query:
select ename from emp where sal>(select max(sal) from emp where deptno in(20,30));
Output:
7. Create a table employee with the same structure as the table emp and insert rows into
the table using select clauses.
Query:
SQL>create table employee as (select * from emp);
Output:
8. Create a manager table from the emp table which should hold details only about managers.
Query:
24
SQL>create table manager as (select * from emp where job like ‘%Manager%’);
TASK – 8
Joins, Set Operators
1. Display all the employees and departments implementing left outer join.
Query: select e.empno, e.ename, d.deptno, d.dname from emp e left outer join dept d
on(e.deptno=d.deptno);
Output:
2. Display the employee name and department name in which they are working implementing
a full outer join.
25
Query: select e.ename,d.dname from emp e full outer join dept d on(e.deptno=d.deptno);
Output:
3. Write a Query to display the employee name and manager’s name and salary for all
employees.
Query: select e.ename, m.ename “MGR”, m.sal “MGRSAL” from emp e, emp m where
e.mgr=m.empno;
Output:
4. Write a Query to Output the name, job, employee number, department name, location for
each department even if there are no employees.
Query: select e.empno, e.ename, e.job, d.dname, d.loc from emp e join dept d
on(e.deptno=d.deptno);
Output:
26
TASK – 9
Views
1. Create a view that displays the employee id, name and salary of employees who belong
to 10th department.
Query:
Create view emp_view as select employee_id,last_name,salary from employees where
department_id=10;
27
2. Create a view with read only option that displays the employee name and their department
name
Query:
create view emp_dept as select employee_id,last_name,department_id from employees with
read onlyh constraint emp_dept_readonly;
28
4. Execute the DML commands on the view created.and drop them.
Query:
• delete from my_view where empno=7900;
• insert into manager_view values(8000, 'Grant', 'ExeHead', null, 10, 19000,
200, '19-dec-90');
• update manager_view set sal=15000 where sal<11000;
Output:
Drop a view.
Query: drop view my_view;
Output:
29
TASK – 10
Practices on DCL Commands
1. SQL>Create user test identified by pswd;
Output:
2.SQL> Grant create session, create table, create sequence, create view to test;
Output:
30
Output:
INDEXES
1. Function based indexes:
SQL>create index emp_index on emp (upper(ename));
Output:
31
2. Creating Index while creating Table.
SQL>create table emp2 (empno number(6) PRIMARY KEY USING INDEX (CREATE
INDEX emp_idx ON emp2(empno)) ,ename varchar2(20),job varchar2(20));
Output:
User-defined indexes:
SQL>select index_name,table_name from user_indexes where table_name='EMP2';
Output:
3. create table emp3(empno number(6) primary key, ename varchar2(20), job varchar2(10));
Output:
Default indexes.
SQL>select index_name,table_name from user_indexes where table_name='EMP3';
Output:
4.
Displaying all the indexes.
SQL>Select index_name, table_name from user_indexes;
Output:
32
4. SQL>select table_name, index_name, column_name from user_ind_columns where
table_name='EMPLOYEES';
Output:
5. Dropping an index:
SQL> drop index emp_index;
Output:
SEQUENCE
1. SQL>create sequence my_seq start with 10 increment by 10 maxvalue 100 nocache;
Output:
33
SQL>insert into dept values(my_seq.nextval,'Executive','US');
SQL>insert into dept values(my_seq.nextval,'Marketing','UK');
TASK - 11
1. Write a PL/SQL code to retrieve the employee name, join date and designation
from employee database of an employee whose number is input by the user.
Program:
/*Employee details*/
DECLARE
v_name varchar2(25);
v_joindate date;
v_dsgn employees.job_id%type;
BEGIN
END;
34
Output:
Program:
/*Calculate Tax*/
DECLARE
v_sal number(8);
v_tax number(8,3);
v_name varchar2(25);
BEGIN
if v_sal<10000 then
v_tax:=v_sal*0.1;
v_tax:=v_sal*0.2;
else
v_tax:=v_sal*0.3;
END IF;
DBMS_OUTPUT.PUT_LINE('Name:'||v_name||' Salary:'||v_sal||'Tax:'||v_tax);
END;
Output:
35
3. Write a PL/SQL program to display top 10 employee details based on salary using cursors.
Program:
/*Top 10 salary earning employee details*/
DECLARE
cursor c_emp_cursor is select employee_id, last_name, salary from employees order by
salary desc;
v_rec c_emp_cursor%rowtype;
v_i number(3):=0;
BEGIN
open c_emp_cursor;
loop
v_i:=v_i+1;
fetch c_emp_cursor into v_rec;
exit when v_i>10;
DBMS_OUTPUT.PUT_LINE(v_rec.employee_id||' '||v_rec.last_name||' '||v_rec.salary);
END LOOP;
close c_emp_cursor;
END;
/
Output:
4. Write a PL/SQL program to update the commission values for all employees with
salary less than 5000 by adding 1000 to existing employees.
36
Program:
/*Updation*/
declare
cursor c_emp is select salary,commission_pct from employees;
v_emp c_emp%rowtype;
v_temp number(7,2);
v_temp1 number;
BEGIN
open c_emp;
loop
fetch c_emp into v_emp;
exit when c_emp
%notfound;
v_temp1:=v_emp.commission_pct;
v_temp:=(v_emp.salary*v_emp.commission_pct)+1000;
v_temp:=v_temp/v_emp.salary;
if(v_emp.salary<5000) then
update employees set commission_pct=v_temp where employee_id=v_temp.employee_id;
end if;
DBMS_OUTPUT.PUT_LINE('Commission % updated from '||v_temp1||' to '||v_temp);
end loop;
END;
/
Output:
37
TASK – 12
1. Write a trigger on the employee table which shows the old values and new values of
ename after any updations on ename on Employee table.
Program:
create or replace trigger t_emp_name after update of last_name on salary_table FOR EACH
ROW
begin
DBMS_OUTPUT.PUT_LINE('Name updated from '||:OLD.last_name||' to
'||:NEW.last_name);
END;
/
Output:
2. Write a PL/SQL procedure for inserting, deleting and updating in employee table.
38
Program:
create or replace procedure proc_dml (p_id emp.employee_id%type, p_sal number,p_case
number)
is
BEGIN
case p_case
when 1 then
DBMS_OUTPUT.PUT_LINE('Insertion...');
insert into emp(employee_id,last_name,email,hire_date,job_id)
values(p_id,'Franco',’FJames’,'12-JAN-02','ST_CLERK');
when 2 then
DBMS_OUTPUT.PUT_LINE('Deletion...');
delete from emp where employee_id=p_id;
when 3 then
DBMS_OUTPUT.PUT_LINE('Updation...');
update emp set salary=p_sal where employee_id=p_id;
end case;
DBMS_OUTPUT.PUT_LINE('DML operation performed on '||SQL%rowcount||' rows');
END;
/
DECLARE
v_id employees.employee_id%type:=&id;
v_sal employees.salary%type:=&sal;
v_case number:=&case1or2or3;
begin
proc_dml(v_id,v_sal,v_case);
END;
/
Output:
39
3. Write a PL/SQL function that accepts department number and returns the total salary of
the department.
Program:
create function func_dept (p_dept number) return number is
v_total number;
BEGIN
select sum(salary) into v_total from employees where department_id=p_dept;
return v_total;
END;
/
DECLARE
v_dept number:=&department_id;
v_total number;
BEGIN
v_total:=func_dept(v_dept);
DBMS_OUTPUT.PUT_LINE('Total salary in Department '||v_dept||' is '||v_total);
END;
/
Output:
40
Task-13
1. Write a PL/SQL program to handle predefined exceptions.
Program:
declare
v_id number(6):=&employee_id;
v_sal employees.salary%type;
v_name employees.last_name%type;
v_job employees.job_id%type;
begin
select last_name, salary into v_name, v_sal from employees where employee_id=v_id;
DBMS_OUTPUT.PUT_LINE(v_name||q'['s salary is ]'||v_sal);
select job_id into v_job from employees where last_name=v_name;
DBMS_OUTPUT.PUT_LINE(v_name||q'['s job is ]'||v_job);
EXCEPTION
when no_data_found then
DBMS_OUTPUT.PUT_LINE('No employee with ID:'||v_id);
when too_many_rows then
DBMS_OUTPUT.PUT_LINE('Many employees with Name:'||v_name);
41
when others then
DBMS_OUTPUT.PUT_LINE('Some other error occured');
end;
/
Output:
42
/
Output:
b. Package body for the insert, retrieve, update and delete operations on student table.
Program:
create or replace package body pack_dml is
procedure proc_dml(p_id number,choice number) is
v_name varchar2(20);
v_total number;
BEGIN
case choice
when 1 then
DBMS_OUTPUT.PUT_LINE('Insertion...');
insert into student values(p_id,'Franco',90);
when 2 then
43
DBMS_OUTPUT.PUT_LINE('Deletion...');
delete from student where sid=p_id;
when 3 then
DBMS_OUTPUT.PUT_LINE('Updation...');
update student set total=total+1 where sid=p_id;
when 4 then
select sname,total into v_name,v_total from student where sid=p_id;
DBMS_OUTPUT.PUT_LINE('Total marks of '||v_name||' is '||v_total);
end case;
DBMS_OUTPUT.PUT_LINE('DML operation performed on '||SQL%rowcount||'
rows');
END proc_dml;
END pack_dml;
/
BEGIN
pack_dml.proc_dml(&StudentID,&choice1or2or3or4);
END;
/
Output:
44
45
Task-14:
Table Locking (Shared Lock and Exclusive Lock)
Problem Description
Oracle uses lock to control concurrent access to data. Locks are mechanisms intended to
prevent destructive interaction between users accessing the same data. Table locks lock
the entire tables, while row locks lock just selected rows. Thus locks are used to ensure
data integrity while allowing max concurrent access to data by unlimited users.
Locks are used to achieve two important goals. 1. Data concurrency 2. Read consistency
Oracle lock is fully automatic and requires no user action .DBA locks the oracle data
while executing SQL statement. This type of locking is called implicit locking. When a
lock is put by user it is called explicit locking.
Types of locks
Two levels of lock that a DBA can apply. They are
1. Shared : Multi user can hold various share lock on a single resource
2. Exclusive: It prohibits all sharing of resources i.e. only one use has the sole ability
to alter the resources until locks are released.
Syntax:
LOCK TABLE [Table name] IN { ROW SHARE | ROW EXCLUSIVE | SHARE
UPDATE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE } MODE [
NOWAIT]
ROW SHARE Row share locks all concurrent access to a table.
SHARE UPDATE They prohibit other users to lock entire table exclusively
ROW EXCLUSIVE Row exclusive locks the same as row share locks, but also prohibit
locking in share mode. These locks are acquired when updating, inserting
or deleting.
SHARE ROW EXCLUSIVE They are used to lock whole table to selective update and to
allow other users to lock at row in the table but not lock the table in share
mode or to update rows.
NO WAIT Indicates that you do not wish to wait if resources are unavailable.
All locks are released under the following circumstances:
The transaction is committed successfully
A rollback is performed
A rollback to a save point will release locks set after specified save point
Row-level-locks are not released by rolling back to a savepoint
Data locks are released by log off
Input
Lock table emp in exclusive mode no wait;
Output
Table Locked
46
SQL LAB QUERIES
1. DISPLAY THE DEPT INFORMATION FROM DEPARTMENT
TABLE SQL> SELECT * FROM DEPT;
47
10. DISPLAY NAMES OF EMPLOYEES WHO DONOT EARN COMISSION.
SQL> SELECT ENAME FROM EMP WHERE COMM = 0 OR COMM IS NULL;
12.DISPLAY THE NAMES OF EMPLOYEES WHO ARE WORKING IN THE COMPANY FOR
THE PAST
FIVE YEARS.
SQL> SELECT ENAME FROM EMP WHERE SYSDATE-HIREDATE > 5;
13. DISPLAY THE NAMES OF EMPLOYEES WHO HAVE JOINED THE COMPANY BEFORE
30THJUNE 90 AND AFTER 31ST DEC 90.
SQL> SELECT ENAME FROM EMP WHERE HIREDATE NOT BETWEEN '30-JUNE-1980'
AND
'31-DEC-1981'
48
EMPLOYEES WORKING AS CLERKS , SALESMAN OR ANALYST.
SQL> SELECT ENAME FROM EMP WHERE DEPTNO = 10 OR DEPTNO =20 OR DEPTNO =
40 AND
JOB = 'CLERK' OR JOB = 'SALESMAN' OR JOB = 'ANALYST';
20. DISPLAY THE NAMES OF EMPLOYEE WHOSE NAME ENDS WITH ALPHABET S.
SQL> SELECT ENAME FROM EMP WHERE ENAME LIKE '%S';
21. DISPLAY THE NAMES OF EMPLOYEES WHOSE NAMES HAVE SECOND ALPHABET A
IN THEIR
NAMES.
SQL> SELECT ENAME FROM EMP WHERE ENAME LIKE '_A%';
23. DISPLAY THE NAMES OF EMPLOYEES WHO ARE NOT WORKING AS MANAGERS.
SQL> SELECT ENAME FROM EMP WHERE JOB != 'MANAGER';
24. DISPLAY THE NAMES OF EMPLOYEES WHO ARE NOT WORKING AS SALESMAN OR
CLERK OR
ANALYST.
SQL> SELECT ENAME FROM EMP WHERE JOB != 'CLERK' OR JOB !='SALESMAN' OR
JOB != 'ANALYST';
49
27. DISPLAY THE TOTAL SALARY BEING PAID TO ALL
EMPLOYEES. SQL> SELECT SUM(SAL+NVL(COMM,0)) FROM EMP;
31. DISPLAY THE MAXIMUM SALARY FROM EMPLOYEE TABLE BEING PAID TO
CLERK. SQL> SELECT MAX(SAL+NVL(COMM,0)) FROM EMP WHERE JOB = 'CLERK';
33. DISPLAY THE MINIMUM SALARY FROM EMPLOYEE TABLE BEING PAID
TO SALESMAN.
SQL> SELECT MIN(SAL+NVL(COMM,0)) FROM EMP WHERE JOB = 'SALESMAN';
50
SQL> SELECT * FROM EMP ORDER BY SAL DESC
39. DISPLAY EMPNO, ENAME, DEPTNO, AND SAL.SORT THE OUTPUT FIRST BASED
ON NAME AND WITHIN NAME BY DEPTNO AND WITHIN DEPTNO BY SAL.
SQL> SELECT * FROM EMP ORDER BY ENAME,DEPTNO,SAL;
40. DISPLAY THE NAME OF THE EMPLOYEE ALONG WITH THEIR ANNUAL
SALARY (SAL*12). THE NAME OF EMPLOYEE EARNING HIGHEST SALARY SHOULD
APPEAR FIRST.
41. DISPLAY NAME,SAL,HRA,PF,DA,TOTALSAL FOR EACH EMPLOYEE.THE OUTPUT
SHOULD BE IN THE ORDER OF TOTAL SAL ,HRA 15% OF SAL,DA 10% OF SAL , PF 5% OF
SAL, TOTAL SAL WILL BE SAL+HRA+DA-PF.
43. DISPLAY VARIOUS JOBS AND TOTAL NUMBER OF EMPLOYEES WITHIN EACH
JOB GROUP.
SQL> SELECT DISTINCT JOB,COUNT(*) FROM EMP GROUP BY JOB;
44. DISPLAY DEPT NUMBERS AND TOTAL SALARY FOR EACH DEPARTMENT.
SQL> SELECT DEPTNO,SUM(SAL+NVL(COMM,0)) FROM EMP GROUP BY
DEPTNO;
45. DISPLAY DEPT NUMBERS AND MAXIMUM SALARY FOR EACH DEPARTMENT.
SQL> SELECT DEPTNO,MAX(SAL+NVL(COMM,0)) FROM EMP GROUP BY DEPTNO;
46. DISPLAY VARIOUS JOBS AND TOTAL SALARY FOR EACH JOB.
SQL> SELECT DISTINCT JOB,SUM(SAL+NVL(COMM,0)) FROM EMP GROUP BY JOB;
47.DISPLAY EACH JOB ALONG WITH MINIMUM SALARY BEING PAID IN EACH
JOB GROUP.
SQL> SELECT DISTINCT JOB, MIN(SAL+NVL(COMM,0)) FROM EMP GROUP BY JOB;
51
48. DISPLAY THE DEPARTMENT NUMBERS WITH MORE THAN THREE EMPLOYEES IN
EACH DEPT.
SQL> SELECT DEPTNO, COUNT(*) FROM EMP GROUP BY DEPTNO HAVING COUNT(*)>3;
49. DISPLAY THE VARIOUS JOBS ALONG WITH TOTAL SAL FOR EACH OF THE
JOBS WHERE
TOTAL SAL > 40000.
SQL> SELECT DISTINCT(JOB),SUM(SAL+NVL(COMM,0)) FROM EMP GROUP BY JOB
HAVING
SUM(SAL+NVL(COMM,0)) > 40000;
50. DISPLAY THE VARIOUS JOBS ALONG WITH TOTAL NUMBER OF EMPLOYEES IN
EACH JOB.
SQL> SELECT DISTINCT(JOB),COUNT(*) FROM EMP GROUP BY JOB HAVING COUNT(*)
>3;
53. DISPLAY THE NAMES OF THE SALESMAN WHO EARNS A SALARY MORE THAN THE
HIGHES SALARY OF ANY CLERK.
SQL> SELECT ENAME FROM EMP WHERE JOB = 'SALESMAN' AND SAL>
(SELECT MAX(SAL) FROM EMP WHERE JOB = 'CLERK');
54. DISPLAY THE NAMES OF CLERKS WHO EARN SALARY MORE THAN THAT OF
JAMES AND LESS THAN THAT OF SCOTT.
SQL> SELECT ENAME FROM EMP WHERE JOB = 'CLERK' AND
SAL<(SELECT SAL FROM EMP WHERE ENAME LIKE 'SCOTT')
AND SAL >(SELECT SAL FROM EMP WHERE ENAME LIKE 'JAMES');
55.DISPLAY THE NAMES OF EMPLOYEES WHO EARN A SAL MORE THAN THAT OF
JAMES OR THAT
52
SALARY GREATER THAN THAT OF SCOTT.
SQL> SELECT ENAME FROM EMP WHERE SAL>( SELECT SAL FROM EMP WHERE
ENAME LIKE
'SCOTT');
56. DISPLAY THE NAMES OF THE EMPLOYEES WHO EARN HIGHEST SALARY IN
THEIR RESPECTIVE DEPARTMENTS.
SQL> SELECT E.ENAME,E.SAL FROM EMP E WHERE E.SAL = (SELECT MAX(F.SAL)
FROM EMP F GROUP BY F.DEPTNO HAVING E.DEPTNO = F.DEPTNO);
59. DISPLAY THE JOB GROUPS HAVING TOTAL SALARY GREATER THAN
THE MAXIMUM SALARY
FOR MANAGERS.
SQL> SELECT DISTINCT(JOB),SUM(SAL+NVL(COMM,0)) FROM EMP GROUP BY JOB
HAVING SUM(SAL+NVL(COMM,0)) > (SELECT MAX(SAL) FROM EMP WHERE JOB =
'MANAGER');
53
SAL >ALL(SELECT SAL FROM EMP WHERE DEPTNO != 10);
54
71. DISPLAY THE INFORMATION FROM EMP TABLE.WHEREVER JOB 'MANAGER'
IS FOUND ., IT SHOULD BE DISPLAYED AS BOSS.
SQL> SELECT JOB,DECODE(JOB,'MANAGER','BOSS',' ') FROM EMP;
76. DISPLAY THE FOLLOWING OUTPUT FOR EACH ROW FROM EMP TABLE AS
'SCOTT HAS JOINED
THE COMPANY ON WEDNESDAY 13TH AUGUST NINETEEN NINETY'.
SQL> SELECT ENAME || 'HAS JOINED THE COMPANY ON'
|| TO_CHAR(HIREDATE,'DAY DDTH MONTH YEAR') FROM EMP;
77. DISPLAY THE COMMON JOBS FROM DEPARTMENT NUMBER 10 AND 20.
SQL> SELECT JOB FROM EMP WHERE DEPTNO = 10 AND DEPTNO =20;
79. DISPLAY THE DETAILS OF EMPLOYEES WHO ARE IN SALES DEPT AND GRADE IS
3. SQL> SELECT E.ENAME,D.DNAME,S.GRADE FROM EMP E,DEPT D,SALGRADE S
55
WHERE E.DEPTNO = D.DEPTNO AND D.DNAME = 'SALES' AND S.GRADE = 3;
80. DISPLAY THOSE EMPLOYEES WHOSE NAME CONTAINS NOT LESS THAN 4
CHARS. SQL> SELECT ENAME FROM EMP WHERE LENGTH(ENAME)>3;
81. DISPLAY THOSE DEPARTMENTS WHOSE NAME START WITH 'S' WHILE
LOCATION NAME
END WITH 'O';
SQL> SELECT DNAME FROM DEPT WHERE DNAME LIKE 'S%' AND LOC LIKE '%O';
83) DISPLAY NAME AND SALARY OF FORD IF HIS SAL IS EQUAL TO HIGH SAL OF
HIS GRADE.
SQL>SELECT E.ENAME,E.SAL FROM EMP E,SALGRADE S WHERE E.ENAME='FORD' AND
E.SAL=S.HISAL;
85) LIST OUT ALL THE EMPLOYEES NAME,HIS JOB, HIS DEPT NAME AND
SALARY GRADE FOR EVERY ONE IN THE COMPANY EXCEPT 'CLERK'.SORT ON
SALARY.
SQL>SELECT E.ENAME EMPLOYEE,M.ENAME MANAGER,S.GRADE,D.DNAME FROM
EMP E,EMP M,SALGRADE S,DEPT D
WHERE E.MGR=M.EMPNO AND E.ENAME!='CLARK' AND D.DEPTNO=E.DEPTNO AND
E.SAL BETWEEN S.LOSAL AND S.HISAL ORDER BY E.SAL DESC ;
56
87) FIND OUT THE TOP FIVE EARNERS OF THE COMPANY.
SQL>SELECT * FROM EMP E WHERE 5>(SELECT COUNT(*) FROM EMP M WHERE
E.SAL<M.SAL);
90) DISPLAY DNAME WHERE ATLEAST 3 ARE WORKING AND DISPLAY ONLY DNAME.
SQL> SELECT D.DNAME FROM EMP E,DEPT D WHERE 3<(SELECT COUNT(*) FROM EMP)
AND D.DEPTNO=E.DEPTNO GROUP BY D.DNAME,E.DEPTNO,D.DEPTNO;
93) DISPLAY THOSE EMPLOYEES WHOSE SALARY IS LESS THAN HIS MANAGER
BUT MORE THAN SALARY OF ANY OTHER MANAGER.
SQL>SELECT E.ENAME,E.SAL FROM EMP E WHERE E.SAL<(SELECT N.SAL FROM EMP N
WHERE E.MGR=N.EMPNO) AND SAL>ANY(SELECT M.SAL FROM EMP M WHERE E.MGR!
=M.EMPNO)
57
SQL> SELECT * FROM EMP E WHERE 5>(SELECT COUNT(*) FROM EMP M WHERE
E.SAL>M.SAL);
95) FIND OUT THE NO.OF EMPLOYEES WHOSE SALARY IS GREATER THAN
THERE MANAGERS SALARY.
SQL> SELECT COUNT(*) FROM EMP E,EMP M WHERE E.MGR=M.EMPNO AND
E.SAL>M.SAL;
96) DISPLAY THOSE MANAGERS WHO ARE NOT WORKING UNDER PRESIDENT
BUT THEY ARE WORKING UNDER ANY OTHER MANAGER.
SQL>SELECT E.ENAME FROM EMP E WHERE MGR IN(SELECT M.EMPNO FROM EMP M
WHERE M.ENAME!='KING' AND E.MGR=M.EMPNO);
98) DELETE THOSE RECORDS FROM EMP TABLE WHOSE DEPTNO NOT AVAILABLE IN
DEPT TABLE.
SQL> DELETE EMP WHERE DEPTNO NOT IN(SELECT DEPTNO FROM DEPT);
99) DISPLAY THOSE EARNERS WHOSE SALARY IS OUT OF THE GRADE AVAILABLE
IN SALGRADE TABLE.
SQL> SELECT E.ENAME,E.SAL FROM EMP E,SALGRADE S WHERE E.SAL<LOSAL AND
E.SAL>HISAL;
58
103) DISPLAY THOSE EMPLOYEES WHOSE SALARY CONTAINS ATLEAST 4
DIGITS. SQL> SELECT * FROM EMP WHERE LENGTH(SAL)>=4;
106) DISPLAY THOSE EMPLOYEES WHOSE 10% SALARY IS EQUAL TO THE YEAR
OF JOINING.
SQL> SELECT * FROM EMP WHERE 0.1*SAL IN (SELECT
TO_NUMBER(TO_CHAR(HIREDATE,'YY')) FROM EMP);
107) DISPLAY THOSE EMPLOYEES WHO ARE WORKING IN SALES OR RESEARCH DEPT.
SQL> SELECT * FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE
DNAME IN('SALES','RESEARCH'));
109) DISPLAY THOSE EMPLOYEES WHO JOINED IN THE COMPANY BEFORE 15th OF THE
MONTH.
SQL> SELECT * FROM EMP WHERE TO_NUMBER(TO_CHAR(HIREDATE,'DD'))<15;
59
112) DISPLAY THE DEPARTMENT NAME WHERE THE NO.OF CHARACTERS OF
WHICH IS EQUAL TO
THE NO. OF EMPLOYEES IN ANY OTHER DEPARTMENT.
SQL> SELECT DNAME FROM DEPT WHERE LENGTH(DNAME) IN (SELECT COUNT(*)
FROM EMP GROUP BY DEPTNO);
117) LIST OUT THE EMPLOYEES NAME AND SALARY INCREASED BY 15%
AND EXPRESSED
AS WHOLE NUMBER OF DOLLAR.
SQL>SELECT ENAME,ROUND(1.15*SAL/48,2)||'$' DOLLAR FROM EMP;
118) LIST ALL THE EMPLOYEES WITH HIREDATE IN THE FORMAT 'JUNE 04 1988'.
SQL> SELECT ENAME,TO_CHAR(HIREDATE,'MONTH DD YYYY') HIREDATE FROM EMP;
119) PRINT A LIST OF EMPLOYEES DISPLAYING 'LESS SALARY' IF SAL<1500.IF
EXACTLY 1500
DISPLAY AS 'EXACT SALARY' AND IF GREATER THAN 1500 DISPLAY AS 'MORE
SALARY'.
60
SQL> SELECT ENAME,SAL||' LESS SALARY' FROM EMP WHERE SAL<1500
UNION
SELECT ENAME,SAL||' EXACT SALARY' FROM EMP WHERE SAL=1500
UNION
SELECT ENAME,SAL||' MORE SALARY' FROM EMP WHERE SAL>1500;
120) WRITE A QUERY TO CALCULATE THE LENGTH OF EMPLOYEE HAS BEEN WITH
THE COMPANY.
SQL> SELECT ENAME,LENGTH(ENAME) LENGTH FROM EMP;
121) DISPLAY THOSE MANAGERS WHO ARE GETTING SALARY LESS THAN
HIS EMPLOYEE.
SQL>SELECT E.ENAME,E.SAL FROM EMP E WHERE E.EMPNO IN
(SELECT M.MGR FROM EMP M WHERE M.MGR=E.EMPNO AND E.SAL<M.SAL)
122) PRINT THE DETAILS OF ALL THE EMPLOYEES WHO ARE SUB ORDINATES TO
BLAKE.
SQL> SELECT * FROM EMP WHERE MGR=(SELECT EMPNO FROM EMP WHERE
ENAME='BLAKE');
123) DISPLAY THOSE EMPLOYEES WHOSE MANAGER NAME IS JONES AND ALSO
WITH HIS
MANAGER NAME.
SQL> SELECT E.ENAME EMPLOYEE,M.ENAME MANAGER FROM EMP E,EMP M WHERE
M.EMPNO=E.MGR AND M.ENAME='JONES';
125) FIND OUT THE AVG SAL AND AVG TOTAL REMUNERATION FOR EACH JOB
TYPE. SQL> SELECT AVG(SAL),AVG(SAL+NVL(COMM,0)) FROM EMP GROUP BY JOB;
61
126) LIST ENAME,JOB ANNUAL SAL,DEPTNO,DNAME AND GRADE WHO EARN
MORE THAN
30000 PER YEAR AND WHO ARE NOT CLERKS.
SQL> SELECT E.ENAME,E.JOB,E.SAL*12 ANN_SAL,S.GRADE,D.DNAME FROM EMP
E,SALGRADE S,DEPT D
WHERE E.SAL*12>30000 AND E.DEPTNO=D.DEPTNO AND E.SAL BETWEEN
S.LOSAL AND S.HISAL
AND E.JOB!='CLERK';
127) FIND OUT THE JOB THAT WAS FILLED IN THE FIRST HALF OF 1983 AND THE
SAME JOB THAT WAS FILLED DURING THE SAME PERIOD ON 1984.
SQL> SELECT JOB FROM EMP WHERE TO_NUMBER(TO_CHAR(HIREDATE,'MM'))<6 AND
TO_NUMBER(TO_CHAR(HIREDATE,'YY'))=83
INTERSECT
SELECT JOB FROM EMP WHERE TO_NUMBER(TO_CHAR(HIREDATE,'MM'))<6
AND TO_NUMBER(TO_CHAR(HIREDATE,'YY'))=84;
130. FIND OUT THE EMPLOYEES BY NAME AND NUMBER ALONG WITH THIER
MANAGER'S NAME AND NUMBER ALSO DISPLAY NOMANAGER WHO HAS
NOMANAGER .
SQL>SELECT E.EMPNO,E.ENAME,M.EMPNO,'MANAGER',M.ENAME MANAGERNAME
FROM EMP E,EMP M WHERE E.MGR=M.EMPNO UNION SELECT
T.EMPNO,T.ENAME,T.MGR,'NOMANAGER',X.ENAME FROM EMP T,EMP X WHERE
T.MGR IS NULL AND T.EMPNO=X.EMPNO
SQL>SELECT * FROM EMP E WHERE SAL =(SELECT MIN(SAL) FROM EMP WHERE
JOB=E.JOB);
62
132. FIND OUT MOST RECENTLY HIRED EMPLOYEE IN EACH
DEPT SQL>SELECT E.ENAME,E.DEPTNO FROM EMP E
WHERE E.HIREDATE=(SELECT MAX(HIREDATE) FROM EMP WHERE
DEPTNO=E.DEPTNO)
133. DISPLAY ENAME AND SALARY FOR EACH EMPLOYEE WHO EARN A SALARY
> THE
AVERAGE OF THEIR DEPARTMENT
SQL>SELECT E.ENAME,E.SAL,E.DEPTNO FROM EMP E WHERE
E.SAL > ANY(SELECT AVG(F.SAL) FROM EMP F WHERE E.DEPTNO=F.DEPTNO)ORDER
BY E.DEPTNO
135. IN WHICH YEAR DID MOST PEOPLE JOIN THE COMPANY .DISPLAY THE YEAR
AND NUMBER OF EMPLOYEES.
SQL>SELECT TO_CHAR(HIREDATE,'YYYY'),COUNT(*) FROM EMP
GROUP BY TO_CHAR(HIREDATE,'YYYY') HAVING COUNT(*)=(SELECT MAX(COUNT(*))
FROM EMP
GROUP BY TO_CHAR(HIREDATE,'YYYY'))
63
139. SELECT DEPT NAME ,DEPT NUMBER & SUM OF SALARIES.
SQL> SELECT D.DNAME,D.DEPTNO,SUM(E.SAL) FROM EMP E,DEPT D
GROUP BY D.DEPTNO,D.DNAME,E.DEPTNO
HAVING D.DEPTNO=E.DEPTNO
146. DISPLAY THOSE EMPLOYEES WHOOSE JOINED MONTH AND DATE ARE EQUAL
64
SQL> SELECT ENAME FROM EMP ,SALGRADE S WHERE
TO_CHAR(HIREDATE,'MM')=S.GRADE;
147. DISPLAY THOSE EMPLOYEES WHOOSE JOINING DATE IS AVAILABLE IN DEPT NO.
SQL> SELECT ENAME FROM EMP ,DEPT WHERE
TO_CHAR(HIREDATE,'DD')=DEPT.DEPTNO;
65