DELETE removes chosen rows, TRUNCATE empties the whole table, and DROP removes the table itself.
DELETE removes the rows its WHERE clause matches and fires ON DELETE triggers. The deleted rows stay on disk as dead rows until VACUUM reclaims the space.
TRUNCATE removes every row without scanning the table, so it is faster and frees the disk space at once. It fires ON TRUNCATE triggers, not ON DELETE triggers, and it blocks all other access to the table.
DROP removes the table definition along with its data, indexes and constraints.
In PostgreSQL, all three can be rolled back inside a transaction, because schema changes such as DROP TABLE are transactional too. A ROLLBACK after BEGIN brings a dropped table back.
DELETE FROM users WHERE age < 18; -- Removes specific rows
TRUNCATE TABLE users; -- Removes all rows
DROP TABLE users; -- Removes table entirely
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.