A solution with possible applications in future use. Set up a Tree to store the zip code information in. With Region 1 and Region 2 as nodes on the tree, the zip codes could then be entered into the nodes as either ranges or single values. This would look something like this:
Zip Tree
All
Region 1
[12345]
[22222 - 33333]
etc.
Region 2
etc.
Then build a union query, with each section of the union using a different branch of the tree for its selection criteria. (ie. criteria would look something like this: Zip inTree ZipTree, Region 1...). In each section of the union insert a text expression that represents that region ("Region 1"

, which would then show as a column in the query output.
This allows for easier updating and reuse in multiple queries without excessive manual entry, and also allows for the addition of new regions, zip codes, etc. With this method, create another section to the Union query that shows the Zip NOT IN TREE ZipTree, All. This is necessary because the other sections of the union query will not report any values that are not in the tree - this section would show zip values that needed to be added to the tree.
Optionally the DECODE function can be used in Query (if you are on Oracle), but this would involve lots of manual entering and updating. To use DECODE in Query you would create an expression and in the expression you would enter something like this:
DECODE (A.ZIP, '12345','Region 1','22222','Region 1','55555','Region 2','Not Defined')
This is basically a select case statement (that returns Region 1 for 12345 & 22222, Region 2 for 55555, and Not Defined for any other value - these are all for example), but you have to enter it all into an expression to use it in the query, and you have to go back and add any changes to each query (if this would be used in more than one query).
Good Luck,
Chris