18 Copyright © Oracle Corporation, 2001. All rights reserved. Advanced Subqueries.

Slides:



Advertisements
Similar presentations
Group functions cannot be used in the WHERE clause: SELECT type_code FROM d_songs WHERE SUM (duration) = 100; (this will give an error)
Advertisements

DatabaseDatabase cs453 Lab8 1 Ins.Ebtesam AL-Etowi.
Subqueries 11. Objectives After completing this lesson, you should be able to do the following: Describe the types of problems that subqueries can solve.
Copyright  Oracle Corporation, All rights reserved. 6 Subqueries.
Multiple-Column Subqueries 12. Objectives After completing this lesson, you should be able to do the following: Write a multiple-column subquery Describe.
Copyright س Oracle Corporation, All rights reserved. 7 Multiple-Column Subqueries.
Copyright  Oracle Corporation, All rights reserved. 7 Multiple-Column Subqueries.
Copyright  Oracle Corporation, All rights reserved. 6 Writing Correlated Subqueries.
1 Lecture 3: Subqueries DCO11310 Database Systems and Design By Rose Chang.
5 Copyright © 2004, Oracle. All rights reserved. Displaying Data from Multiple Tables.
6 Copyright © 2004, Oracle. All rights reserved. Using Subqueries to Solve Queries.
6 Copyright © Oracle Corporation, All rights reserved. Subqueries.
1 Copyright © Oracle Corporation, All rights reserved. Writing Basic SQL SELECT Statements.
2 Copyright © 2004, Oracle. All rights reserved. Restricting and Sorting Data.
9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Using the Set Operators Assist. Prof. Pongpisit Wuttidittachotti, Ph.D. Faculty.
Objectives After completing this lesson, you should be able to do the following: Define subqueries Describe the types of problems that the subqueries.
1 Copyright © Oracle Corporation, All rights reserved. Writing Basic SQL SELECT Statements.
4 Copyright © Oracle Corporation, All rights reserved. Displaying Data from Multiple Tables.
Copyright © 2004, Oracle. All rights reserved. Lecture 6 Displaying Data from Multiple Tables ORACLE.
Database Programming Sections 6 –Subqueries, Single Row Subqueries, Multiple-column subqueries, Multiple-row Subqueries, Correlated Subqueries 11/2/10,
2 Copyright © Oracle Corporation, All rights reserved. Restricting and Sorting Data.
2 Copyright © 2004, Oracle. All rights reserved. Restricting and Sorting Data.
4 Copyright © 2006, Oracle. All rights reserved. Restricting and Sorting Data.
Subqueries.
Copyright © 2004, Oracle. All rights reserved. U SING S UBQUERIES TO S OLVE Q UERIES.
5 Copyright © Oracle Corporation, All rights reserved. Aggregating Data Using Group Functions.
6 Copyright © 2004, Oracle. All rights reserved. Using Subqueries to Solve Queries.
7 Multiple-Column Subqueries. 7-2 Objectives At the end of this lesson, you should be able to: Write a multiple-column subquery Describe and explain the.
11 Copyright © Oracle Corporation, All rights reserved. Creating Views.
Join, Subqueries and set operators. Obtaining Data from Multiple Tables EMPLOYEES DEPARTMENTS … …
4 Copyright © Oracle Corporation, All rights reserved. Displaying Data from Multiple Tables.
Copyright © 2004, Oracle. All rights reserved. MANIPULATING LARGE DATA SETS Oracle Lecture 10.
5 Copyright © 2004, Oracle. All rights reserved. Displaying Data from Multiple Tables.
5 Copyright © 2004, Oracle. All rights reserved. Displaying Data from Multiple Tables.
Intermediate SQL: Aggregated Data, Joins and Set Operators.
3 Copyright © 2006, Oracle. All rights reserved. Manipulating Large Data Sets.
Copyright © 2004, Oracle. All rights reserved. Lecture 4: 1-Retrieving Data Using the SQL SELECT Statement 2-Restricting and Sorting Data Lecture 4: 1-Retrieving.
2 Copyright © 2004, Oracle. All rights reserved. Restricting and Sorting Data.
15 Copyright © Oracle Corporation, All rights reserved. Using SET Operators.
Chapter 12 Subqueries and Merge Statements
Copyright © 2004, Oracle. All rights reserved. Using the Set Operators.
6 Copyright © Oracle Corporation, All rights reserved. Subqueries.
6 Copyright © 2007, Oracle. All rights reserved. Retrieving Data Using Subqueries.
2 Copyright © 2009, Oracle. All rights reserved. Restricting and Sorting Data.
Subqueries.
Database Programming Sections 6 –Subqueries, Single Row Subqueries, Multiple-row Subqueries, Correlated Subqueries.
1 Copyright © 2007, Oracle. All rights reserved. Retrieving Data Using the SQL SELECT Statement.
1 Introduction to Database Systems, CS420 SQL JOIN, Group-by and Sub-query Clauses.
4 Copyright © 2004, Oracle. All rights reserved. Displaying Data from Multiple Tables.
1 Copyright © 2009, Oracle. All rights reserved. Retrieving Data Using the SQL SELECT Statement.
4 Copyright © Oracle Corporation, All rights reserved. Displaying Data from Multiple Tables.
6 Copyright © 2006, Oracle. All rights reserved. Retrieving Data Using Subqueries.
Using Subqueries to Solve Queries
Subqueries.
Subqueries Schedule: Timing Topic 25 minutes Lecture
Using the Set Operators
Using Subqueries to Solve Queries
Writing Correlated Subqueries
Using the Set Operators
Using Subqueries to Solve Queries
高级子查询 Schedule: Timing Topic 60 minutes Lecture 50 minutes Practice
高级子查询 Schedule: Timing Topic 60 minutes Lecture 50 minutes Practice
Subqueries Schedule: Timing Topic 25 minutes Lecture
Retrieving Data by Using Subqueries
Using Subqueries to Solve Queries
Using Subqueries to Solve Queries
Using the Set Operators
Subqueries Schedule: Timing Topic 25 minutes Lecture
Subqueries Schedule: Timing Topic 25 minutes Lecture
Presentation transcript:

