Finding NTH Max
Finding NTH Max
```````````````````
select sal,ename
from emp e1
where(select count(distinct e2.sal)
from emp e2
where e1.sal<e2.sal)in N-1;
FINDING NTH MIN
```````````````````
SELECT SAL,ENAME
FROM EMP E1
WHERE(SELECT COUNT(DISTINCT E2.SAL)
FROM EMP E2
WHERE E1.SAL>E2.SAL)IN N-1;
INSERT INTO SCHOLARSHIP (STUDENT_REF_ID, SCHOLARSHIP_AMOUNT, SCHOLARSHIP_DATE)
VALUES ('S001', 15000.00, TO_DATE('2023-06-15', 'YYYY-MM-DD'));
STUDENT TABLE
````````````
CREATE TABLE STUDENTS
2 (
3 STUDENT_ID VARCHAR(10) PRIMARY KEY,
4 FIRST_NAME VARCHAR(20) NOT NULL,
5 LAST_NAME VARCHAR(15) NOT NULL,
6 GPA NUMBER(10) NOT NULL,
7 ENROLLMENT_DATE DATE NOT NULL,
8 MAJOR VARCHAR(20) NOT NULL
9 );
INSERTING VALUES
`````````````````````````
INSERT INTO STUDENTS (STUDENT_ID, FIRST_NAME, LAST_NAME, GPA, ENROLLMENT_DATE,
MAJOR)
VALUES ('S003', 'Ravi', 'Teja', 3.95, TO_DATE('2020-07-20', 'YYYY-MM-DD'),
'Electronics');
PROGRAM TABLE
`````````````````````````
CREATE TABLE PROGRAM (
2 STUDENT_REF_ID VARCHAR2(10),
3 PROGRAM_NAME VARCHAR2(100) NOT NULL,
4 PROGRAM_START_DATE DATE NOT NULL,
5 FOREIGN KEY (STUDENT_REF_ID) REFERENCES STUDENTS(STUDENT_ID)
6 );
INSERTING VALUES
````````````````````````````````````````````
INSERT INTO SCHOLARSHIP (STUDENT_REF_ID, SCHOLARSHIP_AMOUNT, SCHOLARSHIP_DATE)
VALUES
('S003', 18000.00, TO_DATE('2023-03-20', 'YYYY-MM-DD'));
SCHOLARSHIP TABLE
`````````````````````````````````````````````````
CREATE TABLE SCHOLARSHIP (
2 STUDENT_REF_ID VARCHAR2(10),
3 SCHOLARSHIP_AMOUNT NUMBER(10, 2) NOT NULL,
4 SCHOLARSHIP_DATE DATE NOT NULL,
5 CONSTRAINT FK_SCHOLARSHIP_STUDENT FOREIGN KEY (STUDENT_REF_ID) REFERENCES
STUDENTS(STUDENT_ID)
6 );
INSERTING VALUES
````````````````````````````````
INSERT INTO SCHOLARSHIP (STUDENT_REF_ID, SCHOLARSHIP_AMOUNT, SCHOLARSHIP_DATE)
VALUES ('S003', 18000.00, TO_DATE('2023-03-20', 'YYYY-MM-DD'));
FINDING N'TH MAX AND N'TH MIN USING CO-RELATED SUB QUERY
```````````````````````````````````````````````````````````````````
FINDING NTH MAX
```````````````````
select sal,ename
from emp e1
where(select count(distinct e2.sal)
from emp e2
where e1.sal<e2.sal)in N-1;
FINDING NTH MIN
```````````````````
SELECT SAL,ENAME
FROM EMP E1
WHERE(SELECT COUNT(DISTINCT E2.SAL)
FROM EMP E2
WHERE E1.SAL>E2.SAL)IN N-1;
INSERT INTO SCHOLARSHIP (STUDENT_REF_ID, SCHOLARSHIP_AMOUNT, SCHOLARSHIP_DATE)
VALUES ('S001', 15000.00, TO_DATE('2023-06-15', 'YYYY-MM-DD'));
STUDENT TABLE
````````````
CREATE TABLE STUDENTS
2 (
3 STUDENT_ID VARCHAR(10) PRIMARY KEY,
4 FIRST_NAME VARCHAR(20) NOT NULL,
5 LAST_NAME VARCHAR(15) NOT NULL,
6 GPA NUMBER(10) NOT NULL,
7 ENROLLMENT_DATE DATE NOT NULL,
8 MAJOR VARCHAR(20) NOT NULL
9 );
INSERTING VALUES
`````````````````````````
INSERT INTO STUDENTS (STUDENT_ID, FIRST_NAME, LAST_NAME, GPA, ENROLLMENT_DATE,
MAJOR)
VALUES ('S003', 'Ravi', 'Teja', 3.95, TO_DATE('2020-07-20', 'YYYY-MM-DD'),
'Electronics');
PROGRAM TABLE
`````````````````````````
CREATE TABLE PROGRAM (
2 STUDENT_REF_ID VARCHAR2(10),
3 PROGRAM_NAME VARCHAR2(100) NOT NULL,
4 PROGRAM_START_DATE DATE NOT NULL,
5 FOREIGN KEY (STUDENT_REF_ID) REFERENCES STUDENTS(STUDENT_ID)
6 );
INSERTING VALUES
````````````````````````````````````````````
INSERT INTO SCHOLARSHIP (STUDENT_REF_ID, SCHOLARSHIP_AMOUNT, SCHOLARSHIP_DATE)
VALUES
('S003', 18000.00, TO_DATE('2023-03-20', 'YYYY-MM-DD'));
SCHOLARSHIP TABLE
`````````````````````````````````````````````````
CREATE TABLE SCHOLARSHIP (
2 STUDENT_REF_ID VARCHAR2(10),
3 SCHOLARSHIP_AMOUNT NUMBER(10, 2) NOT NULL,
4 SCHOLARSHIP_DATE DATE NOT NULL,
5 CONSTRAINT FK_SCHOLARSHIP_STUDENT FOREIGN KEY (STUDENT_REF_ID) REFERENCES
STUDENTS(STUDENT_ID)
6 );
INSERTING VALUES
````````````````````````````````
INSERT INTO SCHOLARSHIP (STUDENT_REF_ID, SCHOLARSHIP_AMOUNT, SCHOLARSHIP_DATE)
VALUES ('S003', 18000.00, TO_DATE('2023-03-20', 'YYYY-MM-DD'));
45 questionsss
```````````````````````````````````````````````````````````````````````````````````
``````
---
1. Display all the employees whose department name ends with 'S':
SELECT E.*
FROM EMP E
WHERE E.DEPTNO IN (
SELECT D.DEPTNO
FROM DEPT D
WHERE D.DNAME LIKE '%S'
);
---
SELECT ENAME
FROM EMP
WHERE SAL = (
SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO = (
SELECT DEPTNO FROM DEPT WHERE DNAME = 'ACCOUNTING'
)
);
---
SELECT D.DNAME
FROM DEPT D
WHERE D.DEPTNO = (
SELECT DEPTNO
FROM EMP
WHERE COMM IS NOT NULL
ORDER BY COMM DESC
FETCH FIRST 1 ROWS ONLY
);
---
SELECT ENAME
FROM EMP
WHERE DEPTNO IN (
SELECT DEPTNO
FROM DEPT
WHERE SUBSTR(DNAME, 2, 1) = 'O'
);
---
SELECT *
FROM EMP
WHERE DEPTNO = (
SELECT DEPTNO FROM EMP WHERE ENAME = 'SCOTT'
);
---
SELECT *
FROM EMP
WHERE DEPTNO IN (
SELECT DEPTNO FROM DEPT WHERE DNAME IN ('OPERATIONS', 'ACCOUNTING')
);
---
SELECT *
FROM EMP
WHERE SAL > (
SELECT SAL FROM EMP WHERE ENAME = 'MILLER'
);
---
SELECT DEPTNO
FROM EMP
WHERE JOB = 'SALESMAN'
GROUP BY DEPTNO
HAVING COUNT(*) >= 3;
---
SELECT *
FROM EMP
WHERE MGR IS NULL;
---
SELECT *
FROM EMP
WHERE MGR = (
SELECT EMPNO FROM EMP WHERE ENAME = 'JONES'
);
---
SELECT *
FROM EMP
WHERE DEPTNO IN (
SELECT DEPTNO FROM DEPT WHERE DNAME IN ('RESEARCH', 'ACCOUNTING')
)
AND EMPNO IN (
SELECT MGR FROM EMP GROUP BY MGR HAVING COUNT(*) >= 2
);
---
12. Employees whose name does not start with 'S' and salary between 1500 and 3000:
SELECT *
FROM EMP
WHERE ENAME NOT LIKE 'S%' AND SAL BETWEEN 1500 AND 3000;
---
SELECT *
FROM EMP
WHERE SAL = (
SELECT MIN(SAL) FROM EMP WHERE SAL > 2000
);
---
---
SELECT D.LOC
FROM DEPT D
WHERE D.DEPTNO IN (
SELECT DEPTNO
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*) > 4
);
---
16. Employees whose job ≠ 'ALLEN' and salary > 'MARTIN':
SELECT *
FROM EMP
WHERE JOB <> (
SELECT JOB FROM EMP WHERE ENAME = 'ALLEN'
)
AND SAL > (
SELECT SAL FROM EMP WHERE ENAME = 'MARTIN'
);
---
---
SELECT E.*
FROM EMP E
WHERE E.DEPTNO IN (
SELECT D.DEPTNO
FROM DEPT D
WHERE D.LOC = (
SELECT D.LOC
FROM EMP A
JOIN EMP M ON A.MGR = M.EMPNO
JOIN DEPT D ON M.DEPTNO = D.DEPTNO
WHERE A.ENAME = 'ADAM'
)
);
---
---
---
20. Number of employees with salary less than Blake’s manager:
SELECT COUNT(*)
FROM EMP
WHERE SAL < (
SELECT SAL
FROM EMP
WHERE EMPNO = (
SELECT MGR FROM EMP WHERE ENAME = 'BLAKE'
)
);
---
SELECT E.*
FROM EMP E
JOIN DEPT D ON E.DEPTNO = D.DEPTNO
WHERE D.LOC = 'CHICAGO' AND NVL(COMM, 0) = 0;
---
SELECT *
FROM EMP E
WHERE JOB = 'SALESMAN'
AND SAL > (
SELECT AVG(SAL)
FROM EMP
WHERE DEPTNO = E.DEPTNO
);
---
SELECT *
FROM EMP
WHERE JOB = 'MANAGER'
AND DEPTNO = (
SELECT DEPTNO FROM DEPT WHERE DNAME = 'RESEARCH'
);
---
SELECT D.DNAME
FROM EMP E
JOIN DEPT D ON E.DEPTNO = D.DEPTNO
WHERE MGR IS NULL AND SAL = (
SELECT MAX(SAL) FROM EMP WHERE MGR IS NULL
);
---
26. Employees reporting to Blake and have commission (without using NULL/IS NOT
NULL):
SELECT *
FROM EMP
WHERE MGR = (
SELECT EMPNO FROM EMP WHERE ENAME = 'BLAKE'
)
AND NVL(COMM, 0) > 0;
---
---
---
---
29. Employees not reporting to President, with commission, and salary > max salary
of clerks (no NULL usage):
SELECT *
FROM EMP
WHERE MGR != (SELECT EMPNO FROM EMP WHERE JOB = 'PRESIDENT')
AND COMM > 0
AND SAL > (
SELECT MAX(SAL) FROM EMP WHERE JOB = 'CLERK'
);
---
30. Employees who joined 2+ years after the first employee and earn more than
Blake:
SELECT *
FROM EMP
WHERE HIREDATE > (
SELECT MIN(HIREDATE) + INTERVAL '2' YEAR FROM EMP
)
AND SAL > (SELECT SAL FROM EMP WHERE ENAME = 'BLAKE');
---
---
32. Employees with same job as Jones and salary less than Scott:
SELECT *
FROM EMP
WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME = 'JONES')
AND SAL < (SELECT SAL FROM EMP WHERE ENAME = 'SCOTT');
---
33. Employees in dept 30, annual salary > X, and at least 3 employees:
SELECT *
FROM EMP
WHERE DEPTNO = 30
AND (SAL * 12) > 0
AND DEPTNO IN (
SELECT DEPTNO
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*) >= 3
);
---
SELECT *
FROM EMP
WHERE SAL < ANY (SELECT SAL FROM EMP WHERE JOB = 'SALESMAN');
---
SELECT *
FROM EMP
WHERE HIREDATE < (SELECT MAX(HIREDATE) FROM EMP);
---
SELECT *
FROM EMP
WHERE SAL > ALL (SELECT SAL FROM EMP WHERE JOB = 'MANAGER');
---
37. Employees joined 4+ years after 1st employee and earn less than Blake:
SELECT *
FROM EMP
WHERE HIREDATE > (
SELECT MIN(HIREDATE) + INTERVAL '4' YEAR FROM EMP
)
AND SAL < (SELECT SAL FROM EMP WHERE ENAME = 'BLAKE');
---
---
39. Location of employees not starting with A and salary between 1000–3000:
---
---
42. Manager number, job, dept number for those with no commission in Chicago or
Dallas:
---
43. SELECT E.*, E.AnnualSalary
FROM Employees E
WHERE E.Commission = (SELECT MAX(Commission) FROM Employees);
46.
SELECT DISTINCT D.DepartmentName
FROM Employees E
JOIN Departments D ON E.DepartmentID = D.DepartmentID
WHERE E.AnnualSalary > (SELECT AVG(AnnualSalary) FROM Employees WHERE JobID =
(SELECT JobID FROM Jobs WHERE JobTitle = 'Clerk'));
47.
SELECT E.*, E.AnnualSalary * 1.25 AS NewSalary
FROM Employees E
WHERE E.HireDate = (SELECT MAX(HireDate) FROM Employees);
48.
SELECT E.DepartmentID
FROM Employees E
JOIN Departments D ON E.DepartmentID = D.DepartmentID
WHERE D.DepartmentName = 'Sales' AND E.ManagerID = E.EmployeeID