Você está na página 1de 76

QUERY APPLICATION 1

SQL Languages
Data Definition Languages(DDL)
Data Manipulation Languages(DML)
Data Control Language(DCL)
.
DATA DEFINITION LANGUAGE: Used by the DBA and database designers to
specify the conceptual schema of a database. In many DBMSs, the DDL is also used to
define internal and external schemas (views). In some DBMSs, separate storage
definition language (SDL) and view definition language (VDL) are used to define
internal and external schemas.
1. CREATE
CREATE TABLE [user.]table
({column datatype [DEFAULT expr]};
2. ALTER
Use the ALTER TABLE statement to:
Add a new column
Modify an existing column
Define a default value for the new column
Drop a column
ALTER TABLE
table
ADD [CONSTRAINT constraint] type (column);
ALTER TABLE table
MODIFY
(column datatype [DEFAULT ][, column datatype]...);
ALTER TABLE table
DROP
(column);
3. DROP
DROP TABLE tablename;
4. RENAME
RENAME oldtablename to newtablename;
5. TRUNCATE
TRUNCATE TABLE tablename
1

Roll No.

DATA MANIPULATION LANGUAGE (DML): Used to specify database retrievals


and updates.
DML commands (data sublanguage) can be embedded in a general-purpose
programming language (host language), such as COBOL, C or an Assembly Language.
Alternatively, stand-alone DML commands can be applied directly (query language).
1. INSERT
Insertion with single row
INSERT INTO
VALUES

table [(column [, column...])]


(value [, value...]);

2. DELETE
DELETE [FROM] table [WHERE

condition];

3. SELECT
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table;
4. UPDATE
UPDATE table
SET column = value [, column = value, ...]
[WHERE
condition];
DATA CONTROL LANGUAGE(DCL)
1. GRANT
GRANT select ON table1,table2 TO A1 WITH GRANT OPTION;
2. REVOKE
REVOKE select ON table1 FROM A1;

Roll No.

Query 1: Create a table STUDENT(rollno:integer, name:string, address:string,


phno:integer, dob:date,percentage:real)
SQL> CREATE TABLE STUDENT(

ROLL_NO NUMERIC(10),
NAME CHAR(15),
ADDRESS VARCHAR(25),
P_NO NUMERIC(10),
DOB DATE, CLASS CHAR(5),
PERCENTAGE NUMERIC(5,2));

Table created.
Query 2: Add constraint primary key to roll_no.
SQL>ALTER TABLE STUDENT
ADD CONSTRAINT PRIMARY KEY NUMERIC(ROLL_NO);
Table Altered.
Query 3: Write a query to insert into table STUDENT.
SQL> INSERT INTO STUDENT VALUES (1,'BARRY','E-40',9911271666,'20-DEC1988','MCA-1',90);
1 row created.
SQL>INSERT INTO STUDENT VALUES (2,'LUV','E-40',NULL,'20-DEC-1989','MCA1',89.2);
1 row created.
Query 4: Select rollno and name of the student from student table.
SQL> SELECT ROLL_NO, NAME FROM STUDENT;
ROLL_NO
---------1
2

NAME
--------------BARRY
LUV

Query 5: Write a query to update name of the student whose roll number is
2.
SQL> UPDATE STUDENT SET NAME = RAM WHERE ROLL_NO=2;
1 row updated.

Roll No.

QUERY APPLICATION-2
ADVANCED DDL COMMANDS
1. CREATE WITH CONSTRAINTS
CREATE TABLE [user.]table
({column datatype [DEFAULT expr]
[column_constraint | table_constraint]}
[,{column datatype [DEFAULT expr]
[column_constraint |
able_constraint]}])[AS query ].
2. ALTER
ALTER TABLE
table
ADD [CONSTRAINT constraint] type (column);
3. INSERT
Insertion with single row.
INSERT INTO
VALUES

table [(column [, column...])]


(value [, value...]);

Insertion with Multiple row


INSERT INTO table VALUES[(&column[, column])];
4. DESC
DESC tablename

Roll No.

Query 1: Create following table


sailor(sid:integer ,sname: string, rating:integer ,age:integer ,income:real)
boat(bid:integer,bname:string,color:string)
reserve(sid:integer,bid:integer,dot:date, dor:date)
SQL> create table sailor(sid numeric(10) primary key,sname char(20) not null,rating
numeric(2),age numeric(5) not null,income number(8,2));
Table created.
SQL>create table boat(bid numeric(10) primary key,bname varchar(20) not null,
bcolor varchar(10) check(bcolor In ('red','black','brown','white')));
Table created.
SQL> create table reserve(sid numeric(10) references sailor(sid),bid numeric(10)
references boat(bid),dor date,dot date);
Table created.
Query 2: Wrie a query to describe sailor,boat and reserve table.
SQL> desc sailor;
Name
Null?
Type
----------------------------------------- -------- ---------------------------SID
NOT NULL NUMBER(10)
SNAME
NOT NULL CHAR(20)
RATING
NUMBER(2)
AGE
NOT NULL NUMBER(5)
INCOME
NUMBER(8,2)
SQL> desc boat;
Name
Null?
Type
----------------------------------------- -------- ---------------------------BID
NOT NULL NUMBER(10)
BNAME
NOT NULL VARCHAR2(20)
BCOLOR
VARCHA2(10)

Roll No.

SQL> desc reserve;


Name
Null? Type
----------------------------------------- -------- ---------------------------SID
NUMBER(10)
BID
NUMBER(10)
DOR
DATE
DOT
DATE
Query 3: Write a query to add constraint primarykey(sid,bid,dor) on reserve
table.
SQL>alter table reserve add primary key(sid,bid,dor);
Table altered
Query 4: Write a query to insert into sailor,boat and reserves table.
Insertion with single rows
SQL> insert into sailor values(01,'saru',1,23,10000);
1 row created.
SQL> insert into sailor values(02,'raj',2,39,15000);
1 row created.
SQL> insert into sailor values(03,'ram',3,34,14000)
1 row created.
SQL> insert into sailor values(4,'shyam',5,28,13000);
1 row created.
SQL> insert into boat values(14,'abc','red');
1 row created.
SQL> insert into boat values(15,'xyz','black');
1 row created.
SQL> insert into boat values(16,'efg','white');
1 row created.
SQL> insert into boat values(17,'pqr','black');
1 row created.

Roll No.

Insertion with multiple rows


SQL> insert into reserve values(&sid, &bid, &dor,&dot);
Enter value for sid: 01
Enter value for bid: 14
Enter value for dor: 24 jan 2011
Enter value for dot: 2 feb 2011
1 row created.
SQL>/
Enter value for sid: 02
Enter value for bid: 15
Enter value for dor: 25 jan 2011
Enter value for dot: 5 feb 2011
1 row created.
SQL>/
Enter value for sid: 03
Enter value for bid: 15
Enter value for dor: 06 feb 2011
Enter value for dot: 18 feb 2011
1 row created.
SQL>/
Enter value for sid: 01
Enter value for bid: 16
Enter value for dor: 27 jan 2011
Enter value for dot: 9 feb 2011
1 row created.
SQL>/
Enter value for sid: 02
Enter value for bid: 15
Enter value for dor: 7 feb 2011
Enter value for dot: 14 feb 2011
1 row created.

Roll No.

Query 6: Show the data of student, boat and reserve table.


SQL> select* from sailor;
SID
-----1
2
3

SNAME
-------------saru
raj
ram

RATING
-------------1
2
3

AGE
-------23
39
34

INCOME
---------10000
15000
14000

SQL> select * from boat;


BID
-----14
15
16

BNAME
--------------abc
xyz
efg

BCOLOR
---------red
black
white

SQL> select * from reserve;


SID
-----1
2
3
1
2

BID
---------14
15
15
16
15

DOR
--------24-JAN-11
25-JAN-11
06-FEB-11
27-JAN-11
07-FEB-11

DOT
--------02-FEB-11
05-FEB-11
18-FEB-11
09-FEB-11
14-FEB-11

Roll No.

QUERY APPLICATION 3
ARITHMETIC OPERATOR
OPERATOR PRECEDENCE

* / + -

CONCATENATION OPERATOR
Concatenates columns or character strings to other columns is represented by two
vertical bars (||).
Creates a resultant column that is a character expression
RELATIONAL OPERATOR
=
>
>=
<
<=
<>

Equal to
Greater than
Greater than or equal to
Less than
Less than or equal to
Not equal to

LOGICAL OPERATORS
AND
OR
NOT

Returns TRUE if both component conditions are true


Returns TRUE if either component condition is true
Returns TRUE if the following condition is false

SPECIAL OPERATORS
BETWEEN
IN(set)
LIKE

IS NULL

between two values(inclusive) ...AND...


match any of a list of values
match a character pattern
% denotes zero or many characters.
- denotes one character.
is a null value

ORDER BY CLAUSE
Sort rows with the ORDER BY clause

Roll No.

ASC: ascending order, default


DESC: descending order
The ORDER BY clause comes last in the SELECT statement
Query 1: Find the names of all sailors with a rating above 2
SQL> select sname from sailor where rating>=2;
SNAME
-------------------raj
ram
Query 2: Find the id of sailors who have reserved boat number as 14.
SQL> select sid from reserve where bid=14;
SID
---------1
2
Query 3: Find names of sailor with income above 10000.
SQL> select sname from sailor where income>10000;
SNAME
---------------saru
raj
ram
Query 4: Find names of sailor with income between 10000 and 15000.
SQL>select sname from sailor where income between 10000 and 15000;
SNAME
-------------------saru
raj
ram
Query 5: Find the details of reservation of boat reserved between 24-jan2011 to 30-jan-2011.
SQL> select * from reserve where dor between('24/jan/2011') and ('30/jan/2011');
SID
10

BID DOR

DOT
Roll No.

----1
2

------- --------14
24-JAN-11
14
25-JAN-11

--------02-FEB-11
05-FEB-11

Query 6: Find the details of reservation of boat having reserved date 24-jan2011 or 25-jan-2011
SQL> select * from reserve where dor='24/jan/2011' or dor='25/jan/2011';
SID
-----1
2

BID
------14
14

DOR
--------24-JAN-11
25-JAN-11

DOT
-------02-FEB-11
05-FEB-11

Query 7: Find details of boat where boat color is red or brown.


SQL> select * from boat where bcolor='red' or bcolor='brown';
BID
-----14

BNAME
-----------abc

BCOLOR
---------red

Query 8: Find the details of boat where boat colour is neither red nor
brown.
SQL> select * from boat where not(bcolor='brown' or bcolor='red');
BID
----15
16

BNAME
----------xyz
efg

BCOLOR
---------black
white

Query 9: Find details of boat where baot color is neither red nor white.
SQL> select * from boat where bcolor<>'red' and bcolor<>'white';
BID
-----15

BNAME
----------xyz

BCOLOR
---------black

Query 10: Find the details of sailor having name starting from s
SQL>select * from sailor where sname like's%';
SID

11

SNAME

RATING

AGE INCOME

Roll No.

----1

----------saru

-----------1

------- ---------23
10000

Query 11: Find the details of sailor having name of at least 3 alphabets
SQL>select * from sailor where sname like'- - - %';
SID
----1
2
3

SNAME
-----------saru
raj
ram

RATING
---------1
2
3

AGE
-----23
39
34

INCOME
---------10000
15000
14000

Query 12: Find details of boat where boat color is red or brown using IN.
SQL> select * from boat where bcolor in('red','black');
BID
-----14
15

BNAME
-----------abc
xyz

BCOLOR
---------red
black

Query 13: Display the details of sailors in Ascending Order.


SQL>select * from sailor order by sid;
SID
-----1
2
3

SNAME
----------saru
raj
ram

RATING
-----------1
2
3

AGE INCOME
------ ---------23
10000
39
15000
34
14000

Query 14: Display sid,snameof sailors order by sname.


SQL>select sid, sname from sailor order by sname desc;
SID
-----1
3
2

12

SNAME
----------saru
ram
raj

Roll No.

QUERY APPLICATION 4
SELECT WITH ALL FUNCTIONS
Two types of Functions in SQL
Single Row Functions
Multiple Row Functions
SINGLE ROW FUNCTIONS

Manipulate data items


Accept arguments and return one value
Act on each row returned
Return one result per row
May modify the data type
Can be nested
Accept arguments which can be a column or an expression.
function_name [(arg1, arg2,...)]

Different types of Single Row Functions are :


Character Functions
o Upper(char)
o Lower(char)
o Initcap(char)
o Concat(char,char)
o substr(str1,n,m)
Where n=start position & m=length of string
o instr(str1,str2)
o trim(char from str1)
o length(str1)
o lpad(number,newsize,char)
o rpad(number,newsize,char)
Number Functions
o ROUND: Rounds value to specified decimal
round(decimal_number,decimal_place)
o TRUNC: Truncates value to specified decimal
trunc(decimal_number,decimal_place)
13

Roll No.

o MOD: Returns remainder of division


mod(n1,n2
Date Functions
o
o
o
o
o
o
o
o

Sysdate
Add dates
Sub dates
MONTHS_BETWEEN(D1,D2)
ADD_MONTHS(D1,N1)
NEXT_DAY(D1,Dayno)
LAST_DAY (D1)
ROUND(D1,MONTH) or ROUND(D1,YEAR)

Conversion Functions
o TO_CHAR
TO_CHAR(date, 'format_model')
o TO_DATE
TO_DATE(char[, 'format_model'])
o TO_NUMBER
TO_NUMBER(char[, 'format_model'])
QUERIES SHOWING ABOVE FUNCTIONS
Query1: Show sname in uppercase with their income.
SQL> select upper(sname),income from sailor;
UPPER(SNAME)
---------------------SARU
RAJ
RAM

INCOME
---------10000
15000
14000

Query 2: Show sname in lowercase with their income.


SQL> select lower(sname) as name, income from sailor;
NAME

14

INCOME

Roll No.

---------saru
raj
ram

---------10000
15000
14000

Query 3: Show sname of sailor with initial letter in uppercase.


SQL> select initcap(sname) from sailor;
INITCAP(SNAME)
------------------------Saru
Raj
Ram
Query 4.: Write a query to concatenate sid and sname from sailor table.
SQL> select concat(sid,sname) from sailor;
CONCAT(SID,SNAME)
---------------------------------1saru
2raj
3ram
Query 5: Write a query to show substring of length 6 that start with 6
position
SQL> select substr(charurajput,6,6) from dual;
SUBSTR('charurajput)
----------------------------rajput

Query 6: Write a query that will return the position of rajput from
charurajput.
SQL> select instr(charurajput,rajput) from dual;
INSTR(charurajput,rajput)
------------------------------------6
Query 7: Write a query to trim first charcter from strinmg charu.

15

Roll No.

SQL> select trim(c from charu) from dual;


TRIM(c from charu)
-----------------------------------------haru
Query 8. Write a query that will return length of string MCA.
SQL> select length(MCA) from dual;
LENGTH(MCA)
----------------------3
Query 9: Write a query to show lpad.
SQL> select lpad(5000,10,X) from dual;
LPAD(5000,10,X)
------------------------XXXXXX5000

Query 10: Write a query to show rpad.


SQL> select rpad(5000,10,X) from dual;
RPAD(5000,10,X)
------------------------5000XXXXXX
Query 11: Write a query to round 50.987 upto 2 decimal.
SQL> select round(50.987,2) from dual;
ROUND(50.987,2)
-----------------------50.99
Query 12: Write a query to truncate 50.987 upto 2 digit.
SQL> select trunk(50.987,2) from dual;

16

Roll No.

TRUNC(50.987,2)
-----------------------50.98
Query13: To find remainder of 15/2.
SQL> select mod(15,2) from dual;
mod(15,2)
------------1
Query 14: To display system date.
SQL> select sysdate from dual;
SYSDATE
-------------03-MAR-11
Query 15: To display date of third day from current date.
SQL> select sysdate+3 as newdate from dual;
NEWDATE
---------------06-MAR-11
Query 16: To display previous date of 3rd day from current date
SQL> select sysdate-3 as newdate from dual;
NEWDATE
---------------03-MAR-11

Query 17: to display number of months between 06-mar-2011 and 06-mar2011.


SQL>select months_between (06-MAR-11,06-SEP-11) from dual;

17

Roll No.

MONTHS_BETWEEN
----------------------------6
Query 18: To display date of 3 months later of 24-feb-2011.
SQL> select add_months('24-feb-2011',3) from dual;
ADD_MONTH
-------------------24-MAY-11
Query 19: To display next day of 24-feb-2011.
SQL> select next_day('24-feb-2011',3) from dual;
NEXT_DAY(
-----------------01-MAR-11
Query 20: To display last date of the month of 24-feb-2011
SQL> select last_day('24-feb-2011') from dual;
LAST_DAY(
-----------------28-FEB-11
Query 21: To round 06-mar-2011 to 1 month.
SQL> select round(06-MAR-11,MONTH)
ROUND
------------1-APR-11

Query 22: To display current date in character form.


SQL>select to_char(sysdate, 'DD-MONTH-YYYY) from dual;

18

Roll No.

TO_CHAR(
---------------------06-MARCH-2011
Query 23: To display
SQL>select to_date('24-jan-2011','dd-mm-yy') from dual;
TO_DATE ('
---------------24-JAN-11
Query 24:
SQL>select to_number(

19

Roll No.

QUERY APPLICATION 5
QUERIES USING JOINS
SYNTAX OF JOIN
SELECT
FROM
WHERE

table1.column, table2.column
table1, table2
table1.column1 = table2.column2;

Query 1: List the sid and name of the sailor, boat id and date of reservation
who reserves the boat.
SQL> select sailor.sid, sname,bid, dor from sailor,reserves where sailor.sid=reserves.sid;.
SID
----1
1
2
3

SNAME
---------saru
saru
raj
ram

BID
-------14
16
15
15

DOR
--------24-JAN-11
27-JAN-11
07-FEB-11
06-FEB-11

Query 2: Display sid, bid, dor, bname, sname from sailor and reserve
SQL> select sailor.sid,sname,boat.bid,bname,dor from sailor,reserve,boat where
sailor.sid=reserve.sid and reserve.bid=boat.bid;
SID
-----1
1
2
2
3

SNAME
------------saru
saru
raj
raj
ram

BID BNAME
------- ------------14
abc
16
efg
14
abc
15
xyz
15
xyz

DOR
--------24-JAN-11
27-JAN-11
25-JAN-11
07-FEB-11
06-FEB-11

Query 3: List the names of sailor having boats booked between 22 jan
2011 to 27 jan 2011 along with date of reservations.
SQL> select sname from sailor,reserves where sailor.sid=reserves.sid and dor between
'10 jan 2011' and '15 jan 2011';

20

Roll No.

SNAME
------------saru
saru
raj
Query 4: Find the names of all sailors having boats reserved with black
colour.
SQL> select sname from sailor,reserve,boat where sailor.sid=reserve.sid and
reserve.bid=boat.bid and
boat.bcolor='black';
SNAME
-----------ram
raj
Query 5: Find the details of all boats reserved by sailor ram.
SQL> select boat.bid,bname,bcolor from sailor,reserve,boat where sailor.sid=reserve.sid
and reserve.bid=boat.bid and sname='ram';
BID
----15

BNAME
----------xyz

BCOLOR
---------black

Query 6: Find the details of all travel made within 7 days of reservation.
SQL> select sailor.sid,sname,dor,dot from sailor,reserve where sailor.sid=reserve.sid and
(dot-dor)<=7;
SID
----2

SNAME
----------raj

DOR
DOT
--------------------07-FEB-11 14-FEB-11

Query 7: Find the details of all sailorsfor which no reservation are made.
SQL> select sailor.sid,sname,rating,age,income from sailor ,reserve where sailor.sid
=reserve.sid and dot is null;
SID
------

21

SNAME
-----------

RATING
------------

AGE
-------

INCOME
------------

Roll No.

ram

34

14000

Query 8: Display details of sailor and compute 10% of their income.


SQL> select sname,income,income*0.10 as monthly_profit from sailor;
SNAME
----------shyam
saru
raj
ram

INCOME
---------13000
10000
15000
14000

MONTHLY_PROFIT
-------------1300
1000
1500
1400

EMPLOYEE DATABASE
SQL> select * from emp;
EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

JOB
--------CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

MGR
------7902
7698
7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

HIREDATE
SAL COMM
---------------- ------ ---------17-DEC-80
800
20-FEB-81
1600
300
22-FEB-81
1250
500
02-APR-81
2975
28-SEP-81
1250
1400
01-MAY-81
2850
09-JUN-81
2450
19-APR-87
3000
17-NOV-81
5000
08-SEP-81
1500
0
23-MAY-87
1100
03-DEC-81
950
03-DEC-81
3000
23-JAN-82
1300

DEPTNO
---------20
30
30
20
30
30
10
20
10
30
20
30
20
10

14 rows selected.

SQL> select * from dept;


DEPTNO
----------

DNAME
--------------

22

LOC
-------------

Roll No.

10
20
30
40

ACCOUNTING
RESEARCH
SALES
OPERATIONS

NEW YORK
DALLAS
CHICAGO
BOSTON

SQL> select * from grade;


GRADE
---------1
2
3
4
5

LOSAL
---------700
1201
1401
2001
3001

HISAL
---------1200
1400
2000
3000
9999

SQL> select * from bonus;


no rows selected

Cartesian product
SELECT table1.column,table2.column
FROM table1,table2;
SQL> select * from emp, dept;
EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
7369
7499
7521
7566
7654
7698

ENAME JOB
MGR
---------- ---------------SMITH CLERK
7902
ALLEN SALESMAN 7698
WARD SALESMAN 7698
JONES MANAGER 7839
MARTIN SALESMAN 7698
BLAKE MANAGER 7839
CLARK MANAGER 7839
SCOTT ANALYST 7566
KING
PRESIDENT
TURNER SALESMAN 7698
ADAMS CLERK
7788
JAMES CLERK
7698
FORD ANALYST
7566
MILLER CLERK
7782
SMITH CLERK
7902
ALLEN SALESMAN 7698
WARD SALESMAN 7698
JONES MANAGER 7839
MARTIN SALESMAN 7698
BLAKE MANAGER 7839

23

HIREDATE
--------17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82
7-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81

SAL COMM
------- ------800
1600
300
1250
500
2975
1250
1400
2850
2450
3000
5000
1500
0
1100
950
3000
1300
800
1600
300
1250
500
2975
1250
1400
2850

DEPTNO DEPTNO
------------------20
10
30
10
30
10
20
10
30
10
30
10
10
10
20
10
10
10
30
10
20
10
30
10
20
10
10
10
20
20
30
20
30
20
20
20
30
20
30
20

DNAME
LOC
-----------------------ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
RESEARCH
DALLAS
RESEARCH
DALLAS
RESEARCH
DALLAS
RESEARCH
DALLAS
RESEARCH
DALLAS
RESEARCH
DALLAS

Roll No.

7782
7788
7839
7844
7876
7900
7902
7934
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
7369
7499
7521
7566
7654
7698
7782
7839
7844
7876
7900
7902
7934

CLARK MANAGER 7839


SCOTT ANALYST 7566
KING
PRESIDENT
TURNER SALESMAN 7698
ADAMS CLERK
7788
JAMES CLERK
7698
FORD ANALYST 7566
MILLER CLERK
7782
SMITH
CLERK
7902
ALLEN SALESMAN 7698
WARD SALESMAN 7698
JONES
MANAGER 7839
MARTIN SALESMAN 7698
BLAKE MANAGER 7839
CLARK MANAGER 7839
SCOTT ANALYST 7566
KING
PRESIDENT
TURNER SALESMAN 7698
ADAMS CLERK
7888
JAMES
CLERK
7698
FORD
ANALYST 7566
MILLER CLERK
7782
SMITH
CLERK
7902
ALLEN SALESMAN 7698
WARD
SALESMAN 7698
ONES
MANAGER 7839
MARTIN SALESMAN 7698
BLAKE MANAGER 7839
CLARK MANAGER 7839
KING
PRESIDENT
TURNER SALESMAN 7698
ADAMS CLERK
7788
AMES
CLERK
7698
FORD
ANALYST 7566
MILLER CLERK
7782

09-JUN-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82
17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82
17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82

2450
3000
5000
1500
1100
950
3000
1300
800
1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300
800
1600
1250
2975
1250
2850
3000
5000
1500
1100
950
3000
1300

300
500
1400

300
500
1400

10
20
10
30
20
30
20
10
20
30
30
20
30
30
10
20
10
30
20
30
20
10
20
30
30
20
30
30
20
10
30
20
30
20
10

20
20
20
20
20
20
20
20
30
30
30
30
30
30
30
30
30
30
30
30
30
30
40
40
40
40
40
40
40
40
40
40
40
40
40

RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
SALES
SALES
SALES
SALES
SALES
SALES
SALES
SALES
SALES
SALES
SALES
SALES
SALES
SALES
OPERATIONS
OPERATIONS
OPERATIONS
OPERATIONS
OPERATIONS
OPERATIONS
OPERATIONS
OPERATIONS
OPERATIONS
OPERATIONS
OPERATIONS
OPERATIONS
OPERATIONS

DALLAS
DALLAS
DALLAS
DALLAS
DALLAS
DALLAS
DALLAS
DALLAS
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
BOSTON
BOSTON
BOSTON
BOSTON
BOSTON
BOSTON
BOSTON
BOSTON
BOSTON
BOSTON
BOSTON
BOSTON
BOSTON

DNAME
-----------RESEARCH
SALES

LOC
------------DALLAS
CHICAGO

56 rows selected.

Equijoin with table aliases


SELECT SELECT table1.column, table2.column
FROM table1 new1, table2 new2
WHERE WHERE new1.column1 = new2.column2;
SQL> select * from emp e, dept d where e.deptno=d.deptno;
EMPNO ENAME JOB
---------- ---------- --------7369
SMITH
CLERK
7499
ALLEN
SALESMAN

24

MGR
-------7902
7698

HIREDATE
--------------17-DEC-80
20-FEB-81

SAL COMM
------- ------800
1600
300

DEPTNO DEPTNO
------------- ------------20
20
30
30

Roll No.

7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82

1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300

500
1400

30
20
30
30
10
20
10
30
20
30
20
10

30
20
30
30
10
20
10
30
20
30
20
10

SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING

CHICAGO
DALLAS
CHICAGO
CHICAGO
NEW YORK
DALLAS
NEW YORK
CHICAGO
DALLAS
CHICAGO
DALLAS
NEW YORK

14 rows selected.

Non-equijoin
SELECT table1.column, table2.column
FROM table1,table2
WHERE(conition with >=,<=,BETWEEN)

SQL> select ename, sal, grade from emp e, grade g where sal between losal AND hisal;
ENAME
---------SMITH
JAMES
ADAMS
WARD
MARTIN
MILLER
TURNER
ALLEN
CLARK
BLAKE
JONES
SCOTT
FORD
KING

SAL
---------800
950
1100
1250
1250
1300
1500
1600
2450
2850
2975
3000
3000
5000

GRADE
---------1
1
1
2
2
2
3
3
4
4
4
4
4
5

14 rows selected.

Join with condition

25

Roll No.

SELECT SELECT table1.column, table2.column


FROM table1, table2
WHERE WHERE table1.column1 = table2.column2;

SQL> select * from emp,dept where emp.deptno=dept.deptno;


EMPNO ENAME JOB
---------- ---------- --------7369
SMITH
CLERK
7499
ALLEN
SALESMAN
7521
WARD
SALESMAN
7566
JONES
MANAGER
7654
MARTIN SALESMAN
7698
BLAKE
MANAGER
7782
CLARK
MANAGER
7788
SCOTT ANALYST
7839
KING
PRESIDENT
7844
TURNER SALESMAN
7876
ADAMS CLERK
7900
JAMES
CLERK
7902
FORD
ANALYST
7934
MILLER CLERK

MGR
-------7902
7698
7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

HIREDATE
--------------17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82

SAL COMM
------- ------800
1600
300
1250
500
2975
1250
1400
2850
2450
3000
5000
1500
0
1100
950
3000
1300

DEPTNO DEPTNO
------------- ------------20
20
30
30
30
30
20
20
30
30
30
30
10
10
20
20
10
10
30
30
20
20
30
30
20
20
10
10

DNAME
-----------RESEARCH
SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING

LOC
------------DALLAS
CHICAGO
CHICAGO
DALLAS
CHICAGO
CHICAGO
NEW YORK
DALLAS
NEW YORK
CHICAGO
DALLAS
CHICAGO
DALLAS
NEW YORK

COMM DNAME
--------- -------------RESEARCH
300
SALES
500
SALES
RESEARCH
1400 SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING

LOC
------------DALLAS
CHICAGO
CHICAGO
DALLAS
CHICAGO
CHICAGO
NEW YORK
DALLAS
NEW YORK

14 rows selected.
NATURAL JOIN
SELECT table1.column, table2.column
FROM table1
NATURAL JOIN table2;
SQL> select * from emp natural join dept;
DEPTNO
---------20
30
30
20
30
30
10
20
10

EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7839

26

ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING

JOB
--------CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT

MGR
-------7902
7698
7698
7839
7698
7839
7839
7566

HIREDATE
---------------17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
19-APR-87
17-NOV-81

SAL
------800
1600
1250
2975
1250
2850
2450
3000
5000

Roll No.

30
20
30
20
10

7844
7876
7900
7902
7934

TURNER
ADAMS
JAMES
FORD
MILLER

SALESMAN
CLERK
CLERK
ANALYST
CLERK

7698
7788
7698
7566
7782

08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82

1500
1100
950
3000
1300

SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING

CHICAGO
DALLAS
CHICAGO
DALLAS
NEW YORK

14 rows selected.

OUTER JOIN using+


SELECT
FROM
WHERE

table1.column, table2.column
table1, table2
table1.column(+) = table2.column;

SQL>select empno,ename,dept.deptno,dname,loc from emp,dept where emp.deptno(+)=dept.deptno;


EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

DEPTNO
---------20
30
30
20
30
30
10
20
10
30
20
30
20
10
40

DNAME
-------------RESEARCH
SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING
OPERATIONS

LOC
------------DALLAS
CHICAGO
CHICAGO
DALLAS
CHICAGO
CHICAGO
NEW YORK
DALLAS
NEW YORK
CHICAGO
DALLAS
CHICAGO
DALLAS
NEW YORK
BOSTON

15 rows selected.
SELECT
FROM
WHERE
EMPNO

table1.column, table2.column
table1, table2
table1.column = table2.column(+);

ENAME

DEPTNO

DNAME

LOC

---------- ---------- ---------7934


MILLER
7839
KING
7782
CLARK
7902
FORD
7876
ADAMS
7788
SCOTT
7566
JONES
7369
SMITH

-------------10
10
10
20
20
20
20
20

------------ACCOUNTING
ACCOUNTING
ACCOUNTING
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH

NEW YORK
NEW YORK
NEW YORK
DALLAS
DALLAS
DALLAS
DALLAS
DALLAS

27

Roll No.

7900
7844
7698
7654
7521
7499

JAMES
TURNER
BLAKE
MARTIN
WARD
ALLEN

30
30
30
30
30
30

SALES
SALES
SALES
SALES
SALES
SALES

CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO

14 rows selected.

ON Clause
SELECT table1.column, table2.column
FROM table1 JOIN table2
ON(condition);
SQL> select * from emp join dept on (emp.deptno=dept.deptno);
EMPNO ENAME JOB
---------- ---------- --------7369
SMITH
CLERK
7499
ALLEN
SALESMAN
7521
WARD
SALESMAN
7566
JONES
MANAGER
7654
MARTIN SALESMAN
7698
BLAKE
MANAGER
7782
CLARK
MANAGER
7788
SCOTT ANALYST
7839
KING
PRESIDENT
7844
TURNER SALESMAN
7876
ADAMS CLERK
7900
JAMES
CLERK
7902
FORD
ANALYST
7934
MILLER CLERK

MGR
-------7902
7698
7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

HIREDATE
--------------17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82

SAL COMM
------- ------800
1600
300
1250
500
2975
1250
1400
2850
2450
3000
5000
1500
0
1100
950
3000
1300

DEPTNO DEPTNO
------------- ------------20
20
30
30
30
30
20
20
30
30
30
30
10
10
20
20
10
10
30
30
20
20
30
30
20
20
10
10

DNAME
-----------RESEARCH
SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING

LOC
------------DALLAS
CHICAGO
CHICAGO
DALLAS
CHICAGO
CHICAGO
NEW YORK
DALLAS
NEW YORK
CHICAGO
DALLAS
CHICAGO
DALLAS
NEW YORK

14 rows selected.
USING CLAUSE
SELECT table1.column, table2.column
FROM table1 JOIN table2
USING(column);
SQL> select * from emp join dept using(deptno);

DEPTNO
---------20

EMPNO
---------7369

28

ENAME
---------SMITH

JOB
--------CLERK

MGR HIREDATE
-------- ---------------7902
17-DEC-80

SAL
------800

COMM DNAME
--------- -------------RESEARCH

LOC
------------DALLAS

Roll No.

30
30
20
30
30
10
20
10
30
20
30
20
10

7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

7698
7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82

1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300

300
500
1400

SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING

CHICAGO
CHICAGO
DALLAS
CHICAGO
CHICAGO
NEW YORK
DALLAS
NEW YORK
CHICAGO
DALLAS
CHICAGO
DALLAS
NEW YORK

14 rows selected.

LEFT OUTER JOIN


SELECT table1.coulumn, table2.column
FROM table1
LEFT OUTER JOIN table2
USING(column);

SQL> Select * from emp left outer join dept using(deptno);


DEPTNO
---------10
10
10
20
20
20
20
20
30
30
30
30
30
30

EMPNO
---------7934
7839
7782
7902
7876
7788
7566
7369
7900
7844
7698
7654
7521
7499

ENAME
---------MILLER
KING
CLARK
FORD
ADAMS
SCOTT
JONES
SMITH
JAMES
TURNER
BLAKE
MARTIN
WARD
ALLEN

JOB
--------CLERK
PRESIDENT
MANAGER
ANALYST
CLERK
ANALYST
MANAGER
CLERK
CLERK
SALESMAN
MANAGER
SALESMAN
SALESMAN
SALESMAN

MGR HIREDATE
---------- --------------7782
23-JAN-82
17-NOV-81
7839
09-JUN-81
7566
03-DEC-81
7788
23-MAY-87
7566
19-APR-87
7839
02-APR-81
7902
17-DEC-80
7698
03-DEC-81
7698
08-SEP-81
7839
01-MAY-81
7698 28-SEP-81
7698 22-FEB-81
7698 20-FEB-81

SAL
-----1300
5000
2450
3000
1100
3000
2975
800
950
1500
2850
1250
1250
1600

COMM DNAME
LOC
---------- ----------------- ------------ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
ACCOUNTING NEW YORK
RESEARCH
DALLAS
RESEARCH
DALLAS
RESEARCH
DALLAS
RESEARCH
DALLAS
RESEARCH
DALLAS
SALES
CHICAGO
0
SALES
CHICAGO
SALES
CHICAGO
1400
SALES
CHICAGO
500
SALES
CHICAGO
300
SALES
CHICAGO

14 rows selected.

29

Roll No.

RIGHT OUTER JOIN


SELECT table1.coulumn, table2.column
FROM table1
RIGHT OUTER JOIN table2
USING(column);
SQL> select * from emp right outer join dept using(deptno);
DEPTNO
---------20
30
30
20
30
30
10
20
10
30
20
30
20
10
40

EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

JOB
--------CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

MGR HIREDATE
---------- --------7902
17-DEC-80
7698
20-FEB-81
7698
22-FEB-81
7839
02-APR-81
7698
28-SEP-81
7839
01-MAY-81
7839
09-JUN-81
7566
19-APR-87
17-NOV-81
7698
08-SEP-81
7788
23-MAY-87
7698
03-DEC-81
7566
03-DEC-81
7782
23-JAN-82

SAL
COMM DNAME
LOC
--------------- ---------------------800
RESEARCH
DALLAS
1600
300
SALES
CHICAGO
1250
500
SALES
CHICAGO
2975
RESEARCH
DALLAS
1250
1400 SALES
CHICAGO
2850
SALES
CHICAGO
2450
ACCOUNTING NEW YORK
3000
RESEARCH
DALLAS
5000
ACCOUNTING NEW YORK
1500
0
SALES
CHICAGO
1100
RESEARCH
DALLAS
950
SALES
CHICAGO
3000
RESEARCH
DALLAS
1300
ACCOUNTING NEW YORK
OPERATIONS BOSTON

15 rows selected.
FULL OUTER JOIN
SELECT table1.coulumn, table2.column
FROM table1
FULL OUTER JOIN table2
ON(condition);
SQL> select * from emp Full outer join dept on (emp.deptno=dept.deptno);
EMPNO ENAME JOB
---------- ---------- --------7369
SMITH
CLERK
7499
ALLEN
SALESMAN
7521
WARD
SALESMAN
7566
JONES
MANAGER
7654
MARTIN SALESMAN
7698
BLAKE MANAGER
7782
CLARK MANAGER

30

MGR
-------7902
7698
7698
7839
7698
7839
7839

HIREDATE
--------------17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81

SAL COMM
------- ------800
1600
300
1250
500
2975
1250
1400
2850
2450

DEPTNO DEPTNO
------------- ------------20
20
30
30
30
30
20
20
30
30
30
30
10
10

DNAME
-----------RESEARCH
SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING

LOC
------------DALLAS
CHICAGO
CHICAGO
DALLAS
CHICAGO
CHICAGO
NEW YORK

Roll No.

7788
7839
7844
7876
7900
7902
7934

SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

7566
7698
7788
7698
7566
7782

19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82

3000
5000
1500
1100
950
3000
1300

20
10
30
20
30
20
10

20
10
30
20
30
20
10
40

RESEARCH
ACCOUNTING
SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING
OPERATIONS

DALLAS
NEW YORK
CHICAGO
DALLAS
CHICAGO
DALLAS
NEW YORK
BOSTON

15 rows selected.
SELF JOIN
SELECT
FROM
WHERE

table1.column, table2.column
table1 a , table1 b
(a.column = b.column);

SQL> select e.ename employees,e.empno empid,e.sal salary,m.ename manager,m.empno


mgrid,m.sal mgrsal from emp e,emp m where m.empid=e.mgrid;
EMPLOYEES
---------FORD
SCOTT
JAMES
TURNER
MARTIN
WARD
ALLEN
MILLER
ADAMS
CLARK
BLAKE
JONES
SMITH

EMPID
---------7902
7788
7900
7844
7654
7521
7499
7934
7876
7782
7698
7566
7369

SALARY
---------3000
3000
950
1500
1250
1250
1600
1300
1100
2450
2850
2975
800

MANAGER
---------JONES
JONES
BLAKE
BLAKE
BLAKE
BLAKE
BLAKE
CLARK
SCOTT
KING
KING
KING
FORD

MGRID
---------7566
7566
7698
7698
7698
7698
7698
7782
7788
7839
7839
7839
7902

MGRSAL
---------2975
2975
2850
2850
2850
2850
2850
2450
3000
5000
5000
5000
3000

13 rows selected.

31

Roll No.

APPLICATION QUERY 6
GROUP BY CLAUSE
AND
SELECT WITH WHERE SUBQUERIES
Group By Clause
Group functions operate on sets of rows to give one result per group
SELECT
FROM
[WHERE
[GROUP BY
[ORDER BY

[column,] group_function(column). . .
table
condition]
group_by_expression]
column];

Aggregate Functions
These functions are used in simple statistical queries that sumerize information from the
database.
Common functions applied include:
Avg This function return average of any specified column.
Select avg(column) from tablename;
Max This function returns maximum value of a specified column
Select max(column) from tablename;
Min This function return minimum value of a specified column
Select min(column) from tablename;
Sum- It returns sum of all values in a specified column.
Select sum(column) from tablename;
Count- It return total number of rows in a table.
Select count(*) from tablename;
Group by with HAVING Clause
Use the HAVING clause to specify which groups are to be displayed.

32

Roll No.

It further restrict the groups on the basis of a limiting condition


SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

[column,] group_function(column)...
table
condition]
group_by_expression]
having_expression]
column];

Group by with ROLLUP and CUBE operators


Use ROLLUP or CUBE with GROUP BY to produce superaggregate rows by
cross-referencing columns.
ROLLUP grouping produces a results set containing the regular grouped rows and
the subtotal values.
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

[column,] group_function(column). . .
table
condition]
[ROLLUP] group_by_expression]
having_expression];
column];

CUBE grouping produces a results set containing the rows from ROLLUP and
cross-tabulation rows.
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

[column,] group_function(column)...
table
condition]
[CUBE] group_by_expression]
having_expression]
column];

