Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-1 COS 346 Day 16.

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

Database Programming Sections 5 & 6 – Group functions, COUNT, DISTINCT, NVL, GROUP BY, HAVING clauses, Subqueries.
Bordoloi and Bock Chapter 5 : Aggregate Row Functions.
Bordoloi and Bock Chapter 3 :Single Table Query Basics.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 5 More SQL: Complex Queries, Triggers, Views, and Schema Modification.
Instructor: Craig Duckett CASE, ORDER BY, GROUP BY, HAVING, Subqueries
Bordoloi and BockCopyright 2004 Prentice Hall, Inc.5-1 COS 346 Day 15.
Prentice Hall © COS 346 Day Agenda Questions?Questions? Assignment 5 not CorrectedAssignment 5 not Corrected –2 MIA’s Assignment 6 PostedAssignment.
Database Systems: Design, Implementation, and Management Eighth Edition Chapter 8 Advanced SQL.
Bordoloi and BockCopyright 2004 Prentice Hall, Inc.3-1 COS 346 Day 14.
Bordoloi and Bock COS 346 Day 14. Bordoloi and Bock Agenda Questions?Questions? Assignment 5 DueAssignment 5 Due Assignment 6 PostedAssignment 6 Posted.
Microsoft Access 2010 Chapter 7 Using SQL.
Objectives After completing this lesson, you should be able to do the following: Define subqueries Describe the types of problems that the subqueries.
Microsoft Access 2010 Chapter 7 Using SQL. Change the font or font size for SQL queries Create SQL queries Include fields in SQL queries Include simple.
Bordoloi and Bock Chapter 6 : JOINS. Bordoloi and Bock A TYPICAL JOIN OPERATION Following figure displays the employee and department tables.Following.
Introduction to Databases Chapter 7: Data Access and Manipulation.
Database Programming Sections 6 –Subqueries, Single Row Subqueries, Multiple-column subqueries, Multiple-row Subqueries, Correlated Subqueries 11/2/10,
Bordoloi and Bock Chapter 4 : Adding Power to Queries.
Concepts of Database Management Seventh Edition
Joins & Sub-queries. Oracle recognizes that you may want data that resides in multiple tables drawn together in some meaningful way. One of the most important.
5 Copyright © Oracle Corporation, All rights reserved. Aggregating Data Using Group Functions.
Oracle DML Dr. Bernard Chen Ph.D. University of Central Arkansas.
Prentice Hall © Chapter 6: Joins SQL for SQL Server Bijoy Bordoloi and Douglas Bock.
Prentice Hall © COS 346 Day Agenda Questions?Questions? Assignment 5 CorrectedAssignment 5 Corrected –1 A, 1 B, 4 C’s, 1 F and 1 MIA Assignment.
1 JOIN SUBQUERY Structured Query Language (SQL) - Part III.
Database Systems Design, Implementation, and Management Coronel | Morris 11e ©2015 Cengage Learning. All Rights Reserved. May not be scanned, copied or.
Bordoloi and BockCopyright 2004 Prentice Hall, Inc.6-1 CHAPTER 6: JOINS.
Pretice Hall © Chapter 3: Single Table Query Basics SQL for SQL Server Bijoy Bordoloi and Douglas Bock.
DATA RETRIEVAL WITH SQL Goal: To issue a database query using the SELECT command.
AL-MAAREFA COLLEGE FOR SCIENCE AND TECHNOLOGY INFO 232: DATABASE SYSTEMS CHAPTER 7 (Part II) INTRODUCTION TO STRUCTURED QUERY LANGUAGE (SQL) Instructor.
Chapter 12 Subqueries and Merge Statements
In this session, you will learn to: Query data by using joins Query data by using subqueries Objectives.
Database Programming Sections 6 –Subqueries, Single Row Subqueries, Multiple-row Subqueries, Correlated Subqueries.
4 - Conditional Control Structures CHAPTER 4. Introduction A Program is usually not limited to a linear sequence of instructions. In real life, a programme.
Slide 1 of 32ASH-Training Querying and Managing Data Using SQL Server 2014 By: Segla In this session, you will learn to: Query data by using joins Query.
Concepts of Database Management, Fifth Edition Chapter 3: The Relational Model 2: SQL.
Prentice Hall © Chapter 7: Subquieres SQL for SQL Server Bijoy Bordoloi and Douglas Bock.
Other database objects (Sequence and view). What Is a Sequence? A sequence: Automatically generates sequential numbers Is a sharable object Is typically.
Using Subqueries to Solve Queries
Aggregating Data Using Group Functions
Instructor: Craig Duckett Lecture 09: Tuesday, April 25th, 2017
Chapter 8: Views and Synonyms
Chapter 4: Adding Power to Queries
Subqueries.
Subqueries Schedule: Timing Topic 25 minutes Lecture
Database Systems: Design, Implementation, and Management Tenth Edition
Chapter 5: Aggregate Functions and Grouping of Data
Using Subqueries to Solve Queries
Aggregating Data Using Group Functions
(SQL) Aggregating Data Using Group Functions
Using the Set Operators
Prof: Dr. Shu-Ching Chen TA: Yimin Yang
Prof: Dr. Shu-Ching Chen TA: Hsin-Yu Ha
Prof: Dr. Shu-Ching Chen TA: Haiman Tian
Aggregating Data Using Group Functions
Aggregating Data Using Group Functions
Using Subqueries to Solve Queries
Reporting Aggregated Data Using the Group Functions
Chapter 8 Advanced SQL.
Subqueries Schedule: Timing Topic 25 minutes Lecture
Using Subqueries to Solve Queries
Database Systems: Design, Implementation, and Management Tenth Edition
Reporting Aggregated Data Using the Group Functions
Using Subqueries to Solve Queries
Reporting Aggregated Data Using the Group Functions
Subqueries Schedule: Timing Topic 25 minutes Lecture
Subqueries Schedule: Timing Topic 25 minutes Lecture
分组函数 Schedule: Timing Topic 35 minutes Lecture 40 minutes Practice
Shelly Cashman: Microsoft Access 2016
Aggregating Data Using Group Functions
Presentation transcript:

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-1 COS 346 Day 16

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-2 Agenda Assignment 6 DueAssignment 6 Due Assignment 7 PostedAssignment 7 Posted –Due April 5 –4 (5?) more to go Quiz 2 will April 13 (Friday the 13 th)Quiz 2 will April 13 (Friday the 13 th) –DP 7 & 8, SQL 2-10 –There will only be 3 exams 10% instead of 7.5%) Capstone Progress Reports Due April 5Capstone Progress Reports Due April 5 Make sure to check corrections for Oracle text for WebCTMake sure to check corrections for Oracle text for WebCT –Miss wording of Q 14 on page 89 Today we will discussToday we will discuss –Subqueries –Lots of Hands-on stuff We will be in the Oracle SQL text for the next 2+ weeksWe will be in the Oracle SQL text for the next 2+ weeks

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-3 CHAPTER 7: SUBQUERIES

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-4 SUBQUERY A subquery is a query within a query.A subquery is a query within a query. Subqueries enable you to write queries that select data rows for criteria that are actually developed while the query is executing at run time.Subqueries enable you to write queries that select data rows for criteria that are actually developed while the query is executing at run time.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-5 Example SELECT emp_last_name "Last Name", emp_first_name "First Name", emp_salary "Salary" emp_salary "Salary" FROM employee WHERE emp_salary = (SELECT MIN(emp_salary) (SELECT MIN(emp_salary) FROM employee); FROM employee); Last Name First Name Salary Markis Marcia $25,000 Amin Hyder $25,000 Prescott Sherri $25,000

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-6 SUBQUERY TYPES There are three basic types of subqueries. We will study each of these in the remainder of this chapter.There are three basic types of subqueries. We will study each of these in the remainder of this chapter. 1.Subqueries that operate on lists by use of the IN operator or with a comparison operator modified by the ANY or ALL optional keywords. These subqueries can return a group of values, but the values must be from a single column of a table. In other words, the SELECT clause of the subquery must contain only one expression or column name.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-7 SUBQUERY TYPES 2.Subqueries that use an unmodified comparison operator (=,, <>) – these subqueries must return only a single, scalar value. 3.Subqueries that use the EXISTS operator to test the existence of data rows satisfying specified criteria.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-8 SUBQUERY – General Rules A subquery SELECT statement is very similar to the SELECT statement used to begin a regular or outer query. The complete syntax of a subquery is shown below.A subquery SELECT statement is very similar to the SELECT statement used to begin a regular or outer query. The complete syntax of a subquery is shown below. ( SELECT [DISTINCT] subquery_select_list FROM {table_name | view_name} FROM {table_name | view_name} {table_name | view_name}... {table_name | view_name}... [WHERE search_conditions] [WHERE search_conditions] [GROUP BY aggregate_expression [, aggregate_expression]...] [GROUP BY aggregate_expression [, aggregate_expression]...] [HAVING search_conditions] ) [HAVING search_conditions] )

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-9 Rules Cont’d The SELECT clause of a subquery must contain only one expression, only one aggregate function, or only one column name.The SELECT clause of a subquery must contain only one expression, only one aggregate function, or only one column name. The value(s) returned by a subquery must be join-compatible with the WHERE clause of the outer query.The value(s) returned by a subquery must be join-compatible with the WHERE clause of the outer query.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-10 Example SELECT emp_last_name "Last Name", emp_first_name "First Name" emp_first_name "First Name" FROM employee WHERE emp_ssn IN (SELECT dep_emp_ssn (SELECT dep_emp_ssn FROM dependent); FROM dependent); Last Name First Name Bock Douglas Zhu Waiman Joyner Suzanne

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-11 Rules Cont’d In addition to concerns about the domain of values returned from a subquery, the data type of the returned column value(s) must be join- compatible.In addition to concerns about the domain of values returned from a subquery, the data type of the returned column value(s) must be join- compatible. Join-compatible data types are data types that the Oracle Server will convert automatically when matching data in criteria conditions.Join-compatible data types are data types that the Oracle Server will convert automatically when matching data in criteria conditions.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-12 Rules Cont’d The Oracle Server will automatically convert among any of the following ANSI numeric data types when making comparisons of numeric values because they all map into the Oracle NUMBER data type.The Oracle Server will automatically convert among any of the following ANSI numeric data types when making comparisons of numeric values because they all map into the Oracle NUMBER data type. int (integer)int (integer) smallint (small integer)smallint (small integer) decimaldecimal floatfloat

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-13 Rules Cont’d Oracle does not make comparisons based on column names.Oracle does not make comparisons based on column names. Columns from two tables that are being compared may have different names as long as they have a shared domain and the same data type or convertible data types.Columns from two tables that are being compared may have different names as long as they have a shared domain and the same data type or convertible data types.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-14 Rules Cont’d There are additional restrictions for subqueries. The DISTINCT keyword cannot be used in subqueries that include a GROUP BY clause.The DISTINCT keyword cannot be used in subqueries that include a GROUP BY clause. Subqueries cannot manipulate their results internally. This means that a subquery cannot include the ORDER BY clause, the COMPUTE clause, or the INTO keyword.Subqueries cannot manipulate their results internally. This means that a subquery cannot include the ORDER BY clause, the COMPUTE clause, or the INTO keyword.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-15 SUBQUERIES and the IN Operator Subqueries that are introduced with the keyword IN take the general form:Subqueries that are introduced with the keyword IN take the general form: –WHERE expression [NOT] IN (subquery) The only difference in the use of the IN operator with subqueries is that the list does not consist of hard-coded values.The only difference in the use of the IN operator with subqueries is that the list does not consist of hard-coded values.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-16 Example SELECT emp_last_name "Last Name", emp_first_name "First Name" emp_first_name "First Name" FROM employee WHERE emp_ssn IN (SELECT dep_emp_ssn (SELECT dep_emp_ssn FROM dependent FROM dependent WHERE dep_gender = 'M'); WHERE dep_gender = 'M'); Last Name First Name Bock Douglas Zhu Waiman Joyner Suzanne

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-17 SUBQUERIES and the IN Operator Conceptually, this statement is evaluated in two steps.Conceptually, this statement is evaluated in two steps. First, the inner query returns the identification numbers of those employees that have male dependents.First, the inner query returns the identification numbers of those employees that have male dependents. SELECT dep_emp_ssn FROM dependent WHERE dep_gender = 'M'; DEP_EMP_S

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-18 SUBQUERIES and the IN Operator Next, these social security number values are substituted into the outer query as the listing that is the object of the IN operator. So, from a conceptual perspective, the outer query now looks like the following:Next, these social security number values are substituted into the outer query as the listing that is the object of the IN operator. So, from a conceptual perspective, the outer query now looks like the following: SELECT emp_last_name "Last Name", emp_first_name "First Name" FROM employee WHERE emp_ssn IN ( , , ); Last Name First Name Joyner Suzanne Zhu Waiman Bock Douglas

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-19 The NOT IN Operator Like the IN operator, the NOT IN operator can take the result of a subquery as the operator object.Like the IN operator, the NOT IN operator can take the result of a subquery as the operator object. SELECT emp_last_name "Last Name", emp_first_name "First Name" FROM employee WHERE emp_ssn NOT IN (SELECT dep_emp_ssn (SELECT dep_emp_ssn FROM dependent); FROM dependent); Last Name First Name Bordoloi Bijoy Markis Marcia Amin Hyder more rows are displayed...

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-20 The NOT IN Operator The subquery shown above produces an intermediate result table containing the social security numbers of employees who have dependents in the dependent table.The subquery shown above produces an intermediate result table containing the social security numbers of employees who have dependents in the dependent table. Conceptually, the outer query compares each row of the employee table against the result table. If the employee social security number is NOT found in the result table produced by the inner query, then it is included in the final result table.Conceptually, the outer query compares each row of the employee table against the result table. If the employee social security number is NOT found in the result table produced by the inner query, then it is included in the final result table.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-21 MULTIPLE LEVELS OF NESTING Subqueries may themselves contain subqueries.Subqueries may themselves contain subqueries. When the WHERE clause of a subquery has as its object another subquery, these are termed nested subqueries.When the WHERE clause of a subquery has as its object another subquery, these are termed nested subqueries. Oracle places no practical limit on the number of queries that can be nested in a WHERE clause.Oracle places no practical limit on the number of queries that can be nested in a WHERE clause. Consider the problem of producing a listing of employees that worked more than 10 hours on the project named Order Entry.Consider the problem of producing a listing of employees that worked more than 10 hours on the project named Order Entry.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-22 Example SELECT emp_last_name "Last Name", emp_first_name "First Name" emp_first_name "First Name" FROM employee WHERE emp_ssn IN (SELECT work_emp_ssn FROM assignment FROM assignment WHERE work_hours > 10 AND work_pro_number IN WHERE work_hours > 10 AND work_pro_number IN (SELECT pro_number (SELECT pro_number FROM project FROM project WHERE pro_name = 'Order Entry') ); WHERE pro_name = 'Order Entry') ); Last Name First Name Bock Douglas Prescott Sherri

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-23 Understanding SUBQUERIES In order to understand how this query executes, we begin our examination with the lowest subquery.In order to understand how this query executes, we begin our examination with the lowest subquery. We will execute it independently of the outer queries.We will execute it independently of the outer queries. SELECT pro_number FROM project WHERE pro_name = 'Order Entry'; PRO_NUMBER

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-24 Understanding SUBQUERIES Now, let's substitute the project number into the IN operator list for the intermediate subquery and execute it.Now, let's substitute the project number into the IN operator list for the intermediate subquery and execute it. The intermediate result table lists two employee social security numbers for employees that worked more than 10 hours on project #1.The intermediate result table lists two employee social security numbers for employees that worked more than 10 hours on project #1. SELECT work_emp_ssn FROM assignment WHERE work_hours > 10 AND work_pro_number IN (1); WORK_EMP_SSN

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-25 Understanding SUBQUERIES Finally, we will substitute these two social security numbers into the IN operator listing for the outer query in place of the subquery.Finally, we will substitute these two social security numbers into the IN operator listing for the outer query in place of the subquery. SELECT emp_last_name "Last Name", emp_first_name "First Name" emp_first_name "First Name" FROM employee WHERE emp_ssn IN ( , ); Last Name First Name Bock Douglas Prescott Sherri

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-26 SUBQUERIES AND COMPARISON OPERATORS The general form of the WHERE clause with a comparison operator is similar to that used thus far in the text.The general form of the WHERE clause with a comparison operator is similar to that used thus far in the text. Note that the subquery is again enclosed by parentheses.Note that the subquery is again enclosed by parentheses. WHERE (subquery)

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-27 SUBQUERIES AND COMPARISON OPERATORS The most important point to remember when using a subquery with a comparison operator is that the subquery can only return a single or scalar value.The most important point to remember when using a subquery with a comparison operator is that the subquery can only return a single or scalar value. This is also termed a scalar subquery because a single column of a single row is returned by the subquery.This is also termed a scalar subquery because a single column of a single row is returned by the subquery. If a subquery returns more than one value, the Oracle Server will generate the “ORA-01427: single-row subquery returns more than one row” error message, and the query will fail to execute.If a subquery returns more than one value, the Oracle Server will generate the “ORA-01427: single-row subquery returns more than one row” error message, and the query will fail to execute.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-28 SUBQUERIES AND COMPARISON OPERATORS Let's examine a subquery that will not execute because it violates the "single value" rule.Let's examine a subquery that will not execute because it violates the "single value" rule. The query shown below returns multiple values for the emp_salary column.The query shown below returns multiple values for the emp_salary column. SELECT emp_salary FROM employee WHERE emp_salary > 40000; EMP_SALARY

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-29 SUBQUERIES AND COMPARISON OPERATORS If we substitute this query as a subquery in another SELECT statement, then that SELECT statement will fail.If we substitute this query as a subquery in another SELECT statement, then that SELECT statement will fail. This is demonstrated in the next SELECT statement. Here the SQL code will fail because the subquery uses the greater than (>) comparison operator and the subquery returns multiple values.This is demonstrated in the next SELECT statement. Here the SQL code will fail because the subquery uses the greater than (>) comparison operator and the subquery returns multiple values. SELECT emp_ssn FROM employee WHERE emp_salary > (SELECT emp_salary (SELECT emp_salary FROM employee WHERE emp_salary > 40000); FROM employee WHERE emp_salary > 40000); ERROR at line 4: ORA-01427: single-row subquery returns more than one row

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-30 Aggregate Functions and Comparison Operators The aggregate functions (AVG, SUM, MAX, MIN, and COUNT) always return a scalar result table.The aggregate functions (AVG, SUM, MAX, MIN, and COUNT) always return a scalar result table. Thus, a subquery with an aggregate function as the object of a comparison operator will always execute provided you have formulated the query properly.Thus, a subquery with an aggregate function as the object of a comparison operator will always execute provided you have formulated the query properly.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-31 Aggregate Functions and Comparison Operators SELECT emp_last_name "Last Name", emp_first_name "First Name", emp_first_name "First Name", emp_salary "Salary" emp_salary "Salary" FROM employee WHERE emp_salary > (SELECT AVG(emp_salary) FROM employee); Last Name First Name Salary Bordoloi Bijoy $55,000 Joyner Suzanne $43,000 Zhu Waiman $43,000 Joshi Dinesh $38,000

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-32 Comparison Operators Modified with the ALL or ANY Keywords The ALL and ANY keywords can modify a comparison operator to allow an outer query to accept multiple values from a subquery.The ALL and ANY keywords can modify a comparison operator to allow an outer query to accept multiple values from a subquery. The general form of the WHERE clause for this type of query is shown here.The general form of the WHERE clause for this type of query is shown here. WHERE [ALL | ANY] (subquery) Subqueries that use these keywords may also include GROUP BY and HAVING clauses.Subqueries that use these keywords may also include GROUP BY and HAVING clauses.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-33 The ALL Keyword The ALL keyword modifies the greater than comparison operator to mean greater than all values.The ALL keyword modifies the greater than comparison operator to mean greater than all values. SELECT emp_last_name "Last Name", emp_first_name "First Name", emp_first_name "First Name", emp_salary "Salary" emp_salary "Salary" FROM employee WHERE emp_salary > ALL (SELECT emp_salary FROM employee WHERE emp_dpt_number = 7); (SELECT emp_salary FROM employee WHERE emp_dpt_number = 7); Last Name First Name Salary Bordoloi Bijoy $55,000

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-34 The ANY Keyword The ANY keyword is not as restrictive as the ALL keyword.The ANY keyword is not as restrictive as the ALL keyword. When used with the greater than comparison operator, "> ANY" means greater than some value.When used with the greater than comparison operator, "> ANY" means greater than some value.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-35 Example SELECT emp_last_name "Last Name", emp_first_name "First Name", emp_first_name "First Name", emp_salary "Salary" emp_salary "Salary" FROM employee WHERE emp_salary > ANY (SELECT emp_salary FROM employee WHERE emp_salary > 30000); (SELECT emp_salary FROM employee WHERE emp_salary > 30000); Last Name First Name Salary Bordoloi Bijoy $55,000 Joyner Suzanne $43,000 Zhu Waiman $43,000

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-36 An "= ANY" (Equal Any) Example The "= ANY" operator is exactly equivalent to the IN operator.The "= ANY" operator is exactly equivalent to the IN operator. For example, to find the names of employees that have male dependents, you can use either IN or "= ANY" – both of the queries shown below will produce an identical result table.For example, to find the names of employees that have male dependents, you can use either IN or "= ANY" – both of the queries shown below will produce an identical result table. SELECT emp_last_name "Last Name", emp_first_name "First Name" FROM employee WHERE emp_ssn IN (SELECT dep_emp_ssn (SELECT dep_emp_ssn FROM dependent FROM dependent WHERE dep_gender = 'M'); WHERE dep_gender = 'M'); SELECT emp_last_name "Last Name", emp_first_name "First Name" FROM employee WHERE emp_ssn = ANY (SELECT dep_emp_ssn (SELECT dep_emp_ssn FROM dependent FROM dependent WHERE dep_gender = 'M'); WHERE dep_gender = 'M');

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-37 An "= ANY" (Equal Any) Example OUTPUTOUTPUT Last Name First Name Bock Douglas Zhu Waiman Joyner Suzanne

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-38 An "!= ANY" (Not Equal Any) Example The "= ANY" is identical to the IN operator.The "= ANY" is identical to the IN operator. However, the "!= ANY" (not equal any) is not equivalent to the NOT IN operator.However, the "!= ANY" (not equal any) is not equivalent to the NOT IN operator. If a subquery of employee salaries produces an intermediate result table with the salaries $38,000, $43,000, and $55,000, then the WHERE clause shown here means "NOT $38,000" AND "NOT $43,000" AND "NOT $55,000".If a subquery of employee salaries produces an intermediate result table with the salaries $38,000, $43,000, and $55,000, then the WHERE clause shown here means "NOT $38,000" AND "NOT $43,000" AND "NOT $55,000". WHERE NOT IN (38000, 43000, 55000); However, the "!= ANY" comparison operator and keyword combination shown in this next WHERE clause means "NOT $38,000" OR "NOT $43,000" OR "NOT $55,000".However, the "!= ANY" comparison operator and keyword combination shown in this next WHERE clause means "NOT $38,000" OR "NOT $43,000" OR "NOT $55,000".

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-39 CORRELATED SUBQUERIES A correlated subquery is one where the inner query depends on values provided by the outer query.A correlated subquery is one where the inner query depends on values provided by the outer query. This means the inner query is executed repeatedly, once for each row that might be selected by the outer query.This means the inner query is executed repeatedly, once for each row that might be selected by the outer query.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-40 CORRELATED SUBQUERIES SELECT emp_last_name "Last Name", emp_first_name "First Name", emp_first_name "First Name", emp_dpt_number "Dept", emp_dpt_number "Dept", emp_salary "Salary" emp_salary "Salary" FROM employee e1 WHERE emp_salary = (SELECT MAX(emp_salary) (SELECT MAX(emp_salary) FROM employee FROM employee WHERE emp_dpt_number = e1.emp_dpt_number); WHERE emp_dpt_number = e1.emp_dpt_number);

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-41 CORRELATED SUBQUERIES OutputOutput Last Name FirstName Dept Salary Bordoloi Bijoy 1 $55,000 Joyner Suzanne 3 $43,000 Zhu Waiman 7 $43,000

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-42 CORRELATED SUBQUERIES The subquery in this SELECT statement cannot be resolved independently of the main query.The subquery in this SELECT statement cannot be resolved independently of the main query. Notice that the outer query specifies that rows are selected from the employee table with an alias name of e1.Notice that the outer query specifies that rows are selected from the employee table with an alias name of e1. The inner query compares the employee department number column (emp_dpt_number) of the employee table to the same column for the alias table name e1.The inner query compares the employee department number column (emp_dpt_number) of the employee table to the same column for the alias table name e1.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-43 CORRELATED SUBQUERIES The value of e1.emp_dpt_number is treated like a variable – it changes as the Oracle Server examines each row of the employee table.The value of e1.emp_dpt_number is treated like a variable – it changes as the Oracle Server examines each row of the employee table. The subquery's results are correlated with each individual row of the main query – thus, the term correlated subquery.The subquery's results are correlated with each individual row of the main query – thus, the term correlated subquery.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-44 Subqueries and the EXISTS Operator When a subquery uses the EXISTS operator, the subquery functions as an existence test.When a subquery uses the EXISTS operator, the subquery functions as an existence test. The WHERE clause of the outer query tests for the existence of rows returned by the inner query.The WHERE clause of the outer query tests for the existence of rows returned by the inner query. The subquery does not actually produce any data; rather, it returns a value of TRUE or FALSE.The subquery does not actually produce any data; rather, it returns a value of TRUE or FALSE.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-45 Subqueries and the EXISTS Operator The general format of a subquery WHERE clause with an EXISTS operator is shown here.The general format of a subquery WHERE clause with an EXISTS operator is shown here. Note that the NOT operator can also be used to negate the result of the EXISTS operator.Note that the NOT operator can also be used to negate the result of the EXISTS operator. WHERE [NOT] EXISTS (subquery)

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-46 Example SELECT emp_last_name "Last Name", emp_first_name "First Name" FROM employee WHERE EXISTS (SELECT * (SELECT * FROM dependent FROM dependent WHERE emp_ssn = dep_emp_ssn); WHERE emp_ssn = dep_emp_ssn); Last Name First Name Joyner Suzanne Zhu Waiman Bock Douglas

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-47 Subqueries and the EXISTS Operator Subqueries using an EXISTS operator are a bit different from other subqueries, in the following ways:Subqueries using an EXISTS operator are a bit different from other subqueries, in the following ways: 1.The keyword EXISTS is not preceded by a column name, constant, or other expression. 2.The SELECT clause list of a subquery that uses an EXISTS operator almost always consists of an asterisk (*). This is because there is no real point in listing column names since you are simply testing for the existence of rows that meet the conditions specified in the subquery.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-48 Subqueries and the EXISTS Operator 3.The subquery evaluates to TRUE or FALSE rather than returning any data. 4.A subquery that uses an EXISTS operator will always be a correlated subquery.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-49 Subqueries and the EXISTS Operator The EXISTS operator is very important, because there is often no alternative to its use.The EXISTS operator is very important, because there is often no alternative to its use. All queries that use the IN operator or a modified comparison operator (=,, etc. modified by ANY or ALL) can be expressed with the EXISTS operator.All queries that use the IN operator or a modified comparison operator (=,, etc. modified by ANY or ALL) can be expressed with the EXISTS operator. However, some queries formulated with EXISTS cannot be expressed in any other way!However, some queries formulated with EXISTS cannot be expressed in any other way!

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-50 Subqueries and the EXISTS Operator SELECT emp_last_name FROM employee WHERE emp_ssn = ANY (SELECT dep_emp_ssn (SELECT dep_emp_ssn FROM dependent); FROM dependent); EMP_LAST_NAME BockZhuJoyner SELECT emp_last_name FROM employee WHERE EXISTS (SELECT * (SELECT * FROM dependent FROM dependent WHERE emp_ssn = dep_emp_ssn); WHERE emp_ssn = dep_emp_ssn); EMP_LAST_NAME BockZhuJoyner

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-51 Subqueries and the EXISTS Operator The NOT EXISTS operator is the mirror-image of the EXISTS operator.The NOT EXISTS operator is the mirror-image of the EXISTS operator. A query that uses NOT EXISTS in the WHERE clause is satisfied if the subquery returns no rows.A query that uses NOT EXISTS in the WHERE clause is satisfied if the subquery returns no rows.

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-52 Subqueries and the ORDER BY Clause The SELECT statement shown below adds the ORDER BY clause to specify sorting by first name within last name.The SELECT statement shown below adds the ORDER BY clause to specify sorting by first name within last name. Note that the ORDER BY clause is placed after the WHERE clause, and that this includes the subquery as part of the WHERE clause. Note that the ORDER BY clause is placed after the WHERE clause, and that this includes the subquery as part of the WHERE clause. SELECT emp_last_name "Last Name", emp_first_name "First Name" emp_first_name "First Name" FROM employee WHERE EXISTS (SELECT * (SELECT * FROM dependent FROM dependent WHERE emp_ssn = dep_emp_ssn) WHERE emp_ssn = dep_emp_ssn) ORDER BY emp_last_name, emp_first_name;

Bordoloi and BockCopyright 2004 Prentice Hall, Inc.7-53 Subqueries and the ORDER BY Clause Output: Last Name First Name Bock Douglas Joyner Suzanne Zhu Waiman