User Defined Functions Tables
User Defined Functions Tables
TABLES:
-------
1. Database tables
2. Non-database tables
DATABASE TABLES: These tables store in database and each table has its own data.
NONDATABASE TABLES: These tables are not stored in the database, these tables are having nothing.
Eg: DUAL
FUNCTIONS:
1.AGGREGATE FUNCTIONS
2.RANK FUNCTIONS
3.NULL FUNCTIONS
4.NUMBER FUNCTIONS
5.DATE FUNCTIONS
6.STRING FUNCTIONS
AGGREGATE FUNCTIONS:
----------------------------------
THESE FUNCTIONS ARE USED TO CALCULATE ANYAGGREGATE VALUES LIKE SUM, MAX,MIN,AVG,
COUNT.
Eg:
SELECT SUM(SAL)
FROM EMP;
SELECT SUM(SAL)
FROM EMP
WHERE JOB='CLERK';
3. WHAT IS THE SUM OF SALARIES OF ALL THE EMPLOYEES WHO ARE TAKING LESS THEN 3000?
SELECT SUM(SAL)
FROM EMP
WHERE SAL<3000;
4. WHAT ARE THE SUM OF SALARIES OF THE EMPLOYEE WHO IS WORKING AS SALESMAN UNDER
30TH DEPT
SELECT SUM(SAL)
FROM EMP
WHERE JOB='SALESMAN' AND DEPTNO=30;
5. WHAT IS THE SUM OF SALARIES OF THE EMPS WHO IS NOT HAVING COMMS AND WORKING
UNDER 20TH DEPT?
SELECT SUM(SAL)
FROM EMP
WHERE COMM IS NULL AND DEPTNO=20;
MAX(): IT IS USED TO FIND MAXIMUM VALUE OF ALL VALUES IN SPECIFIED COLUMN.
Eg:
SELECT MAX(SAL)
FROM EMP;
2. WHAT IS THE ENAME WHO IS TAKING MAXIMUM SALARY IN THE EMP TABLE?
SELECT ENAME
FROM EMP
WHERE SAL =(SELECT MAX(SAL)
FROM EMP);
SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO=20;
4. WHAT IS THE ENAME WHO IS TAKING MAXIMUM SALARY IN THE 20TH DEPT?
SELECT ENAME,SAL
FROM EMP
WHERE SAL = (SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO=20);
5. WHAT IS THE MAXIMUM SALARY OF THE EMPLOYEES WHO ARE NOT TAKING COMM AND
WORKING IN 20TH DEPT?
SELECT MAX(SAL)
FROM EMP
WHERE COMM IS NULL AND DEPTNO=20;
Eg:
SELECT MIN(SAL)
FROM EMP
WHERE DEPTNO=10;
2. WHAT IS THE MINIMUM SALES OF CUSTOMERS WHO IS TAKING SALESAMT IS LESS THEN 50000?
SELECT MIN(SALES)
FROM CUSTOMER
WHERE CID IN (SELECT CID
FROM PITAB
WHERE SALESAMT<50000);
3. WHAT IS THE MINIMUM SALES OF CUSTOMERS WHO ARE STAYING EAITHER IN HYD OR IN
PUNE?
SELECT MIN(SALES)
FROM CUSTOMER
WHERE LOC IN('HYD','PUNE');
Eg:
SELECT AVG(SAL)
FROM EMP;
2. WHAT IS THE AVG SALARIES OF THE EMPLOYEES WHO ARE TAKING COMM?
SELECT AVG(SAL)
FROM EMP
WHERE COMM IS NOT NULL;
3. WHAT IS THE AVG SALARIES OF THE EMPLOYEE WHO ARE NOT WORKING AS SALESMAN?
SELECT AVG(SAL)
FROM EMP
WHERE JOB <> 'SALESMAN';
4. WHAT IS THE AVG SALARIES OF THE EMPLOYEE WHO ARE NOT HAVING MANAGERS?
SELECT AVG(SAL)
FROM EMP
WHERE MGR IS NULL;
COUNT(): IT IS USED TO COUNT NO.OF VALUES OR ROWS.
Eg:
SELECT COUNT(*)
FROM EMP;
SELECT COUNT(*)
FROM EMP
WHERE JOB='SALESMAN';
3. WHAT ARE THE NO.OF EMPLOYEES WHO ARE NOT TAKING COMMS?
SELECT COUNT(*)
FROM EMP
WHERE COMM IS NULL;
4. WHAT ARE THE NO.OF EMPLOYEES WHO ARE TAKING SALARIES LESS THEN 2000?
SELECT COUNT(*)
FROM EMP
WHERE SAL<2000;
1. Row_number()
2. Dense_rank()
3. Rank()
We can apply ranks at table level or at any particular group level also like job level.
14 rows selected.
ROW_NUMBER(): this function assigns unique ranks for all values including duplicate values
also.
SELECT ENAME,
JOB,
SAL,
ROW_NUMBER() OVER(ORDER BY SAL DESC) RN
FROM EMP;
14 rows selected.
SELECT ENAME,
JOB,
SAL,
ROW_NUMBER() OVER(PARTITION BY JOB ORDER BY SAL DESC) RN
FROM EMP;
14 rows selected.
DENSE_RANK()
This function assigns unique rank for distinct values and duplicate rank for duplicate values.
After same rank, this function continues the next rank, means it will not maintain any gaps
between ranks.
SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(ORDER BY SAL DESC) DN
FROM EMP;
14 rows selected.
SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) DN
FROM EMP;
ENAME JOB SAL DN
---------- --------- ---------- -------------------
FORD ANALYST 3000 1
SCOTT ANALYST 3000 1
MILLER CLERK 1300 1
ADAMS CLERK 1100 2
JAMES CLERK 950 3
SMITH CLERK 800 4
JONES MANAGER 2975 1
BLAKE MANAGER 2850 2
CLARK MANAGER 2450 3
KING PRESIDENT 5000 1
ALLEN SALESMAN 1600 1
TURNER SALESMAN 1500 2
MARTIN SALESMAN 1250 3
WARD SALESMAN 1250 3
14 rows selected.
Display ename who is taking 5th max sal in the emp table
SELECT ENAME
FROM (SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(ORDER BY SAL DESC) DN FROM EMP) TT
WHERE DN=5;
ENAME
----------
CLARK
Display emp details who are taking max salaries in each job
SELECT *
FROM (SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) DN
FROM EMP) WHERE DN=1;
ENAME JOB SAL DN
---------- --------- ---------- -------------------
SCOTT ANALYST 3000 1
FORD ANALYST 3000 1
MILLER CLERK 1300 1
JONES MANAGER 2975 1
KING PRESIDENT 5000 1
ALLEN SALESMAN 1600 1
6 rows selected.
SELECT *
FROM (SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) DN
FROM EMP)
WHERE DN=2;
SELECT *
FROM (SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) DN
FROM EMP)
WHERE DN=3;
Display emp details who are taking low salaries from each job in emp table:
SELECT *
FROM (SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(PARTITION BY JOB ORDER BY SAL) DN
FROM EMP) WHERE DN=1;
7 rows selected.
RANK()
This function assigns unique rank for distinct values and duplicate rank for duplicate values, but
after same rank it will maintain gaps in the ranks.
14 rows selected.
14 rows selected.
Eg1:
MARKS: RN DR RK
------ --- --- ---
550 1 1 1
540 2 2 2
540 3 2 2
530 4 3 4
500 5 4 5
450 6 5 6
450 7 5 6
450 8 5 6
400 9 6 9
390 10 7 10
Eg2:
SALARY RN DR RK
----- --- --- ---
30000 1 1 1
25000 2 2 2
25000 3 2 2
25000 4 2 2
20000 5 3 5
20000 6 3 5
12000 7 4 7
12000 8 4 7
10000 9 5 9
10000 10 5 9
9000 11 6 11
9000 12 6 11
NULL FUNCTIONS: These functions are used to handle null values.
1. NVL()
2. NVL2()
3. NULLIF()
4. COALESCE()
NVL(COL,VAL):
------------------
THIS FUNCTION CHECKS THE COL, IF THE COL CONTAINS NULL THEN REPLACE WITH VAL.
Eg:
SELECT ENAME,SAL,COMM,SAL+NVL(COMM,0) AS TS FROM EMP;
NVL2(COL,VAL1,VAL2):
--------------------
THIS FUNCTION CHECKS THE COL, IF COL CONTAINS NULL THEN REPLACE WITH VAL2 ELSE REPLACE
WITH VAL1.
Eg:
SELECT ENAME,SAL,COMM,SAL+NVL2(COMM,0,0) AS TS FROM EMP;
NULLIF(ARG1,ARG2):
---------------------------
THIS FUNCTION CHECKS BOTH VALUES, IF BOTH THE VALUES ARE SAME THEN IT RETURNS NULL ELSE IT
RETURNS ARG1 AS OUTPUT.
Eg:
SELECT NULLIF(10,10) FROM DUAL;......O/P: NULL
SELECT NULLF(10,20) FROM DUAL;.......O/P: 10
COALESCE(ARG1,ARG2.....):
-------------------------------------
THIS FUNCTION TAKES FIRST NON-NULL VALUE FROM ALL THE SPECIFIED COLUMNS ROW BY ROW.
TAB1:
-----
ID DID ENO CID
---- ----- ----- -----
NULL NULL NULL 1
NULL 2 NULL 9
NULL NULL 3 NULL
1 2 3 4
SEELCT COALESCE(ID,DID,ENO,CID) FROM TAB1;
1
2
3
1
ASCII(ch):
------------
THIS FUNCTION FINDS THE ASCII VALUE OF SPECIFIED CHARACTER.
Eg:
SELECT ASCII('A') FROM DUAL;.......O/P: 65
CHR(VAL):
-------------
Eg:
SELECT CHR(90) FROM DUAL;.........O/P: Z
UPPER(STR):
----------------
Eg:
SELECT UPPER('hyderabad') FROM DUAL;
LOWER(STR):
-----------------
Eg:
1. HOW TO CONVERT ALL CNAMES INTO UPPER CASE PERMANENTLY IN THE CUSTOMER TABLE?
INITCAP(STR/COL):
-----------------------
IT CONVERTS FIRST LETTER OF EACH WORD INTO UPPERCASE AND REMAINING ALL LETTERS ARE IN
LOWER CASE.
Eg:
SELECT INITCAP('SQL SERVER AND ORACLE') FROM DUAL;....O/P: Sql Server And Oracle
1. HOW TO MAKE FIRST LETTER OF EACH CUSTOMER NAME INTO CAPITAL LETTER PERMANENTLY
IN CUSTOMER TABLE?
SUBSTR(MAIN_STR,STARTING_POSITION,LENGTH):
-------------------------------------------------------------------
INSTR(STR,CHAR):
-----------------------
IT RETURNS THE INDEX POSITION OF SPECIFIC CHARACTER IN THE MAIN_STARING.
Eg:
SELECT INSTR('ORACLE','R') FROM DUAL;..........O/P: 2
NOTE: TO FIND THE SECOND OCCARANCE OF SAME CHARACTER WE SPECIFY FIRST OCCARANCE
POSITION PLUS ONE AS A THIRD ARGUMENT IN THE INSTR FUNCTION.
Eg:
SELECT REVERSE(CNAME) FROM CUSTOMER;
REPLACE(STR,OLD_STR,NEW_STR):
---------------------------------------------
IT WILL REPLACE THE OLD_STR WITH NEW_STR IN THE MAIN_STR.
Eg:
SELECT REPLACE('HYDERABAD','HYD','________') FROM DUAL;
Eg:
TAB1:
DESC
--------
WE ARE IN INDIA.
WE LOVE INDIA.
INDIA WON 2011 WC
OUTPUT:
DESC:
-------
WE ARE IN IND.
WE LOVE IND.
IND WON 2011 WC.
LENGTH(STR):
-------------------
Eg:
SELECT LTRIM(' HYDERABAD') FROM DUAL;........O/P: HYDERABAD
RTRIM(STR):
----------------
IT REMOVES RIGHT SIDE EMPTY SPACE OF GIVEN STRING OR COLUMN.
Eg:
SELECT RTRIM(' HYDERABAD ') FROM DUAL;...O/P: HYDERABAD
TRIM(STR):
-------------
IT REMOVES BOTH LEFT AND RIGHT SIDES EMPTY SPACE OF GIVEN STRING OR COLUMN.
Eg:
SELECT TRIM(' HYDERABAD ') FROM DUAL; HYDERABAD
NUMBER FUNCTIONS
ROUND(N):
--------------
IT ROUNDS THE GIVEN VALUE.
Eg:
SELECT ROUND(10.9) FROM DUAL;.......O/P: 11
SELECT ROUND(10.1) FROM DUAL;........O/P: 10
SELECT ROUND(10.5) FROM DUAL;........O/P: 11
CEIL(N):
-----------
IT RETURNS NEXT INTEGER NUMBER TO THE CURRENT NUMBER.
Eg:
SELECT CEIL(12.82743) FROM DUAL;......O/P: 13
SELECT CEIL(12.99999) FROM DUAL;......O/P: 13
SELECT CEIL(12.11111) FROM DUAL;.......O/P: 13
SELECT CEIL(12.0000) FROM DUAL;.........O/P: 12
FLOOR(N):
-------------
IT RETURN CURRENT INTEGER NUMBER FROM THE GIVEN NUMBER.
Eg:
SELECT FLOOR(12.23476) FROM DUAL;.......O/P: 12
SELECT FLOOR(12.99999) FROM DUAL;.......O/P: 12
SELECT FLOOR(12.11111) FROM DUAL;.......O/P: 12
SELECT FLOOR(12.00000) FROM DUAL;.......O/P: 12
SQRT(N):
------------
IT RETURNS THE SQUARE ROOT VALUE FOR GIVEN VALUE
EG:
SELECT SQRT(100) FROM DUAL;.............O/P: 10
SELECT SQRT(36) FROM DUAL;................O/P: 6
POWER(M,N):
------------------
IT RETURNS M POWER N VALUE.
Eg:
SELECT POWER(3,3) FROM DUAL;.......O/P: 27
SELECT POWER(3,4) FROM DUAL;.......O/P: 81
DATE FUNCTIONS: These functions are used to work with date values.
MONTHS_BETWEEN(END_DATE,START_DATE):
---------------------------------------------------------------
IT CALCULATES NO.OF MONTHS BETWEEN TWO DATES.
Eg:
SELECT MONTHS_BETWEEN(SYSDATE,'01-MAR-2017') FROM DUAL;.............O/P: 6.31
SELECT MONTHS_BETWEEN('10-MAR-2017','10-MAR-1989') FROM DUAL;….O/P: 336
SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP;
ADD_MONTHS(DATE,N):
--------------------------------
IT ADDS N NO.OF MONTHS TO THE GIVEN DATE.
Eg:
SELECT ADD_MONTHS(SYSDATE,4) FROM DUAL;…………………...O/P: 13-JAN-18
SELECT ADD_MONTHS(SYSDATE,-4) FROM DUAL;……………….….O/P: 13-MAY-17
SELECT ADD_MONTHS('01-JAN-2017',10) FROM DUAL;…………..O/P: 01-NOV-17
LAST_DAY(DATE):
-----------------------
THIS FUNCTION RETURNS LAST DAY OF GIVEN DATE.
Eg:
SELECT LAST_DAY(SYSDATE) FROM DUAL;........................O/P: 30-SEP-17
SELECT LAST_DAY('10-JAN-2010') FROM DUAL;................O/P: 31-JAN-10
NEXT_DAY(DATE,'WEEK_NAME')
-------------------------------------------
THIS FUNCTION RETURNS DATE OF GIVEN WEEK FROM THE SPECIFIED DATE.
Eg:
SELECT NEXT_DAY(SYSDATE,'MON') FROM DUAL;.........................O/P: 18-SEP-17
SELECT NEXT_DAY('20-DEC-2015','MON') FROM DUAL;…………......O/P: 21-DEC-2015
Eg:
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;.................O/P: 12
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;............O/P: 9
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL;…………........O/P: 12
1. TO_CHAR()
2. TO_DATE()
3. TO_NUMBER()
TO_CHAR():
TO_CHAR function converts a datetime value (DATE, TIMESTAMP data types i.e.) to a string using the
specified format.
Eg:
TO_DATE function converts a string value to DATE data type value using the specified format
Eg: