Difference between select and selectExpr

What is the difference between select and selectExpr method of pyspark.sql.DataFrame ?

Please provide the answer with use cases for better understanding