Skip to content

SQL Data Retrieval

Syllabus

SQL: Basic Retrieval Queries in SQL: The Select from where structure, Ambiguous Attribute Names and Aliasing, Use of asterisk, Tables as Sets and Pattern Matching, INSERT, DELETE and UPDATE statements in SQL; (6.3, 6.4)

Table: emp_bn

sql
CREATE TABLE emp_bn (
    emp_id INT NOT NULL,
    ename VARCHAR(15),
    job_name VARCHAR(15),
    manager_id INT,
    hire_date DATE,
    salary DECIMAL(10,2),
    commission DECIMAL(7,2),
    dept_id INT,
    PRIMARY KEY (emp_id)
);

Table: dept_bn

sql
CREATE TABLE dept_bn (
    dept_id INT NOT NULL,
    dept_name VARCHAR(20),
    dept_location VARCHAR(15),
    PRIMARY KEY (dept_id)
);

Table: salary_grade_bn

sql
CREATE TABLE salary_grade_bn (
    grade INT NOT NULL,
    min_sal INT,
    max_sal INT,
    PRIMARY KEY (grade)
);

Foreign Key Constraint

sql
ALTER TABLE emp_bn
ADD FOREIGN KEY (dept_id)
REFERENCES dept_bn(dept_id);

Inserting Values into Tables

Insert values into dept_bn

sql
INSERT INTO dept_bn VALUES (1001, 'Finance', 'Sydney');
INSERT INTO dept_bn VALUES (2001, 'Audit', 'Melborne');
INSERT INTO dept_bn VALUES (3001, 'Marketing', 'Perth');
INSERT INTO dept_bn VALUES (4001, 'Production', 'Brisbane');

Insert values into salary_grade_bn

sql
INSERT INTO salary_grade_bn VALUES (1, 800, 1300);
INSERT INTO salary_grade_bn VALUES (2, 1301, 1500);
INSERT INTO salary_grade_bn VALUES (3, 1501, 2100);
INSERT INTO salary_grade_bn VALUES (4, 2101, 3100);
INSERT INTO salary_grade_bn VALUES (5, 3101, 9999);

Insert values into emp_bn

sql
INSERT INTO emp_bn VALUES (68319, 'Kayling', 'President', NULL, '1991-11-18', 6000.00, NULL, 1001);
INSERT INTO emp_bn VALUES (66928, 'Blaze', 'Manager', 68319, '1991-05-01', 2750.00, NULL, 3001);
INSERT INTO emp_bn VALUES (67832, 'Clare', 'Manager', 68319, '1991-06-09', 2550.00, NULL, 1001);
INSERT INTO emp_bn VALUES (65646, 'Jonas', 'Manager', 68319, '1991-04-02', 2957.00, NULL, 2001);
INSERT INTO emp_bn VALUES (67858, 'Scarlet', 'Analyst', 65646, '1997-04-19', 3100.00, NULL, 2001);
INSERT INTO emp_bn VALUES (69062, 'Frank', 'Analyst', 65646, '1991-12-03', 3100.00, NULL, 2001);
INSERT INTO emp_bn VALUES (63679, 'Sandrine', 'Clerk', 69062, '1990-12-18', 900.00, NULL, 2001);
INSERT INTO emp_bn VALUES (64989, 'Adelyn', 'Salesman', 66928, '1991-02-20', 1700.00, 400.00, 3001);
INSERT INTO emp_bn VALUES (65271, 'Wade', 'Salesman', 66928, '1991-02-22', 1350.00, 600.00, 3001);
INSERT INTO emp_bn VALUES (66564, 'Madden', 'Salesman', 66928, '1991-09-28', 1350.00, 1500.00, 3001);
INSERT INTO emp_bn VALUES (68454, 'Tucker', 'Salesman', 66928, '1991-09-08', 1600.00, 0.00, 3001);
INSERT INTO emp_bn VALUES (68736, 'Adnres', 'Clerk', 67858, '1997-05-23', 1200.00, NULL, 2001);
INSERT INTO emp_bn VALUES (69000, 'Julius', 'Clerk', 66928, '1991-12-03', 1050.00, NULL, 3001);
INSERT INTO emp_bn VALUES (69324, 'Marker', 'Clerk', 67832, '1992-01-23', 1400.00, NULL, 1001);

Data Inserted Tables

Table: dept_bn

dept_iddept_namedept_location
1001FinanceSydney
2001AuditMelborne
3001MarketingPerth
4001ProductionBrisbane

Table: salary_grade_bn

grademin_salmax_sal
18001300
213011500
315012100
421013100
531019999

Table: emp_bn

emp_idenamejob_namemanager_idhire_datesalarycommissiondept_id
68319KaylingPresidentNULL18-Nov-19916000.00NULL1001
66928BlazeManager6831901-May-19912750.00NULL3001
67832ClareManager6831909-Jun-19912550.00NULL1001
65646JonasManager6831902-Apr-19912957.00NULL2001
67858ScarletAnalyst6564619-Apr-19973100.00NULL2001
69062FrankAnalyst6564603-Dec-19913100.00NULL2001
63679SandrineClerk6906218-Dec-1990900.00NULL2001
64989AdelynSalesman6692820-Feb-19911700.00400.003001
65271WadeSalesman6692822-Feb-19911350.00600.003001
66564MaddenSalesman6692828-Sep-19911350.001500.003001
68454TuckerSalesman6692808-Sep-19911600.000.003001
68736AdnresClerk6785823-May-19971200.00NULL2001
69000JuliusClerk6692803-Dec-19911050.00NULL3001
69324MarkerClerk6783223-Jan-19921400.00NULL1001

SQL: Practice Questions

  1. Write a query in SQL to display all the information of the employees.
sql
SELECT * FROM emp_bn;
  1. Write a query in SQL to find the salaries of all employees.
sql
SELECT salary FROM emp_bn;
  1. Write a query in SQL to display the unique designations for the employees.
sql
SELECT DISTINCT(job_name) 
	FROM emp_bn;
  1. Write a query in SQL to list the emp name and salary is increased by 15% and expressed as no.of Dollars.
sql
SELECT ename, to_char(1.15*salary, '$99,999') 
	AS "Salary" FROM emp_bn;
  1. Write a query in SQL to produce the output of employees as follows: Employee JONAS(manager).
sql
SELECT ename || '(' || lower(job_name) || ')' 
	AS "Employee" FROM emp_bn;
  1. Write a query in SQL to list the employees with Hire date in the format like February 22, 1991.
sql
SELECT emp_id, ename, salary, 
	to_char(hire_date, 'MONTH DD,YYYY')
	FROM emp_bn;
sql
SELECT emp_id, ename, salary, 
	to_char(hire_date, 'MONTH DD,YYY')
	AS Hire_Date 
	FROM emp_bn;
  1. Write a query in SQL to count the no. of characters without considering the spaces for each name.
sql
SELECT length(trim(ename)) 
	FROM emp_bn;
  1. Write a query in SQL to list the emp id, salary, and commission of all the employees.
sql
SELECT emp_id, salary, commission 
	FROM emp_bn;
  1. Write a query in SQL to display the unique department with jobs.
sql
SELECT DISTINCT dept_id, job_name 
	FROM emp_bn;
  1. Write a query in SQL to list the employees who does not belong to department 2001.
sql
SELECT * FROM emp_bn 
	WHERE dept_id 
	NOT IN (2001);
  1. Write a query in SQL to list the employees who joined before 1991.
sql
SELECT * FROM emp_bn 
	WHERE hire_date < ('01-Jan-1991');
  1. Write a query in SQL to display the average salaries of all the employees who works as ANALYST.
sql
SELECT avg(salary) FROM emp_bn 
	WHERE job_name = 'Analyst';
  1. Write a query in SQL to display the details of the employee BLAZE.
sql
SELECT * FROM emp_bn 
	WHERE ename = 'Blaze';
  1. Write a query in SQL to display all the details of the employees whose commission is more than their salary.
sql
SELECT * FROM emp_bn 
	WHERE commission > salary;
  1. Write a query in SQL to list the employees whose salary is more than 3000 after giving 25% increment.
sql
SELECT * FROM emp_bn 
	WHERE (1.25 * salary) > 3000;
  1. Write a query in SQL to list the name of the employees, those having six characters to their name.
sql
SELECT ename FROM emp_bn 
	WHERE length(ename) = 6;
  1. Write a query in SQL to list the employees who joined in the month January.
sql
SELECT * FROM emp_bn 
	WHERE to_char(hire_date, 'Mon') = 'Jan';
  1. Write a query in SQL to list the name of employees and their manager separated by the string 'works for'.
sql
SELECT e.ename || ' works for ' || m.ename
	FROM emp_bn e, emp_bn m
	WHERE e.manager_id = m.emp_id;
  1. Write a query in SQL to list all the employees whose designation is CLERK.
sql
SELECT * FROM emp_bn 
	WHERE job_name = 'Clerk';
  1. Write a query in SQL to list the employee name and his experience in days.
sql
SELECT ename, floor(sysdate - hire_date) 
	as experience_in_days 
	FROM emp_bn;
  1. Write a query in SQL to extract year, month and date separately from the column hire date.
sql
SELECT EMP_ID, ENAME, 
	extract(YEAR from hire_date) 
	AS Year_of_Joining FROM EMP_bn;
	