18 Copyright © Oracle Corporation, All rights reserved. Advanced Subqueries

18-2 Copyright © Oracle Corporation, All rights reserved. Objectives After completing this lesson, you should be able to do the following: Write a multiple-column subquery Describe and explain the behavior of subqueries when null values are retrieved Write a subquery in a FROM clause Use scalar subqueries in SQL Describe the types of problems that can be solved with correlated subqueries Write correlated subqueries Update and delete rows using correlated subqueries Use the EXISTS and NOT EXISTS operators Use the WITH clause

18-3 Copyright © Oracle Corporation, All rights reserved. What Is a Subquery? A subquery is a SELECT statement embedded in a clause of another SQL statement. SELECT... FROM... WHERE... (SELECT... FROM... WHERE...) Mainquery Subquery

18-4 Copyright © Oracle Corporation, All rights reserved. Subqueries The subquery (inner query) executes once before the main query. The result of the subquery is used by the main query (outer query). SELECTselect_list FROMtable WHEREexpr operator (SELECT select_list FROM table);

18-5 Copyright © Oracle Corporation, All rights reserved. SELECT last_name FROM employees WHERE salary > (SELECT salary FROM employees WHERE employee_id = 149) ; Using a Subquery 10500

18-6 Copyright © Oracle Corporation, All rights reserved. Multiple-Column Subqueries Main query WHERE (MANAGER_ID, DEPARTMENT_ID) IN Subquery Each row of the main query is compared to values from a multiple-row and multiple-column subquery.

18-7 Copyright © Oracle Corporation, All rights reserved. Column Comparisons Column comparisons in a multiple-column subquery can be: Pairwise comparisons Nonpairwise comparisons