Queries on Group By
Query 1: Print total number of employees in each department.
SQL> select deptno, count(*) from emp group by deptno;
DEPTNO
---------30
20
10

33

COUNT(*)
---------6
5
3

Roll No.

Query 2: Find the total number of employees in account and sales


department.
SQL> select dname,count(emp.ename) from emp,dept where emp.deptno=dept.deptno
group by dname having dname='SALES' or dname='ACCOUNTING';
DNAME
----------ACCOUNTING
SALES

COUNT(EMP.ENAME)
---------------3
6

Query 3: Find the total number of employee at each designation in each


department respectively.
SQL> select count(*) ,job, deptno from emp group by job, deptno order by deptno
COUNT(*)
-------------1
1
1
2
2
1
1
1
4

JOB
--------CLERK
MANAGER
PRESIDENT
ANALYST
CLERK
MANAGER
CLERK
MANAGER
SALESMAN

DEPTNO
--------10
10
10
20
20
20
30
30
30

9 rows selected.
Query 4: Find the average salary of a clerk in each department.
SQL> select deptno,job,avg(sal) from emp group by deptno,job having job='CLERK';
DEPTNO
---------20
30
10

JOB
--------CLERK
CLERK
CLERK

AVG(SAL)
---------950
950
1300

Query 5: Find maximum salary of salesman in sales department.


