In general terms, a clause is just a logical chunk of a SQL statement - and, usually, is a chunk that is (theoretically) optional.
I'm a SQL Server guy, so I'll be thinking in those terms.
SELECT GETDATE() is a valid SQL Server
SELECT statement. It'll return the current date and time.
If I add a
I'll get back n rows (where n is the number of rows in the
sys.objects table), each of which will have the same (unnamed) column, showing the current date and time.
You can add a
WHERE clause to limit the number of rows you bring back; a
GROUP BY clause to either deduplicate your data, or to allow you to put aggregate values in the
SELECT list; a HAVING clause (usually to eliminate rows based on aggregate data); an
ORDER BY clause to sort the data - but, none of those have to be there.
You'll note I said "
SELECT list" when referring to the list of columns returned. I've never heard this referred to as a clause - presumably, because it does have to be there.
An operator, on the other hand is used to combine or compare two complete items. Just like the
+ operator lets you combine numbers (
1 + 2) or strings (
[firstname] + ' ' + [lastname]), the
INTERSECT operators let you combine two SQL statements.
I'm probably oversimplifying, but thinking in these terms should at least head you in the right direction.