КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Простое соединение таблиц по равенству.При соединении двух таблиц каждая строка таблицы результатов формируется из пары строк, одна из которых находится в первой соединяемой таблице, другая – во второй. Для нахождения каждой пары строк производится сравнение содержимого соответствующих столбцов в исходных таблицах. Процесс формирования пар строк путем сравнения содержимого соответствующих столбцов и называется соединением таблиц. Соединение на основе точного равенства между двумя столбцами более правильно называется соединением по равенству. Также соединения могут быть основаны на других видах сравнения столбцов. В реляционной базе данных вся информация хранится в виде явных значений данных в столбцах, так что всевозможные отношения между таблицами можно сформировать только путем сопоставления содержимого соответствующих столбцов. Таким образом, соединения являются мощным и, к тому же, единственным средством выявления отношений, существующих между данными. Приведем в качестве примера запрос, выводящий имена всех студентов, обучающихся на коммерческой основе:
SELECT I.name FROM students AS S, stud_info AS I WHERE (S.id = I.id) AND (commerce = TRUE);
Приведенный запрос очень похож на запросы, рассмотренные в предыдущих разделах. Но между ними есть два отличия: в блоке FROM содержатся две таблицы и в условии отбора сравниваются столбцы из двух различных таблиц. Эти столбцы называются связанными. Среди многотабличных запросов наиболее распространены запросы к двум таблицам, связанным с помощью отношения предок/потомок. Запрос о коммерческих студентах как раз и является примером такого запроса. Каждой записи из главной таблицы “students” (предок) есть соответствующая запись в подчиненной таблице “stud_info” (потомок). Чтобы использовать в запросе отношение предок/потомок, необходимо задать условие отбора, в котором первичный ключ сравнивается с внешним ключом. В SQL не требуется, чтобы связанные столбцы были включены в результаты многотабличного запроса. На практике они чаще всего и не включаются, как это было в предыдущем запросе. Это связано с тем, что первичные и внешние ключи обычно представляют из себя идентификаторы, неудобные для восприятия и сложные для запоминания, тогда как соответствующие названия запомнить гораздо легче. В многотабличном запросе можно комбинировать условие отбора, в котором задаются связанные столбцы, с другими условиями отбора, чтобы сузить результаты запроса, как это было сделано в предыдущем примере для выбора только коммерческих студентов. Запросы на выборку к трем и более таблицам. SQL позволяет объединять данные из трех или более таблиц, используя ту же самую методику, что и для соединения данных из двух таблиц. Приведем простой пример для иллюстрации этой возможности языка SQL. Предположим мы хотим получить номера телефонов всех девушек со специальности “АС” (для обозначения пола используется поле булева типа, в котором значение TRUE означает мужской пол, а FALSE – женский):
SELECT name, phone FROM students AS S, stud_info AS I, groups AS G WHERE (S.id = I.id) AND (id_group = G.id) AND (sex = FALSE) AND (spec = ‘AC’);
Огромное количество многотабличных запросов основаны на отношениях предок/потомок, но стандарт SQL не требует, чтобы связанные столбцы представляли собой пары “первичный ключ – внешний ключ”. Любые два столбца из двух таблиц могут быть связанными, если только они имеют сравнимые типы данных.
|