18-8 Copyright © Oracle Corporation, All rights reserved. Pairwise Comparison Subquery Display the details of the employees who are managed by the same manager and work in the same department as the employees with EMPLOYEE_ID 178 or 174. SELECTemployee_id, manager_id, department_id FROMemployees WHERE (manager_id, department_id) IN (SELECT manager_id, department_id FROM employees WHERE employee_id IN (178,174)) ANDemployee_id NOT IN (178,174);

18-9 Copyright © Oracle Corporation, All rights reserved. Nonpairwise Comparison Subquery SELECT employee_id, manager_id, department_id FROM employees WHERE manager_id IN (SELECT manager_id FROM employees WHERE employee_id IN (174,141)) AND department_id IN (SELECT department_id FROM employees WHERE employee_id IN (174,141)) ANDemployee_id NOT IN(174,141); Display the details of the employees who are managed by the same manager as the employees with EMPLOYEE_ID 174 or 141 and work in the same department as the employees with EMPLOYEE_ID 174 or 141.

18-10 Copyright © Oracle Corporation, All rights reserved. SELECT a.last_name, a.salary, a.department_id, b.salavg FROM employees a, (SELECT department_id, AVG(salary) salavg FROM employees GROUP BY department_id) b WHERE a.department_id = b.department_id AND a.salary > b.salavg; Using a Subquery in the FROM Clause

18-11 Copyright © Oracle Corporation, All rights reserved. Scalar Subquery Expressions A scalar subquery expression is a subquery that returns exactly one column value from one row. Scalar subqueries were supported in Oracle8 i only in a limited set of cases, For example: –SELECT statement ( FROM and WHERE clauses) –VALUES list of an INSERT statement In Oracle9 i, scalar subqueries can be used in: –Condition and expression part of DECODE and CASE –All clauses of SELECT except GROUP BY

18-12 Copyright © Oracle Corporation, All rights reserved. Scalar Subqueries: Examples Scalar Subqueries in CASE Expressions SELECT employee_id, last_name, (CASE WHEN department_id = THEN 'Canada' ELSE 'USA' END) location FROM employees; (SELECT department_id FROM departments WHERE location_id = 1800) Scalar Subqueries in ORDER BY Clause SELECT employee_id, last_name FROM employees e ORDER BY 20 (SELECT department_name FROM departments d WHERE e.department_id = d.department_id);

18-13 Copyright © Oracle Corporation, All rights reserved. Hidden Slide

18-14 Copyright © Oracle Corporation, All rights reserved. Correlated Subqueries Correlated subqueries are used for row-by-row processing. Each subquery is executed once for every row of the outer query. GET candidate row from outer query EXECUTE inner query using candidate row value USE values from inner query to qualify or disqualify candidate row

18-15 Copyright © Oracle Corporation, All rights reserved. Correlated Subqueries SELECT column1, column2,... FROM table1 WHERE column1 operator (SELECT colum1, column2 FROM table2 WHERE expr1 =.expr2); The subquery references a column from a table in the parent query. outer

18-16 Copyright © Oracle Corporation, All rights reserved. SELECT last_name, salary, department_id FROM employees outer WHERE salary > Using Correlated Subqueries Each time a row from the outer query is processed, the inner query is evaluated. Find all employees who earn more than the average salary in their department. (SELECT AVG(salary) FROM employees WHERE department_id = outer.department_id) ;

18-17 Copyright © Oracle Corporation, All rights reserved. Using Correlated Subqueries SELECT e.employee_id, last_name,e.job_id FROM employees e WHERE 2 <= (SELECT COUNT(*) FROM job_history WHERE employee_id = e.employee_id); Display details of those employees who have switched jobs at least twice.

18-18 Copyright © Oracle Corporation, All rights reserved. Using the EXISTS Operator The EXISTS operator tests for existence of rows in the results set of the subquery. If a subquery row value is found: –The search does not continue in the inner query –The condition is flagged TRUE If a subquery row value is not found: –The condition is flagged FALSE –The search continues in the inner query

