2014-09-01 3 views
0
select r.index, sum(c.points) 
from records r join exams e2 on r.index = e2.index 
    join courses c on c.id_course = e2.id_course 
where not exists (select * 
        from required_courses rs 
        where rs.id_studie = r.id_studie 
         and not exists (select * 
             from exams e 
             where e.id_course = rs.id_course 
              and r.index = e.index 
              and score>5)) 
    and score>5 
group by index; 

У меня есть этот запрос. Я знаю, что он делает, но не знаю, как это сделать.выбрать ... не существует не существует запрос

У меня есть релятивно большая база данных с 16 таблицами, но используйте только 4 в этом запросе.

Используемые таблицы:

  1. RECORDS (студентов) [(. Основные пр) индекс, имя, фамилия, ... (. Ключ для), id_studie (1)]
  2. ЭКЗАМЕНЫ [индекс (студентов) (рк), id_course (рк), ..., оценка (2), application_status]
  3. КУРСЫ [id_course (рк), ..., указывает]
  4. REQUIRED_COURSES [id_studie (Ф.К.), id_course (fk), ...]

(1) Я не знаю лучше wo rd на английском языке. Когда на каком-то факультете есть классы информатики, математики, физики и т. Д. Информатика - одна студия. (2) Очки идут от 5 до 10. 10 лучше. Для прохождения требуется не менее 6.

- Найти всех студентов, сдавших все необходимые экзамены на студиях. Печать индексов и количества точек.

Мой вопрос: может ли это объяснить, как это работает простыми словами?

Я не понимаю, не существует & не существует часть.

Извините за мой плохой английский.

+0

Я думаю, что эта статья Джо Селко может помочь вам: [Разделение мы стоим: SQL реляционного отдела] (https://www.simple-talk.com/sql/t-sql-programming/divided-we- stand-the-sql-of-relational-division /) – jpw

+1

Это ** действительно ** полезно. Большое спасибо. Я не знал, что это называется разделением. – Nemanja

ответ

2

Всегда анализируйте запрос изнутри.

Сокровенное запрос: Выберите экзамены с рейтингом выше 5

средний:

Выберите необходимые курсы, которые не имеют экзамен с рейтингом выше 5

Outer один:

Выберите учеников, у которых нет курса, который не имеет экзамена со счетом выше 5

+0

Я не могу дать вам +1, потому что у меня недостаточно репутации, но это то, о чем я просил, - простое объяснение. Я не уверен, знаю ли я, как писать, но, по крайней мере, теперь я получаю его. – Nemanja

1

Пример представляет собой двойной вложенный запрос NOT EXISTS.

Если подзапрос возвращает все строки на всех, EXISTS подзапрос TRUE и NOT EXISTS подзапрос FALSE.

То есть у него есть статья NOT EXISTS в предложении NOT EXISTS.

Это проще сказать, что вложенный NOT EXISTS отвечает на вопрос «есть х ИСТИНА для всех у?»

--Part 3 
SELECT r.index, 
     SUM(c.points) 
FROM records r 
     join exams e2 
     ON r.index = e2.index 
     join courses c 
     ON c.id_course = e2.id_course 
WHERE NOT EXISTS (
--Part 2 starts 
        SELECT * 
        FROM required_courses rs 
        WHERE rs.id_studie = r.id_studie 
          AND NOT EXISTS (
--Part 1 starts           
              SELECT * 
              FROM exams e 
              WHERE e.id_course = rs.id_course 
               AND r.index = e.index 
               AND score > 5 
--Part 1 ends 
                  ) 
--Part 2 ends           
                   ) 
     AND score > 5 
GROUP BY index; 
--Part 3 ends           

Часть 1: Fetch все записи студентов из ЭКЗАМЕНЫ таблицы, которые набрали более 5 ,Вы должны получить все студенты Проходной балл для всех курсов здесь

Часть 2: Регистрация результатов part1 с REQUIRED_COURSES по студенческому билету и получать все необходимые курсы, где студент не очистил экзамены (где студент не имеет счет более 5). Вы должны иметь все обучаемое название курсов, где они не являются успешными

Часть 3: Регистрации Части 2 Результатов с RECORDS таблицей по индексу, а также COURSES таблицы по курсу идентификатора для извлечения индекса и сумм баллов. Вы можете увидеть эту часть на две части. Сначала это нормальный JOIN с двумя таблицами, а затем NOT EXISTS с частью 2. Когда вы нанесете NOT EXISTS на часть 2, вы получите все успешные идентификаторы учеников, которые предоставят вам успешные записи, добавив еще одно условие SCORE > 5 в конце ,

Смежные вопросы