• Nem Talált Eredményt

Grouping Results

In document Database System (Pldal 75-80)

DATA MANIPULATION

SELF-CHECK 3.4

3.3.4 Grouping Results

In the previous examples of aggregate functions (COUNT, MAX, MIN, SUM) we have seen that the outputs of these functions are summarised into a single row of result table. There is an instance that we want summary of these functions to be grouped according to a specified column. This grouping summary can be done by using GROUP BY clause. Example 15 illustrates the use of GROUP BY clause.

Note that only column names that appear in the GROUP BY clause can be in the SELECT list unless the names is used for the aggregate functions.

Example 15: Use of GROUP BY

Query 15: Find the number of product supplied by each supplier.

SELECT SuppNo, COUNT(ProductNo) AS NumOfProduct FROM Product

Group By SuppNo;

This statement finds the number of product using aggregate function COUNT for each Supplier based on the SuppNo. The result table is shown in Table 3.15.

Table 3.15: Result Table for Example 15 SuppNo NumOfProduct

S8843 2 S9888 1 S9898 1 S9995 1 Restricting grouping (HAVING Clause)

Similar to the WHERE clause, which allows us to filter rows, we can use HAVING clause to filter the groups specify in the GROUP BY clause. Therefore, when you want to use HAVING, GROUP BY clause must be applied too.

Typically, the aggregate function is used in the condition for the HAVING clause.

Example 16: Use of HAVING

Query 16: Find the OrderNo that has more than one product SELECT OrderNo, Count(ProductNo) AS NumOfProduct FROM Delivery

GROUP BY OrderNo

HAVING COUNT(ProductNo) > 1;

This operation groups the Delivery data based on OrderNo and lists only those group that has more than one product. The output for this operation is shown in Table 3.16.

Table 3.16: Result table for Example 16 OrderNo NumOfProduct

1120 3 4399 2

3.3.5 Subqueries

In this section we are going to learn how to use subqueries. Here we provide examples of subqueries that involve the use of SELECT statement within another SELECT statement which is also sometimes referred to as nested SELECT. In terms of the order of the execution, the inner SELECT will be performed first and the result from the inner SELECT will be used for the filter condition in the outer SELECT statement. Example 17 and 18 illustrate the use of subqueries.

Example 17: Using a subquery with equality

Query 17: List the product names and its price per unit for products that are supplied by ABX Technics

SELECT Names AS ProductNames, UnitPrice FROM Product

WHERE SuppNO = { SELECT SuppNo

FROM Supplier

WHERE Name = „ABX Technics‰};

First the inner SELECT statement is executed to get the supplier number of ABX Technics. The output from this statement is tested as part of the search condition in the WHERE clause of the outer SELECT statement. Note that the Â=Ê sign is used in the WHERE clause of the outer SELECT since the result from the inner SELECT contains only one value.

The final result table from this query is shown in Table 3.17.

Table 3.17: Result table for Example 17 ProductNames UnitPrice 17 inch Monitor 200 19 inch Monitor 250

Example 18: Nested subquery: use of IN

List the supplier number, product names and its price per unit for products that are supplied by supplier from Petaling Jaya.

SELECT SuppNo AS SupplierNo, Names AS ProductName, UnitPrice FROM Product

WHERE SuppNO IN { SELECT SuppNo FROM Supplier

WHERE City = „Petaling Jaya‰};

In this query it is possible to have the output from the inner SELECT statement with more than one value. Therefore, the ÂINÊ keyword is used in the search condition with for the WHERE clause in the outer SELECT statement. The result table for the above statement is shown in Table 3.18.

Table 3.18: Result Table for Example 18

SupplierNo ProductNames UnitPrice S9898 Color Laser Printer 200

S9990 Color Scanner 250

S9995

Multitable Queries

So far weÊve learnt how to retrieve data using SELECT statement from only one table. Sometimes we need results that contain columns from more than one table. Thus, we need to perform a join operation to combine these columns into one result table. To perform a join, we need to specify the tables to be used in the FROM clause. The join condition that specifies the matching or common column/s of the tables to be joined is written in the WHERE clause. Examples 19, 20 and 21 illustrate how to join tables.

Example 19: Simple join

Query 19: List the supplier names for each product.

SELECT p.Name AS ProductName, s.Names AS SupplierName FROM Product p, Supplier s

WHERE s.SuppNo = p.SuppNo;

This statement joins two tables which are Product and Supplier. Since the common column for both tables is SuppNo, therefore this column is used for the join condition in the WHERE clause. The output for this simple join statement is shown in Table 3.19.

Table 3.19: Result Table for Example 19 ProductName SupplierName 17 inch Monitor ABX Technics 19 inch Monitor ABX Technics Laser Printer SoftSystem Color Laser Printer ID Computers Color Scanner ITN Suppliers

Example 20: Sorting a join

Query 20: Sort the list of products based on supplier name and for each supplier name sort the list based on Product names in descending order.

SELECT Product.Name AS ProductName, Supplier.Names AS SupplierName FROM Product p, Supplier s

WHERE s.SuppNo = p.SuppNo ORDER BY s.Name, p.Name DESC;

This statement is similar to the previous example, except it includes the ORDER BY clause for sorting purposes. The result is sorted in ascending order by supplier name and for those supplier that have more than one product the product name is sorted in descending order.

Table 3.20: Result Table for Example 20 ProductName SupplierName 19 inch Monitor ABX Technics 17 inch Monitor ABX Technics Laser Printer SoftSystem Color Laser Printer ID Computers

Color Scanner ITN Suppliers Example 21: Three table join

Query 21: Find the supplier names of the product that are delivered in Jan 2007.

Sort the list based on Supplier name.

SELECT Supplier.Names AS SupplierName, Product.Name AS ProductName, DeliveryDate

FROM Supplier s, Product p, Delivery d

WHERE s.SuppNo = p.SuppNo AND p.ProductNo = d.ProductNo AND (DeliveryDate >= „1-Jan-07‰ and DeliveryDate <= „31-Jan-07‰)

ORDER BY s.Name;

This queries require to join three tables. All the join conditions are listed in the WHERE clause. As noted earlier, the common column names for both tables to be joined need to be used as the join condition. To join the supplier and product, the supplier number is used and to join the product and delivery tables, the product number is used. The result from this join is shown in the Table 3.21.

Table 3.21: Result Table for Example 21

SupplierName ProductName DeliveryDate ABX Technics 17 inch Monitor 27-Jan-2007 ITN Suppliers Color Scanner 28-Jan-2007

SoftSystem Laser Printer 27-Jan-2007

In document Database System (Pldal 75-80)