WHERE C.CUST_ID = O.CUST_ID AND P.PROD_ID = O.PROD_ID;
CUST_NAME PROD_DESC
LESLIE GLEASON КОСТЮМ ВЕДЬМЫ
SCHYLERS NOVELTIES ПЛАСТИКОВЫЕ ТЫКВЫ
WENDY WOLF ПЛАСТИКОВЫЕ ТЫКВЫ
GAVINS PLACE ФОНАРИ
SCOTTYS MARKET ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ
ANDYS CANDIES ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ
6 строк выбраны.
Обратите внимание на назначение таблицам псевдонимов и их использование в выражении ключевого слова WHERE.
Синтаксис соответствующей части оператора следующий.
FROM таблица1, таблица2 [,таблицаЗ ]
WHERE таблица1, таблица2 [,таблицаЗ ]
Вот пример кросс-связывания или ужасного декартова произведения таблиц.
SELECT E.EMP_ID, E.LAST_NAME, P.POSITION
FROM EMPLOYEE_TBL E,
EMPLOYEE_PAY_TBL P;
EMP ID | LAST NAM | POSITION | ||
311549902 442346889 213764555 313782439 220984332 443679012 311549902 442346889 213764555 313782439 220984332 443679012 311549902 442346889 213764555 313782439 220984332 443679012 311549902 442346889 213764555 313782439 220984332 443679012 311549902 442346889 213764555 313782439 220984332 443679012 311549902 442346889 213764555 | STEPHENS PLEW GLASS GLASS WALLACE SPURGEON STEPHENS PLEW GLASS GLASS WALLACE SPURGEON STEPHENS PLEW GLASS GLASS WALLACE SPURGEON STEPHENS PLEW GLASS GLASS WALLACE SPURGEON STEPHENS PLEW GLASS GLASS WALLACE SPURGEON STEPHENS PLEW GLASS | MARKETING MARKETING MARKETING MARKETING MARKETING MARKETING TEAM LEADER TEAM LEADER TEAM LEADER TEAM LEADER TEAM LEADER TEAM LEADER SALES MANAGER SALES MANAGER SALES MANAGER SALES MANAGER SALES MANAGER SALES MANAGER SALESMAN SALESMAN SALESMAN SALESMAN SALESMAN SALESMAN SHIPPER SHIPPER SHIPPER SHIPPER SHIPPER SHIPPER SHIPPER SHIPPER SHIPPER | ||
313782439 220984332 443679012 | GLASS WALLACE SPORGEON | SHIPPER SHIPPER SHIPPER |
36 строк выбраны.
Ввиду того, что никакого связывания не было задано, данные были выбраны из двух отдельных таблиц. Не было указано, как связывать записи одной таблицы с записями другой, и поэтому сервер базы данных связал каждую запись одной таблицы со всеми записями другой. В каждой из этих таблиц было по 6 записей, поэтому в результате их получилось 36.
Чтобы разобраться в том, что такое декартово произведение таблиц, рассмотрите следующие примеры.
SQL> SELECT X FROM TABLE1;
X
-
A
В
С
D
4 строки выбраны
SQL> SELECT X FROM TABLE2;
X
-
A
В
С
D
4 строки выбраны.
SQL> SELECT TABLE1.X, TABLE2.X
2* FROM TABLE1, TABLE2;
X X
_ _
A A
В А
С А
D A
А В
в в
с в
D В
А С
в с
с с
D С
A D
В D
С D
D D
16 строк выбраны.
При связывании таблиц в запросе всегда следует быть внимательным. Если какие-то две таблицы в запросе окажутся не связанными и число записей в каждой из них будет около 1000, то их прямое произведение будет содержать уже 1000000 выводимых записей.