| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > JOIN vs INNER JOIN, связные таблицы |
| Автор: manu 25.10.2004, 18:23 |
| 1) Какая разница между JOIN и INNER JOIN? Который работает быстрее? 2) У меня в базе есть много таблиц такого вида X_HEADER ID int DATE int X_TABLE ID int HEADER_ID int PRODUCT_ID int PRICE int Очень часто (постоянно!) приходится делать запросы вида: SELECT SUM(X_TABLE.PRICE) AS X_SUM FROM X_HEADER JOIN X_TABLE ON X_HEADER.ID=X_TABLE.HEADER_ID WHERE X_TABLE.PRODUCT_ID=1 AND DATE<'2004.10.1' иногда такие: SELECT SUM(X_TABLE.PRICE) AS X_SUM FROM X_HEADER JOIN X_TABLE ON X_HEADER.ID=X_TABLE.HEADER_ID GROUP BY X_TABLE.PRODUCT_ID WHERE DATE<'2004.10.1' Вопрос: как можно их _максимально_ убыстрить? P.S. База данных MS SQL Server 2k |
| Автор: Akina 25.10.2004, 18:32 |
| Отличаются направлением. Т.е. если в одной таблице нет записей, соответствующих внешнему ключу, они ведут себя по-разному... Операция INNER JOIN (или просто JOIN) объединяет записи из двух таблиц, если связующие поля этих таблиц содержат одинаковые значения. Используйте операцию LEFT JOIN, чтобы создать левое внешнее объединение. С помощью левого внешнего объединения выбираются все записи первой (левой) таблицы, даже если они не соответствуют записям во второй (правой) таблице. Используйте операцию RIGHT JOIN, чтобы создать правое внешнее объединение. С помощью правого внешнего объединения выбираются все записи второй (правой) таблицы, даже если они не соответствуют записям в первой (левой) таблице. Крайний случай - OUTER JOIN. Объединяет записи таблиц, даже если в другой таблице (неважно какой, левой или правой) нет соответствующих записей. Добавлено @ 18:32 По скорости они не различаются (разве за счет объема передаваемых данных), а вот результаты будут давать РАЗНЫЕ!!! |
| Автор: Guest 26.10.2004, 16:08 | ||
|