SQL> select dname, job,max(sal) from emp,dept where emp.deptno=dept.deptno group
by dname,job having dname='SALES' and job='SALESMAN'

34

Roll No.

DNAME
-----------SALES

JOB
-----------SALESMAN

MAX(SAL)
---------1600

Query 6: Print total salary paid at each job in each dept(using rollup).
SQL>select deptno, job, count(*), sum(sal) from emp group by rollup(deptno, job);
DEPTNO
---------10
10
10
10
20
20
20
20
30
30
30
30

JOB
COUNT(*)
-----------------CLERK
1
MANAGER
1
PRESIDENT
1
3
CLERK
2
ANALYST
2
MANAGER
1
5
CLERK
1
MANAGER
1
SALESMAN
4
6
14

SUM(SAL)
---------1300
2450
5000
8750
1900
6000
2975
10875
950
2850
5600
9400
29025

13 rows selected.
Query 7: Print total salary paid at each job in each dept(using cube).
SQL> select deptno,job,count(*),sum(sal) from emp group by cube(deptno, job)
DEPTNO
----------

JOB
--------CLERK
ANALYST
MANAGER
SALESMAN
PRESIDENT

10
10
10
10
20
20
20
20
30

35

CLERK
MANAGER
PRESIDENT
CLERK
ANALYST
MANAGER

