Download presentation
Presentation is loading. Please wait.
1
DBMAN 4 Examples SzaboZs
2
SELECT Displayed order of suffixes
INTO FROM WHERE GROUP BY HAVING UNION/MINUS INTERSECT ORDER BY SzaboZs
3
Zero List the name, job and income for the workers who work in Dallas or Chicago. Let’s use the operator IN SzaboZs
4
Solution using the IN SELECT ename, job, sal+isnull(comm, 0)
FROM emp, dept WHERE emp.deptno=dept.deptno AND upper(dept.loc) IN ('DALLAS', 'CHICAGO'); FROM emp WHERE deptno IN ( SELECT deptno FROM dept WHERE upper(loc) IN ('DALLAS', 'CHICAGO') ); SzaboZs
5
BAD Solution using manual join
SELECT ename, job, sal+isnull(comm, 0) FROM emp, dept WHERE emp.deptno=dept.deptno AND upper(dept.loc)='DALLAS' OR upper(dept.loc)='CHICAGO'; SzaboZs
6
GOOD Solution using manual join
SELECT ename, job, sal+isnull(comm, 0) FROM emp, dept WHERE emp.deptno=dept.deptno AND (upper(dept.loc)='DALLAS' OR upper(dept.loc)='CHICAGO'); SzaboZs
7
PREFERRED Solution using inner join
SELECT ename, job, sal+isnull(comm, 0) FROM emp INNER JOIN dept ON emp.deptno=dept.deptno WHERE upper(dept.loc)='DALLAS' OR upper(dept.loc)='CHICAGO'; SzaboZs
8
First List the name of the workers, their salary, the name of their boss, the boss' departments' location and the sum salary of that place. SzaboZs
9
CHOOSING TABLES AND FIELDS
Sum salary of a location join EMP and DEPT, use sum() Worker name and income EMP D Boss name and income join EMP D and EMP F, use EMP F Place of the boss' department join EMP F and DEPT SzaboZs
10
SALARIES IN A DEPARTMENT
A simple multi-table GROUP BY EMP_1 <deptno, deptno> DEPT_1, and then sum(sal) grouped by the LOC field SzaboZs
11
SALARIES CREATE VIEW sumSalaries AS SELECT sum(emp.sal) as dept_sal,
dept.loc as dept_loc FROM emp, dept WHERE emp.deptno=dept.deptno GROUP BY dept.loc; SzaboZs
12
WORKERS-BOSSES-BOSS' DATA
Workers' name and salary EMP_2 Boss' name and salary join EMP_2 and EMP_3, use fields in EMP_3 Boss' department's name Join EMP_3 and DEPT_2 EMP_2 <empno, mgr> EMP_3 EMP_3 <deptno, deptno> DEPT_2 SzaboZs
13
WORKERS-BOSSES-BOSS' DATA
SzaboZs
14
WORKERS-BOSSES-BOSS' DATA
CREATE VIEW workerData AS SELECT work.ename as work_name, work.sal as work_sal, boss.ename as boss_name, boss.sal as boss_sal, dept.loc as boss_loc FROM emp work, emp boss, dept WHERE work.mgr=boss.empno and boss.deptno=dept.deptno; SzaboZs
15
RESULT WORKERS-BOSSES-BOSS' DATA data1 / workerData
SUM-SALARIES data2 / sumSalaries data1 <boss_loc, dept_loc> data2 SzaboZs
16
(SELECT work.ename as work_name, work.sal as work_sal,
SELECT * FROM (SELECT work.ename as work_name, work.sal as work_sal, boss.ename as boss_name, boss.sal as boss_sal, dept.loc as boss_loc FROM emp work, emp boss, dept WHERE work.mgr=boss.empno and boss.deptno=dept.deptno) data1, (SELECT sum(emp.sal) as dept_sal, dept.loc as dept_loc FROM emp, dept WHERE emp.deptno=dept.deptno GROUP BY dept.loc) data2 WHERE data1.boss_loc=data2.dept_loc ORDER BY boss_name, work_name; SzaboZs
17
PREFERRED solution with views
SELECT * FROM workerData INNER JOIN sumSalaries ON (workerData.boss_loc=sumSalaries.dept_loc) ORDER BY boss_name, work_name; THIS IS ALWAYS THE PREFERRED WAY! SzaboZs
18
Second List the number of employees for each boss, along with their departments, average income, and the difference between that average and the boss' income. Now do we need the department of the boss (A), or the workers (B)??? SzaboZs
19
CHOOSING FIELDS AND TABLES
Number of employees, their average income GROUP BY EMP.MGR Department Joining EMP and DEPT SzaboZs
20
GROUP BY EMP.MGR We can create a table that looks like boss_id – avg.income – num.of.workers, that can be joined to the other tables How to join: that depends if we interpret the exercise as "A" or "B" SzaboZs
21
Worker's number and average income
SELECT avg(sal+isnull(comm, 0)) as avg_work_sal, count(*) as work_num, mgr as boss_id FROM emp GROUP BY mgr Inline view: Data After this: joining tables SzaboZs
22
Joining tables (A) SzaboZs
23
Joining tables (B) SzaboZs
24
Joining tables (A) SzaboZs
25
SELECT emp.ename as boss_name,
emp.sal+isnull(emp.comm, 0) as boss_sal, data.avg_work_sal as boss_worker_sal, data.work_num as boss_worker_num, dept.loc as boss_loc, emp.sal+isnull(emp.comm, 0) data.avg_work_sal as sal_delta FROM ( SELECT avg(sal+isnull(comm, 0)) as avg_work_sal, count(*) as work_num, mgr as boss_id FROM emp GROUP BY mgr ) data, emp, dept WHERE data.boss_id=emp.empno and emp.deptno=dept.deptno; SzaboZs
26
Joining tables (B) SzaboZs
27
SELECT d.ename as work_name, f.ename as boss_name,
f.sal+isnull(f.comm, 0) as boss_sal, data.avg_work_sal as boss_worker_sal, data.work_num as boss_worker_num, dept.loc as worker_loc, f.sal+isnull(f.comm, 0) -data.avg_work_sal as sal_delta FROM (SELECT avg(sal+isnull(comm, 0)) as avg_work_sal, count(*) as work_num, mgr as boss_id FROM emp GROUP BY mgr ) data, emp d, emp f, dept WHERE data.boss_id=f.empno and f.empno=d.mgr and d.deptno=dept.deptno ; SzaboZs
28
Third List the jobs according to the departments, and the number of workers, the minimum and maximum salaries according to that job. Order the list by the department (ascending) and job (descending). ... “that job” = ??? SzaboZs
29
JOB-DATA DATA1 SELECT count(*) as Work_Num,
min(sal+isnull(comm, 0)) as Minimum, max(sal+isnull(comm, 0)) as Maximum, avg(sal+isnull(comm, 0)) as Average, job FROM emp GROUP BY job; SzaboZs
30
DEPARTMENTS AND JOBS DATA2
SELECT distinct loc, job FROM emp, dept WHERE emp.deptno=dept.deptno ORDER BY loc; SzaboZs
31
RESULT (A) SELECT * FROM (SELECT distinct dept.deptno, loc, job
FROM emp, dept WHERE emp.deptno=dept.deptno) data2, (SELECT count(*) as Work_Num, min(sal+isnull(comm, 0)) as Minimum, max(sal+isnull(comm, 0)) as Maximum, avg(sal+isnull(comm, 0)) as Average, job FROM emp GROUP BY job) data1 WHERE data1.job=data2.job ORDER BY data2.deptno asc, data1.job desc; SzaboZs
32
RESULT (B) SELECT count(*) as Work_Num, min(sal+isnull(comm, 0)) as Minimum, max(sal+isnull(comm, 0)) as Maximum, avg(sal+isnull(comm, 0)) as Average, job, deptno FROM emp GROUP BY job, deptno ORDER BY deptno asc, job desc; SzaboZs
33
Fourth Display every worker’s name, their department’s name, their boss’ name. The list should include the income parameter for both the boss and the worker. Income parameter: (income) – (the average income of those who entered the company the same year) AvgIncomes: year + avgIncome IncomeParameters: empno + incomeParam WorkerData: workerName + bossName + deptName + workerId + bossId Result: WorkerData + IncomeParameters via workerId + IncomParameters via bossId SzaboZs
34
SzaboZs
35
SzaboZs
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.