select * from firmen where plz<3000 and plz>1000
Vorsicht! 5-stellige PLZ mit führender Null (ja, sowas gibt's) fallen da leicht mit ins Ergebnis.
Genau das ist ja das Problem.
Bei Oracle:
SELECT * FROM firmen
WHERE to_number(plz)<3000 AND to_number(plz)>1000
Sicher weiß einer der mySQL-Spezis hier die Entsprechung.