COUNT(*)
------------14
4
2
3
4
1
3
1
1
1
5
2
2
1
6

SUM(SAL)
---------29025
4150
6000
8275
5600
5000
8750
1300
2450
5000
10875
1900
6000
2975
9400

Roll No.

30
30
30

CLERK
MANAGER
ALESMAN

1
1
4

950
2850
5600

18 rows selected.

Select with where Subqueries


A subquery is a SELECT statement embedded in a clause of another SQL statement.

The subquery (inner query) executes once before the main query.

The result of the subquery is used by the main query (outer query).

SELECT
FROM
WHERE

select_list
table
expr operator (SELECT select_list FROM table);

Queries based on Subqueries


Query 1: Find the names of employees having maximum salary.
SQL> select ename,sal from emp where sal=(select max(sal) from emp);
ENAME
---------KING

SAL
---------5000

Query 2: Find maximum salary of employees in each department.


SQL> select ename,sal from emp where sal=(select max(sal) from emp where
sal<(select max(sal) from emp))
ENAME
---------SCOTT
FORD

SAL
---------3000
3000

Query 3: Select name and salary of employee who have more than average
salary.
36

Roll No.

SQL> select ename,sal from emp where sal >(select avg(sal) from emp);
ENAME
---------JONES
BLAKE
CLARK
SCOTT
KING
FORD