18-19 Copyright © Oracle Corporation, All rights reserved. SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT 'X' FROM employees WHERE manager_id = outer.employee_id); Using the EXISTS Operator Find employees who have at least one person reporting to them.

18-20 Copyright © Oracle Corporation, All rights reserved. SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT 'X' FROM employees WHERE department_id = d.department_id); Using the NOT EXISTS Operator Find all departments that do not have any employees.

18-21 Copyright © Oracle Corporation, All rights reserved. Correlated UPDATE Use a correlated subquery to update rows in one table based on rows from another table. UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);

18-22 Copyright © Oracle Corporation, All rights reserved. Correlated UPDATE Denormalize the EMPLOYEES table by adding a column to store the department name. Populate the table by using a correlated update. ALTER TABLE employees ADD(department_name VARCHAR2(14)); UPDATE employees e SET department_name = (SELECT department_name FROM departments d WHERE e.department_id = d.department_id);

18-23 Copyright © Oracle Corporation, All rights reserved. Hidden Slide

18-24 Copyright © Oracle Corporation, All rights reserved. DELETE FROM table1 alias1 WHERE column operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column); Correlated DELETE Use a correlated subquery to delete rows in one table based on rows from another table.

18-25 Copyright © Oracle Corporation, All rights reserved. DELETE FROM employees E WHERE employee_id = (SELECT employee_id FROM emp_history WHERE employee_id = E.employee_id); Use a correlated subquery to delete only those rows from the EMPLOYEES table that also exist in the EMP_HISTORY table. Correlated DELETE

18-26 Copyright © Oracle Corporation, All rights reserved. The WITH Clause Using the WITH clause, you can use the same query block in a SELECT statement when it occurs more than once within a complex query. The WITH clause retrieves the results of a query block and stores it in the user's temporary tablespace. The WITH clause improves performance

18-27 Copyright © Oracle Corporation, All rights reserved. WITH Clause: Example Using the WITH clause, write a query to display the department name and total salaries for those departments whose total salary is greater than the average salary across departments.

18-28 Copyright © Oracle Corporation, All rights reserved. WITH Clause: Example WITH dept_costs AS ( SELECT d.department_name, SUM(e.salary) AS dept_total FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY d.department_name), avg_cost AS ( SELECT SUM(dept_total)/COUNT(*) AS dept_avg FROM dept_costs) SELECT * FROM dept_costs WHERE dept_total > (SELECT dept_avg FROM avg_cost) ORDER BY department_name;

18-29 Copyright © Oracle Corporation, All rights reserved. Summary In this lesson, you should have learned the following: A multiple-column subquery returns more than one column. Multiple-column comparisons can be pairwise or nonpairwise. A multiple-column subquery can also be used in the FROM clause of a SELECT statement. Scalar subqueries have been enhanced in Oracle9 i.

18-30 Copyright © Oracle Corporation, All rights reserved. Summary Correlated subqueries are useful whenever a subquery must return a different result for each candidate row. The EXISTS operator is a Boolean operator that tests the presence of a value. Correlated subqueries can be used with SELECT, UPDATE, and DELETE statements. You can use the WITH clause to use the same query block in a SELECT statement when it occurs more than once

18-31 Copyright © Oracle Corporation, All rights reserved. Practice 18 Overview This practice covers the following topics: Creating multiple-column subqueries Writing correlated subqueries Using the EXISTS operator Using scalar subqueries Using the WITH clause

18-32 Copyright © Oracle Corporation, All rights reserved. Hidden Slide

18-33 Copyright © Oracle Corporation, All rights reserved. Hidden Slide

18-34 Copyright © Oracle Corporation, All rights reserved. Hidden Slide

18-35 Copyright © Oracle Corporation, All rights reserved. Hidden Slide

18-36 Copyright © Oracle Corporation, All rights reserved. Hidden Slide