Uni-Logo
Databases and Information Systems
Sie sind hier: Startseite Teaching Lehrangebot Frühere Semester Programmierung in SQL
 

Programmierung in SQL

Formatting of SQL Queries and PL/SQL code

A good formatting of your source code always helps in writing, correcting and understanding a program or a query. In order to ease it for you and your group members to develop your solutions and for us to evaluate them, please repect the following guidelines.

New lines for keywords

Please use new lines for the common SQL-keywords SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY. Often it is also useful to begin each AND/OR-part of the WHERE-clause in a new line.

SELECT name, country, province
FROM City
WHERE (country='de' and population>10000)
   OR (country='ch' and population>5000);

Use the standard join syntax

Using the standard join syntax instead of just a comma (cross product) indicates the intention of the query better. Join conditions and filter conditions are clearly separated (they are indeed equivalent for inner joins but not for outer joins). There is also an explicit natural join. However, it should be replaced by JOIN ... USING with a fixed list of columns.

SELECT *
FROM Country JOIN Economy ON Code=Country
WHERE industry>50;
SELECT City.name, country, City.population
FROM City JOIN Province USING (country)
WHERE Province.name='Baden-Wuerttemberg';

Conditions on aggregations: HAVING

To put conditions on the result of aggregations, use the HAVING-clause instead of a subquery. Of course, both ways are equivalent concerning the result—but not in the readability.

SELECT Country.name, SUM(City.population)-Country.population diff
FROM Country JOIN City ON Code=Country
GROUP BY (Country.name, Country.population)
HAVING Country.population<SUM(City.population);
SELECT name, sum_city_pop-population diff
FROM
  (
    SELECT Country.name, Country.population, SUM(City.population) sum_city_pop
    FROM Country JOIN City ON Code=Country
    GROUP BY (Country.name, Country.population)
  )
WHERE population<sum_city_pop;

Subqueries

Subqueries should only be used when necessary. Suqueries in the FROM-clause can often be rewritten into a normal join. When a subquery has to be used serveral times it is shorter to define it once as temporary view in the With-clause.

... to be continued ...

These guidelines are nor strict nor exhaustive but should be viewed as rules of thumb. The appropiate formatting depends also on the current problem to solve.