Delphi | Сети | ПК | Маршрутизаторы | Моделирование | Протоколы | Экспертные системы | Удаленный доступ | Доменные имена
Аплеты | SQL | Надежность | Задачи | Информационные процессы | JAVA | Отказы изделия | Расчет надежности показателей | Инфсис

Основные понятия и способы применения SQL - в примерах и задачах

SQL язык запросов к реляционным базам данных Учебник

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

Информация в таблицах STUDENT и EXAM_MARKS уже свя­зана посредством поля STUDENT_ID. В таблице STUDENT по­ле STUDENT_ID является первичным ключом, а в таблице 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_MARKS

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.SUB J_ID = EXAM_MARKS.SUBJ_ID AND EXAM MARKS.MARK = 2;

Математический анализ, лекции по физике Компьютерные сети