Skip to content

Instantly share code, notes, and snippets.

@eduardogpg
Last active April 4, 2025 00:36

Revisions

  1. eduardogpg revised this gist Apr 4, 2025. 1 changed file with 193 additions and 0 deletions.
    193 changes: 193 additions & 0 deletions sub-queries.sql
    Original file line number Diff line number Diff line change
    @@ -68,3 +68,196 @@ INSERT INTO enrollments (id, student_id, course_id, grade) VALUES
    - 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;
  2. eduardogpg revised this gist Apr 1, 2025. 1 changed file with 18 additions and 0 deletions.
    18 changes: 18 additions & 0 deletions sub-queries.sql
    Original file line number Diff line number Diff line change
    @@ -50,3 +50,21 @@ INSERT INTO enrollments (id, student_id, course_id, grade) VALUES
    (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.
  3. eduardogpg created this gist Apr 1, 2025.
    52 changes: 52 additions & 0 deletions sub-queries.sql
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,52 @@
    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);