SELECT EMP_ID, ENAME, 
	extract(MONTH from hire_date) 
	AS Month_of_Joining FROM EMP_bn;

SELECT EMP_ID, ENAME, 
	extract(DAY from hire_date) 
	AS Day_of_Joining FROM EMP_bn;
  1. Write a query in SQL to list the employees whose salaries are less than 3500.
sql
SELECT * FROM emp_bn 
	WHERE salary < 3500;
  1. Write a query in SQL to list the name, job name, and salary of any employee whose designation is ANALYST.
sql
SELECT ename, job_name, salary 
	FROM emp_bn 
	WHERE job_name = 'Analyst';
  1. Write a query in SQL to list the employees who have joined in the year 1991.
sql
SELECT * FROM emp_bn 
	WHERE to_char(hire_date, 'YYYY') = '1991';
  1. Write a query in SQL to list the name, id, hire date, and salary of all the employees joined before 1 apr 91.
sql
SELECT e.emp_id, e.ename, e.hire_date, e.salary 
	FROM emp_bn e WHERE hire_date < '01-Apr-1991';
  1. Write a query in SQL to list the employee name, and job name who are not working under a manager.
sql
SELECT e.ename, e.job_name 
	FROM emp_bn e 
	WHERE manager_id IS NULL;
  1. Write a query in SQL to list all the employees joined on 1st may 91.
sql
SELECT * FROM emp_bn 
	WHERE hire_date = '01-May-1991';
  1. Write a query in SQL to list the id, name, salary, and experience of all the employees who earn more than 100 as daily salary.
sql
SELECT emp_id, ename, salary, 
	(to_date(SYSDATE) - to_date(hire_date)) experience_in_days 
	FROM emp_bn WHERE (salary / 30) > 100;
  1. Write a query in SQL to list those employees whose salary is an odd value.
sql
SELECT * FROM emp_bn 
	WHERE mod(salary, 2) = 1;
  1. Write a query in SQL to list those employees whose salary contain only 3 digits.
sql
SELECT * FROM emp_bn 
	WHERE length(TRIM(TO_CHAR(salary, '9999'))) = 3;
  1. Write a query in SQL to list the employees who joined in the month of APRIL.
sql
SELECT * FROM emp_bn 
	WHERE to_char(hire_date, 'MON') = 'APR';
  1. List the employees who are SALESMAN and gathered an experience which month portion is more than 10.
sql
SELECT * FROM emp_bn 
	WHERE job_name = 'Salesman' 
	AND floor(months_between(sysdate, hire_date)) > 10;
  1. Write a query in SQL to list the employees of department id 3001 or 1001 joined in the year 1991.
sql
SELECT * FROM emp_bn 
	WHERE to_char(hire_date, 'YYYY') = '1991' 
	AND (dept_id = 3001 OR dept_id = 1001);
  1. Write a query in SQL to list all the employees of designation CLERK in department no 2001.
sql
SELECT * FROM emp_bn 
	WHERE job_name = 'Clerk' 
	AND dept_id = 2001;
  1. Write a query in SQL to list the ID, name, salary, and job name of the employees for:
  • Annual salary is below 34000 but receiving some commission which should not be more than the salary,

  • And designation is SALESMAN and working for department 3001.

sql
SELECT emp_id, ename, salary, job_name 
	FROM emp_bn 
	WHERE 12 * (salary + commission) < 34000 
	AND commission IS NOT NULL 
	AND commission < salary 
	AND job_name = 'Salesman' 
	AND dept_id = 3001;
  1. Write a query in SQL to list the employees who are either CLERK or MANAGER.
sql
SELECT * FROM emp_bn 
	WHERE job_name IN ('Clerk', 'Manager');
  1. Write a query in SQL to list the employees who joined in any year except the month February.
sql
SELECT * FROM emp_bn 
	WHERE to_char(hire_date, 'MON') NOT IN ('FEB');
  1. Write a query in SQL to list the employees who joined in the year 91.
sql
SELECT * FROM emp_bn 
	WHERE hire_date 
		BETWEEN '01-Jan-1991' 
			AND '31-Dec-1991';
  1. Write a query in SQL to list the employees who joined in the month of June in 1991.
sql
SELECT * FROM emp_bn 
	WHERE hire_date 
		BETWEEN '01-Jun-1991' 
			AND '30-Jun-1991';
-- OR
SELECT * FROM emp_bn 
	WHERE to_char(hire_date, 'Mon-yyyy') = 'Jun-1991';
  1. Write a query in SQL to list the employees whose annual salary is within the range 24000 and 50000.
sql
SELECT * FROM emp_bn 
	WHERE 12 * salary 
		BETWEEN 24000 AND 50000;
  1. Write a query in SQL to list the employees who have joined on the following dates 1st May, 20th Feb, and 03rd Dec in the year 1991.
sql
SELECT * FROM emp_bn 
	WHERE to_char(hire_date, 'DD-MON-YY') 
	IN ('01-MAY-91', '20-FEB-91', '03-DEC-91');
  1. Write a query in SQL to list the employees working under the managers 63679, 68319, 66564, 69000.
sql
SELECT * FROM emp_bn 
	WHERE manager_id 
		IN (63679, 68319, 66564, 69000);
  1. Write a query in SQL to list the employees who joined after the month JUNE in the year 1991.
sql
SELECT * FROM emp_bn 
	WHERE hire_date 
		BETWEEN '01-JUL-91' 
			AND '31-DEC-92';
  1. Write a query in SQL to list the employees who joined in 90’s.
sql
SELECT * FROM emp_bn 
	WHERE to_char(hire_date, 'YY') 
	BETWEEN '90' AND '99';
  1. Write a query in SQL to list the managers of department 1001 or 2001.
sql
SELECT * FROM emp_bn 
	WHERE job_name = 'Manager' 
	AND (dept_id = 1001 OR dept_id = 2001);
  1. Write a query in SQL to list the employees, joined in the month FEBRUARY with a salary range between 1001 to 2000.
sql
SELECT * FROM emp_bn 
	WHERE to_char(hire_date, 'MON') = 'FEB' 
	AND salary BETWEEN 1000 AND 2000;
  1. Write a query in SQL to list all the employees who joined before or after 1991.
sql
SELECT * FROM emp_bn 
	WHERE to_char(hire_date, 'YYYY') 
	NOT IN ('1991');

-- OR

SELECT * FROM emp_bn 
	WHERE to_char(hire_date, 'YYYY') 
	NOT LIKE '1991';
  1. Write a query in SQL to list the employees along with department name.
sql
SELECT e.emp_id, e.ename, e.job_name, e.manager_id,
e.hire_date, e.salary, e.commission, e.dept_id, 
d.dept_name 
	FROM emp_bn e, dept_bn d 
	WHERE e.dept_id = d.dept_id;
  1. Write a query in SQL to list the name, job name, annual salary, department id, department name and grade of the employees who earn 60000 in a year or not working as an ANALYST.
sql
SELECT e.ename, e.job_name, (12 * e.salary) "Annual Salary", 
	e.dept_id, d.dept_name, s.grade 
	FROM emp_bn e, dept_bn d, salary_grade_bn s 
	WHERE e.dept_id = d.dept_id 
	AND e.salary BETWEEN s.min_sal AND s.max_sal 
	AND ((12 * e.salary) >= 60000 OR e.job_name != 'ANALYST');
  1. Write a query in SQL to list the name, job name, manager id, salary, manager name, manager’s salary for those employees whose salary is greater than the salary of their managers.
sql
SELECT w.ename, w.job_name, w.manager_id, w.salary,
	m.ename "Manager", m.emp_id, m.salary "Manager_Salary" 
	FROM emp_bn w, emp_bn m 
	WHERE w.manager_id = m.emp_id 
	AND w.salary > m.salary;
  1. Write a query in SQL to list the employees name, department, salary and commission. For those whose salary is between 2000 and 5000 while location is PERTH.
sql
SELECT e.ename, e.dept_id, e.salary, e.commission
	FROM emp_bn e, dept_bn d
	WHERE e.dept_id = d.dept_id
	AND d.dept_location = 'Perth'
	AND e.salary BETWEEN 2000 AND 5000;
  1. Write a query in SQL to list the grade, employee name for the department id 1001 or 3001 but salary grade is not 4 while they joined the company before 1992-12-31.
sql
SELECT s.grade, e.ename
	FROM emp_bn e, salary_grade_bn s
	WHERE e.dept_id IN (1001, 3001)
	AND hire_date < ('31-Dec-1992')
	AND (e.salary BETWEEN s.min_sal 
		AND s.max_sal 
		AND s.grade NOT IN (4));
  1. Write a query in SQL to list the employees whose manager name is JONAS.
sql
SELECT w.emp_id, w.ename, w.job_name, w.manager_id,
	w.hire_date, w.salary, w.dept_id, m.ename
	FROM emp_bn w, emp_bn m
	WHERE w.manager_id = m.emp_id 
		AND m.ename = 'Jonas';
  1. Write a query in SQL to list the name and salary of FRANK if his salary is equal to max sal of his grade.
