There are two types of subqueries: scalar and multi-row. Scalar subqueries return a single value or row/column, while multi-row subqueries return multiple rows or columns. Correlated subqueries rely on information from the outer query. Subqueries can reside in the WHERE, FROM, or SELECT clauses and provide an alternative to complex joins/unions while making queries more readable by isolating each part. Correlated subqueries may be evaluated once per outer row and use outer query values, while non-correlated subqueries execute once independently of the outer query.