top of page

SQL Data exploration: Database querying

Kumayl Fazal

Mar 21, 2023

SQL: DDL, DML, Functions, Joins and More.

Showing a wide range of abilities using SQL for database functions. Link to GitHub https://github.com/KFanalysis/Data-Exploration-I/blob/main/employees.%20data%20exploration.sql



select first_name, last_name from employees;


select * from employees;


select * from employees where first_name = 'Denis';


select * from employees where first_name = 'elvis';


select * from employees where first_name = 'Denis' and gender = 'M';


select * from employees where first_name = 'denis' or first_name = 'Kellie' ;


select * from employees where last_name = 'Denis' and (gender = 'M' or gender = 'F');


SELECT * FROM EMPLOYEES WHERE GENDER = 'F' AND (FIRST_NAME = 'KELLIE' OR FIRST_NAME = 'ARUNA');


select * from employees where first_name IN ('Cathie', 'mark', 'nathan');


select * from employees where first_name in ('denis', 'nathan');


select * from employees where first_name not in ('denis', 'mark', 'nathan');


select * from employees where first_name like ('mark%');


select * from employees where hire_date like ('%2000%');


select * from employees where emp_no like ('1000_');


select * from employees where first_name like ('%jack%');


select * from employees where first_name not like ('%jack%');


select * from salaries where salary between '66000' and '70000';


select * from employees where emp_no not between '10004' and '10012';


select * from departments where dept_no between 'd003' and 'd006';


select * from departments where dept_no is not null;


select * from employees where hire_date >= '2000-01-01' and gender = 'f';


select distinct hire_date from employees;


select count(salary >= 100000) from salaries;


select count(*) from dept_manager;


select * from employees order by hire_date desc;


select salary, count(emp_no) as emps_with_same_salary from salaries where salary>80000 group by salary order by salary;


select *, avg(salary) from salaries group by emp_no having avg(salary) > 120000;


select first_name, count(first_name) as names_count

from employees

where hire_date > '1999-01-01'

group by first_name

having count(first_name) < 200

order by first_name desc;


select emp_no, count(emp_no) as names_count

from dept_emp

where from_date > '2000-01-01'

group by emp_no

having count(from_date)>1

order by emp_no;


select * from dept_emp

limit 100;


select count(distinct dept_no) from dept_emp;

select sum(salary) from salaries where from_date > '1997-01-01';


select min(emp_no) from employees;


select max(emp_no) from employees;


select avg(salary) from salaries where from_date > '1997-01-01';


select round(avg(salary)) from salaries where from_date > '1997-01-01';


DROP TABLE IF EXISTS departments_dup;


CREATE TABLE departments_dup

(dept_no CHAR(4) NULL, dept_name VARCHAR(40) NULL);


INSERT INTO departments_dup

(dept_no, dept_name)

SELECT * FROM departments;


INSERT INTO departments_dup (dept_name)

VALUES ('Public Relations');


DELETE FROM departments_dup

WHERE dept_no = 'd002';


INSERT INTO departments_dup(dept_no) VALUES ('d010'), ('d011');


DROP TABLE IF EXISTS dept_manager_dup;

CREATE TABLE dept_manager_dup (

emp_no int NOT NULL,

dept_no char(4) NULL,

from_date date NOT NULL,

to_date date NULL);

INSERT INTO dept_manager_dup

select * from dept_manager;


INSERT INTO dept_manager_dup (emp_no, from_date)

VALUES (999904, '2017-01-01'),

(999905, '2017-01-01'),

(999906, '2017-01-01'),

(999907, '2017-01-01');

DELETE FROM dept_manager_dup

WHERE dept_no = 'd001';


select m.dept_no, m.emp_no, d.dept_name

from dept_manager_dup m

inner join departments_dup d on m.dept_no = d.dept_no

order by m.dept_no;


select m.dept_no, m.emp_no, d.dept_name

from dept_manager_dup m, departments_dup d

where m.dept_no = d.dept_no

order by m.dept_no;


select m.dept_no, e.first_name, e.last_name, e.hire_date

from dept_manager_dup m, employees e

where m.emp_no = e.emp_no

order by m.emp_no;


select e.emp_no, e.first_name, e. last_name, e.hire_date, d.dept_no

from employees e

inner join dept_manager_dup d on e.emp_no = d.emp_no

order by e.emp_no;


select e.emp_no, e.first_name, e.last_name, d.dept_no, d.from_date

from employees e

left join dept_manager_dup d on d.emp_no = e.emp_no

where last_name = 'markovitch'

order by d.dept_no desc, e.emp_no;

SELECT dm.*, d.*

FROM departments d

CROSS JOIN dept_manager dm

WHERE d.dept_no = 'd009'

ORDER BY d.dept_name;


SELECT e.*, d.*

FROM employees e

CROSS JOIN departments d

WHERE e.emp_no < 10011

ORDER BY e.emp_no, d.dept_name;


select e.first_name, e.last_name, e.hire_date, d.dept_name, t.title, m.from_date

from employees e

join dept_manager m on e.emp_no = m.emp_no

join departments d on m.dept_no = d.dept_no

join titles t on e.emp_no = t.emp_no

where t.title = 'manager'

order by e.emp_no;

select d.dept_name, AVG(salary) as average_salary

from departments d

join dept_manager m on d.dept_no = m.dept_no

join salaries s on m.emp_no = s.emp_no

group by d.dept_name

having average_salary > 60000

order by average_salary desc;


select e.gender, count(dm.dept_no)

from employees e

join dept_manager dm on e.emp_no = dm.emp_no

group by e.gender;

select e.first_name, e.last_name

from employees e

where e.emp_no in (select dm.emp_no from dept_manager dm);


select e.first_name, e.last_name, e.hire_date

from employees e

where e.hire_date > 1990-01-01 in (select dm.emp_no from dept_manager dm);


select * from dept_manager

where emp_no in (select emp_no from employees where hire_date between '1990-01-01' AND '1995-01-01');


select * from employees

where emp_no in (select emp_no from titles where title = 'Assistant Engineer');


select * from employees e

where exists (select * from titles t where t.emp_no = e.emp_no and title = 'Assistant Engineer');


DELIMITER $$CREATE PROCEDURE avg_salary()BEGINSELECTAVG(salary)FROMsalaries;END$$DELIMITER ;


CALL avg_salary;


CALL employees.avg_salary;


drop procedure select_employees; u


se employees;drop procedure if exists emp_info;


DELIMITER $$CREATE PROCEDURE emp_info(in p_first_name varchar(255), in p_last_name varchar(255), out p_emp_no integer)BEGINSELECTe.emp_noINTO p_emp_no FROMemployees eWHEREe.first_name = p_first_nameAND e.last_name = p_last_name;


END$$DELIMITER ;


SET @v_emp_no = 0;CALL emp_info('Aruna', 'Journel', @v_emp_no);SELECT @v_emp_no;





bottom of page