I am running into some difficulty with the following query.
SELECT maker, speed
FROM
(
SELECT *
FROM product
NATURAL JOIN laptop
)
WHERE hd > 30;
I am trying to find the maker and speed of laptops with hard drives greater than 30 gigabytes.
I have two relations laptops and products. Laptops has the tuples (maker, model, type) and laptop has the tuples (model, speed, ram, hd, screen, and price).
What I think I am doing.
A subquery in the FROM
clause requires a table alias:
SELECT maker, speed
FROM
(
SELECT *
FROM product
NATURAL JOIN laptop
/* include an alias with AS */
) AS products_sub
WHERE hd > 30;
A table_subquery is also known as a subquery in the FROM clause. Such subqueries must include an alias to give the subquery result a table name. A trivial example follows; see also Section 12.2.9.8, “Subqueries in the FROM Clause”.
However for your example, the subquery isn't needed at all.
SELECT maker, speed
FROM products NATURAL JOIN laptop
WHERE hd > 30;
Note that NATURAL JOIN
s are not usually recommended, and it is best to be explicit about the columns joined in an ON
clause.
SELECT maker, speed
FROM products JOIN laptop
WHERE hd > 30;