Вы получили представление об одной из важнейших возможностей SQL - связывании таблиц. Представьте, какие были бы ограничения, если бы в запросе нельзя было извлечь данные из нескольких таблиц сразу. Мы с вами рассмотрели несколько типов связывания таблиц, каждый из которых выполняет свои задачи в зависимости от условий запроса. Данные можно связывать по равенству или по неравенству. Внешнее связывание позволяет извлекать данные из связанных таблиц даже тогда, когда не все записи одной таблицы имеют соответствующие записи в другой. Рекурсивное связывание позволяет связать таблицу саму с собой. Берегитесь кросс-связывания, известного так же, как декартово произведение таблиц. В результате декартова произведения, возникающего при использовании в запросе нескольких таблиц без их связывания, объем выводимых данных может оказаться огромным. При выборе данных из нескольких таблиц внимательно проверьте условия связывания таблиц по родственным столбцам (обычно это должны быть ключевые поля). Неправильное связывание таблиц обычно оборачивается неправильно выведенными или неверными данными.
При связывании таблиц должны ли они связываться в том же порядке, в каком они указаны в выражении ключевого слова FROM?
Нет, но не следует забывать, что от порядка перечисления таблиц в выражении ключевого слова FROM и от порядка, в котором связаны таблицы, может зависеть скорость выполнения запроса.
При использовании связующей таблицы для связывания пары таблиц, не имеющих общих столбцов, обязательно ли выбирать в запросе хотя бы один из ее столбцов?
Нет, использование в операторе запроса связующей таблицы не обязывает отображать данные ее столбцов.
Можно ли связывать в запросе не один, а несколько столбцов таблиц?
Да, чтобы обеспечить необходимое соответствие данных, вполне вероятно, что в запросе может понадобиться связывание нескольких столбцов таблиц.
Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".
1. Какой тип связывания таблиц используется в запросе тогда, когда необходимо извлечь записи одной таблицы независимо от наличия или отсутствия соответствующих записей в другой?
2. Какая часть оператора SQL задает условия связывания таблиц?
3. Какой тип связывания используется тогда, когда необходимо задать эквивалентность строк связываемых таблиц?
4. Что будет, если в запросе указать выборку из двух таблиц, но не связать их?
5. Рассмотрите следующие таблицы.
ORD_NUM VARCHAR2(10) NOT NULL Ключевое поле
CUST_ID VARCHAR2(10) NOT NULL
PROD_ID VARCHAR2(10) NOT NULL
QTY NUMBER(6) NOT NULL
ORD_DATE DATE
PROD_ID VARCHAR2CLO) NOT NULL Ключевое поле
PROD_DESC VARCHAR2(40) NOT NULL
COST NUMBER (6,2) NOT NULL
Правильно ли составлен следующий оператор, если предполагалось внешнее связывание этих таблиц?
SELECT C.CUST_ID, C.CUST_NAME, О.ORD_NUM
FROM CUSTOMERJTBL С, ORDERS_TBL 0
WHERE C.CUST_ID{+) = O.CUST_ID(+)
Выполните упражнения для следующих таблиц.
EMP ID VARCHAR2(9) NOT NULL Ключевое поле LAST NAME VARCHAR2(i5) NOT NULL FIRST NAME VARCHAR2(15) NOT NULL MIDDLE NAME VARCHAR2 ( 15 } ADDRESS VARCHAR2(30) NOT NULL CITY VARCHAR2(15) NOT NULL STATE CHAR (2) NOT NULL ZIP NUMBER (5) NOT NULL PHONE CHAR (10) PAGER CHAR (10) |
EMP ID VARCHAR2O) NOT NULL Ключевое поле POSITION VARCHAR2U5) NOT NULL DATE HIRE DATE PAY RATE NUMBER (4,2) NOT NULL DATE LAST-RAISE DATE SALARY NUMBER (6,2) BONUS NUMBER (4,2) |
CONSTRAINT EMP FK FOREIGN KEY (EMP ID) REFERENCED EMPLOYEE TBL (EMP ID) |