Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

JOIN в MySQL, специфика применения

#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.

Комментариев нет:

Отправить комментарий