Fala irmão,
É o seguinte, É difícil responder tudo isso em poucas palavras, mas vou tentar.
TSQLQUery -> É um dos componentes de acesso a dados do delphi. É como se fosse um PreparedStatement e um ResultSet juntos, em um mesmo componente. Você informa nele um script SQL e ele te retorna o resultset correspondente. Para funcionar ele tem que ter a propriedade SQLConnection configurada. O TSQLConnection é como se fosse o nosso Connection do JDBC. Este componente também pode realizar INSERTs e UPDATEs no banco.
TDataSetProvider -> Serve como ponte entre um dataset e um clientdataset. No seu caso entre um TSQLQuery e um TClientDataSet. Geralmente é usado do lado servidor de uma aplicação multicamadas disponibilizando dados de um TSQLQuery para um TClientDataSet.
TClientDataDet -> Como o próprio o nome diz é um dataset do lado do cliente. Este componente é bem bacana, ele é como se fosse um ResultSet nosso do JDBC, só que você pode ordenar , pode inserir, editar e deletar registros sem que haja um PreparedStatemente ou Connection . No exemplo que você citou a tarefa dele é receber os dados da camada servidora da aplicação. Por isso ele está ligado a um DataSetProvider.
TDataSource-> Esse cara permite que você ligue os campos do TClientDataSet a componentes de edição do tipo DBControls (DBEdit, DBCombobox, DBRadiobutton, etc.) .
UFA ! É isso aí… qualquer outra informação que precisar é só postar aí…
Abraços