SAL
---------2975
2850
2450
3000
5000
3000

6 rows selected.
Query 4: Find the name of employee with second highest salary.
SQL> select ename, sal from emp where sal=(select max(sal) from emp where
sal<(select max(sal) from emp));
ENAME
---------SCOTT
FORD

SAL
---------3000
3000

Query 5: Find the names of employees who have more experience than
their manager.
SQL> select e.empno,e.ename,round((sysdate-e.hiredate)/365,0) as e_exp_yr ,e.mgr, m.ename,
round((sysdate-m.hiredate)/365,0) m_exp_yr from emp e,emp m where e.mgr=m.empno;
EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7844
7876
7900
7902
7934

37

ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
TURNER
ADAMS
JAMES
FORD
MILLER

E_EXP_YR
---------30
30
30
30
30
30
30
24
30
24
29
29
29

MGR
---------7902
7698
7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

ENAME
---------FORD
BLAKE
BLAKE
KING
BLAKE
KING
KING
JONES
BLAKE
SCOTT
BLAKE
JONES
CLARK

M_EXP_YR
---------29
30
30
29
30
29
29
30
30
24
30
30
30

Roll No.

13 rows selected.

QUERY APPPLICATION 7
(REVISION OF ALL QUERIES ON EMP DATABASE))
PROBLEM NO.1
(INTRODUCTION TO SQL
Query 1: Select all information from salgrade table.
SQL> select * from salgrade;
GRADE
---------1
2
3
4
5

LOSAL
---------700
1201
1401
2001
3001

HISAL
--------1200
1400
2000
3000
9999

Query 2: Select all information from EMP table.

7499

7782
7839
7876
7900
7934

EMPNO
ENAME
JOB
--------------------------7369
SMITH
CLERK
ALLEN
SALESMAN 7698
7521
WARD
SALESMAN
7566
JONES
MANAGER
7654
MARTIN
SALESMAN
7698
BLAKE
MANAGER
CLARK
MANAGER
7839
7788
SCOTT
ANALYST
KING
PRESIDENT
7844
TURNER
SALESMAN
ADAMS
CLERK
7788
JAMES
CLERK
7698
7902
FORD
ANALYST
MILLER
CLERK
7782

MGR
------7902
7698
7839
7698
7839
7566
7698
7566

HIREDATE
---------------17-DEC-80
20-FEB-81
1600
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
2450
19-APR-87
17-NOV-81
5000
08-SEP-81
23-MAY-87
1100
03-DEC-81
950
03-DEC-81
23-JAN-82
1300

SAL COMM
------ ---------800
300
30
1250
500
2975
1250
1400
2850
10
3000
10
1500
0
20
30
3000
10

14 rows selected.

Query 3: List all employees who have a salary between 1000 and 2000.

38

Roll No.

DEPTNO
---------20
30
20
30
30
20
30
20

SQL> select * from emp where sal between 1000 and 2000;
EMPNO
ENAME
------------------7499
ALLEN
7521
WARD
7654
MARTIN
7844
TURNER
7876
ADAMS
7934
MILLER
6 rows selected.

JOB
--------SALESMAN
SALESMAN
SALESMAN
SALESMAN
CLERK
CLERK

MGR
------7698
7698
7698
7698
7788
7782

HIREDATE
SAL COMM
---------------- ------ ---------20-FEB-81
1600
300
22-FEB-81
1250
500
28-SEP-81
1250
1400
08-SEP-81
1500
0
23-MAY-87
1100
23-JAN-82
1300

DEPTNO
---------30
30
30
30
20
10

Query 4: List department numbers and department names in department name order.
SQL> select deptno,dname from dept order by dname
DEPTNO
--------10
40
20
30

DNAME
-------------ACCOUNTING
OPERATIONS
RESEARCH
SALES

Query 5: Display all different job types.


SQL> select distinct(job) from emp;
JOB
--------ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN
Query 6: List the details of the employees in departments 10 and 20 in
alphabetical order of names.
SQL> select empno,ename,job,sal from emp where deptno in(10,20) order by ename
EMPNO
---------7876
7782
7902
7566
7839
39

ENAME
---------ADAMS
CLARK
FORD
JONES
KING

JOB
--------CLERK
MANAGER
ANALYST
MANAGER
PRESIDENT

SAL
---------1100
2450
3000
2975
5000
Roll No.

7934
7788
7369

MILLER
SCOTT
SMITH

CLERK
ANALYST
CLERK

1300
3000
800

8 rows selected.
Query 7: List names and jobs of all clerks in department 20.
SQL> select ename,job from emp where job='CLERK' and deptno=20;
ENAME
---------SMITH
ADAMS

JOB
--------CLERK
CLERK

Query 8: Display all employees names which have TH or LL in them.


SQL>select ename from emp where ename like '%TH%' or ename like '%LL%'
ENAME
---------ALLEN
MILLER
SMITH
Query 9: List details for all employees who have a manager.
SQL> select e.empno,e.ename,m.empno "MGRID",m.ename "MGRNAME" from emp
e,emp m where e.mgr=m.empno;
EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7844
7876
7900
7902
7934
40

ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
TURNER
ADAMS
JAMES
FORD
MILLER

MGRID
---------7902
7698
7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

MGRNAME
---------FORD
BLAKE
BLAKE
KING
BLAKE
KING
KING
JONES
BLAKE
SCOTT
BLAKE
JONES
CLARK
Roll No.

13 rows selected.

Query 10: Display names and total remuneration for all employees.
SQL> select ename, sal from emp;
ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

SAL
---------800
1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300

14 rows selected.
Query 11: Display all employees who were hired during 1982.
SQL> select empno,ename,hiredate from emp where hiredate between ('01-jan-1982')
and ('31-dec-1982');
EMPNO
---------7934

ENAME
---------MILLER

HIREDATE
----------------23-JAN-82

Query 12: Display name, annual salary and commission of all sales people
whose monthly salary is greater than their commission. The output should
be ordered by salary, in descending order.
SQL> select ename, sal, sal*12 as "ANNUAL_SAL", comm from emp where job='SALESMAN'
and sal>comm order by sal desc;

41

Roll No.

ENAME
---------ALLEN
TURNER
WARD

SAL
-------1600
1500
1250

ANNUAL_SAL
------------------19200
18000
15000

COMM
---------300
0
500

Query 13: Display all employee information in ascending order of manager


number. King must be last
SQL> select empno,ename from emp order by mgr;
EMPNO
---------7788
7902
7499
7521
7900
7844
7654
7934
7876
7566
7782
7698
7369
7839

ENAME
---------SCOTT
FORD
ALLEN
WARD
JAMES
TURNER
MARTIN
MILLER
ADAMS
JONES
CLARK
BLAKE
SMITH
KING

14 rows selected.

42

Roll No.

PROBLEM NO.2
(USING FUNCTIONS)
Query 1: List the employee name and salary increased by 15% and
expressed as a whole number.
SQL> select ename, round(sal+(0.15*sal),0) as "INCRESED_SAL" from emp;
ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

INCRESED_SAL
-----------920
1840
1438
3421
1438
3278
2818
3450
5750
1725
1265
1093
3450
1495

14 rows selected.
Query 2: Display each employees name and hiredate from department
number 20.
SQL> select ename, hiredate from emp where deptno=20;
ENAME
---------SMITH
JONES
SCOTT
ADAMS
FORD

43

HIREDATE
--------17-DEC-80
02-APR-81
19-APR-87
23-MAY-87
03-DEC-81

Roll No.

Query 3: Display each employee name with hiredate, and salary review
date. Assume review date is one year after hiredate. Order the output in
ascending review date order.
SQL> select ename, hiredate, add_months(hiredate,12) as REVIEWDATE from emp
order by REVIEWDATE;
ENAME
---------SMITH
ALLEN
WARD
JONES
BLAKE
CLARK
TURNER
MARTIN
KING
JAMES
FORD
MILLER
SCOTT
ADAMS

HIREDATE
--------------17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
01-MAY-81
09-JUN-81
08-SEP-81
28-SEP-81
17-NOV-81
03-DEC-81
03-DEC-81
23-JAN-82
19-APR-87
23-MAY-87

REVIEWDAT
----------------17-DEC-81
20-FEB-82
22-FEB-82
02-APR-82
01-MAY-82
09-JUN-82
08-SEP-82
28-SEP-82
17-NOV-82
03-DEC-82
03-DEC-82
23-JAN-83
19-APR-88
23-MAY-88

14 rows selected.

44

Roll No.

PROBLEM NO.3
(GROUP FUNCTIONS)
Query 1: Find the minimum salary of all employees in each department.
SQL> select deptno,min(sal) from emp group by deptno;
DEPTNO
---------30
20
10

MIN(SAL)
---------950
800
1300

Query 2: Find the minimum, maximum and average salaries of all


employees.
SQL> select deptno, min(sal),max(sal),avg(sal) from emp group by deptno;
DEPTNO
---------30
20
10

MIN(SAL)
---------950
800
1300

MAX(SAL)
------------2850
3000
5000

AVG(SAL)
---------1566.66667
2175
2916.66667

Query 3: List the minimum and maximum salary for each job type.
SQL> select job,min(sal),max(sal) from emp group by JOB;
JOB
--------CLERK
SALESMAN
PRESIDENT
MANAGER
ANALYST

MIN(SAL)
---------800
1250
000
2450
3000

MAX(SAL)
---------1300
1600
5000
2975
3000

Query 4: Find out how many managers there are without listing them.
SQL> select count(*) as No_Manager from emp where job='MANAGER';

45

Roll No.

NO_MANAGER
-------------------3
Query 5: Find the average salary and average total remuneration for each
job type.
SQL>select job,avg(sal), avg(sal+((comm*sal)/100)) as Avg_Tot_Rem from emp group
by JOB;
JOB
--------CLERK
SALESMAN
PRESIDENT
MANAGER
ANALYST

AVG(SAL)
---------1037.5
1400
5000
2758.33333
3000

AVG_TOT_REM
----------8537.5

Query 6: Find out difference between highest and lowest salaries.


SQL> select max(sal)-min(sal) as Difference_Sal from emp;
DIFFERENCE_SAL
-------------4200
Query 7: Find all departments which have more than 3 employees.
SQL> select deptno,count(empno) as no_emp from emp group by deptno having
count(empno)>3;
DEPTNO
---------20
30

46

NO_EMP
---------5
6

Roll No.

PROBLEM NO.4
(JOINS)
Query 1: Display all employee names and their department name, n
department name order.
SQL> select ename ,dname from emp,dept where emp.deptno=dept.deptno order by
dname;
ENAME
---------CLARK
KING
MILLER
SMITH
ADAMS
FORD
SCOTT
JONES
ALLEN
BLAKE
MARTIN
JAMES
TURNER
WARD

DNAME
-------------ACCOUNTING
ACCOUNTING
ACCOUNTING
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
SALES
SALES
SALES
SALES
SALES
SALES

14 rows selected.

Query 2: Display all employee names, department number and name.


SQL> select ename,emp.deptno,dname from emp,dept where emp.deptno=dept.deptno;
ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER

47

DEPTNO
---------20
30
30
20
30
30
10
20
10
30

DNAME
-------------RESEARCH
SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES

Roll No.

ADAMS
JAMES
FORD
MILLER

20
30
20
10

RESEARCH
SALES
RESEARCH
ACCOUNTING

14 rows selected.

Query 3: Display the name, location and department of employees whose


salary is more than 1500 a month.
SQL> select ename, emp.deptno, dname, loc from emp ,dept where emp.deptno=dept.deptno and
sal>1500;
ENAME
---------ALLEN
JONES
BLAKE
CLARK
SCOTT
KING
FORD

DEPTNO
---------30
20
30
10
20
10
20

DNAME
-------------SALES
RESEARCH
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
RESEARCH

LOC
------------CHICAGO
DALLAS
CHICAGO
NEW YORK
DALLAS
NEW YORK
DALLAS

7 rows selected.
Query 4: Produce a list showing employees salary grades.
SQL> select empno, ename, grade from emp, salgrade where sal between(LOSAL) and
(HISAL);
EMPNO
---------7369
7876
7900
7521
7654
7934
7499
7844
7566
7698
7782
7788
7902
7839

48

ENAME
---------SMITH
ADAMS
JAMES
WARD
MARTIN
MILLER
ALLEN
TURNER
JONES
BLAKE
CLARK
SCOTT
FORD
KING

GRADE
---------1
1
1
2
2
2
3
3
4
4
4
4
4
5

Roll No.

14 rows selected.

Query 5: Show only employees on grade 3.


SQL> select empno, ename, grade from emp, salgrade where (sal between(LOSAL) and
(HISAL) )and grade = 3;
EMPNO
---------7499
7844

ENAME
---------ALLEN
TURNER

GRADE
---------3
3

Query 6: Show all employees in Dallas.


SQL> select empno, ename, dname from emp, dept where emp.deptno=dept.deptno and
loc='DALLAS';
EMPNO
---------7369
7566
7788
7876
7902

ENAME
---------SMITH
JONES
SCOTT
ADAMS
FORD

DNAME
-------------RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH

Query 7: List the employee name, job salary, grade and department name
for everyone in the company except clerks. Sort on salary, displaying the
highest salary first.
SQL> select ename, job ,sal,dname from emp,dept where emp.deptno=dept.deptno and
not(job='CLERK');
ENAME
---------ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER

49

JOB
--------SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN

SAL
---------1600
1250
2975
1250
2850
2450
3000
5000
1500

DNAME
-------------SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES

Roll No.

FORD

ANALYST

3000

RESEARCH

10 rows selected.

Query 8: List all employees by name and number along with their
managers name and number.
SQL> select e.empno,e.ename,e.mgr, m.ename from emp e,emp m where
e.mgr=m.empno;
EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7844
7876
7900
7902
7934

ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
TURNER
ADAMS
JAMES
FORD
MILLER

MGR
---------7902
7698
7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

ENAME
---------FORD
BLAKE
BLAKE
KING
BLAKE
KING
KING
JONES
BLAKE
SCOTT
BLAKE
JONES
CLARK

13 rows selected.

50

Roll No.

PROBLEM NO.5
(SUB QUERIES)
Query 1: Write a query to display the employee name and hiredatae for all
employees in the same department as Blake. Exclude Blake.
SQL> select ename, hiredate from emp where (deptno in(select deptno from emp where
ename='BLAKE')) and not(ename='BLAKE');
ENAME
---------ALLEN
MARTIN
TURNER
JAMES
WARD

HIREDATE
--------20-FEB-81
28-SEP-81
08-SEP-81
03-DEC-81
22-FEB-81

Query 2: Create a query to display the employee number and name for all
employees who earn more than the average salary. Sort the results in
descending order by salary.
SQL> select empno,ename, sal from emp where sal>(select avg(sal) from emp) order by
sal desc;
EMPNO
---------7839
7788
7902
7566
7698
7782

ENAME
---------KING
SCOTT
FORD
JONES
BLAKE
CLARK

SAL
---------5000
3000
3000
2975
2850
2450

6 rows selected.

51

Roll No.

Query 3: Write a query that will display employee number and employee
name for all employees who work in a department with any employee
whose name contain a T.
SQL> select empno, ename,deptno from emp where deptno in(select deptno from emp
where ename like '%T%');
EMPNO
---------7369
7876
7902
7788
7566
7499
7698
7654
7900
7844
7521

ENAME
---------SMITH
ADAMS
FORD
SCOTT
JONES
ALLEN
BLAKE
MARTIN
JAMES
TURNER
WARD

DEPTNO
---------20
20
20
20
20
30
30
30
30
30
30

11 rows selected.
Query 4: Display the employee name, department number and job for all
employees whose department location is Dallas.
SQL> select ename, deptno, job from emp where deptno in (select deptno from dept
where loc='DALLAS');
ENAME
---------SMITH
JONES
SCOTT
ADAMS
FORD

DEPTNO
---------20
20
20
20
20

JOB
--------CLERK
MANAGER
ANALYST
CLERK
ANALYST

Query 5: Display the employee and salary of all employees who report to
King.
SQL> select empno, ename ,sal from emp where mgr in(select empno from emp where
ename='KING');
EMPNO

52

ENAME

SAL

Roll No.

---------7566
7698
7782

---------JONES
BLAKE
CLARK

---------2975
2850
2450

Query 6: Display the department number, anme and job for all employees in
the Sales Department.
SQL> select ename, emp.deptno, dname, job from emp, dept where
emp.deptno=dept.deptno and emp.deptno in(select deptno from dept where
dname='SALES');
ENAME
---------ALLEN
WARD
MARTIN
BLAKE
TURNER
JAMES

DEPTNO
---------30
30
30
30
30
30

DNAME
-------------SALES
SALES
SALES
SALES
SALES
SALES

JOB
--------SALESMAN
SALESMAN
SALESMAN
MANAGER
SALESMAN
CLERK

Query 7: Create a query to display the employees that earn a salary that is
higher than the salary of all clerks. Sort the result on salary from highest to
lowest.
SQL> select ename, sal from emp where sal>(select max(sal) from emp where
job='CLERK') order by sal desc;
ENAME
---------KING
SCOTT
FORD
JONES
BLAKE
CLARK
ALLEN
TURNER

SAL
---------5000
3000
3000
2975
2850
2450
1600
1500

8 rows selected.

53

Roll No.

APPLICATION QUERY 8
VIEWS, INDEXES AND SEQUENCES
Views
Views are nothing but virtual tables that act as a window to the base table(s). In other
words, a VIEW is a mechanism through which the results of a SELECT can be given a
name and referred to just like an ordinary table in the database. Unlike the ordinary
tables, views are not stored as a set of data clause. Instead the name and the definition of
the view are stored as a set of data values in the database. When a view is queried, the
view definition is used to generate the required query result.
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];
Indexes
An index:
Is a schema object
Is used by the Oracle server to speed up the retrieval of rows by using a pointer
Can reduce disk I/O by using a rapid path access method to locate data quickly
Is independent of the table it indexes
Is used and maintained automatically by the Oracle server.
CREATE INDEX index ON table (column[, column]...);
Sequences
A sequence:
Automatically generates unique numbers
Is a sharable object
Is typically used to create a primary key value
Replaces application code
Speeds up the efficiency of accessing sequence values when cached in
memory.

