0% found this document useful (0 votes)
13 views9 pages

QUERIES

Uploaded by

rajbunny137
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views9 pages

QUERIES

Uploaded by

rajbunny137
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

CHAR FUNCTIONS

 WAQ TO DISPLAY EACH YEAR WISE SUM OF SALARY IN EMP TABLE

SELECT TO_CHAR( HIREDATE,’YYYY’ ) ,SUM(SAL) FROM EMP GROUP BY TO_CHAR


( HIREDATE, ‘YYYY’);

 WAQ TO DISPLAY EACH DAY WISE SUM OF SALARY IN EMP TABLE

SELECT TO_CHAR(HIREDATE,’DAY’),SUM(SAL) FROM EMP GROUP BY TO_CHAR( HIREDATE,’DAY’);

WAQ TO DISPLAY SUM OF SALARY OF DAY WISE IN 1981,1983,1987

SELECT TO_CHAR(HIREDATE,’DAY’),TO_CHAR(HIREDATE,’YYYY’),SUM(SAL) FROM EMP WHERE


TO_CHAR(HIREDATE,’YYYY’) IN (1981,1983,1987) GROUP BY TO_CHAR(HIREDATE,’DAY’),
TO_CHAR(HIREDATE,’YYYY’);

SUBQUERIES

 WHO ARE GETTING THE FIRST HIGH SALARY FROM EMP TABLE ?

SELECT MAX(SAL) FROM EMP;

SELECT *FROM EMP WHERE SAL=(SELECT MAX(SAL)FROM EMP); ----- SRSQ TOTAL EMPLOYEE LIST

 DISPLAY EMPLOYEE DETAILS WHO ARE GETTING MIN,MAX SALARIES ?

SELECT*FROM EMP WHERE SAL IN

(SELECT MAX(SAL) FROM EMP

UNION

SELECT MIN(SAL) FROM EMP);-----------MRSQ

WAQ TO DISPLAY MAXIMUM SALARY OF EMP TABLE EACH JOB WISE?------MRSQ

SELECT*FROM EMP WHERE SAL IN(SELECT MAX(SAL),JOB FROM EMP GROUP BY JOB);

 WHOSE EMPLOYEE JOB IS SAME AS THE JOB OF 'SMITH' ?

SELECT*FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME=’SMITH’);

 EMPLOYEE DETAILS WHOSE EMPLOYEE JOB IS SAME AS

THE JOB OF THE EMPLOYEE "SMITH","CLARK" ?

SELECT*FROM EMP WHERE JOB IN(SELECT JOB FROM EMP WHERE ENAME=’SMITH’ OR
ENAME=’CLARK’);---------- MRSQ

 WHOSE SALARY IS MORE THAN MAX.SALARY OF THE JOB IS "SALESMAN"?

SELECT*FROM EMP WHERE SAL>(SELECT JOB,MAX(SAL) FROM EMP WHERE JOB=’SALESMAN’);


WASQ TO DISPLAY EMPLOYEES WHOSE SALARY IS MORE THAN ANY "SALESMAN"

SALARY ?-----MRSQ

SELECT *FROM EMP WHERE SAL> ANY(SELECT SAL FROM EMP WHERE JOB=’SALESMAN’);

WASQ TO DISPLAY EMPLOYEES WHOSE SALARY IS MORE THAN OF ALL "SALESMAN"

SALARY ?-----------MRSQ

SELECT *FROM EMP WHERE SAL>ALL (SELECT SAL FROM EMP WHERE JOB=’SALESMAN’);

 WHOSE EMPLOYEE JOB IS SAME AS THE JOB OF "BLAKE" AND WHO ARE EARNING

SALARY MORE THAN "BLAKE" SALARY ?

SELECT * FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME=’BLAKE’) AND
SAL>(SELECT MAX(SAL)FROM EMP WHERE ENAME=’BLAKE’);

 DISPLAY SENIOR EMPLOYEE ?

SELECT MIN(HIREDATE)FROM EMP;

SELECT*FROM EMP WHERE HIREDATE=(SELECT MIN(HIREDATE) FROM EMP); ------SRSQ

 TO FIND SECOND HIGH. SALARY FROM EMP TABLE ?

SELECT MAX(SAL) FROM EMP WHERE SAL<(SELECT MAX(SAL) FROM EMP);

SELECT*FROM EMP WHERE SAL=(SELECT MAX(SAL) FROM EMP WHERE SAL<(SELECT MAX(SAL)
FROM EMP)); ----SRSQ TOTAL EMPLOYEE LIST

 DISPLAY EMPLOYEE DETAILS WHO ARE GETTING

3rd HIGH. SALARY IN EMP TABLE ?

SELECT *FROM EMP WHERE SAL=

