Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Перекрестное объединение

Перекрестное объединение

Перекрестное объединение (или Декартово произведение’) двух таблиц можно определить как еще одну таблицу, содержащую все возможные пары строк таблиц-источников. Пример, приведенный в разделе, посвященном объединениям неравенства, является аналогом перекрестного объединения таблиц CUSTOMER и PHONE и возвращает результаты, аналогичные показанным на рис. 9.2, за исключением того, что соответствующие клиентам номера телефонов будут также получены. Следующий запрос возвращает все возможные комбинации наименований клиентов и их номеров телефонов с помощью формирования перекрестного объединения таблиц CUSTOMER и PHONE. Старый синтаксис перекрестного объединения позволяет опустить в инструкции SELECT предложение Перекрестное объединение может оказаться достаточно дорогостоящей операцией, особенно когда является результатом ошибки программиста и включает в себя множество больших таблиц с сотнями тысяч и даже миллионами строк. Так как результатом декартова произведения являются все возможные комбинации строк первой и второй таблицы, если в одной из них содержится 100 тыс. строк, а во второй — 200 тыс., запрос вернет 20 млрд. строк. Этого вполне достаточно, чтобы перегрузить даже очень мощный сервер баз данных и замедлить работу клиентов. Таким образом, к декартову произведению следует подходить с осторожностью, тем более что его в инструкциях SQL используют нечасто. Перекрестные объединения удобно использовать для наполнения таблиц тестовыми данными или в учебных целях (к примеру, для демонстрации того факта, что объединения равенства и неравенства являются частным случаем перекрестных объединений), однако на практике бессмысленные комбинации фактов (к примеру, номеров телефонов одних компаний и названий других) вряд ли пригодятся. Как правило, на практике декартовы произведения являются результатом ошибки программиста и должны исправляться администратором базы данных (к примеру, с помощью отключения сеанса работы пользователя, как было описано в главе 7).