Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 5. При объединении строк из различных таблиц можно отображать и выполнять операции над данными с помощью тех же операторов

Тема: Связь таблиц

 

При объединении строк из различных таблиц можно отображать и выполнять операции над данными с помощью тех же операторов, которые используются для одиночных таблиц. Однозначное соответствие или естественная связь осуществляется путем установки соответствия между одинаковыми значениями, находящимися в одинаковых столбцах разных таблиц, т.к. каждая таблица может содержать не более 1024 столбцов, то обойти это ограничение можно путем объединения данных из нескольких таблиц, сформировав одну виртуальную строку. Наиболее распространены объединения по равенству:

Например, запрос ставит в соответствие преподавателю учебные предметы, которые он ведет:

SELECT TEACHERS.TFAM, PREDMET.PNAME

FROM TEACHERS, PREDMET

WHERE TEACHERS.TNUM = PREDMET.TNUM

Указывать название таблицы рядом со столбцом не обязательно, если название столбцов в таблицах не повторяется. Для того, чтобы обозначить все столбцы объединенных таблиц не используйте символ *, т.к. одни и те же столбцы отобразятся дважды.

 

Декартово произведение таблиц

 

Если при объединении строк не установить соответствие с помощью столбцов, то к каждой строке первой таблицы будут по очереди добавлены все строки второй таблицы.

SELECT STUDENTS.* USP.*

FROM STUDENTS, USP

 

Тета-соединение таблиц

 

Для исключения всех столбцов, по которым проводится соответствие, делается композиция таблиц (см. пример №1).

 

Соединение таблиц с дополнительными условиями

 

SELECT TEACHERS.TFAM, PREDMET.PNAME

FROM TEACHERS, PREDMET

WHERE TEACHERS.TNUM = PREDMET.TNUM

AND TEACHERS.TFAM BETWEEN ‘K’ AND ‘C’

 

Допускается также создавать запросы, объединяющие более двух таблиц. Например, необходимо вывести список оценок, выставленный тем или иным преподавателем.

SELECT TEACHERS.TFAM, USP.OCENKA

FROM TEACHERS, PREDMET, USP

WHERE TEACHERS.TNUM = PREDMET.TNUM

AND PREDMET.PNUM = USP.PNUM

Ситуация когда одной строке из первой таблицы соответствует одна строка из второй таблицы бывает не всегда, если в объединяемом столбце первой таблицы содержится несколько одинаковых элементов, а во второй таблице только один, то такая связь называется «многие к одному», если наоборот, то «один ко многим». Наличие связей типа «многие ко многим» нежелательно.

Столбцы, участвующие в объединении не обязательно объявлять первичными и внешними ключами. SQL Server позволяет связывать таблицы не имеющие первичных и внешних ключей.

 

Использование внешних объединений

 

Внешние объединения используют для того, чтобы выбирать из таблиц строки, имеющие несоответствующие значения.

При левом внешнем объединении возвращаются несоответствующие строки из таблицы, указанной слева от оператора сравнения, а при правом внешнем объединении из таблицы, указанной справа.

*= – левое внешнее объединение.

=* – правое.

Во внешних объединениях позволяется использовать не только знак равенства, но и другие знаки отношений.

SELECT STUDENTS.SFAM, STUDENTS.SNUM,

USP.PNUM, USP.SNUM

FROM STUDENTS, USP

WHERE STUDENTS.SNUM *>USP.SNUM

 

Объединение двух копий одиночной таблицы

При объединении таблицы с собой, все повторяющиеся имена столбца заполняются префиксами имени таблицы. Чтобы ссылаться к этим столбцам внутри запроса, необходимо иметь два различных имени для этой таблицы. Это можно сделать с использованием временных имен, называемых псевдонимами, которые определяются в предложении FROM.

Например, для поиска студентов, имеющих одинаковый размер стипендии можно использовать запрос:

SELECT FIRST.SFAM, SECOND.SFAM,

FIRST.STIP

FROM STUDENTS FIRST, STUDENTS SECOND

WHERE FIRST.STIP = SECOND.STIP

 

Например. Если учебный предмет может вести только один преподаватель, то в таблице PREDMET нужно проверять это условие:

 