(SELECT MAX(SAL) FROM EMP WHERE SAL<(SELECT MAX(SAL) FROM EMP WHERE SAL<(SELECT
MAX(SAL) FROM EMP)));

 NO.OF EMPLOYEE OF DEPT. NUMBERS.IN WHICH DEPTNO NO.OF EMPLOYEE

IS LESS THAN THE NO.OF EMPLOYEE OF DEPTNO IS 20 ?

SELECT DEPTNO,COUNT(*) FROM EMP GROUP BY DEPTNO

HAVING COUNT(*)<(SELECT COUNT(*) FROM EMP WHERE DEPTNO=20);

 SUM OF SALARY OF JOBS.IF SUM OF SALARY OF JOBS ARE


MORE THAN SUM OF SALARY OF THE JOB IS 'CLERK' ?

SELECT JOB,SUM(SAL) FROM EMP GROUP BY JOB

HAVING SUM( SAL)>(SELECT SUM(SAL) FROM EMP WHERE JOB=’CLERK’);

 TO UPDATE EMPLOYEE SALARY WITH MAX.SALARY OF

EMP TABLE WHOSE EMPNO IS 7900?


QUPDATE EMP SET SAL=(SELECT MAX(SAL) FROM EMP)WHERE EMPNO=7900);

 WASQ TO DELETE EMPLOYEE DETAILS FROM EMP TABLE

WHOSE JOB IS SAME AS THE JOB OF 'SCOTT' ?

DELETE FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME=’SCOTT’);

MCSQ QUERIES:
 WAQ TO DISPLAY MAXIMUM SALARY OF EMPLOYEE EACH JOB WISE USING MCSQ

SELECT *FROM EMP WHERE(JOB,SAL) IN(SELECT JOB,MAX(SAL) FROM EMP GROUP BY JOB);----
MCSQ
( OR )

SELECT *FROM EMP WHERE SAL IN(SELECT JOB,MAX(SAL) FROM EMP GROUP BY JOB);-------MRSQ

 WAQ TO DISPLAY EMPLOYEE WHOSE JOB,MGR ARE SAME AS THE JOB,MGR OF THE
EMPLOYEE "SCOTT" ?
SELECT*FROM EMP WHERE (JOB,MGR) IN (SELECT JOB,MGR FROM EMP WHERE ENAME
=’SCOTT’);

ROWNUM QUERIES
 WAQ TO FETCH THE FIRST ROW EMPLOYEE DETAILS FROM EMP

TABLE BY USING ROWNUM ?

SELECT * FROM EMP WHERE ROWNUM=1;

 WAQ TO FETCH THE SECOND ROW EMPLOYEE DETAILS FROM EMP

TABLE BY USING ROWNUM ?

SELECT*FROM EMP WHERE ROWNUM<=2

MINUS

SELECT * FROM EMP WHERE ROWNUM=1;

 WAQ TO FETCH THE FIRST FIVE ROWS FROM EMP TABLE BY

USING ROWNUM

SELECT*FROM EMP WHERE ROWNUM<=5;

 WAQ TO FETCH THE FIFTH ROW EMPLOYEE DETAILS FROM EMP TABLE BY

USING ROWNUM

SELECT * FROM EMP WHERE ROWNUM<=5


MINUS

SELECT*FROM EMP WHERE ROWNUM<=4;

 WAQ TO FETCH FROM 3rd TO 9th ROW FROM EMP TABLE BY USING ROWNUM?

SELECT * FROM EMP WHERE ROWNUM<=9

MINUS

SELECT * FROM EMP WHERE ROWNUM<3 OR <=2;

 WAQ TO FETCH THE LAST TWO ROWS FROM EMP TABLE BY ROWNUM?

SELECT *FROM EMP

MINUS

SELECT *FROM EMP WHERE ROWNUM<=(SELECT COUNT(*)-2 FROM EMP);

INLINE VIEW QUERIES

USING COLUMN ALIAS NAMES IN WHERE CLAUSE CONDITION :

 WAQ TO DISPLAY EMPLOYEE WHOSE EMPLOYEE ANNUAL SALARY IS MORE THAN

25000 ?

SELECT*FROM (SELECT ENAME, SAL ,SAL*12 ANNUALSAL FROM EMP ) WHERE ANNUALSAL>25000;

USING "ORDER BY" CLAUSE IN SUBQUERY:

 WAQ TO DISPLAY FIRST FIVE HIGHEST SALARIES OF EMPLOYEE FROM EMP

TABLE BY USING ROWNUM ALONG WITH INLINE VIEW ?

SELECT * FROM (SELECT * FROM EMP ORDER BY SAL DESC) WHERE ROWNUM<=5;

 WAQ TO DISPLAY 5th HIGHEST SALARY OF EMPLOYEE FROM EMP

TABLE BY USING ROWNUM ALONG WITH INLINE VIEW ?

SELECT* FROM (SELECT *FROM EMP ORDER BY SAL DESC)WHERE ROWNUM<=5

MINUS

SELECT* FROM (SELECT *FROM EMP ORDER BY SAL DESC)WHERE ROWNUM<=4;


USING ROWNUM ALIAS NAME:

 WAQ TO DISPLAY 3rd POSITION ROW FROM EMP TABLE BY USING ROWNUM ALIAS NAME

ALONG WITH INLNE VIEW ?

SELECT *FROM (SELECT ROWNUM R ,ENAME,SAL,DEPTNO FROM EMP )WHERE R=3;

( OR )

SELECT *FROM (SELECT ROWNUM R,E.* FROM EMP E)WHERE R=3;

 WAQ TO DISPLAY 1st,3rd,5th,7th,9th ROWS FROM EMP TABLE BY USING ROWNUM

ALIAS NAME ALONG WITH INLINE VIEW ?

SELECT *FROM(SELECT ROWNUM R ,E.* FROM EMP E)WHERE R IN(1,3,5,7,9);

( OR )

SELECT *FROM (SELECT ROWNUM R,E.* FROM EMP E )WHERE MOD(R,2)=1; --- ODD ROWS

SELECT *FROM (SELECT ROWNUM R,E.* FROM EMP E )WHERE MOD(R,2)=0;---- EVEN ROWS

 WAQ TO DISPLAY FIRST ROW AND LAST ROW FROM EMP TABLE BY USING

ROWNUM ALIAS NAME ALONG WITH INLINE VIEW ?

SELECT * FROM (SELECT ROWNUM R,E.* FROM EMP E)WHERE R=1 OR R=(SELECT COUNT(*) FROM
EMP);

ANALYTICAL FUNCTIONS

 WAQ TO DISPLAY 4TH SENIOR MOST EMPLOYEE FROM EACH JOB WISE BY USING
DENSE_RANK() ALONG WITTH INLINE VIEW SUBQUERY

SELECT*FROM (SELECT E.*,DENSE_RANK() OVER (PARTITION BY JOB ORDER BY HIREDATE )R FROM


EMP E) WHERE R=4;

 WAQ TO DISPLAY 3rd HIGHEST SALARY EMPLOYEE DETAILS FROM EMP TABLE

IN EACH DEPTNO WISE BY USING DENSE_RANK() ALONG WITH INLINE VIEW ?

SELECT*FROM (SELECT ENAME,JOB,SAL ,DENSE_RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL


DESC)R FROM EMP)WHERE R=3;

WAQ TO DISPLAY THE EMPLOYEE DETAILS OF ROW_NUMBER,RANK(),DENSE RANK() FROM EMP


TABLE
WITH PARTITION
SELECT*FROM
(SELECT E.*,ROW_NUMBER() OVER (PARTITION BY E.DEPTNO ORDER BY E.SAL
DESC)RNB, DENSE_RANK() OVER (PARTITION BY E.DEPTNO ORDER BY E.SAL DESC)
DNK,RANK() OVER (PARTITION BY E.DEPTNO ORDER BY E.SAL DESC) RNK FROM EMP
E);

( OR )

SELECT * FROM ( SELECT E.*,DENSE_RANK() OVER (PARTITION BY DEPTNO ORDER BY


JOB )DNK,RANK() OVER (PARTITION BY DEPTNO ORDER BY JOB ) RNK ,
ROW_NUMBER() OVER (PARTITION BY DEPTNO ORDER BY JOB ) RN FROM EMP E);

WITHOUT PARTITION
SELECT*FROM
(SELECT E.*,ROW_NUMBER() OVER ( ORDER BY E.SAL DESC)RNB, DENSE_RANK() OVER
(ORDER BY E.SAL DESC)
DNK,RANK() OVER ( ORDER BY E.SAL DESC) RNK FROM EMP E);

( OR )

SELECT * FROM ( SELECT E.*,DENSE_RANK() OVER ( ORDER BY SAL DESC)DNK,RANK()


OVER ( ORDER BY SAL DESC) RNK ,
ROW_NUMBER() OVER ( ORDER BY SAL DESC ) RN FROM EMP E);

CORELATED SUBQUERY
TO FIND OUT EMPLOYEE WHO ARE GETTING FIRST HIGHEST SALARY FROM

EMPLOYEE TABLE N-1=()

SELECT * FROM EMP E1 WHERE 0=(SELECT COUNT(DISTINCT SAL) FROM EMP E2 WHERE
E2.SAL>E1.SAL);

TO FIND OUT EMPLOYEE WHO ARE GETTING FOURTH HIGHEST SALARY FROM

EMPLOYEE TABLE