sql
SELECT e.ename, e.salary
	FROM emp_bn e, salary_grade_bn s
	WHERE e.ename = 'Frank'
		AND e.salary BETWEEN s.min_sal 
		AND s.max_sal
		AND e.salary = s.max_sal;
  1. Write a query in SQL to list the employees who are working either MANAGER or ANALYST with a salary range between 2000 to 5000 without any commission.
sql
SELECT * FROM emp_bn
	WHERE job_name IN ('Manager', 'Analyst')
		AND salary BETWEEN 2000 
		AND 5000
		AND commission IS NULL;
  1. Write a query in SQL to list the id, name, salary, and location of the employees working at PERTH, or MELBOURNE with an experience over 10 years.
sql
SELECT e.emp_id, e.ename, e.dept_id, e.salary,
	d.dept_location
	FROM emp_bn e, dept_bn d
	WHERE e.dept_id = d.dept_id
		AND d.dept_location IN ('Perth', 'Melborne')
		AND (to_date(SYSDATE) - to_date(hire_date)) > 10;
  1. Write a query in SQL to list the employees along with their location who belongs to SYDNEY, MELBOURNE with a salary range between 2000 and 5000 and joined in 1991.
sql
SELECT e.emp_id, e.ename, e.dept_id, 
	e.salary, d.dept_location
	FROM emp_bn e, dept_bn d
		WHERE e.dept_id = d.dept_id
			AND d.dept_location IN ('Sydney', 'Melborne')
			AND to_char(e.hire_date, 'YY') = '91'
			AND e.salary BETWEEN 2000 AND 5000;
  1. Write a query in SQL to list the employees with their location and grade for MARKETING department who comes from MELBOURNE or PERTH within the grade 3 to 5 and experience over 5 years.
sql
SELECT e.dept_id, e.emp_id, e.ename, e.salary, 
	d.dept_name, d.dept_location, s.grade
	FROM emp_bn e, salary_grade_bn s, dept_bn d
	WHERE e.dept_id = d.dept_id
		AND e.salary BETWEEN s.min_sal AND s.max_sal
		AND s.grade IN (3, 4, 5)
		AND (to_date(SYSDATE) - to_date(hire_date)) > 5
		AND (d.dept_name = 'Marketing' 
			AND d.dept_location 
				IN ('Melborne', 'Perth'));
  1. Write a query in SQL to list the employees who are senior to their own manager.
sql
SELECT * FROM emp_bn w, emp_bn m
	WHERE w.manager_id = m.emp_id
		AND w.hire_date < m.hire_date;
  1. Write a query in SQL to list the employee with their grade for the grade 4.
sql
SELECT * FROM emp_bn e, salary_grade_bn s
	WHERE e.salary BETWEEN s.min_sal AND s.max_sal
		AND s.grade = 4;
  1. Write a query in SQL to list the employees in department PRODUCTION or AUDIT who joined after 1991 and they are not MARKER or ADELYN to their name.
sql
SELECT e.ename FROM emp_bn e, dept_bn d, 
	salary_grade_bn s
	WHERE e.dept_id = d.dept_id
		AND d.dept_name IN ('Production', 'Audit')
		AND e.salary BETWEEN s.min_sal AND s.max_sal
		AND e.ename NOT IN ('Marker', 'Adelyn')
		AND to_char(hire_date, 'YYYY') > '1991';
  1. Write a query in SQL to list the employees in the ascending order of their salaries.
sql
SELECT * FROM emp_bn 
	ORDER BY salary ASC;
  1. Write a query in SQL to list the details of the employees in ascending order to the department id and descending order to the jobs.
sql
SELECT * FROM emp_bn 
	ORDER BY dept_id ASC, job_name DESC;
  1. Write a query in SQL to display all the unique job in descending order.
sql
SELECT DISTINCT job_name FROM emp_bn 
	ORDER BY job_name DESC;
  1. Write a query in SQL to list the id, name, monthly salary, daily salary of all the employees in the ascending order of their annual salary.
sql
SELECT emp_id, ename, salary Monthly_Salary, 
	salary / 30 Daily_Salary, 
	12 * salary Annual_Salary
	FROM emp_bn
		ORDER BY Annual_Salary ASC;
  1. Write a query in SQL to list the employees in descending order who are either 'CLERK' or 'ANALYST'.
sql
SELECT * FROM emp_bn 
	WHERE job_name = 'Clerk' 
		OR job_name = 'Analyst' 
		ORDER BY job_name DESC;
  1. Write a query in SQL to display the location of CLARE.
sql
SELECT dept_location
	FROM dept_bn d, emp_bn e
	WHERE e.ename = 'Clare' 
		AND e.dept_id = d.dept_id;
  1. Write a query in SQL to list the employees in ascending order of seniority who joined on 1-MAY-91, or 3-DEC-91, or 19-JAN-90.
