|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
Уже много лет работаю с SQL Server, но недавно столкнулся с синтаксисом, который до этого не встречал - в банальном JOIN. Код: sql 1. 2. 3.
Пример: Код: sql 1. 2. 3. 4. 5. 6.
Вопрос: какие плюсы (или минусы) такого синтаксиса, когда был введен и вообще откуда это??? Есть-ли какая нибудь информация или название этой конструкции? Также буду рад ссылкам. Поиск ничего не дает, т.к. этот оператор очень распространен. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 15:18 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
BOL <joined_table> ::= { <table_source> <join_type> <table_source> ON <search_condition> | <table_source> CROSS JOIN <table_source> | left_table_source { CROSS | OUTER } APPLY right_table_source | [ ( ] <joined_table> [ ) ] Т.е. приведенный вами пример есть всего лишь дополненный сервером документированный синтаксис такой синтакис существует в документаиции как минимум с версии sql2000 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 15:28 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
Да, но по какой-то причине его никто не использует Это можно увидеть даже на страницах нашего форума. Просто я пытаюсь решить для себя, стоит-ли применять такую конструкцию ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 15:33 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
VRafaelДа, но по какой-то причине его никто не использует Вы провели исследования ? VRafaelЭто можно увидеть даже на страницах нашего форума. Что "это" ? Мировую статистику использования той или иной возможности синтаксиса ? VRafaelПросто я пытаюсь решить для себя, стоит-ли применять такую конструкцию Это обыкновенный join. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 15:36 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
VRafaelПросто я пытаюсь решить для себя, стоит-ли применять такую конструкциюХе,хе, иногда без неё никуда: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 15:50 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
GloryВы провели исследования ? Я не первый день на форуме! И с транзактом работаю довольно плотно, такой синтаксис я-бы не пропустил! GloryЭто обыкновенный join Вот это мне и показалось странным! Почему такую "обыкновенную" конструкцию не использует большинство разработчиков? По моему это удобно в некоторых случаях.. MniorХе,хе, иногда без неё никуда: Я именно про этот случай. Сейчас и не знаю, как раньше работал без этого ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 15:53 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
VRafaelЯ не первый день на форуме! И с транзактом работаю довольно плотно, такой синтаксис я-бы не пропустил! И поэтому вы можете заявлять "его никто не использует" без всяких исследований и цифр ? VRafaelВот это мне и показалось странным! Почему такую "обыкновенную" конструкцию не использует большинство разработчиков? Скольких разработчиков, кроме себя, вы опросили ? Сколько из них знало о такой форме записи ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 15:58 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
MniorХе,хе, иногда без неё никуда: Код: sql 1. 2. 3. 4.
? Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 16:23 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
GloryИ поэтому вы можете заявлять "его никто не использует" без всяких исследований и цифр ? Для этого я и задал вопрос - чтобы провести "исследование", тем более здесь находится целевая аудитория. А по поводу "никто не использует" - это мое личное мнение, основанное на, опять-же, личных наблюдениях. Уверен, что я имею право высказывать свое мнение, в надежде что кто-то более осведомленный (вроде Вас, уважаемый Glory) меня поправит или подскажет где искать правду ))) GloryСкольких разработчиков, кроме себя, вы опросили ? Сколько из них знало о такой форме записи ? Я работаю разработчиком в крупной компании и на постоянной основе провожу ревью кода многих других, довольно сильных разработчиков T-SQL. На ряду с этим я анализирую много кода на транзакте, накопленного нашей компанией до текущего момента. Никто из них не использует такую конструкцию (во всяком случае на постоянной основе), а один из коллег утверждает что ее лучше не использовать (типа старый синтаксис, никто не юзает эту фичу и т.д.). Это и сподвигло меня задать вопрос здесь, думаю не только мне это будет интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 16:35 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
VRafaelДля этого я и задал вопрос - чтобы провести "исследование", тем более здесь находится целевая аудитория. А по поводу "никто не использует" - это мое личное мнение, основанное на, опять-же, личных наблюдениях. Уверен, что я имею право высказывать свое мнение, в надежде что кто-то более осведомленный (вроде Вас, уважаемый Glory) меня поправит или подскажет где искать правду ))) Высказывание личного мнение правильно сопровождать соответствующим словосочентанием Например, "по моему личному мнениию, такую форму записи join никто не использует" VRafaelЯ работаю разработчиком в крупной компании и на постоянной основе провожу ревью кода многих других, довольно сильных разработчиков T-SQL. На ряду с этим я анализирую много кода на транзакте, накопленного нашей компанией до текущего момента. Никто из них не использует такую конструкцию (во всяком случае на постоянной основе), а один из коллег утверждает что ее лучше не использовать (типа старый синтаксис, никто не юзает эту фичу и т.д.). Это и сподвигло меня задать вопрос здесь, думаю не только мне это будет интересно. А вы сверяете ваши исследования с документированным синтаксисом ? Ведь для того, чтобы написать какую то языковую конструкцию, нужно о ней по крайней мере знать Вот вас не смущает такое ? Код: sql 1. 2. 3. 4. 5. 6.
Здесь тоже два ON идут подряд ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 16:42 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
GloryА вы сверяете ваши исследования с документированным синтаксисом ? Ведь для того, чтобы написать какую то языковую конструкцию, нужно о ней по крайней мере знать Вот вас не смущает такое ? Код: sql 1. 2. 3. 4. 5. 6.
Здесь тоже два ON идут подряд Такая конструкция известна всембольшинству и мной активно используется. Другое дело - конструкция указанная в топике, я тоже думаю что о ней мало кто знает из разработчиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:06 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
VRafaelТакая конструкция известна всембольшинству и мной активно используется. Другое дело - конструкция указанная в топике, я тоже думаю что о ней мало кто знает из разработчиков. И не говорите - совешенно другая конструкция. Ничего похожего Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:13 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
VRafael, Это не разный синтаксис, это один и тот же документированный синтаксис. Возможно на примере вам станет понятнее: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:20 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
VRafaelДругое дело - конструкция указанная в топике, я тоже думаю что о ней мало кто знает из разработчиков. можно присмотреться и увидеть, что привычный последовательный список джойнов - это не список, а всего лишь частный случай вложенности ведь оператор JOIN может соединять только два источника - правый и левый однако, каждым источником может быть не только таблица/вьюха, но и, в свою очередь, результат вложенного JOIN-а если вкладывать только левый, то получим привычный частный случай: Код: sql 1.
а если вкладывать и правый, то увидим общий случай: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:33 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
Значит это просто синтаксическое сокращение.. Спасибо Glory, invm, Shakill Теперь все ясно ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:38 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
GloryЭто не разный синтаксис, это один и тот же документированный синтаксис пример дает разные результаты на других данных Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:48 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
VRafaelДругое дело - конструкция указанная в топике, я тоже думаю что о ней мало кто знает из разработчиков.Хммм.. А действительно... Спасибо)) Из своего опыта могу сказать следующее: сталкивался с ситуациями, когда в зависимости от кода типа данные надо выбирать либо из одной связки двух таблиц, либо из другой. Всегда соединял по LEFT JOIN все 4 таблицы. Судя по конструкции из топика, правильнее было бы нечто вроде следующего: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
вместо использованного Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
так как более четко указывает жесткую зависимость между парами связанных таблиц 2Glory - IMHO:) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 17:54 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
Shakill? Код: sql 1. 2. 3.
У нас за использование RIGHT не под делу сажают на кол. И вообще есть практика описание запросов и ради такой ерунды выворачивать на изнанку? Нет Уж. Лучше уж скобки чем так. Тем более forece order как себя поведёт? Код: sql 1. 2. 3. 4. 5. 6.
За такую тоже сажают. Мол нефиг на ровном месте делать много текста. И вообще лучше без под запросов. Если надо временную вью, та лучше WITH, чем такое. PS: Подпись тут и далее: IMXO А то придёт кто-то типа alexeyvg и скажет что у меня какой-то там подход, на который я якобы всех натягиваю насильно, под дулом. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 18:02 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
Cygapb-007правильнее было бы нечто вроде следующего: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
вместо использованного Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Если вы про то что хоть это и разные запросы но оба приемлемы, то я бы писал последнее, ибо если всё зажато FK-ами (или т.п.), то последний не заставляет генератор запросов делать обязательную связку, когда это не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 18:06 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
MniorУ нас за использование RIGHT не под делу сажают на кол. И вообще есть практика описание запросов и ради такой ерунды выворачивать на изнанку? Нет Уж. Лучше уж скобки чем так. это был вариант в ответ на "без неё никуда". с замечаниями не спорю, хоть на кол у нас и не сажают ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 18:12 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
MniorCygapb-007правильнее было бы нечто вроде следующего: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
вместо использованного Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
не готов обсуждать, но первый вариант мне кажется более логичным опять же IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 18:18 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
VRafaelНикто из них не использует такую конструкцию (во всяком случае на постоянной основе)Потому что таких задач очень мало. Большинство запросов - звязда. Но не думаю что вам интересна класиффикация запросов. VRafael, а один из коллег утверждает что ее лучше не использовать (типа старый синтаксис, никто не юзает эту фичу и т.д.)Брехня. Особенно про старый синтаксис. Это основа исчисления предикатов, итак в SQL он обрезанный. Спасибо что хоть APPLY добавили. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 18:19 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
Cygapb-007Mniorпропущено...Если вы про то что хоть это и разные запросы но оба приемлемы, то я бы писал последнее, ибо если всё зажато FK-ами (или т.п.), то последний не заставляет генератор запросов делать обязательную связку, когда это не нужно.а это уже надо, ятд, смотреть в план выполнения ... не готов обсуждать , но первый вариант мне кажется более логичным опять же IMHO Эх, зря вы в детали не смотрите. Оболочка ничто - содержимое всё. Дьявол в деталях. Как же без планов то?! Cygapb-007,а в первом варианте это подчеркивается в структуре запросаНе надо ничего в запросах подчёркивать. Подчёркивать структуру базы должна, сюрприз, структура базы. Код должен быть верным, а во вторых удобным для повторного использования. Т.к. в большей части код сущности или понятия обворачивается во вью (и для декларативности и для множественного использования), то там должно поддерживаться механизм "минимизации" (не знаю как точно обозвать). PS: На тон не обращайте, это не кому лично это к точности/отношению высказанного. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 18:28 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
Mniorпропущено... Код должен быть верным, а во вторых удобным для повторного использования.Совершенно согласен, и повторюсь - понять структуру первого запроса легче, чем структуру второго, и для этого, сюрприз:)), не требуется разбирать структуру базы. А вопросы оптимизации времени выполнения могут возникнуть только при реально долгом времени выполнения запроса) И еще раз повторюсь, в проекте был использован второй вариант, потому что не знал (не подумал?) об альтернативных вариантах:) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 18:39 |
|
Вопрос по оператору JOIN
|
|||
---|---|---|---|
#18+
Что ж вы тут баяните-то, а? Глюк или фича при join'е ? Re: left join - не могу понять, почему запрос не возвращает записи Интересный синтаксис. JOIN и порядок ON Поиск: http://www.sql.ru/forum/actualsearch.aspx?search=?????? JOIN&sin=0&bid=1&a=iap&ma=2&dt=-1&s=1&so=1 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2013, 18:48 |
|
|
start [/forum/topic.php?fid=46&tid=1706971]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
161ms |
get topic data: |
10ms |
get forum data: |
1ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 270ms |
0 / 0 |