SELECT FIRST.PNUM, FIRST.TNUM

SECOND.PNUM, SECOND.TNUM

FROM PREDMET FIRST, PREDMET SECOND

WHERE FIRST.PNUM = SECOND.PNUM

AND FIRST.TNUM <> SECOND.TNUM

 

Допускается использовать любое число псевдонимов для одной таблицы в запросе, но это нежелательно.

В SQL предусматривается создание объединения, которое включает и различные таблицы и псевдонимы одиночной таблицы.

Например, для определения учебных предметов, которые уже сданы более чем одним студентом используется запрос:

 

SELECT PREDMET.PNAME, FIRST.SNUM, SECOND.SNUM

FROM USP FIRST.USP SECOND.PREDMET

WHERE FIRST.PNUM = SECOND.PNUM

AND PREDMET.PNUM = FIRST.PNUM

AND FIRST.SNUM < SECOND.SNUM

 

Объединение результатов запроса

с помощью директивы UNION

 

Эта директива позволяет неявно удалять из запросов позволяет неявно удалять из запросов повторяющиеся строки. Запросы, содержащие директиву UNION, нужно определять так, чтобы они были совместными, т.е. у них должно быть одинаковое количество столбцов, а также общий столбец, содержащийся в каждой таблице.

Например для получения списка всех студентов и преподавателей, фамилии которых заключены между буквами ‘K’ и ‘C’ используем запрос:

 

SELECT SFAM, SIMA, SOTCH

FROM STUDENTS

WHERE SFAM BETWEEN ‘K’ AND ‘C’

UNION

SELECT TFAM, TIMA, TOTCC

FROM TEACHERS

WHERE TFAM BETWEEN ‘K’ AND ‘C’

 

Нельзя использовать агрегатные функции в предложении SELECT запроса в объединении. Добавление ключевого слова ALL в директиву UNION позволяет выводить повторяющиеся строки из обеих таблиц. Можно объединить до 16 операторов SELECT, поместив между ними оператор UNION. Для определения порядка директив UNION используют круглые скобки. Если во всех директивах используется ключевое слов ALL, то скобки вообще не нужны.

Иногда возникает необходимость вставлять константы и выражения в предложение SELECT. Например,

 

SELECT ‘Студент ’, SFAM

FROM STUDENTS

UNION

SELECT ‘Преподаватель’, TFAM

FROM TEACHERS

 

(оператор → директива)

 

Использование ранговых переменных

 

Ранговые переменные – это символические имена таблиц, которые указаны в директиве FROM оператора SELECT. Ранговые переменные можно использовать как в предыдущей директиве (например SELECT), так и в последующей директиве (например WHERE). Ранговые переменные используют для того, чтобы сократить размер строк в операторе SELECT

 

SELECT A.SFAM, B.PNUM, B.OCENKA

FROM STUDENTS A, USP B

WHERE A.SNUM = B.SNUM

 

/* запрос выводит фамилию студента, оценка и код предмета */

 

Создание синонимов таблиц

 

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

Например, пользователь с идентификатором CHER может создать синоним для таблицы STUDENTS, принадлежащей пользователю SA:

 

CREATE SYNONYM FIRST FOR SA.STUDENTS

 

После этого пользователь может работать с таблицей FIRST также как со своими собственниками.

Для того, чтобы создать единое имя для всех пользователей, создается общий синоним.

 

CREATE PUBLIC SYNONYM STUDENTS FOR STUDENTS

 

В основном, общие синонимы создаются администратором БД.

Общие и другие синонимы могут удаляться командой DROP SYNONYM. Обычные синонимы удаляются владельцами, а общие администратором.

DROP SYNONYM FIRST

 

Исходная таблица остается без изменений.

 

 

1) Вывести из таблиц студенты и успеваемость

ФИО студента, его код, оценку и код предмета, используя ранговые переменные.

2) Вывести из таблиц предмет и учителя

ФИО преподавателя и предмет, который он ведет.

3) Вывести из таблиц предмет, студенты и успеваемость

ФИО студента, оценку и название предмета.

 

 

<== предыдущая лекция | следующая лекция ==>
Социально-философские идеи в философии эпохи Возрождения | Типология политических режимов
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 335; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.03 сек.