54

Roll No.

CREATE SEQUENCE sequence


[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE
n | Views
NOCACHE}];
Queries
based on
Query 1: Create a simple view on emp.
SQL> create view v_emp1 as select ename,job,sal from emp;
View created.
SQL> select * from v_emp1;
ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

JOB
--------CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

SAL
---------800
1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300

14 rows selected.
Query 2: Create a view having derived column (ename, salary, increment
(20% of salary), job)
SQL> create view v1_emp as select ename, sal+sal*0.2 as incre_sal,job from emp;
View created.
SQL> select * from v1_emp;
ENAME

55

INCRE_SAL

JOB

Roll No.

---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

----------------960
1920
1500
3570
1500
3420
2940
3600
6000
1800
1320
1140
3600
1560

--------CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

14 rows selected.
Query 3: Create a join query view(emp and dept, empid, ename, dname,
job)
SQL> create view v2_emp as select empno,ename,dname,job from emp,dept where
emp.deptno=dept.deptno;
View created.
SQL> select * from v2_emp;
EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7844
7876
7900
7902
7934

ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
TURNER
ADAMS
JAMES
FORD
MILLER

DNAME
-------------RESEARCH
SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING

JOB
--------CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
SALESMAN
CLERK
CLERK
ANALYST
CLERK

14 rows selected.

56

Roll No.

