|
Queries in SQL | Query specification |
generalized_table ::= { table_identifier [ index_specification ]
| stored_query_identifier | system_query | ( query_expression ) | join }
[ rename ]
index_specification ::= INDEX index_name
join ::= generalized_table join_type generalized_table [ join_specification ]
join_type ::= CROSS JOIN | [ NATURAL ] [ INNER | { LEFT | RIGHT | FULL } [ OUTER ] ] JOIN
join_specification ::= ON condition | USING ( column_name { , column_name } )
rename ::= [ AS ] name [( column_name { , column_name } )]
The generalized_table expression defines, which objects may serve as tables in the SQL language. Besides the actual table or a query stored in the database (VIEW in SQL terminology) and system queries, a query_expression in parenthesis (subquery) or a join can be considered a generalized table.
The join expression represents the creation of a conjunction of records from two tables by chaining the column values of one record from the first table and one record from the second table. Join_type and join_specification set the method of joining records from the tables:
Index_specification on the table name forces the use of the specified index regardless of the choice from the optimizer.
If you specify rename at the end of the generalized table, you may assign a name that can be used to refer to this table. You may also specify column names of this table. The number of column names must be the same as the number of columns in the generalized table.
Variations from the Intermediate to the Full Level (SQL 3)
Variations from the SQL Standard
Example: The use of query expressions and joins as generalized tables:
SELECT *
FROM Kb_topics
LEFT OUTER JOIN
(SELECT topic_id,un_reports+un_answers AS unanswered
FROM (SELECT topic_id,Count(*) AS un_reports
FROM Kb_reports WHERE all_answer_count=0 GROUP BY topic_id
)
JOIN
(SELECT Kb_reports.topic_id,Count(*) AS un_answers
FROM Kb_reports JOIN Kb_answers ON (Kb_reports.id=Kb_answers.report_id)
WHERE (NOT EXISTS(SELECT *
FROM Kb_answers answ
WHERE Kb_answers.id=answ.question_id))
GROUP BY Kb_reports.topic_id
)
USING (topic_id))
ON (Kb_topics.id=topic_id)
ORDER BY Kb_topics.pos
See
Queries in SQL | Query specification |