Cross Joins
The reading makes reference to the importance of including the WHERE
clause when queries involve multiple tables.
To see why, look at the following query which finds the customer name for each invoice number.
SELECT CustName, InvoiceNo
FROM Customer, Invoice
WHERE Customer.CustABN = Invoice.CustABN;
Logon to SQL*Plus and run the query without the WHERE
clause
SELECT CustName, InvoiceNo
FROM Customer, Invoice;
1. What is the output? What has happened?
The output is 400 records. Below are the first lines:
Most of these rows are clearly wrong as Invoice Number 3 is for Mellow Yellow Lighting. This output is an example of a cross join, every invoice number is joined with every customer. As there are 20 customers and 20 invoices the total number of rows generated is 20 * 20 = 400 rows.
When the WHERE
clause is added, the incorrect rows are weeded out. This is revisited in the activity Have a go: Processing order.