Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
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
Roll No.
Roll No.
Roll No.
Roll No.
SNAME
-------------saru
raj
ram
RATING
-------------1
2
3
AGE
-------23
39
34
INCOME
---------10000
15000
14000
BNAME
--------------abc
xyz
efg
BCOLOR
---------red
black
white
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
SPECIAL OPERATORS
BETWEEN
IN(set)
LIKE
IS NULL
ORDER BY CLAUSE
Sort rows with the ORDER BY clause
Roll No.
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
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
SNAME
----------saru
raj
ram
RATING
-----------1
2
3
AGE INCOME
------ ---------23
10000
39
15000
34
14000
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
Roll No.
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
14
INCOME
Roll No.
---------saru
raj
ram
---------10000
15000
14000
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.
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
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
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
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.
DNAME
--------------
22
LOC
-------------
Roll No.
10
20
30
40
ACCOUNTING
RESEARCH
SALES
OPERATIONS
NEW YORK
DALLAS
CHICAGO
BOSTON
LOSAL
---------700
1201
1401
2001
3001
HISAL
---------1200
1400
2000
3000
9999
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
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.
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.
25
Roll No.
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.
table1.column, table2.column
table1, table2
table1.column(+) = table2.column;
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
-------------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.
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.
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);
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.
[column,] group_function(column)...
table
condition]
group_by_expression]
having_expression]
column];
[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.
COUNT(EMP.ENAME)
---------------3
6
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
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.
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);
SAL
---------5000
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
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
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
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
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
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
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.
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.
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.
ENAME
---------ALLEN
TURNER
GRADE
---------3
3
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.
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.
MAX_SAL
---------2850
3000
5000
AVG_SAL
---------1566.66667
2175
2916.66667
MIN_SAL
---------950
800
1300
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.
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.
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.
MGR
-------7698
7839
HIREDATE
---------------03-DEC-81
02-APR-81
SAL
---------950
2975
COMM
----------
DEPTNO
--------30
20
DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
HR
LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
New Delhi
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
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.
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.
Salary
Deptno.
Allowances
Deduction
75% for manager 30%
65%for other
25%
65
Roll No.
DBMS_OUTPUT.PUT_LINE('
DBMS_OUTPUT.PUT_LINE('
DBMS_OUTPUT.PUT_LINE('
DBMS_OUTPUT.PUT_LINE('
DBMS_OUTPUT.PUT_LINE('
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
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.
Roll No.
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.