#mysql #inner_join
Здравствуйте.
Столкнулся с вопросом, на который не совсем понимаю ответ.
В общем, когда какой JOIN следует применять. Говорю сразу, теорию читал но запутался.
Конкретно интересует формирование запроса, когда применять where, а когда on. Ведь
в принципе все почти одно и тоже, а ответы на запросы получаются разные.
Объясните пожалуйста.
Ответы
Ответ 1
На картинке достаточно все просто показано, что такое join и как с ними работатьОтвет 2
Кажется, автора запутала возможность делать так называемые «Old style JOIN». Зачастую, достаточно прояснить этот вопрос, чтобы всё стало понятнее. Для SQL существует несколько стандартов, согласно которым реализуют его интерпретацию в базах данных. Есть устаревший стандарт SQL-89, а есть новый чуть менее устаревший SQL-92. Когда мы делаем выборку так: SELECT * FROM t1, t2 WHERE t1.id = t2.id – то используем так называемый «Old style JOIN» («Джоин старого типа») по стандарту SQL-89. По стандарту SQL-92 этот же запрос следует делать так: SELECT * FROM t1 JOIN t2 ON t1.id = t2.id Чем лучше второй вид? Джоины по стандарту SQL-92 позволяют более очевидно отделить условия объединения таблиц от всего остального. Предположим, что помимо объединения нам нужно выбирать только те столбцы, в которых t1.type = 1. В этом случае условие WHERE в устаревшем типе запросов превращается в «кашу»: SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.type = 1 А вот по стандарту SQL-92 всё остаётся чётко-разделенным «по своим местам»: SELECT * FROM t1 JOIN t2 ON t1.id = t2.id WHERE t1.type = 1 – здесь после ключевого слова ON по-прежнему идут условия объединения таблиц, а после ключевого слова WHERE идут условия фильтрации выборки. Конечно, устаревший вид джоинов проще читается, чем конструкция JOIN..ON, но, как только запрос начинает разрастаться и усложняться, ситуация сразу меняется в пользу чёткого разграничения ключевых слов WHERE и ON.
Комментариев нет:
Отправить комментарий