Query 4: Create a view using group by query(deptid,dname,max(sal),


avg(sal),min(sal).
SQL> create view v3_emp as select deptno, max(sal) as max_sal ,avg(sal) as avg_sal ,
min(sal) as min_sal from emp group by deptno;
View created.
SQL> select * from v3_emp;
DEPTNO
---------30
20
10

MAX_SAL
---------2850
3000
5000

AVG_SAL
---------1566.66667
2175
2916.66667

MIN_SAL
---------950
800
1300

Query 5: Create a updatable view from emp.


SQL> create view v4_emp as select ename,empno,hiredate,job,deptno from emp;
View created.
SQL> select * from v4_emp;
ENAME
----------------------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

EMPNO
---------

HIREDATE
JOB
----------------

7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82

DEPTNO
---------

CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

20
30
30
20
30
30
10
20
10
30
20
30
20
10

14 rows selected.
Update Command on View

57

Roll No.

SQL> update v4_emp set deptno=10 where empno=7900;


1 row updated.

SQL> select * from v4_emp;


ENAME
--------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

HIREDATE
---------------17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82

JOB
DEPTNO
--------------------CLERK
20
SALESMAN
30
SALESMAN
30
MANAGER
20
SALESMAN
30
MANAGER
30
MANAGER
10
ANALYST
20
PRESIDENT
10
SALESMAN
30
CLERK
20
CLERK
10
ANALYST
20
CLERK
10

14 rows selected.
SQL> select * from emp;
EMPNO
ENAME
JOB
MGR
HIREDATE
--------------------------------------------------7369 SMITH
CLERK
7902
17-DEC-80 800
7499 ALLEN
SALESMAN 7698
20-FEB-81
1600
7521 WARD
SALESMAN 7698
22-FEB-81
1250
7566 JONES
MANAGER 7839
02-APR-81 2975
7654 MARTIN
SALESMAN 7698
28-SEP-81
1250
7698 BLAKE
MANAGER 7839
01-MAY-81 2850
7782 CLARK
MANAGER 7839
09-JUN-81
2450
7788 SCOTT
ANALYST 7566
19-APR-87 3000
7839 KING
PRESIDENT
17-NOV-81 5000
7844 TURNER
SALESMAN 7698
08-SEP-81
1500
7876 ADAMS
CLERK
7788
23-MAY-87 1100
7900 JAMES
CLERK
7698
03-DEC-81 950

58

SAL

COMM
DEPTNO
---------------300
500
1400

20
30
30
20
30
30
10
20
10
30
20
10

Roll No.

7902 FORD
7934 MILLER

ANALYST
CLERK

7566
7782

03-DEC-81
23-JAN-82

3000
1300

20
10

14 rows selected.
Insert Command on View
SQL> insert into v4_emp values('Ram',7480,'30-mar-11','CLERK',10);
1 row created.
SQL> select * from v4_emp;
ENAME
--------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
Ram

EMPNO
---------7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
7480

HIREDATE
---------------17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82
30-MAR-11

JOB
DEPTNO
--------------------CLERK
20
SALESMAN
30
SALESMAN
30
MANAGER
20
SALESMAN
30
MANAGER
30
MANAGER
10
ANALYST
20
PRESIDENT
10
SALESMAN
30
CLERK
20
CLERK
10
ANALYST
20
CLERK
10
CLERK
10

15 rows selected.
SQL> select * from emp;
EMPNO ENAME
JOB
MGR
HIREDATE
--------------------------------------------------7369 SMITH
CLERK
7902
17-DEC-80 800
7499 ALLEN
SALESMAN 7698
20-FEB-81
1600
7521 WARD
SALESMAN 7698
22-FEB-81
1250
7566 JONES
MANAGER 7839
02-APR-81 2975
7654 MARTIN
SALESMAN 7698
28-SEP-81
1250
7698 BLAKE
MANAGER 7839
01-MAY-81 2850
7782 CLARK
MANAGER 7839
09-JUN-81
2450
7788 SCOTT
ANALYST 7566
19-APR-87 3000
7839 KING
PRESIDENT
17-NOV-81 5000
7844 TURNER
SALESMAN 7698
08-SEP-81
1500
7876 ADAMS
CLERK
7788
23-MAY-87 1100
59

SAL
------300
500
1400

COMM
DEPTNO
---------20
30
30
20
30
30
10
20
10
30
20
Roll No.

7900 JAMES
7902 FORD
7934 MILLER
7480 Ram

CLERK
ANALYST
CLERK
CLERK

7698
7566
7782

03-DEC-81
03-DEC-81
23-JAN-82
30-MAR-11

950
3000
1300

10
20
1
10

15 rows selected.

Query 6: Drop a view.


SQL> drop view v1_emp;
View dropped.
SQL> select * from v1_emp;
select * from v1_emp
*
ERROR at line 1:
ORA-00942: table or view does not exist
Queries based on Indexes
Query 1: Create index on empname on emp and dname on dept.
SQL> create index index1 on emp(ename);
Index created.
SQL> select index_name,table_name,index_type from user_indexes;
INDEX_NAME
-----------------------------SYS_C0014661
SYS_C0014662
SYS_C0017753
SYS_C0015264
SYS_C0015268
SYS_C0015316
SYS_C0017757
INDEX1

TABLE_NAME
-----------------------------STUDENT1
STUDENT1
EMP
SAILOR
BOAT
RESERVES
DEPT
EMP

INDEX_TYPE
--------------------------NORMAL
NORMAL
NORMAL
NORMAL
NORMAL
NORMAL
NORMAL
NORMAL

8 rows selected.
Query 2: Use the query based on above indexed columns.
60

Roll No.

SQL> create index index2 on dept(dname);


Index created.
SQL> select * from emp where ename like 'J%'
EMPNO
ENAME
JOB
--------------------------7900
JAMES
CLERK
7566
JONES
MANAGER
Query 3: Drop a index

MGR
-------7698
7839

HIREDATE
---------------03-DEC-81
02-APR-81

SAL
---------950
2975

COMM
----------

DEPTNO
--------30
20

SQL> drop index index2;


Index dropped.
Queries based on Sequences
Query 1: Create a sequence on deptno(increment by 10, start by 50)
SQL> create sequence dept_seq1 increment by 10 start with 50 maxvalue 990 nocache
nocycle;
Sequence created.
Query 2: Use the deptno. Sequence for inserting new record in dept table.
SQL> insert into dept values(dept_seq1.nextval,'HR','New Delhi');
1 row created.
SQL> select * from dept;
DEPTNO
---------10
20
30
40
50

DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
HR

LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
New Delhi

SQL> insert into dept values(dept_seq1.nextval,'Finance','New York');


1 row created.
SQL> select * from dept;

61

Roll No.

DEPTNO
---------10
20
30
40
50
60

DNAME
------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
HR
Finance

LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
New Delhi
New York

6 rows selected.
Query 3: Display the current value of sequence.
SQL> select dept_seq1.currval from dual;
CURRVAL
---------60
Query 4: Write a query to confirm sequences.
SQL> select * from user_sequences;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE
-------------------------- ----------------- ------------------- ---------------------- ----- ---- -------------------------------------DEPT_SEQ1
1
990
10
N N
70

LAST_NUMBER
0

Query 5: Drop a sequence.


SQL> drop sequence dept_seq1;
Sequence dropped.

62

Roll No.

PL/SQL APPLICATIONS
Program 1: Write a PL/SQL code to display username, DOB, age (derived
from DOB), program date & day on screen.
DECLARE
v_ename char(10);
v_dob date;
v_age number(3);
v_prgdt date;
v_day char(10);
BEGIN
v_ename:='&v_ename';
v_dob:='&v_dob';
v_age:=round((sysdate-v_dob)/365,0);
v_prgdt:=sysdate;
v_day:=to_char(v_prgdt,'DAY');
DBMS_OUTPUT.PUT_LINE(' ******** DETAILS ******** ');
DBMS_OUTPUT.PUT_LINE(' Name is --------------->'||v_ename);
DBMS_OUTPUT.PUT_LINE('Date of Birth --------->' ||v_dob);
DBMS_OUTPUT.PUT_LINE('Age is ----------------- >'||v_age);
DBMS_OUTPUT.PUT_LINE('Program Date---------->'||v_prgdt);
DBMS_OUTPUT.PUT_LINE('Day is ------------------>'||v_day);
END;
/
Enter value for v_ename: sarita
old 11: v_ename:='&v_ename';
new 11: v_ename:='sarita';
Enter value for v_dob: 31-mar-1987
old 12: v_dob:='&v_dob';
63

Roll No.

new 12: v_dob:='31-mar-1987';


******** DETAILS ********
Name is --------------->sarita
Date of Birth --------->31-MAR-87
Age is ----------------- >22
Program Date---------->31-MAR-11
Day is ------------------>THURSDAY
PL/SQL procedure successfully completed.

Program 2: Write a PL/SQL to extract one employee from emp table on the
basis of empno.
DECLARE
v_empno
v_ename
v_job
v_deptno

emp.empno%type;
emp.ename%type;
emp.job%type;
emp.deptno%type;

BEGIN
v_empno:=&empno;
select ename, job, deptno into v_ename, v_job, v_deptno from emp where empno=v_empno;
DBMS_OUTPUT.PUT_LINE('****** EMPLOYEE DETAILS ******);
DBMS_OUTPUT.PUT_LINE(' Employee ID is --------->'||v_empno);
DBMS_OUTPUT.PUT_LINE('Name of Employee is ------->' ||v_ename);
DBMS_OUTPUT.PUT_LINE('Job is ------------------->'||v_job);
DBMS_OUTPUT.PUT_LINE('Department Number ---->'||v_deptno);
END;
/
Enter value for empno: 7900
old 9:
v_empno:=&empno;
new 9:
v_empno:=7900;
****** EMPLOYEE DETAILS ******
Employee ID is --------->7900
Name of Employee is ------->JAMES
Job is ------------------->CLERK
Department Number ---->30
PL/SQL procedure successfully completed.

64

Roll No.

Program 3: Print the salary slip of any user specific employee


Empno.

Salary

Deptno.

Allowances
Deduction
75% for manager 30%
65%for other
25%

Gross salary = salary + allowances


Net Salary = Gross salary - deduction
DECLARE
v_eno emp.empno%type;
empvar emp%rowtype;
v_sal emp.sal%type;
allow number(10);
ded number(10);
gs number(10);
ns number(10);
BEGIN
v_eno:=&Enter_Employee_Number;
select * into empvar from emp where empno=v_eno;
IF(empvar.job='MANAGER')
THEN
allow:=(0.75 * empvar.sal);
ded:= 0.30 * empvar.sal;
ELSE
allow:=(0.65 * empvar.sal);
ded:= 0.25 * empvar.sal;
END IF;
gs:= empvar.sal + allow;
ns:= gs-ded;
DBMS_OUTPUT.PUT_LINE('----------------------------------------------------------');
DBMS_OUTPUT.PUT_LINE(' ****** SALARY SLIP ****** ');
DBMS_OUTPUT.PUT_LINE(' EMPNO ----------> '||v_eno);
DBMS_OUTPUT.PUT_LINE(' JOB ----------> '||empvar.job);
DBMS_OUTPUT.PUT_LINE(' SALARY -------->'||empvar.sal);

65

Roll No.

DBMS_OUTPUT.PUT_LINE('
DBMS_OUTPUT.PUT_LINE('
DBMS_OUTPUT.PUT_LINE('
DBMS_OUTPUT.PUT_LINE('
DBMS_OUTPUT.PUT_LINE('

DNO --------------> ' ||empvar.deptno);


ALLOWENCES ---------> ' ||allow);
DEDUCTION --------> '||ded);
GROSS SALARY -------> '||gs);
NET SALARY ----------> '||ns);

EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE(' No Such Employee ');
END;
/
Enter value for enter_employee_number: 7566
old 10: v_eno:=&Enter_Employee_Number;
new 10: v_eno:=7566;
---------------------------------------------------------------****** SALARY SLIP ******
EMPNO ----------> 7566
JOB ----------> MANAGER
SALARY -------->2975
DNO --------------> 20
ALLOWENCES ---------> 2231
DEDUCTION --------> 893
GROSS SALARY -------> 5206
NET SALARY ----------> 4313
PL/SQL procedure successfully completed.
SQL> /
Enter value for enter_employee_number: 7900
old 10: v_eno:=&Enter_Employee_Number;
new 10: v_eno:=7900;
---------------------------------------------------------------****** SALARY SLIP ******
EMPNO ----------> 7900
JOB ----------> CLERK
SALARY -------->950
DNO --------------> 30
ALLOWENCES ---------> 618
DEDUCTION --------> 238
GROSS SALARY -------> 1568
NET SALARY ----------> 1330
PL/SQL procedure successfully completed.

66

Roll No.

SQL> /
Enter value for enter_employee_number: 754
old 10: v_eno:=&Enter_Employee_Number;
new 10: v_eno:=754;
No Such Employee
PL/SQL procedure successfully completed.

Program 4: Write a PL/SQL code with explicit cursor using fetch and loop
statement to print the employee details(Empno, Name,job,sal) of all
employees of department number 30
DECLARE
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_job emp.job%type;
v_sal emp.sal%type;
CURSOR emp_cursor is SELECT empno,ename,job,sal FROM emp where deptno=30;
BEGIN
DBMS_OUTPUT.PUT_LINE ('--------------------------------------------------');
DBMS_OUTPUT.PUT_LINE ('
***** EMPLOYEE DETAILS OF DEPARTMENT 30
***** ');
DBMS_OUTPUT.PUT_LINE ('
E_NO.' ||'
'||'E_NAME'||' '||'JOB'||'
'||'SALARY');
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO v_empno,v_ename,v_job,v_sal;
EXIT WHEN emp_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE ('
'||v_empno ||' '|| v_ename||' '||
v_job||'
'|| v_sal);
END LOOP;
CLOSE emp_cursor;
END;
/
-----------------------------------------------------------------------------***** EMPLOYEE DETAILS OF DEPARTMENT 30 *****
E_NO. E_NAME
JOB
SALARY
7499
ALLEN
SALESMAN
1600
7521
WARD
SALESMAN
1250
7654
MARTIN
SALESMAN
1250
7698
BLAKE
MANAGER
2850
7844
TURNER
SALESMAN
1500

67

Roll No.

7900

JAMES

CLERK

950

PL/SQL procedure successfully completed.

Program 5: Write a PL/ SQL code with explicit cursor using fetch and while
statement to print boat id, along with boat name and sailor name of specific
boat colour..
DECLARE
v_bname
boat.bname%type
v_bcolor
boat.colour%type;
v_bid
boat.bid%type;
v_sname
sailor.sname%type;
CURSOR boat_cursor is SELECT bname,colour,R.bid,sname from boat B,
reserves R, sailor S where B.bid=R.bid AND R.sid=S.sid AND colour=&colour;
BEGIN
OPEN boat_cursor;
DBMS_OUTPUT.PUT_LINE('-------------------------------------------');
DBMS_OUTPUT.PUT_LINE('BOAT_ID'||'BOAT_NAME'||'SAILOR_NAME');
FETCH boat_cursor INTO v_bname,v_bcolor,v_bid,v_sname;
WHILE boat_cursor%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(v_bid ||' ' ||v_bname|| ' '||v_sname);
FETCH Boat_cursor INTO v_bname,v_bcolor,v_bid,v_sname;
END LOOP;
DBMS_OUTPUT.PUT_LINE('-------------------------------------------');
CLOSE boat_cursor;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NO RESULT FOUND');
END;
SQL> /
Enter value for color: brown
old 8: WHERE B.BID=R.BID AND R.SID=S.SID AND COLOUR='&color';
new 8: WHERE B.BID=R.BID AND R.SID=S.SID AND COLOUR='brown';
-----------------------------------------------------------------------

68

Roll No.

BOAT_ID
BOAT_NAME
SAILOR_NAME
4
ddd
bbb
----------------------------------------------------------------------PL/SQL procedure successfully completed.

Program 6: Write a PL/SQL code with explicit cursor for loop statement to
print the employee details (Empno, Name, job, sal) of all employees having
salary between 2000 and 3000.
DECLARE
empvar emp%rowtype;
CURSOR emp_cursor is select empno,ename,job, sal from emp where sal between 2000
and 3000;
BEGIN
DBMS_OUTPUT.PUT_LINE('EMPNO '||'ENAME
'||'JOB '||'SALARY ');
DBMS_OUTPUT.PUT_LINE('-------------------------------------------');
FOR empvar IN emp_cursor
LOOP
DBMS_OUTPUT.PUT_LINE(empvar.empno||' '||empvar.ename||'
'||empvar.job||'
'||empvar.sal);
END LOOP;
END;
SQL> /
EMPNO
ENAME
JOB
SALARY
---------------------------------------------------------------------7566
JONES
MANAGER 2975
7698
BLAKE
MANAGER 2850
7782
CLARK
MANAGER 2450
7788
SCOTT
ANALYST 3000
7902
FORD
ANALYST 3000
PL/SQL procedure successfully completed.

69

Roll No.

Program 7: Create a function for returning tax of an employee.


1) Salary<1000
Tax= 15% of salary
2) Salary between 1000 and 2500
Tax= 15% of first 1000 + 20% of remaining salary.
3) Salary above 2500
Tax= 15% of first 1000 + 20% of next 1500 + 30 % of remaining salary
( Function)
create or replace function taxfun(empid number) return number
is
v_sal emp.sal%type;
v_tax number;
BEGIN
select sal into v_sal from emp where empno=empid;
if (v_sal<=1000) then
v_tax:=0.15 * v_sal;
end if;
if (v_sal>1000) AND (v_sal<=2500) then
v_tax:=(0.15 * 1000)+ 0.20 * (v_sal-1000);
end if;
if (v_sal>2500) then
v_tax:=(0.15 * 1000)+(0.20 * 1500)+ 0.30 * (v_sal-2500);
end if;
return(v_tax);
END taxfun;
Function created.
(Main)
DECLARE
v_empno emp.empno%type;
tax number;
BEGIN
v_empno:=&empid;
tax:=taxfun(v_empno);
70

Roll No.

DBMS_OUTPUT.PUT_LINE(' Employee Number----->'||v_empno||'

Tax is ----->'||tax);

END;
SQL> /
Enter value for empid: 7934
old 5: v_empno:=&empid;
new 5: v_empno:=7934;
Employee Number----->7934 Tax is ----->210
PL/SQL procedure successfully completed.
Program 8: create a procedure to insert new emprec using following
1) ename in
2) empid in out
3) hiredate system date
4) dept-10/20/30 in
5) manager-7782/7566/7698 out
6) sal b/w 1500/2000/2500 out
7) job &job
(Procedure)
CREATE OR REPLACE PROCEDURE INSERT_EMP
(ENAME
EMP.ENAME%TYPE,
JOB
EMP.JOB%TYPE,
DEPTNO
EMP.DEPTNO%TYPE)
IS
EMPNO
EMP.EMPNO%TYPE;
MGR
EMP.MGR%TYPE;
HIREDATE EMP.HIREDATE%TYPE;
SAL
EMP.SAL%TYPE;
COMM
EMP.COMM%TYPE;
E
EMP%ROWTYPE;
CURSOR CC IS SELECT * FROM EMP;
BEGIN
IF JOB='CLERK' THEN
SAL:=2000;
END IF;
IF JOB='ANALYST' THEN
SAL:=1500;
END IF;
IF JOB='SALESMAN' THEN
SAL:=2500;
END IF;

71

Roll No.

IF DEPTNO=10 THEN
MGR:=7782;
END IF;
IF DEPTNO=20 THEN
MGR:=7566;
END IF;
IF DEPTNO=30 THEN
MGR:=7698;
END IF;
OPEN CC;
LOOP
FETCH CC INTO E;
EXIT WHEN CC%NOTFOUND;
END LOOP;
CLOSE CC;
EMPNO:= E.EMPNO+1;
COMM:=0;
HIREDATE:=SYSDATE;
DBMS_OUTPUT.PUT_LINE('YOUR EMPNO IS :'||EMPNO);
INSERT INTO EMP VALUES(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO);
END;
Procedure Created.
(Main)
DECLARE
ENAME EMP.ENAME%TYPE;
JOB EMP.JOB%TYPE;
DEPTNO EMP.DEPTNO%TYPE;
BEGIN
ENAME:='&NAME';
JOB:='&JOB';
DEPTNO:='&DEPARTMENT_NO';
INSERT_EMP(ENAME,JOB,DEPTNO);
DBMS_OUTPUT.PUT_LINE('RECORD INSERTED SUCCESSFULLY.');
END;
SQL>/
ENTER VALUE FOR NAME: ABC
OLD 6: ENAME:='&NAME';
NEW 6: ENAME:='ABC';
ENTER VALUE FOR JOB: MANAGER
OLD 7: JOB:='&JOB';
72

Roll No.

NEW 7: JOB:='MANAGER';
ENTER VALUE FOR DEPARTMENT_NO: 20
OLD 8: DEPTNO:='&DEPARTMENT_NO';
NEW 8: DEPTNO:='20';
PL/SQL PROCEDURE SUCCESSFULLY COMPLETED.

Program 9: Create a trigger that is fired either after insertion of any new
entry or after deletion of any existing entry from emp table and it also
counts the number of employees.
CREATE OR REPLACE TRIGGER T1
AFTER INSERT OR DELETE
ON EMP
DECLARE
TNO NUMBER(7);
BEGIN
SELECT COUNT(*) INTO TNO FROM EMP;
DBMS_OUTPUT.PUT_LINE(' TOTAL NUMBER OF EMPLOYEES ------> '||TNO);
END;
Trigger created.
SQL> insert into emp values(1609,'Saru','Manager',7788,'16-sep-2011',50000,500,20)
TOTAL NUMBER OF EMPLOYEES ------> 15
1 row created.
SQL> delete from emp where empno=1609;
TOTAL NUMBER OF EMPLOYEES ------> 14
1 row deleted.

73

Roll No.

Program 10: Create a trigger that is fired before insertion and it makes a
call to procedure named raise_application_error whenever an already exist.
CREATE OR REPLACE TRIGGER T1
BEFORE INSERT
ON EMP
FOR EACH ROW
DECLARE
EMPID NUMBER(6);
BEGIN
SELECT EMPNO INTO EMPID FROM EMP WHERE EMPNO=:NEW.EMPNO;
RAISE_APPLICATION_ERROR(-20001,'EMPLOYEE ALREADY EXISTS');
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(' INSERTING NEW EMPLOYEE');
END;
Trigger created.
SQL> insert into emp values(7934,'charu','manager',7788,'16-sep-2011',5000,500,20);
insert into emp values(7934,'charu','manager',7788,'16-sep-2011',5000,500,20)
*
ERROR at line 1:
ORA-20001: EMPLOYEE ALREADY EXISTS
ORA-06512: at "SCOTT.T1", line 5
ORA-04088: error during execution of trigger 'SCOTT.T1'
SQL> insert into emp values(1609,'charu','manager',7788,'16-sep-2011',5000,500,20);
INSERTING NEW EMPLOYEE
1 row created.

74

Roll No.

Program 11: Create a time trigger that does not allow any transaction
modification after time 2:00pm on Wednesday and is fired before insert or
delete on EMP.
CREATE OR REPLACE TRIGGER TIMETRIG
BEFORE INSERT OR DELETE
ON EMP
BEGIN
IF TO_CHAR(SYSDATE,'DY')='FRI' THEN
IF TO_CHAR(SYSDATE,'HH24')>14 THEN
RAISE_APPLICATION_ERROR(-20001,'TRANSACTION
MODIFICATION NOT ALLOWED AT THIS TIME');
ELSE
RAISE_APPLICATION_ERROR(-20001,'TRANSACTION
MODIFICATION NOT ALLOWED TODAY');
END IF;
ELSE
DBMS_OUTPUT.PUT_LINE('SUCCESSFUL');
END IF;
END;
Trigger created.
SQL> insert into emp(empno,ename,hiredate) values(&empno,'&ename',sysdate);
Enter value for empno: 1609
Enter value for ename: saru
old 1: insert into emp(empno,ename,hiredate) values(&empno,'&ename',sysdate)
new 1: insert into emp(empno,ename,hiredate) values(1609,'saru',sysdate)
insert into emp(empno,ename,hiredate) values(1609,'saru',sysdate)
*
ERROR at line 1:
ORA-20001: transaction modification not allowed at this time
ORA-06512: at "SCOTT.TIMETRIG", line 4
ORA-04088: error during execution of trigger 'SCOTT.TIMETRIG'

75

Roll No.

76

Roll No.

Você também pode gostar