SELECT * FROM EMP E1 WHERE 3 = (SELECT COUNT (*) FROM EMP E2 WHERE E2.SAL>E.SAL);

WAQ TO DISPLAY TOP 3 HIGHEST SALARIES EMPLOYEE DETAILS FROM EMPLOYEE

TABLE ?

SELECT * FROM EMP E1 WHERE 3>(SELECT COUNT(*) FROM EMP E2 WHERE E2.SAL>E1.SAL);

NOTE:

-----------

1. TO FIND OUT "Nth" HIGH / LOW SALARY ----------> N-1

2. TO DISPLAY "TOP n" HIGH / LOW SALARIES -----> N>

WAQ TO DISPLAY DEPARTMENT DETAILS IN WHICH DEPARTMENT EMPLOYEE ARE WORKING?


SELECT *FROM EMP E WHERE EXISTS(SELECT DEPTNO FROM DEPT D WHERE
E.DEPTNO=D.DEPTNO);

WAQ TO DISPLAY DEPARTMENT DETAILS IN WHICH DEPARTMENT EMPLOYEE ARE NOT WORKING?

SELECT *FROM EMP E WHERE NOT EXISTS(SELECT DEPTNO FROM DEPT D WHERE
E.DEPTNO=D.DEPTNO);

SCALAR SUBQUERY
WAQ TO DISPLAY NO OF ROWS IN EMP AND DEPT TABLES AT A TIME

SELECT (SELECT COUNT(*) FROM EMP)AS EMP_TOTAL ,(SELECT COUNT(*) FROM DEPT) AS
DEPT_TOTAL FROM DUAL;

WAQ TO DISPLAY NO. OF ROWS IN EACH DEPT.


SELECT(SELECT COUNT(*) FROM EMP WHERE DEPTNO=10)AS "10",
(SELECT COUNT(*) FROM EMP WHERE DEPTNO=20)AS "20",
(SELECT COUNT(*) FROM EMP WHERE DEPTNO=30)AS "30" FROM DUAL;

WAQ TO DISPLAY TOTAL SALARY OF EMPLOYEE IN EACH DEPT. WISE

SELECT(SELECT SUM(SAL) FROM EMP WHERE DEPTNO=10)AS "10",


(SELECT SUM(SAL) FROM EMP WHERE DEPTNO=20)AS "20",
(SELECT SUM(SAL) FROM EMP WHERE DEPTNO=30)AS "30" FROM DUAL;

Write a SQL Query to fetch all the duplicate records in a table.


create table users
(
user_id int primary key,
user_name varchar(30) not null,
email varchar(50));

insert into users values


(1, 'Sumit', 'sumit@gmail.com'),
(2, 'Reshma', 'reshma@gmail.com'),
(3, 'Farhana', 'farhana@gmail.com'),
(4, 'Robin', 'robin@gmail.com'),
(5, 'Robin', 'robin@gmail.com');

select * from users;


-- Solution 1:

-- Replace ctid with rowid for Oracle, MySQL and Microsoft SQLServer
select *
from users u
where u.ctid not in (
select min(ctid) as ctid
from users
group by user_name
order by ctid);

-- Solution 2: Using window function.

select user_id, user_name, email


from (
select *,
row_number() over (partition by user_name order by user_id) as rn
from users u
order by user_id) x
where x.rn <> 1;

Write a SQL query to fetch the second last record from employee
table.
SELECT * FROM ( SELECT E.*, ROW_NUMBER() OVER (ORDER BY EMPNO DESC)RN FROM EMP E)
WHERE RN=2;

Write a SQL query to display only the details of employees who either earn the
highest salary or the lowest salary in each department from the employee table.
SELECT* FROM EMP WHERE SAL IN
(SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO
UNION
SELECT MIN(SAL) FROM EMP GROUP BY DEPTNO) ORDER BY DEPTNO;
( OR )
select x.*
from employee e
join (select *,
max(salary) over (partition by dept_name) as max_salary,

min(salary) over (partition by dept_name) as min_salary


from employee) x
on e.emp_id = x.emp_id
and (e.salary = x.max_salary or e.salary = x.min_salary)
order by x.dept_name, x.salary;

From the doctors table, fetch the details of doctors who work in the same
hospital but in different speciality.
SELECT D1.HOSPITAL,D1.SPECIALITY,D2.HOSPITAL,D2.SPECIALITY FROM DOCTORS
D1,DOCTORS D2 WHERE D1.HOSPITAL=D2.HOSPITAL AND
D1.SPECIALITY<>D2.SPECIALITY

Now find the doctors who work in same hospital irrespective of their speciality.
select d1.name, d1.speciality,d1.hospital from doctors d1,doctors d2 WHERE
d1.hospital = d2.hospital and d1.id <> d2.id;

You might also like