sql
SELECT * FROM emp_bn
	WHERE hire_date 
		IN ('01-May-1991', '03-Dec-1991', '19-Jan-1990')
		ORDER BY hire_date ASC;
  1. Write a query in SQL to list the employees who are drawing the salary less than 1000 and sort the output in ascending order on salary.
sql
SELECT * FROM emp_bn 
	WHERE salary < 1000 
		ORDER BY salary;
  1. Write a query in SQL to list the details of the employees in ascending order on the salary.
sql
SELECT * FROM emp_bn 
	ORDER BY salary ASC;
  1. Write a query in SQL to list the employees in ascending order on job name and descending order on employee id.
sql
SELECT * FROM emp_bn e 
	ORDER BY e.job_name ASC, 
			e.emp_id DESC;
  1. Write a query in SQL to list the unique jobs of department 2001 and 3001 in descending order.
sql
SELECT DISTINCT job_name FROM emp_bn 
	WHERE dept_id IN (2001, 3001) 
		ORDER BY job_name DESC;
  1. Write a query in SQL to list all the employees except PRESIDENT and MANAGER in ascending order of salaries.
sql
SELECT * FROM emp_bn 
	WHERE job_name NOT IN ('President', 'Manager') 
		ORDER BY salary ASC;
  1. Write a query in SQL to list the employees in ascending order of the salary whose annual salary is below 25000.
sql
SELECT * FROM emp_bn 
	WHERE (12 * salary) < 25000 
		ORDER BY salary ASC;
  1. Write a query in SQL to list the employee id, name, annual salary, daily salary of all the employees in the ascending order of annual salary who works as a SALESMAN.
sql
SELECT e.emp_id, e.ename, 
	12 * salary "Annual Salary", 
	floor((12 * salary)/365) "Daily Salary"
	FROM emp_bn e
		WHERE e.job_name = 'Salesman'
		ORDER BY "Annual Salary" ASC;

-- OR --

sql
SELECT e.emp_id, e.ename, 
	12 * salary "Annual Salary", 
	(12 * salary)/365 "Daily Salary"
	FROM emp_bn e
		WHERE e.job_name = 'Salesman'
		ORDER BY "Annual Salary" ASC;
  1. Write a query in SQL to list the employee id, name, hire date, current date and experience of the employees in ascending order on their experiences.
sql
SELECT emp_id, ename, hire_date, CURRENT_DATE,
	(to_date(SYSDATE) - to_date(hire_date)) EXP
	FROM emp_bn
	ORDER BY EXP ASC;
  1. Write a query in SQL to list the employees in ascending order of designations of those, joined after the second half of 1991.
sql
SELECT * FROM emp_bn
	WHERE hire_date > to_char('30-Jun-1991')
		AND to_char(hire_date, 'YYYY') > '1991'
		ORDER BY job_name ASC;
  1. Write a query in SQL to list the total information of employees table along with department, and location of all the employees working under FINANCE and AUDIT in the ascending department no.
sql
SELECT * FROM emp_bn e, dept_bn d
	WHERE (dept_name = 'Finance' OR dept_name = 'Audit')
		AND e.dept_id = d.dept_id
		ORDER BY e.dept_id ASC;
  1. Write a query in SQL to display the total information of the employees along with grades in ascending order.
sql
SELECT * FROM emp_bn e, salary_grade_bn s
	WHERE e.salary BETWEEN s.min_sal AND s.max_sal
	ORDER BY grade ASC;

-- OR --

sql
SELECT * FROM emp_bn e, salary_grade_bn s
	WHERE e.salary >= s.min_sal
		AND e.salary <= s.max_sal
		ORDER BY s.grade ASC;
  1. Write a query in SQL to list the name, job name, department, salary, and grade of the employees according to the department in ascending order.
sql
SELECT e.ename, e.job_name, d.dept_name, 
	e.salary, s.grade
	FROM emp_bn e, dept_bn d, salary_grade_bn s
		WHERE e.dept_id = d.dept_id
			AND e.salary BETWEEN s.min_sal AND s.max_sal
			ORDER BY e.dept_id;
  1. Write a query in SQL to list the name, job name, salary, grade and department name of employees except CLERK and sort result set on the basis of highest salary.
sql
SELECT e.ename, e.job_name, e.salary, 
	s.grade, d.dept_name
	FROM emp_bn e, dept_bn d, salary_grade_bn s
	WHERE e.dept_id = d.dept_id
		AND e.salary BETWEEN s.min_sal AND s.max_sal
		AND e.job_name NOT IN ('Clerk')
		ORDER BY e.salary DESC;
  1. Write a query in SQL to list the employee ID, name, salary, department, grade, experience, and annual salary of employees working for department 1001 or 2001.
