Last active
April 4, 2025 00:36
-
-
Save eduardogpg/38bb890d281cc4a2978baa6608b64c8c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE TABLE students ( | |
id INT PRIMARY KEY, | |
name VARCHAR(100), | |
age INT, | |
enrollment_year INT | |
); | |
CREATE TABLE enrollments ( | |
id INT PRIMARY KEY, | |
student_id INT, | |
course_id INT, | |
grade FLOAT, | |
FOREIGN KEY (student_id) REFERENCES students(id), | |
FOREIGN KEY (course_id) REFERENCES courses(id) | |
); | |
CREATE TABLE courses ( | |
id INT PRIMARY KEY, | |
title VARCHAR(100), | |
credits INT | |
); | |
INSERT INTO students (id, name, age, enrollment_year) VALUES | |
(1, 'Alice Johnson', 20, 2021), | |
(2, 'Bob Smith', 22, 2020), | |
(3, 'Clara Lee', 21, 2021), | |
(4, 'Daniel Kim', 23, 2019), | |
(5, 'Eva Brown', 22, 2020), | |
(6, 'John', 20, 2021), | |
(7, 'Claude', 22, 2022), | |
(8, 'Daniel', 21, 2023), | |
(9, 'Rose', 23, 2022), | |
(10, 'Devin', 22, 2024); | |
INSERT INTO courses (id, title, credits) VALUES | |
(101, 'Introduction to Programming', 3), | |
(102, 'Database Systems', 4), | |
(103, 'Data Structures', 3), | |
(104, 'Operating Systems', 4), | |
(105, 'Computer Networks', 3); | |
INSERT INTO enrollments (id, student_id, course_id, grade) VALUES | |
(1, 1, 101, 88.5), | |
(2, 1, 102, 91.0), | |
(3, 2, 101, 76.0), | |
(4, 2, 103, 82.0), | |
(5, 3, 104, 85.5), | |
(6, 3, 105, 90.0), | |
(7, 4, 102, 65.0), | |
(8, 4, 105, 72.0), | |
(9, 5, 101, 95.0), | |
(10, 5, 104, 89.5); | |
- Obtener el nombre de todos los estudiantes con más de un curso. | |
- Obtener los cursos con menos de 3 estudiantes matriculados. | |
- Obtener el nombre de todos los estudiantes cuyo promedio de notas es mayor que el promedio. | |
- Obtener los cursos en los que está matriculada 'Alice Johnson'. | |
- Obtener los estudiantes matriculados en los mismos cursos que 'Bob Smith'. | |
- Obtener los cursos con estudiantes que tienen promedios de notas superiores a 85. | |
- Obtener los estudiantes que obtuvieron el mejor promedio en 'Database Systems'. | |
- Obtener el nombre de todos los estudiantes con un grado mayor a 90. | |
- Obtener el nombre del cursos con menor cantidad de usuarios registrados. | |
- Listas los estudiantes no matriculados en ningún curso. | |
- Listas los estudiantes quienes están matriculados en al menos un curso. | |
- Listar los estudiante quienes no están matriculados a ningún curso. | |
- Listar los estudiantes que están matriculados en el curso 'Database Systems'. | |
- Listas los cursos que tienen al menos un estudiante con una calificación mayor a 90. | |
- Listar los estudiantes que están matriculados en todos los cursos que 'Alice Johnson' está matriculada. | |
- Obtener el nombre de todos los estudiantes con más de un curso. | |
SELECT | |
name | |
FROM students | |
WHERE id IN ( | |
SELECT | |
student_id | |
FROM enrollments | |
GROUP BY student_id | |
HAVING COUNT(*) > 1 | |
); | |
-- Obtener el nombre de todos los estudiantes del curso 'Introduction to Programming' | |
SELECT | |
name | |
FROM students | |
WHERE id IN ( | |
SELECT | |
student_id | |
FROM enrollments | |
WHERE course_id IN ( | |
SELECT id FROM courses WHERE courses.title = 'Python' | |
) | |
); | |
-- ALL - ANY (IN - NOT IN) | |
-- Obtener los cursos con menos de 3 estudiantes matriculados. | |
SELECT title FROM COURSES | |
WHERE id IN( | |
SELECT course_id | |
FROM enrollments | |
GROUP BY course_id | |
HAVING COUNT(*) < 3 | |
); | |
-- Obtener el nombre de todos los estudiantes cuyo promedio de notas es mayor que el promedio. | |
SELECT name FROM students WHERE id IN ( | |
SELECT student_id FROM enrollments WHERE grade > ( | |
SELECT AVG(grade) FROM enrollments | |
) | |
); | |
-- Obtener los cursos en los que está matriculada 'Alice Johnson'. | |
SELECT title FROM courses WHERE id IN ( | |
SELECT course_id | |
FROM enrollments | |
WHERE student_id IN ( | |
SELECT id from students WHERE name = 'Alice Johnson' | |
) | |
); | |
-- Obtener los estudiantes matriculados en los mismos cursos que 'Bob Smith'. | |
SELECT name FROM students | |
WHERE id IN ( | |
SELECT student_id | |
FROM enrollments WHERE course_id IN ( | |
SELECT course_id | |
FROM enrollments | |
WHERE student_id IN ( | |
SELECT id from students WHERE name = 'Bob Smith' | |
) | |
) | |
) AND id <> (SELECT id from students WHERE name = 'Bob Smith') | |
-- Obtener el nombre de todos los estudiantes con un grado mayor a 90. | |
SELECT name FROM students WHERE id IN ( | |
SELECT student_id FROM enrollments WHERE grade > 90 | |
) | |
-- Obtener el nombre del curso con menor cantidad de usuarios registrados. | |
SELECT | |
title | |
FROM courses | |
INNER JOIN ( | |
SELECT | |
course_id, | |
COUNT(*) AS total | |
FROM enrollments | |
GROUP BY course_id | |
ORDER BY total | |
LIMIT 1 | |
) AS last_course ON courses.id = last_course.course_id; | |
SELECT | |
title | |
FROM courses | |
WHERE id IN ( | |
SELECT course_id FROM ( | |
SELECT | |
course_id, | |
COUNT(*) AS total | |
FROM enrollments | |
GROUP BY course_id | |
ORDER BY total | |
LIMIT 1 | |
) as A | |
); | |
-- Listas los estudiantes no matriculados en ningún curso. | |
SELECT | |
name | |
FROM students -- main | |
WHERE EXISTS ( | |
SELECT 1 FROM enrollments -- | |
WHERE enrollments.student_id = students.id | |
); | |
-- Listar los estudiantes quienes están matriculados en al menos un curso. | |
SELECT | |
name | |
FROM students -- main | |
WHERE EXISTS ( | |
SELECT 1 FROM enrollments -- | |
WHERE enrollments.student_id = students.id | |
); | |
-- Listar los estudiantes que están matriculados en el curso 'Database Systems'. | |
SELECT | |
name | |
FROM students -- main | |
WHERE EXISTS ( | |
SELECT 1 | |
FROM enrollments | |
INNER JOIN courses ON enrollments.course_id = courses.id | |
AND courses.title = 'Database Systems' | |
WHERE enrollments.student_id = students.id | |
); | |
-- Listar los cursos que tienen al menos un estudiante con una calificación mayor a 90. | |
SELECT | |
title | |
FROM | |
courses | |
WHERE EXISTS ( | |
SELECT 1 | |
FROM enrollments | |
WHERE | |
courses.id = enrollments.course_id | |
AND grade > 90 | |
); | |
-- Listar los estudiantes que están matriculados en todos los cursos que 'Alice Johnson' está matriculada. | |
SELECT | |
name | |
FROM students | |
WHERE EXISTS ( | |
SELECT 1 | |
FROM | |
( | |
SELECT student_id FROM enrollments WHERE course_id | |
IN ( | |
SELECT | |
course_id | |
FROM enrollments WHERE student_id IN ( | |
SELECT id from students WHERE name = 'Alice Johnson' -- 1 | |
) | |
) | |
) AS b | |
WHERE students.id = b.student_id | |
) AND id NOT IN ( | |
SELECT id from students WHERE name = 'Alice Johnson' -- 1 | |
); | |
--- UNION and UNION ALL | |
SELECT | |
name, 1, 2, 3 as final_column | |
FROM students WHERE id IN ( | |
SELECT student_id FROM enrollments WHERE grade > 90 | |
) | |
UNION ALL | |
SELECT | |
name, 5, 6, 7 as final_field | |
FROM students WHERE id IN ( | |
SELECT student_id FROM enrollments WHERE grade < 70 | |
) | |
UNION ALL | |
SELECT 'CODY', 10, 20, 30 | |
UNION ALL | |
SELECT 'CODY', 10, 20, 30; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment