Qual é a diferença entre @ViewChild e @ContentChild?

Angular 2 fornece@ViewChild, @ViewChildren, @ContentChild e@ContentChildren decoradores para consultar os elementos descendentes de um componente. Qual é a diferença entre os dois primeiros e os dois últimos?