¡Hola amigos! en este post, veremos algunas de las consultas SQL más comunes preguntadas en las entrevistas. Estas preguntas y respuestas de entrevistas de consultas SQL están diseñadas tanto para novatos como para experimentados.
De hecho, me han hecho la mayoría de estas preguntas durante las entrevistas en las diferentes fases de mi carrera.
Si quieres saltarte las preguntas básicas y empezar con algunas consultas SQL complicadas entonces puedes pasar directamente a nuestra sección de preguntas de entrevista de consultas SQL para los experimentados.
Considere las dos tablas siguientes como referencia mientras intenta crear consultas para las preguntas que se hacen aquí.
Tabla – EmployeeDetails
EmpId | FullName | ManagerId | DateOfJoining | Ciudad |
---|---|---|---|---|
121 | John Snow | 321 | 31/01/2014 | Toronto |
321 | Walter White | 986 | 30/01/2015 | California |
421 | Kuldeep Rana | 876 | 27/11/2016 | Nueva Delhi |
Tabla – EmployeeSalary
EmpId | Proyecto | Salario | Variable |
---|---|---|---|
121 | P1 | 8000 | 500 |
321 | P2 | 10000 | 1000 |
421 | P1 | 12000 | 0 |
Para su comodidad, he recopilado las 10 mejores preguntas para ti. Usted puede tratar de resolver estas preguntas y haga clic en los enlaces para ir a sus respectivas respuestas.
- Consulta SQL para obtener los registros que están presentes en una tabla, pero no en otra tabla.
- Consulta SQL para obtener todos los empleados que no están trabajando en cualquier proyecto.
- Consulta SQL para obtener todos los empleados de EmployeeDetails que se unió en el año 2020.
- Obtener todos los empleados de EmployeeDetails que tienen un registro de salario en EmployeeSalary.
- Escribir una consulta SQL para obtener el recuento de empleados por proyecto.
- Obtener los nombres de los empleados y el salario incluso si el valor del salario no está presente para el empleado.
- Escribir una consulta SQL para obtener todos los empleados que también son gerentes.
- Escriba una consulta SQL para obtener registros duplicados de EmployeeDetails.
- Escriba una consulta SQL para obtener sólo las filas impares de la tabla.
- Escriba una consulta para encontrar el 3er salario más alto de una tabla sin la palabra clave top o limit.
O, también puede ir a nuestras dos secciones siguientes sobre preguntas de entrevista para novatos y profesionales con experiencia.
Contenido
Preguntas de entrevista de consulta SQL para novatos
Aquí hay una lista de las mejores preguntas de entrevista de consulta SQL y respuestas para candidatos novatos que les ayudarán en sus entrevistas. En estas consultas, nos centraremos en los comandos básicos de SQL solamente.
Preguntas.1. Escriba una consulta SQL para obtener el EmpId y FullName de todos los empleados que trabajan bajo Gerente con id – ‘986’.
Ans. Podemos utilizar la tabla EmployeeDetails para obtener los detalles de los empleados con una cláusula where para el gerente-
SELECT EmpId, FullNameFROM EmployeeDetailsWHERE ManagerId = 986;
Ques.2Escriba una consulta SQL para obtener los diferentes proyectos disponibles en la tabla EmployeeSalary.
Ans. Al referirnos a la tabla EmployeeSalary, podemos ver que esta tabla contiene valores de proyectos correspondientes a cada empleado, o podemos decir que tendremos valores de proyectos duplicados al seleccionar valores de proyectos de esta tabla.
Entonces, utilizaremos la cláusula distinct para obtener los valores únicos del Proyecto.
SELECT DISTINCT(Project)FROM EmployeeSalary;
Cuestiones.3. Escriba una consulta SQL para obtener el recuento de empleados que trabajan en el proyecto ‘P1’.
Ans. Aquí, estaríamos utilizando la función agregada count() con la cláusula SQL where-
SELECT COUNT(*) FROM EmployeeSalary WHERE Project = 'P1';
Cuestiones.4Escriba una consulta SQL para encontrar el salario máximo, mínimo y medio de los empleados.
Ans. Podemos utilizar la función agregada de SQL para obtener los valores máximo, mínimo y medio-
SELECT Max(Salary), Min(Salary), AVG(Salary) FROM EmployeeSalary;
Ques.5Escriba una consulta SQL para encontrar el id de empleado cuyo salario se encuentra en el rango de 9000 y 15000.
Ans. Aquí, podemos utilizar el operador ‘Between’ con una cláusula where.
SELECT EmpId, SalaryFROM EmployeeSalaryWHERE Salary BETWEEN 9000 AND 15000;
Ques.6. Escriba una consulta SQL para obtener los empleados que viven en Toronto y trabajan bajo el gerente con ManagerId – 321.
Ans. Ya que tenemos que satisfacer las dos condiciones – los empleados que viven en ‘Toronto’ y que trabajan en el proyecto ‘P2’. Por lo tanto, utilizaremos el operador AND aquí-
SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='Toronto' AND ManagerId='321';
Ques.7. Escriba una consulta SQL para obtener todos los empleados que viven en California o que trabajan bajo un gerente con ManagerId – 321.
Ans. Esta pregunta de la entrevista requiere que satisfagamos cualquiera de las condiciones – empleados que viven en ‘California’ y que trabajan bajo Gerente con ManagerId ‘321’. Por lo tanto, vamos a utilizar el operador OR aquí-
SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='California' OR ManagerId='321';
Ques.8Escriba una consulta SQL para obtener todos los empleados que trabajan en un proyecto distinto de P1.
Ans. Aquí, podemos utilizar el operador NOT para obtener las filas que no satisfacen la condición dada.
SELECT EmpIdFROM EmployeeSalaryWHERE NOT Project='P1';
O utilizando el operador not equal to-
SELECT EmpIdFROM EmployeeSalaryWHERE Project <> 'P1';
Para conocer la diferencia entre los operadores NOT y <>SQL, consulte este enlace – Diferencia entre los operadores NOT y !=.
Cuestiones.9Escriba una consulta SQL para mostrar el salario total de cada empleado sumando el salario con el valor de la variable.
Ans. Aquí, podemos utilizar simplemente el operador ‘+’ en SQL.
SELECT EmpId,Salary+Variable as TotalSalary FROM EmployeeSalary;
Ques.10Escriba una consulta SQL para obtener los empleados cuyo nombre comience con dos caracteres cualesquiera, seguidos de un texto «hn» y que termine con cualquier secuencia de caracteres.
Ans. Para esta pregunta, podemos crear una consulta SQL utilizando el operador like con los caracteres comodín ‘_’ y ‘%’, donde ‘_’ coincide con un solo carácter y ‘%’ coincide con ‘0 o varios caracteres’.
SELECT FullNameFROM EmployeeDetailsWHERE FullName LIKE '__hn%';
Ques.11Escriba una consulta SQL para obtener todos los EmpIds que están presentes en cualquiera de las tablas – ‘EmployeeDetails’ y ‘EmployeeSalary’.
Ans. Con el fin de obtener los ID de los empleados únicos de ambas tablas, podemos utilizar la cláusula de Unión que puede combinar los resultados de las dos consultas SQL y devolver filas únicas.
SELECT EmpId FROM EmployeeDetailsUNION SELECT EmpId FROM EmployeeSalary;
Ques.12Escriba una consulta SQL para obtener registros comunes entre dos tablas.
Ans. SQL Server – Usando el operador INTERSECT-
SELECT * FROM EmployeeSalaryINTERSECTSELECT * FROM ManagerSalary;
MySQL – Ya que MySQL no tiene el operador INTERSECT podemos usar la subconsulta-
SELECT *FROM EmployeeSalaryWHERE EmpId IN (SELECT EmpId from ManagerSalary);
Ques.13Escriba una consulta SQL para obtener los registros que están presentes en una tabla pero no en otra.
Ans. SQL Server – Usando el operador MINUS-
SELECT * FROM EmployeeSalaryMINUSSELECT * FROM ManagerSalary;
MySQL – Ya que MySQL no tiene el operador MINUS podemos usar LEFT join-
SELECT EmployeeSalary.*FROM EmployeeSalaryLEFT JOINManagerSalary USING (EmpId)WHERE ManagerSalary.EmpId IS NULL;
Ques.14Escriba una consulta SQL para obtener los EmpIds que están presentes en ambas tablas – ‘EmployeeDetails’ y ‘EmployeeSalary.
Ans. Usando subconsulta-
SELECT EmpId FROM EmployeeDetails where EmpId IN (SELECT EmpId FROM EmployeeSalary);
Ques.15. Escriba una consulta SQL para obtener los EmpIds que están presentes en EmployeeDetails pero no en EmployeeSalary.
Ans. Usando subconsulta-
SELECT EmpId FROM EmployeeDetails where EmpId Not IN (SELECT EmpId FROM EmployeeSalary);
Ques.16Escriba una consulta SQL para obtener los nombres completos de los empleados y sustituir el espacio por ‘-‘.
Ans. Utilizando la función ‘Replace’-
SELECT REPLACE(FullName, ' ', '-') FROM EmployeeDetails;
Ques.17. Escriba una consulta SQL para obtener la posición de un carácter o caracteres dados en un campo.
Ans. Utilizando la función ‘Instr’-
SELECT INSTR(FullName, 'Snow')FROM EmployeeDetails;
Ques.18Escriba una consulta SQL para mostrar el EmpId y el ManagerId juntos.
Ans. Aquí podemos utilizar el comando CONCAT.
SELECT CONCAT(EmpId, ManagerId) as NewIdFROM EmployeeDetails;
Ques.19. Escriba una consulta para obtener sólo el primer nombre (cadena antes del espacio) de la columna FullName de la tabla EmployeeDetails.
Ans. En esta pregunta, se requiere primero obtener la ubicación del carácter de espacio en el campo FullName y luego extraer el primer nombre del campo FullName.
Para encontrar la ubicación usaremos el método LOCATE en MySQL y CHARINDEX en SQL SERVER y para obtener la cadena antes del espacio, usaremos el método SUBSTRING O MID.
MySQL – usando MID
SELECT MID(FullName, 1, LOCATE(' ',FullName)) FROM EmployeeDetails;
SQL Server – usando SUBSTRING
SELECT SUBSTRING(FullName, 1, CHARINDEX(' ',FullName)) FROM EmployeeDetails;
Cuestiones.20Escriba una consulta SQL para poner en mayúsculas el nombre del empleado y en minúsculas los valores de la ciudad.
Ans. Podemos utilizar las funciones Upper y Lower de SQL para conseguir los resultados previstos.
SELECT UPPER(FullName), LOWER(City) FROM EmployeeDetails;
Ques.21. Escriba una consulta SQL para encontrar el recuento de las ocurrencias totales de un carácter particular – ‘n’ en el campo FullName.
Ans. Aquí, podemos utilizar la función ‘Length’. Podemos restar la longitud total del campo FullName con una longitud del FullName después de reemplazar el carácter – ‘n’.
SELECT FullName, LENGTH(FullName) - LENGTH(REPLACE(FullName, 'n', ''))FROM EmployeeDetails;
Cuestiones.22. Escriba una consulta SQL para actualizar los nombres de los empleados eliminando los espacios iniciales y finales.
Ans. Utilizando el comando ‘Update’ con la función ‘LTRIM’ y ‘RTRIM’.
UPDATE EmployeeDetails SET FullName = LTRIM(RTRIM(FullName));
Ques.23. Obtenga todos los empleados que no están trabajando en ningún proyecto.
Ans. Esta es una de las preguntas de entrevista muy básicas en la que el entrevistador quiere ver si la persona conoce el operador comúnmente utilizado – Is NULL.
SELECT EmpId FROM EmployeeSalary WHERE Project IS NULL;
Ques.24Escriba una consulta SQL para obtener los nombres de los empleados que tengan un salario mayor o igual a 5000 y menor o igual a 10000.
Ans. Aquí, usaremos BETWEEN en la cláusula ‘where’ para devolver el EmpId de los empleados con salario que satisfagan los criterios requeridos y luego usarlo como subconsulta para encontrar el fullName del empleado de la tabla EmployeeDetails.
SELECT FullName FROM EmployeeDetails WHERE EmpId IN (SELECT EmpId FROM EmployeeSalary WHERE Salary BETWEEN 5000 AND 10000);
Ques.25. Escriba una consulta SQL para encontrar la fecha-hora actual.
Ans. MySQL-
SELECT NOW();
SQL Server-
SELECT getdate();
Oracle-
SELECT SYSDATE FROM DUAL;
Ques.26Escriba una consulta SQL para obtener todos los detalles de los empleados de la tabla EmployeeDetails que se unieron en el año 2020.
Ans. Usando BETWEEN para el rango de fechas ’01-01-2020′ AND ’31-12-2020′-
SELECT * FROM EmployeeDetailsWHERE DateOfJoining BETWEEN '2020/01/01'AND '2020/12/31';
También podemos extraer la parte del año de la fecha de unión (usando YEAR en mySQL)-
SELECT * FROM EmployeeDetails WHERE YEAR(DateOfJoining) = '2020';
Ques.27Escriba una consulta SQL para obtener todos los registros de empleados de la tabla EmployeeDetails que tengan un registro de salario en la tabla EmployeeSalary.
Ans. Usando ‘Exists’-
SELECT * FROM EmployeeDetails EWHERE EXISTS(SELECT * FROM EmployeeSalary S WHERE E.EmpId = S.EmpId);
Ques.28. Escriba una consulta SQL para obtener el recuento de empleados por proyecto ordenado por el recuento del proyecto en orden descendente.
Ans. La consulta tiene dos requisitos: primero obtener el recuento por proyecto y luego ordenar el resultado por ese recuento.
Para el recuento por proyecto, utilizaremos la cláusula GROUP BY y para la ordenación, utilizaremos la cláusula ORDER BY en el alias del recuento por proyecto.
SELECT Project, count(EmpId) EmpProjectCountFROM EmployeeSalaryGROUP BY ProjectORDER BY EmpProjectCount DESC;
Ques.29. Escriba una consulta para obtener los nombres de los empleados y los registros de salarios. Mostrar los detalles de los empleados, incluso si el registro de salario no está presente para el empleado.
Ans. Esta es de nuevo una de las preguntas de la entrevista muy común en el que el entrevistador sólo quiere comprobar el conocimiento básico de SQL JOINS.
Aquí podemos utilizar el left join con la tabla EmployeeDetail en el lado izquierdo de la tabla EmployeeSalary.
SELECT E.FullName, S.Salary FROM EmployeeDetails E LEFT JOIN EmployeeSalary SON E.EmpId = S.EmpId;
Preguntas.30. Escriba una consulta SQL para unir 3 tablas.
Ans. Considerando 3 tablas TableA, TableB y TableC, podemos usar 2 cláusulas de unión como las siguientes-
SELECT column1, column2FROM TableAJOIN TableB ON TableA.Column3 = TableB.Column3JOIN TableC ON TableA.Column4 = TableC.Column4;
Para más preguntas sobre uniones SQL, también puede consultar nuestras principales preguntas de entrevista sobre uniones SQL.
Preguntas de entrevista sobre consultas SQL para profesionales experimentados
Aquí está la lista de algunas de las preguntas de entrevista sobre consultas SQL más frecuentes para profesionales experimentados. Estas preguntas abarcan consultas SQL sobre conceptos avanzados de SQL JOIN, obtención de filas duplicadas, filas pares e impares, enésimo salario más alto, etc.
Preguntas. 31. Escriba una consulta SQL para obtener todos los empleados que también son gerentes de la tabla EmployeeDetails.
Ans. Aquí, tenemos que utilizar Self-Join ya que el requisito quiere que analicemos la tabla EmployeeDetails como dos tablas. Utilizaremos diferentes alias ‘E’ y ‘M’ para la misma tabla EmployeeDetails.
SELECT DISTINCT E.FullNameFROM EmployeeDetails EINNER JOIN EmployeeDetails MON E.EmpID = M.ManagerID;
Para aprender más sobre Self Join junto con algunas consultas más, puede ver el siguiente video que explica el concepto de self join de una manera muy simple.
Ques.32. Escriba una consulta SQL para obtener los registros duplicados de EmployeeDetails (sin tener en cuenta la clave primaria – EmpId).
Ans. Para encontrar los registros duplicados de la tabla, podemos utilizar GROUP BY en todos los campos y, a continuación, utilizar la cláusula HAVING para devolver sólo los campos cuyo recuento es mayor que 1, es decir, las filas que tienen registros duplicados.
SELECT FullName, ManagerId, DateOfJoining, City, COUNT(*)FROM EmployeeDetailsGROUP BY FullName, ManagerId, DateOfJoining, CityHAVING COUNT(*) > 1;
Ques.33. Escriba una consulta SQL para eliminar los duplicados de una tabla sin utilizar una tabla temporal.
Ans. Aquí podemos utilizar delete con alias y inner join. Comprobaremos la igualdad de todos los registros coincidentes y eliminaremos la fila con EmpId más alto.
DELETE E1 FROM EmployeeDetails E1INNER JOIN EmployeeDetails E2 WHERE E1.EmpId > E2.EmpId AND E1.FullName = E2.FullName AND E1.ManagerId = E2.ManagerIdAND E1.DateOfJoining = E2.DateOfJoiningAND E1.City = E2.City;
Ques.34. Escriba una consulta SQL para obtener sólo las filas impares de la tabla.
Ans. En caso de que tengamos un campo de autoincremento, por ejemplo, EmpId, entonces podemos utilizar simplemente la siguiente consulta-
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) <> 0;
En caso de que no tengamos dicho campo, entonces podemos utilizar las siguientes consultas.
Usando Row_number en SQL server y comprobando que el resto cuando se divide por 2 es 1-
SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 1;
Usando una variable definida por el usuario en MySQL-
SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 1;
Ques.35. Escriba una consulta SQL para obtener sólo las filas pares de la tabla.
Ans. En caso de que tengamos un campo de autoincremento, por ejemplo, EmpId, entonces podemos simplemente utilizar la siguiente consulta-
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) = 0;
En caso de que no tengamos dicho campo, entonces podemos utilizar las siguientes consultas.
Usando Row_number en SQL server y comprobando que el resto cuando se divide por 2 es 1-
SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 0;
Usando una variable definida por el usuario en MySQL-
SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 0;
Ques.36. Escribir una consulta SQL para crear una nueva tabla con datos y estructura copiados de otra tabla.
Ans.
CREATE TABLE NewTable SELECT * FROM EmployeeSalary;
Ques.37. Escribir una consulta SQL para crear una tabla vacía con la misma estructura que alguna otra tabla.
Ans. En este caso, podemos utilizar la misma consulta anterior con la condición ‘WHERE’ falsa-
CREATE TABLE NewTable SELECT * FROM EmployeeSalary where 1=0;
Cuestiones.38. Escriba una consulta SQL para obtener los n primeros registros-
Ans. En MySQL usando LIMIT-
SELECT *FROM EmployeeSalaryORDER BY Salary DESC LIMIT N;
En SQL server usando el comando TOP-
SELECT TOP N *FROM EmployeeSalaryORDER BY Salary DESC;
Ques.39. Escriba una consulta SQL para encontrar el enésimo salario más alto de la tabla.
Ans, Usando la palabra clave Top (SQL Server)-
SELECT TOP 1 SalaryFROM ( SELECT DISTINCT TOP N Salary FROM Employee ORDER BY Salary DESC )ORDER BY Salary ASC;
Usando la cláusula límite(MySQL)-
SELECT SalaryFROM EmployeeORDER BY Salary DESC LIMIT N-1,1;
Ques.40. Escriba una consulta SQL para encontrar el 3er salario más alto de una tabla sin utilizar la palabra clave TOP/limit.
Ans. Esta es una de las preguntas más frecuentes en las entrevistas. Para ello, utilizaremos una subconsulta correlativa.
Para encontrar el 3er salario más alto, encontraremos el valor del salario hasta que la consulta interna devuelva un recuento de 2 filas que tengan el salario mayor que otros salarios distintos.
SELECT SalaryFROM EmployeeSalary Emp1WHERE 2 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
Para el enésimo salario más alto-
SELECT SalaryFROM EmployeeSalary Emp1WHERE N-1 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
Con esto concluimos nuestro post sobre preguntas y respuestas frecuentes de la entrevista sobre consultas SQL. Espero que estas preguntas te ayuden en tus entrevistas de bases de datos.
Si crees que hemos omitido alguna de las preguntas más comunes de las entrevistas, háznoslo saber en los comentarios y añadiremos esas preguntas a nuestra lista.
Revisa nuestro artículo sobre – Preguntas de entrevistas de bases de datos, centrado en las preguntas teóricas de las entrevistas basadas en los conceptos de DBMS y SQL.
Kuldeep es el fundador y autor principal de ArtOfTesting. Es experto en automatización de pruebas, pruebas de rendimiento, big data y CI-CD. Aporta su década de experiencia a su papel actual donde se dedica a educar a los profesionales de QA. Puedes conectar con él en LinkedIn.