Probier's mal hiermit:
SELECT titel FROM buch b WHERE
EXISTS
(SELECT * FROM schlagwort, buchschlagwortrel WHERE
schlagwort.name = "Evolutionsbiologie" AND
schlagwort.schlagwortnr = buchschlagwortrel.schlagwortnr AND
buchschlagwortrel.buchnr = b.buchnr)
AND EXISTS
(SELECT * FROM schlagwort, buchschlagwortrel WHERE
schlagwort.name = "Wissenschaftsgeschichte" AND
schlagwort.schlagwortnr = buchschlagwortrel.schlagwortnr AND
buchschlagwortrel.buchnr = b.buchnr)
Die beiden EXISTS-Blöcke sind im Prinzip gleich, nur dass sie eben auf die unterschiedlichen Schlagworte überprüfen.
Falls es funktioniert, erwarte ich entsprechende Opfergaben und eine angemessene Ehrerbietung!
Ansonsten probier mal Marzans Vorschlag in folgender Abwandlung:
SELECT buch.titel FROM buch, schlagwort sw1, schlagwort sw2,
buchschlagwortrel bwr1, buchschlagwortrel bwr2 WHERE (sw1.name = "Wissenschaftsgeschichte" and sw2.name = "Evolutionsbiologie") AND
bwr1.buchnr = buch.buchnr AND bwr1.schlagwortnr = sw1.schlagwortnr
AND bwr2.buchnr = buch.buchnr AND bwr2.schlagwortnr = sw2.schlagwortnr;