Online Book Reader

Home Category

MariaDB Crash Course - Ben Forta [45]

By Root 472 0
an equijoin—a join based on the testing of equality between two tables. This kind of join is also called an inner join. In fact, you may use a slightly different syntax for these joins, specifying the type of join explicitly. The following SELECT statement returns the exact same data as the preceding example:

Input

SELECT vend_name, prod_name, prod_price

FROM vendors INNER JOIN products

ON vendors.vend_id = products.vend_id;

Analysis

The SELECT in the statement is the same as the preceding SELECT statement, but the FROM clause is different. Here the relationship between the two tables is part of the FROM clause specified as INNER JOIN. When using this syntax the join condition is specified using the special ON clause instead of a WHERE clause. The actual condition passed to ON is the same as would be passed to WHERE.

* * *

Note: Which Syntax To Use?

Per the ANSI SQL specification, use of the INNER JOIN syntax is preferable. Furthermore, while the using the WHERE clause to define joins is indeed simpler, using explicit join syntax ensures that you will never forget the join condition and can impact performance, too (in some cases).

* * *

Joining Multiple Tables


SQL imposes no limit to the number of tables that may be joined in a SELECT statement. The basic rules for creating the join remain the same. First list all the tables, and then define the relationship between each. Here is an example:

Input

SELECT prod_name, vend_name, prod_price, quantity

FROM orderitems, products, vendors

WHERE products.vend_id = vendors.vend_id

AND orderitems.prod_id = products.prod_id

AND order_num = 20005;

Output

+----------------+-------------+------------+----------+

| prod_name | vend_name | prod_price | quantity |

+----------------+-------------+------------+----------+

| .5 ton anvil | Anvils R Us | 5.99 | 10 |

| 1 ton anvil | Anvils R Us | 9.99 | 3 |

| TNT (5 sticks) | ACME | 10.00 | 5 |

| Bird seed | ACME | 10.00 | 1 |

+----------------+-------------+------------+----------+

Analysis

This example displays the items in order number 20005. Order items are stored in the orderitems table. Each product is stored by its product ID, which refers to a product in the products table. The products are linked to the appropriate vendor in the vendors table by the vendor ID, which is stored with each product record. The FROM clause here lists the three tables, and the WHERE clause defines both of those join conditions. An additional WHERE condition is then used to filter just the items for order 20005.

* * *

Caution: Performance Considerations

MariaDB processes joins at runtime, relating each table as specified. This process can become resource intensive, so be careful not to join tables unnecessarily. The more tables you join, the more performance degrades.

* * *

Now would be a good time to revisit the following example from Chapter 14, “Working with Subqueries.” As you will recall, this SELECT statement returns a list of customers who ordered product TNT2:

Input

SELECT cust_name, cust_contact

FROM customers

WHERE cust_id IN (SELECT cust_id

FROM orders

WHERE order_num IN (SELECT order_num

FROM orderitems

WHERE prod_id = 'TNT2'));

As mentioned in Chapter 14, subqueries might not always be the most efficient way to perform complex SELECT operations, and so as promised, here is the same query using joins:

Input

SELECT cust_name, cust_contact

FROM customers, orders, orderitems

WHERE customers.cust_id = orders.cust_id

AND orderitems.order_num = orders.order_num

AND prod_id = 'TNT2';

Output

+----------------+--------------+

| cust_name | cust_contact |

+----------------+--------------+

| Coyote Inc. | Y Lee |

| Yosemite Place | Y Sam |

+----------------+--------------+

Analysis

As explained in Chapter 14, returning the data needed in this query requires the use of three tables. But instead of using them within nested subqueries, here two joins are used to connect the tables. There are three WHERE clause conditions here. The first two connect the tables in the join, and the last

Return Main Page Previous Page Next Page

®Online Book Reader