Presentation is loading. Please wait.

Presentation is loading. Please wait.

DBMAN 4 Examples SzaboZs.

Similar presentations


Presentation on theme: "DBMAN 4 Examples SzaboZs."— Presentation transcript:

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


Download ppt "DBMAN 4 Examples SzaboZs."

Similar presentations


Ads by Google