I have two new books out – How do I do that in PostGIS, and How do I do that in Manifold SQL.
From the back cover of How do I do that in PostGIS:
For those who are unsure if SQL is a sufficient language for performing GIS tasks, this book is for you. This guide follows the topic headings from the book How do I do that in ArcGIS/Manifold, as a way to illustrate the capabilities of the PostGIS SQL engine for accomplishing classic GIS tasks. With this book as a resource, users will be able to perform many classic GIS functions using nothing but SQL.
In case you are getting tired of reading examples from my book (did I mention that I have a textbook you can buy from Amazon?), I thought I would throw a post in here and there that illustrates other aspects of SQL and GIS. A friend recently sent me a file of stream segments, and wanted to determine the sinuosity of each stream segment. You may recall the sinuosity formula as the length of the segment / distance between the start and endpoint of a line. This is essentially a ratio of the theoretical straight line distance between the endpoints and the actual distance along the segment.
Lets suppose we have a vector file named Stream_Sample. Sinuosity is easily calculated with SQL and a few spatial constructs as:
SELECT Length([Geom (I)]) / Distance(StartPoint([Geom (I)]),EndPoint([Geom (I)])) AS ss