ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
8-1   Copyright ? 2004, Oracle. All rights reserved.
Using the NVL Function

      ex1:- To calculate the annual compensation of all employees, you need to
      multiply the monthly salary by 12 and then add the commission percentage
      to the result

      SELECT last_name, salary, NVL(commission_pct, 0),
         (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
      FROM employees;




       .
       .




8-2                        Copyright ? 2004, Oracle. All rights reserved.
Using the NVL2 Function


      SELECT last_name, salary, commission_pct,
             NVL2(commission_pct,'SAL+COMM', 'SAL') income
      FROM   employees WHERE department_id IN (50, 80);




       .
       .




8-3                     Copyright ? 2004, Oracle. All rights reserved.
Executing Single-Row Subqueries

      ex1:- displays employees whose job ID is the same as that of employee
      141 and whose salary is greater than that of employee 143.

      SELECT last_name, job_id, salary
      FROM   employees
      WHERE job_id =                 ST_CLERK
                      (SELECT job_id
                       FROM   employees
                       WHERE employee_id = 141)
      AND    salary >                   2600
                      (SELECT salary
                       FROM   employees
                       WHERE employee_id = 143);



          The result in next slide



8-4                       Copyright ? 2004, Oracle. All rights reserved.
8-5   Copyright ? 2004, Oracle. All rights reserved.
Executing Single-Row Subqueries

      ex2:- Find the job with the lowest average salary.


       SELECT      job_id, AVG(salary)
       FROM        employees
       GROUP BY    job_id
       HAVING      AVG(salary)=(SELECT MIN(AVG(salary))
                                FROM     employees
                                GROUP BY job_id);




8-6                         Copyright ? 2004, Oracle. All rights reserved.
Will This Statement Return Rows?

      SELECT last_name, job_id
      FROM   employees
      WHERE job_id =
                      (SELECT job_id
                       FROM   employees
                       WHERE last_name = 'Haas');




      there is no employee named Haas. So the subquery returns no
      rows
      The outer query takes the results of the subquery (null) and uses
      these results in its WHERE clause.
      The outer query finds no employee with a job ID equal to null, and
      so returns no rows



8-7                      Copyright ? 2004, Oracle. All rights reserved.
Executing multiple-Row Subqueries

      ex3:- display the employees whose there salary equal to the min salary of
      each department.


      SELECT last_name, salary, department_id
      FROM   employees
      WHERE salary IN (SELECT    MIN(salary)
                        FROM     employees
                        GROUP BY department_id);




            The result in next slide




8-8                        Copyright ? 2004, Oracle. All rights reserved.
8-9   Copyright ? 2004, Oracle. All rights reserved.
Executing multiple-Row Subqueries

       ex4:- displays employees who are not IT programmers and whose salary
       is less than that of any IT programmer.

       SELECT employee_id, last_name, job_id, salary
       FROM   employees    9000, 6000, 4800,4200
       WHERE salary < ANY
                           (SELECT distinct salary
                            FROM         employees
                            WHERE job_id = 'IT_PROG')
       AND    job_id <> 'IT_PROG';

       =ANY is equivalent to IN.
       >ANY means more than the minimum.
       <ANY means less than the maximum

             The result in next slide




8-10                         Copyright ? 2004, Oracle. All rights reserved.
.
       .




8-11       Copyright ? 2004, Oracle. All rights reserved.
Executing multiple-Row Subqueries

       ex4:- displays employees who are not IT programmers and whose salary
       is less than that of all IT programmer.

       SELECT employee_id, last_name, job_id, salary
       FROM   employees    9000, 6000, 4800,4200
       WHERE salary < ALL
                           (SELECT distinct salary
                            FROM         employees
                            WHERE job_id = 'IT_PROG')
       AND    job_id <> 'IT_PROG';

       >ALL means more than the maximum
       <ALL means less than the minimum
             The result in next slide




8-12                         Copyright ? 2004, Oracle. All rights reserved.
.
           .




       .
       .




8-13           Copyright ? 2004, Oracle. All rights reserved.
Create a query that displays the first eight characters of the employees¡¯ last
names and indicates the amounts of their salaries with stars. Each star
signifies a thousand dollars. Sort the data in descending order of salary.
Label the column EMPLOYEES_AND_THEIR_SALARIES.




  8-14                   Copyright ? 2004, Oracle. All rights reserved.
8-15   Copyright ? 2004, Oracle. All rights reserved.
8-16   Copyright ? 2004, Oracle. All rights reserved.
8-17   Copyright ? 2004, Oracle. All rights reserved.
The function check_sal is written to check if the salary of a
 particular employee is greater or less than the average salary of all
 employees working in his department. The function returns TRUE if
 the salary of the employee is greater than the average salary of
 employees in his department else returns FALSE. The function
 returns NULL if a NO_DATA_FOUND exception is thrown.




8-18                   Copyright ? 2004, Oracle. All rights reserved.
8-19   Copyright ? 2004, Oracle. All rights reserved.
Observe that the function checks for the employee with the
  employee ID 205. The function is hard coded to check for this
  employee ID only. If you want to check for any other employees,
  you will have to modify the function itself. You can solve this
  problem by declaring the function such that it accepts an
  argument. You can then pass the employee ID as parameter.




8-20                  Copyright ? 2004, Oracle. All rights reserved.
8-21   Copyright ? 2004, Oracle. All rights reserved.
8-22   Copyright ? 2004, Oracle. All rights reserved.
8-23   Copyright ? 2004, Oracle. All rights reserved.
8-24   Copyright ? 2004, Oracle. All rights reserved.

More Related Content

Oracle examples

  • 1. 8-1 Copyright ? 2004, Oracle. All rights reserved.
  • 2. Using the NVL Function ex1:- To calculate the annual compensation of all employees, you need to multiply the monthly salary by 12 and then add the commission percentage to the result SELECT last_name, salary, NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL FROM employees; . . 8-2 Copyright ? 2004, Oracle. All rights reserved.
  • 3. Using the NVL2 Function SELECT last_name, salary, commission_pct, NVL2(commission_pct,'SAL+COMM', 'SAL') income FROM employees WHERE department_id IN (50, 80); . . 8-3 Copyright ? 2004, Oracle. All rights reserved.
  • 4. Executing Single-Row Subqueries ex1:- displays employees whose job ID is the same as that of employee 141 and whose salary is greater than that of employee 143. SELECT last_name, job_id, salary FROM employees WHERE job_id = ST_CLERK (SELECT job_id FROM employees WHERE employee_id = 141) AND salary > 2600 (SELECT salary FROM employees WHERE employee_id = 143); The result in next slide 8-4 Copyright ? 2004, Oracle. All rights reserved.
  • 5. 8-5 Copyright ? 2004, Oracle. All rights reserved.
  • 6. Executing Single-Row Subqueries ex2:- Find the job with the lowest average salary. SELECT job_id, AVG(salary) FROM employees GROUP BY job_id HAVING AVG(salary)=(SELECT MIN(AVG(salary)) FROM employees GROUP BY job_id); 8-6 Copyright ? 2004, Oracle. All rights reserved.
  • 7. Will This Statement Return Rows? SELECT last_name, job_id FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE last_name = 'Haas'); there is no employee named Haas. So the subquery returns no rows The outer query takes the results of the subquery (null) and uses these results in its WHERE clause. The outer query finds no employee with a job ID equal to null, and so returns no rows 8-7 Copyright ? 2004, Oracle. All rights reserved.
  • 8. Executing multiple-Row Subqueries ex3:- display the employees whose there salary equal to the min salary of each department. SELECT last_name, salary, department_id FROM employees WHERE salary IN (SELECT MIN(salary) FROM employees GROUP BY department_id); The result in next slide 8-8 Copyright ? 2004, Oracle. All rights reserved.
  • 9. 8-9 Copyright ? 2004, Oracle. All rights reserved.
  • 10. Executing multiple-Row Subqueries ex4:- displays employees who are not IT programmers and whose salary is less than that of any IT programmer. SELECT employee_id, last_name, job_id, salary FROM employees 9000, 6000, 4800,4200 WHERE salary < ANY (SELECT distinct salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG'; =ANY is equivalent to IN. >ANY means more than the minimum. <ANY means less than the maximum The result in next slide 8-10 Copyright ? 2004, Oracle. All rights reserved.
  • 11. . . 8-11 Copyright ? 2004, Oracle. All rights reserved.
  • 12. Executing multiple-Row Subqueries ex4:- displays employees who are not IT programmers and whose salary is less than that of all IT programmer. SELECT employee_id, last_name, job_id, salary FROM employees 9000, 6000, 4800,4200 WHERE salary < ALL (SELECT distinct salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG'; >ALL means more than the maximum <ALL means less than the minimum The result in next slide 8-12 Copyright ? 2004, Oracle. All rights reserved.
  • 13. . . . . 8-13 Copyright ? 2004, Oracle. All rights reserved.
  • 14. Create a query that displays the first eight characters of the employees¡¯ last names and indicates the amounts of their salaries with stars. Each star signifies a thousand dollars. Sort the data in descending order of salary. Label the column EMPLOYEES_AND_THEIR_SALARIES. 8-14 Copyright ? 2004, Oracle. All rights reserved.
  • 15. 8-15 Copyright ? 2004, Oracle. All rights reserved.
  • 16. 8-16 Copyright ? 2004, Oracle. All rights reserved.
  • 17. 8-17 Copyright ? 2004, Oracle. All rights reserved.
  • 18. The function check_sal is written to check if the salary of a particular employee is greater or less than the average salary of all employees working in his department. The function returns TRUE if the salary of the employee is greater than the average salary of employees in his department else returns FALSE. The function returns NULL if a NO_DATA_FOUND exception is thrown. 8-18 Copyright ? 2004, Oracle. All rights reserved.
  • 19. 8-19 Copyright ? 2004, Oracle. All rights reserved.
  • 20. Observe that the function checks for the employee with the employee ID 205. The function is hard coded to check for this employee ID only. If you want to check for any other employees, you will have to modify the function itself. You can solve this problem by declaring the function such that it accepts an argument. You can then pass the employee ID as parameter. 8-20 Copyright ? 2004, Oracle. All rights reserved.
  • 21. 8-21 Copyright ? 2004, Oracle. All rights reserved.
  • 22. 8-22 Copyright ? 2004, Oracle. All rights reserved.
  • 23. 8-23 Copyright ? 2004, Oracle. All rights reserved.
  • 24. 8-24 Copyright ? 2004, Oracle. All rights reserved.

Editor's Notes

  1. ¡­ ¡­
  2. ¡­ ¡­
  3. ¡­
  4. ¡­