--Q1a
select fname,minit,lname
from employee right outer join (
works_on left outer join project on works_on.pno=project.pnumber)
on employee.ssn=works_on.essn
where employee.dno=5 and project.pname='ProductX' and works_on.hours>10;
--Q1b
select fname,minit,lname
from employee right outer join dependent on ssn=essn
where employee.fname=dependent.dependent_name;
--Q1c
select sup.ssn,sup.fname
from employee emp right outer join employee sup on emp.ssn=sup.superssn
where (emp.fname || ' ' || emp.lname)='Franklin Wong';
--Q1d
select pname, sum(hours) hours
from project left outer join works_on on pnumber=pno
group by pnumber,pname;
--Q1e
select pname,fname
from employee right outer join (
project left outer join works_on on pnumber=pno)
on ssn=essn
order by pname;
--Q1f
select fname
from (
select *
from employee minus
(select employee.*
from employee right outer join works_on
on ssn=essn)
);
--Q1g
select dname, avg(salary) avg_sal
from department left outer join employee on dnumber=dno
group by dnumber,dname;
--Q1h
select avg(salary) avg_female_sal
from employee
where sex='F';
--Q1i
select distinct fname,address
from (employee left outer join dept_locations on dno=dnumber) left outer join (
works_on left outer join project on pno=pnumber)
on ssn=essn
where dlocation != 'Houston' and plocation ='Houston';
--Q1j
select *
from (
select *
from ( select department.* from department left outer join employee on mgrssn=ssn)
minus
(select department.* from department left outer join dependent on mgrssn=essn)
);
--a
update employee
set address='123 Lý Thường Kiệt F.14 Q.10'
where ssn=123456789;
--b
update dependent
set relationship='FRIEND'
where dependent_name='Joy' and essn=(select ssn from employee where fname='Franklin')
--c
update employee
set salary = salary*2
where dno=(select dnumber from department where dname='Research');
--d
update employee
set salary = salary*0.95
where ssn=(select ssn from (select ssn,nvl(sum(hours),0) h_sum from employee left outer join works_on
on ssn=essn where h_sum < 40 group by ssn));
--a
delete from works_on
where pno=(select pnumber from project where pname='ProductZ');
delete from project
where pname='ProductZ';
--b
delete from works_on
where essn='999887777';
delete from dependent
where essn='999887777';
delete from employee
where ssn='999887777';
--Q2a
select ename, deptno, sal
from emp
where sal >= 1000 and sal<=2000;
--Q2b
select deptno, dname
from dept
order by dname;
--Q2c
select empno, ename
from emp
where deptno=10 or deptno=20;
--Q2d
select ename, job
from emp
where job='CLERK' and deptno=20;
--Q2e
select empno,ename
from emp
where ename like '%TH%' or ename like '%LL%';
--Q2f
select ename,job
from emp
where mgr is not null;
--Q2j
select emp.*, salgrade.grade
from emp, salgrade
where sal between salgrade.losal and hisal;
--Q2g
select ename,deptno from emp where extract(year from hiredate) = 1983;
--Q2i
select avg(nvl(sal,0)) avg_sal
from emp;
select min(sal)
from emp;
select max(sal)
from emo;
--Q2k
select min(sal)
from emp
group by job;
select max(sal)
from emp
group by job;
--Q2l
select distinct mgr
from emp;
--Q2m
select dname, sub1.emp_count
from dept,
(select deptno, count(deptno) as emp_count
from emp
group by deptno) sub1
where dept.deptno = sub1.deptno
and sub1.emp_count > 3;
--Q2n
select ename, dept.loc, dept.dname
from emp
left join dept on dept.deptno = emp.deptno
where sal > 1500;
--Q2o
select ename, job, sal, dept.dname
from emp
left join dept on dept.deptno = emp.deptno
where job not in 'clerk'
order by sal desc;