sql
SELECT e.emp_id, e.ename, e.salary, 
	s.grade, d.dept_name, 
	(to_date(SYSDATE) - to_date(hire_date)) 
		AS "Experience",
	12 * e.salary "Annual Salary"
	FROM emp_bn e, dept_bn d, salary_grade_bn s
	WHERE e.dept_id IN (1001, 2001)
		AND e.dept_id = d.dept_id
		AND e.salary BETWEEN s.min_sal AND s.max_sal;
  1. Write a query in SQL to list the details of the employees along with the details of their departments.
sql
SELECT * FROM emp_bn e, dept_bn d
	WHERE e.dept_id = d.dept_id;
  1. Write a query in SQL to list the employees who are senior to their own MANAGERS.
sql
SELECT * FROM emp_bn w, emp_bn m
	WHERE w.manager_id = m.emp_id
		AND w.hire_date < m.hire_date;

-- OR --

sql
SELECT * FROM emp_bn w, emp_bn m
	WHERE w.emp_id = m.manager_id
		AND w.hire_date > m.hire_date;
  1. Write a query in SQL to list the employee id, name, salary, and department id of the employees in ascending order of salary who works in the department 1001.
sql
SELECT e.emp_id, e.ename, e.salary, e.dept_id
	FROM emp_bn e
	WHERE e.dept_id = 1001
	ORDER BY e.salary ASC;
  1. Write a query in SQL to find the highest salary from all the employees.
sql
SELECT max(salary) FROM emp_bn;
  1. Write a query in SQL to find the average salary and average total remuneration (salary and commission) for each type of job.
sql
SELECT job_name, avg(salary), avg(salary + commission)
	FROM emp_bn
	GROUP BY job_name;
  1. Write a query in SQL to find the total annual salary distributed against each job in the year 1991.
sql
SELECT job_name, sum(12 * salary)
	FROM emp_bn
	WHERE to_char(hire_date, 'YYYY') = '1991'
	GROUP BY job_name;
  1. Write a query in SQL to list the employee id, name, department id, location of all the employees.
sql
SELECT e.emp_id, e.ename, e.dept_id, d.dept_location
	FROM emp_bn e, dept_bn d
	WHERE e.dept_id = d.dept_id;
  1. Write a query in SQL to list the employee id, name, location, department of all the departments 1001 and 2001.
sql
SELECT e.emp_id, e.ename, e.dept_id, 
	d.dept_location, d.dept_name
	FROM emp_bn e, dept_bn d
	WHERE e.dept_id = d.dept_id
		AND e.dept_id IN (1001, 2001);
  1. List the employee id, name, salary, grade of all the employees.
sql
SELECT e.emp_id, e.ename, e.salary, s.grade
	FROM emp_bn e, salary_grade_bn s
	WHERE e.salary BETWEEN s.min_sal AND s.max_sal;
  1. Write a query in SQL to list the manager no and the number of employees working for those managers in ascending order on manager id.
sql
SELECT w.manager_id, count(*)
	FROM emp_bn w, emp_bn m
	WHERE w.manager_id = m.emp_id
	GROUP BY w.manager_id
	ORDER BY w.manager_id ASC;
  1. Write a query in SQL to display the number of employee for each job in each department.
sql
SELECT dept_id, job_name, count(*)
	FROM emp_bn
	GROUP BY dept_id, job_name;
  1. Write a query in SQL to list the department where at least two employees are working.
sql
SELECT dept_id, count(*)
	FROM emp_bn
	GROUP BY dept_id
	HAVING count(*) >= 2;
  1. Write a query in SQL to display the Grade, Number of employees, and maximum salary of each grade.
sql
SELECT s.grade, count(*), max(salary)
	FROM emp_bn e, salary_grade_bn s
	WHERE e.salary BETWEEN s.min_sal AND s.max_sal
	GROUP BY s.grade;
  1. Write a query in SQL to display the department name, grade, no. of employees where at least two employees are working as a SALESMAN.
sql
SELECT d.dept_name, s.grade, count(*)
	FROM emp_bn e, dept_bn d, salary_grade_bn s
	WHERE e.dept_id = d.dept_id
		AND e.job_name = 'Salesman'
		AND e.salary BETWEEN s.min_sal AND s.max_sal
	GROUP BY d.dept_name, 
		s.grade
		HAVING count(*) >= 2;
  1. Write a query in SQL to list the no. of employees in each department where the no. is less than 4.
sql
SELECT dept_id, count(*)
	FROM emp_bn
	GROUP BY dept_id
	HAVING count(*) < 4;
  1. Write a query in SQL to list the name of departments where at least 2 employees are working in that department.
