En este paso, aprenderás a listar los nombres de todos los estudiantes que no han tomado cursos impartidos por el profesor "Daniel". Siga los pasos siguientes para completar este paso:
-
Abra el archivo answer.sql
en el directorio /home/labex/project
.
-
Agregue la instrucción SQL debajo del comentario:
-
Encuentre el comentario -- List the names of all students who have not taken courses taught by the "Daniel" teacher.
SELECT s.sname
FROM S s
WHERE NOT EXISTS (
SELECT 1
FROM SC sc
JOIN C c ON sc.cno = c.cno
WHERE c.tname = 'Daniel' AND sc.sno = s.sno
);
Esta instrucción SQL primero selecciona la columna sname
de la tabla S
. Luego utiliza una cláusula NOT EXISTS
para comprobar si hay registros en la tabla SC
que tengan un identificador de curso (cno
) que coincida con un curso impartido por el profesor "Daniel", y el identificador de estudiante (sno
) coincida con el estudiante actual. Si no existen tales registros, el nombre del estudiante se incluirá en el resultado.
-
Encuentre el comentario -- List the student numbers and names of students who have failed (grade < 60) in two or more courses.
SELECT s.sno, s.sname
FROM S s
JOIN SC sc ON s.sno = sc.sno
WHERE sc.grade < 60
GROUP BY s.sno, s.sname
HAVING COUNT(sc.sno) >= 2;
Esta instrucción SQL primero une las tablas S
y SC
para obtener la información de los estudiantes y sus calificaciones de cursos. Luego filtra los registros donde la calificación es menor que 60, agrupa los resultados por número de estudiante y nombre, y finalmente selecciona solo los estudiantes que han reprobado en dos o más cursos utilizando la cláusula HAVING
.
-
Encuentre el comentario -- List the names of all students who have taken both course "11" and course "12".
SELECT s.sname
FROM S s
JOIN SC sc ON s.sno = sc.sno
WHERE sc.cno IN (11, 12)
GROUP BY s.sno
HAVING COUNT(DISTINCT sc.cno) = 2
ORDER BY s.sno;
Esta instrucción SQL primero une las tablas S
y SC
para obtener la información de los estudiantes y sus identificadores de cursos. Luego filtra los registros donde el identificador de curso es 11 o 12, agrupa los resultados por número de estudiante, y selecciona solo los estudiantes que han tomado ambos cursos utilizando la cláusula HAVING
. Finalmente, ordena los resultados por número de estudiante.
-
Encuentre el comentario -- List the student numbers of all students whose grades in course "11" are higher than those in course "12", and sort them in ascending order.
SELECT sc11.sno
FROM SC sc11
JOIN SC sc12 ON sc11.sno = sc12.sno AND sc12.cno = 12
WHERE sc11.cno = 11 AND sc11.grade > sc12.grade
ORDER BY sc11.sno;
Esta instrucción SQL primero une la tabla SC
consigo misma para obtener la información de calificación para el curso 11 y el curso 12. Luego filtra los registros donde el identificador de curso es 11 y la calificación es mayor que la calificación del curso 12, y selecciona el número de estudiante. Finalmente, ordena los resultados por número de estudiante.
-
Encuentre el comentario -- List the names of all students who are older than "John Davis".
SELECT s.sname
FROM S s, (SELECT sage FROM S WHERE sname = 'John Davis') AS zs
WHERE s.sage > zs.sage;
Esta instrucción SQL primero selecciona el valor de sage
para el estudiante con el nombre "John Davis" y lo almacena en una subconsulta zs
. Luego selecciona el sname
de la tabla S
donde la edad del estudiante (sage
) es mayor que la edad de "John Davis".
-
Encuentre el comentario -- List the student number of the student with the highest grade among all students who have taken course "12".
SELECT sc.sno
FROM SC sc
WHERE sc.cno = 12 AND sc.grade = (
SELECT MAX(grade)
FROM SC
WHERE cno = 12
);
Esta instrucción SQL primero selecciona el sno
de la tabla SC
donde el identificador de curso es 12 y la calificación es igual a la calificación máxima entre todos los estudiantes que han tomado el curso 12. Esto nos dará el número de estudiante del estudiante con la calificación más alta en el curso 12.
-
Encuentre el comentario -- List the names of all students, along with their selected course IDs and grades.
SELECT s.sname, sc.cno, sc.grade
FROM S s
LEFT JOIN SC sc ON s.sno = sc.sno;
Esta instrucción SQL realiza un left join entre las tablas S
y SC
, lo que incluirá a todos los estudiantes de la tabla S
, incluso si no tienen registros en la tabla SC
. Esto garantizará que todos los nombres de estudiantes estén incluidos en el resultado, junto con sus identificadores de cursos y calificaciones (si los tienen).
-
Encuentre el comentario -- List the student numbers and total grades (alias as: SG) of students who have taken four or more courses, sorted in descending order of total grades.
SELECT sc.sno, SUM(sc.grade) AS SG
FROM SC sc
GROUP BY sc.sno
HAVING COUNT(sc.cno) >= 4
ORDER BY SG DESC;
Esta instrucción SQL primero agrupa la tabla SC
por número de estudiante (sno
) y calcula la suma de las calificaciones para cada estudiante (alias como SG
). Luego filtra los resultados para incluir solo a los estudiantes que han tomado cuatro o más cursos utilizando la cláusula HAVING
. Finalmente, ordena los resultados por las calificaciones totales en orden descendente.