Expressions are layer-based formulae/commands that manipulate the layer and its content/effects based on factors such as time, random number generation, variables, and other layers and elements within the project. An expression can only change elements of the layer parameter to which it is applied - it cannot alter any other layer or parameter within your project, although it can "see" changes in other elements and react accordingly.
AE Scripting, however, is an application-wide scripting language, which can perform almost any possible function within AE, from creating new projects, comps and layers, to reading data from external files, sending emails etc.
Both are customized adaptations of Java Script. Both were developed independently of Flash Actionscript, so while they share similarities, they are not the same.
One of the best places to learn about AE Scripts and Expressions is Dan Ebbert's fantastic site:
http://www.motionscript.com
And, of course, the AE manual. Expressions:
http://help.adobe.com/en_US/AfterEffects/9.0/WS3878526689cb91655866c1103906c6dea-7a39a.html
Scripting:
http://help.adobe.com/en_US/AfterEffects/9.0/WSD2616887-A41E-4a39-85FE-957B9D2D3843.html