Truy vấn của bạn gần như đúng và đó là cách phù hợp để thực hiện điều đó (và hiệu quả nhất)
SELECT books.*, count(orders.book_id) as number_of_orders
from books
left join orders
on (books.book_id = orders.book_id)
group by
books.book_id
COUNT(*)
có thể bao gồm giá trị NULL trong bộ đếm vì nó đếm tất cả các hàng, trong khi COUNT(orders.book_id)
không vì nó bỏ qua các giá trị NULL trong trường đã cho.