sql
SELECT d.dept_name, count(*)
	FROM emp_bn e, dept_bn d
	WHERE e.dept_id = d.dept_id
	GROUP BY d.dept_name
	HAVING count(*) >= 2;
  1. Write a query in SQL to check whether all the employee’s numbers are indeed unique.
sql
SELECT emp_id, count(*) FROM emp_bn 
	GROUP BY emp_id;
  1. Write a query in SQL to list the no. of employees and average salary within each department for each job name.
sql
SELECT count(*), avg(salary), dept_id, job_name
	FROM emp_bn
	GROUP BY dept_id, job_name;
  1. Write a query in SQL to list the highest salary in each department in ascending order of department id.
sql
SELECT dept_id, max(salary)
	FROM emp_bn
	GROUP BY dept_id
	ORDER BY dept_id ASC;
  1. Write a query in SQL to list the department name and number of employees where more than 3 employees are working in that department.
sql
SELECT d.dept_name, count(*)
	FROM emp_bn e, dept_bn d
	WHERE e.dept_id = d.dept_id
	GROUP BY d.dept_name
	HAVING count(*) > 3;
  1. Write a query in SQL to list the grade and number of employees where at least 2 employees should be working in that grade.
sql
SELECT s.grade, count(*)
	FROM emp_bn e, salary_grade_bn s
	WHERE e.salary BETWEEN s.min_sal AND s.max_sal
	GROUP BY s.grade
	HAVING count(*) >= 2;
  1. Write a query in SQL to list the total no. of employees working in grade 3 or department 2001.
sql
SELECT count(*)
	FROM emp_bn e, salary_grade_bn s
	WHERE (e.salary BETWEEN s.min_sal AND s.max_sal 
		AND s.grade = 3)
	OR e.dept_id = 2001;
  1. Write a query in SQL to list the department name and no. of employees who joined in 1991.
sql
SELECT d.dept_name, count(*)
	FROM emp_bn e, dept_bn d
	WHERE e.dept_id = d.dept_id
		AND to_char(hire_date, 'YYYY') = '1991'
	GROUP BY d.dept_name;
  1. Write a query in SQL to list the no. of employees drawing commission in each department.
sql
SELECT dept_id, count(*)
	FROM emp_bn
	WHERE commission IS NOT NULL
	GROUP BY dept_id;
  1. Write a query in SQL to list the department name, grade, job name and number of employees drawing a salary greater than 2000.
sql
SELECT d.dept_name, s.grade, e.job_name, count(*)
	FROM emp_bn e, dept_bn d, salary_grade_bn s
	WHERE e.salary > 2000
		AND e.salary BETWEEN s.min_sal AND s.max_sal
		AND e.dept_id = d.dept_id
	GROUP BY d.dept_name, s.grade, e.job_name;
  1. Write a query in SQL to list the maximum annual salary department wise.
sql
SELECT dept_id, max(12 * salary)
	FROM emp_bn
	GROUP BY dept_id;
  1. Write a query in SQL to list the annual salary for the employees of grade 3.
sql
SELECT e.ename, 12 * e.salary
	FROM emp_bn e, salary_grade_bn s
	WHERE e.salary BETWEEN s.min_sal AND s.max_sal
		AND s.grade = 3;
  1. Write a query in SQL to list the employees who are earning more than any of the MANAGERS.
sql
SELECT * FROM emp_bn
	WHERE salary > ANY (
			SELECT salary
			FROM emp_bn
			WHERE job_name = 'Manager'
			);
  1. Write a query in SQL to list the employees who are earning more than all of the SALESMEN.
sql
SELECT * FROM emp_bn
	WHERE salary > ALL (
			SELECT salary
			FROM emp_bn
			WHERE job_name = 'Salesman'
			);
  1. Write a query in SQL to find the 2nd maximum salary of the employee.
sql
SELECT MAX(salary) FROM emp_bn
	WHERE salary NOT IN (
		  SELECT MAX(salary)
		  FROM emp_bn
		);
  1. Write a query in SQL to find the employees whose salaries are in the range of salaries of SALESMAN.
sql
SELECT * FROM emp_bn
	WHERE salary BETWEEN (
		  SELECT MIN(salary) FROM emp_bn 
		  WHERE job_name = 'Salesman'
			) AND (
		  SELECT MAX(salary) FROM emp_bn 
		  WHERE job_name = 'Salesman'
			);
  1. Write a query in SQL to list the employees of grade 3 who are working as a SALESMAN.
sql
SELECT e.emp_id, e.ename, e.job_name, 
	e.salary, s.grade
	FROM emp_bn e, salary_grade_bn s
	WHERE e.salary BETWEEN s.min_sal AND s.max_sal
		AND s.grade = 3
		AND e.job_name = 'Salesman';

Made with ❤️ for students, by a fellow learner.