2.19.1.   Операции соединения таблиц посредством ссылочной целостности

Информация в таблицах STUDENT и EXAM_MARKS уже свя­зана посредством поля STUDENT_ID. В таблице STUDENT по­ле STUDENTID является первичным ключом, а в таблице EXAM MARKS — ссылающимся на него внешним ключом. Состо­яние связанных таким образом таблиц называется состоянием ссылочной целостности. В данном случае ссылочная целост­ность этих таблиц подразумевает, что каждому значению поля STUDENT ID в таблице EXAM MARKS обязательно соответствует такое же значение поля STUDENT ID в таблице STUDENT. Другими

словами, в таблице EXAM MARKS не может быть записей, имею­щих идентификаторы студентов, которых нет в таблице STUDENT. Стандартное применение операции соединения со­стоит в извлечении данных в терминах этой связи.

Чтобы получить список фамилий студентов с полученными ими оценками и идентификаторами предметов, можно исполь­зовать следующий запрос:

SELECT SURNAME, MARK, SUBJ_ID FROM STUDENT,EXAM_MARKS

WHERE   STUDENT. STUDENT_ID   =    EXAM_MARKS. STUDENT_ID,-

Тот же результат может быть получен при использовании в запросе для задания операции соединения таблиц ключевого слова JOIN. Запрос с оператором JOIN выглядит следующим образом:

SELECT SURNAME, MARK

FROM STUDENT JOIN EXAM_MARKS

ON STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID;

Хотя выше речь шла О соединении двух таблиц, можно сфор­мировать запросы путем соединения более чем двух таблиц.

Пусть требуется найти фамилии всех студентов, получив­ших неудовлетворительную оценку, вместе с названиями пред­метов обучения, по которым получена эта оценка.

SELECT SUBJ_NAME, SURNAME, MARK

FROM STUDENT,SUBJECT,EXAM_MARКS

WHERE STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID AND   SUBJECT.SUBJ_ID   =   EXAM_MARKS.SUBJ_ID AND   EXAM_MARKS. MARK   = 2;

To же самое с использованием оператора JOIN:

SELECT SUBJ_NAME, SURNAME, MARK

FROM STUDENT JOIN SUBJECT JOIN EXAM_MARKS ON   STUDENT.STUDENT_ID   =    EXAM_MARKS.STUDENT_ID AND   SUBJECT.SUBJ_ID   =   EXAM_MARKS.SUBJ_ID AND   EXAM MARKS.MARK   = 2;