|
|
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
Ребята всем привет! Последнее время пришлось работать с чужими инструкциями sql, насмотрелся различных вариантов форматирования. Хотел задать пару вопросов по форматированию, для того, что бы пересмотреть свое отношение к форматированию. 1. Есть простая инструкция: Код: sql 1. Я даже такие инструкции, стараюсь оформлять по правилам, например если это подзапрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. То есть, каждое предложение с новой строки, с отступом. Но вот, часто в чужих отчетах народ не парится и пишет все в одну строку Код: sql 1. Мне кажется это неудобным, так как лучше делать по рекомендуемым правилам. 2. Особое внимание у меня к форматированию связок в предложении FROM Мне удобнее оформлять связки через скобки, как это для меня это более наглядно Например: Код: sql 1. Кроме того, явно оформлять в виде одной строки такие связки неудобно, возникает вопрос как более удобно разбить предложение FROM по строкам: Код: sql 1. 2. 3. 4. 5. Получается как-то кривовато... У кого какие будут мысли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 10:25 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
Не париться! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 10:46 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
George-IIIМне удобнее оформлять связки через скобки, как это для меня это более наглядно Например: Код: sql 1. Нездорово как-то выглядит со скобками. Да и нет смысла в скобках, SQL не гарантирует что джоины будут именно так происходить. это тоже самое Код: sql 1. Что касается многострочной записи - от синтаксиса языка много зависит. Например небольшие запросы к SQL серверу из фокса пишу в одну строку Код: sql 1. нет смысла заморачиваться с форматированием если и так все понятно. Но если строка большая получается, то лучше форматировать, опять же на фоксе: Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 10:47 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
Мне в целом нравится как форматирует PL/SQL Developer (за маленькими исключениями). Я в итоге пишу примерно так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. А еще я люблю писать все маленькими буквами (Тема Лебедев утверждает, что они читаются легче, и я скорее склонен с ним согласиться), и люблю делать настройки IDE с темным фоном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 11:00 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
Dima TGeorge-IIIМне удобнее оформлять связки через скобки, как это для меня это более наглядно Например: Код: sql 1. Нездорово как-то выглядит со скобками. Да и нет смысла в скобках, SQL не гарантирует что джоины будут именно так происходить. это тоже самое Код: sql 1. Что касается многострочной записи - от синтаксиса языка много зависит. Например небольшие запросы к SQL серверу из фокса пишу в одну строку Код: sql 1. нет смысла заморачиваться с форматированием если и так все понятно. Но если строка большая получается, то лучше форматировать, опять же на фоксе: Код: sql 1. 2. 3. 4. 5. 6. 7. нет, вот как раз со скобками для меня удобнее, здесь вопрос не в том, как будет выполняться объединение, а в наглядности, даже как-то логичности построения конструкции. а вот в ниженем регистре зарезервированные слова мне не нравится писать, сливается с названием полей и столбцов. Код: sql 1. а вот так как-то нагляднее Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 11:20 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
George-IIIЯ даже такие инструкции, стараюсь оформлять по правилам, например если это подзапрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Дальше можно не продолжать. Если некие правила заставляют писать в девять строк то, что комфортно пишется в одну - значит, им место в помойке. Просто посмотрите на следующий фрагмент кода, поймите его смысл и оцените, насколько он станет хорошо и удобно читаемым, если его таким образом раздуть в десять раз: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Особенно оцените влияние на читабельность, если перед одним-двумя exists добавить not - вот на спор, найдётся ли хотя бы 10% разработчиков, которые в "отформатированном Вами" варианте увидят это с первого раза. George-IIIМне кажется это неудобным, так как лучше делать по рекомендуемым правилам. "Лучше по правилам" - это заведомо проигрышный аргумент. Запомните: правила должны соответствовать потребностям, а не наоборот, потребности запихиваться в прокрустово ложе правил. Если какая-то удобная и разумная вещь не укладывается в правила - значит, правила должны быть доработаны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 12:18 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
softwarer, Может быть, но в приведенном вами варианте длина строки небольшая, может это и разумно, а вот если бы длина подзапроса не уменьшалась бы на одном экране, то логичее все же оформить каждое предложение на новой строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 12:33 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
George-IIIв приведенном вами варианте длина строки небольшая, может это и разумно, а вот если бы длина подзапроса Правильно, в точку. Если подзапрос длиной сорок-пятьдесят символов, его разумно писать в одну строку. Если подзапрос длиной четыреста-пятьсот символов, его разумно писать с многострочным форматированием. Если подзапрос длиной в четыре-пять тысяч символов, его разумно выносить в CTE или в отдельное view или куда-то ещё. Попытка придумать одно безусловное правило для подзапросов в сорок символов и в четыре тысячи символов - идиотизм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 13:06 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
Может быть, но с другой стороны - это общий стиль исходного текста запроса, а то получается, где-то многострочный вариант, а где-то всё в одну строку... Это несколько коробит глаза, когда смотришь большие запросы. я бы вот за это бы руки отрывал: Код: sql 1. 2. 3. и представьте такой бред длиной с километр... как такой запрос можно анализировать? или по принципу: Заработал и фиг с ним... а кому надо - разберется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 13:39 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
George-IIIя бы вот за это бы руки отрывал: Код: sql 1. 2. 3. Если не ошибаюсь - это в оракле так любят писать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 14:21 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
Dima T, Угу, так и есть, я вот счетаю, что через join связки как-то более наглядно видны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 14:23 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
George-IIIDima T, Угу, так и есть, я вот счетаю, что через join связки как-то более наглядно видны +1 кроме того это inner join, а left join так не сделать. С ораклом не работал, но подозреваю что не с проста это, наверно зачем-то это было надо, может оптимизатор оракла на такие запросы лучше заточен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 14:33 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
George-IIIя бы вот за это бы руки отрывал: Если Вы имеете в виду "короткая широкая простыня в минимум строчек", то тут основной вопрос - какое значение имеет этот запрос. Если это "основной объект", достаточно сложный запрос, то такое форматирование, конечно, недопустимо. В то же время бывает, что в коде ХП встречается довольно тривиальный запрос, про который надо понимать, что "он возвращает X и Y и всё" - детали малоинтересны и вообще основной смысл ХП совсем в другом, тогда такое форматирование можно как-то обосновать. Если же Вы имеете в виду стиль соединения таблиц в where, то его использование либо отрицание - вопрос привычки. В простых случаях, коих подавляющее большинство, разработчик, видя список таблиц и их алиасы, уже знает, как они соединены, и на условия соединения вообще не смотрит. В целом join-синтаксис несколько выигрывает с точки зрения визуального выделения "фильтров" и в запросах со сложной структурой outer join-ов, но проигрывает в наглядности всякого рода смешанных и нетривиальных соединений. В целом, повторюсь - дело привычки, кого на что "подсадили", то правильным и считает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 14:45 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
Dima Tкроме того это inner join, а left join так не сделать. Вы бы букварь, что ли, почитали, прежде чем пургу нести. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 14:45 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
Dima TGeorge-IIIDima T, Угу, так и есть, я вот счетаю, что через join связки как-то более наглядно видны +1 кроме того это inner join, а left join так не сделать. С ораклом не работал, но подозреваю что не с проста это, наверно зачем-то это было надо, может оптимизатор оракла на такие запросы лучше заточен. Да нет, left join и right join сделать без проблем Код: sql 1. - right outer join Код: sql 1. - left outer join сложнее c full join... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 14:45 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
George-IIIDima Tпропущено... +1 кроме того это inner join, а left join так не сделать. С ораклом не работал, но подозреваю что не с проста это, наверно зачем-то это было надо, может оптимизатор оракла на такие запросы лучше заточен. Да нет, left join и right join сделать без проблем Код: sql 1. - right outer join Код: sql 1. - left outer join сложнее c full join... наборот только, :) поторопился, знаком (+) помечается таблица которую надо "расширить" null значениями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 14:50 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
softwarerGeorge-IIIя бы вот за это бы руки отрывал: Если Вы имеете в виду "короткая широкая простыня в минимум строчек", то тут основной вопрос - какое значение имеет этот запрос. Если это "основной объект", достаточно сложный запрос, то такое форматирование, конечно, недопустимо. В то же время бывает, что в коде ХП встречается довольно тривиальный запрос, про который надо понимать, что "он возвращает X и Y и всё" - детали малоинтересны и вообще основной смысл ХП совсем в другом, тогда такое форматирование можно как-то обосновать. Если же Вы имеете в виду стиль соединения таблиц в where, то его использование либо отрицание - вопрос привычки. В простых случаях, коих подавляющее большинство, разработчик, видя список таблиц и их алиасы, уже знает, как они соединены, и на условия соединения вообще не смотрит. В целом join-синтаксис несколько выигрывает с точки зрения визуального выделения "фильтров" и в запросах со сложной структурой outer join-ов, но проигрывает в наглядности всякого рода смешанных и нетривиальных соединений. В целом, повторюсь - дело привычки, кого на что "подсадили", то правильным и считает. нет, я имел в виду не методы формирования внутреннего или внешних объединений, а именно "короткая и широкая простыня" :). Я расцениваю это как халатное отношение к своим задачам и неуважение к разработчикам, которые, возможно, будут анализировать и рефакторить твое творение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 14:54 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
softwarerDima Tкроме того это inner join, а left join так не сделать. Вы бы букварь, что ли, почитали, прежде чем пургу нести. Ну ткни тогда меня в букварь по MS SQL, почитаю. Там я подобного не встречал. Или в стандарт SQL. Буквари по ораклу не интересны. Тут не оракловый форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 14:58 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
George-IIIнет, я имел в виду не методы формирования внутреннего или внешних объединений, а именно "короткая и широкая простыня" :). Я расцениваю это как халатное отношение к своим задачам и неуважение к разработчикам, которые, возможно, будут анализировать и рефакторить твое творение Скажу так: у меня здесь не будет претензий, если такой запрос влезает на экран без скроллинга и действительно не превосходит несколько строчек. Пример: Код: plsql 1. 2. 3. 4. я однозначно предпочту не разворачивать по вертикали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 15:01 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
Dima TНу ткни тогда меня в букварь по MS SQL, почитаю. Там я подобного не встречал. Или в стандарт SQL. Буквари по ораклу не интересны. Тут не оракловый форум. Ну и дурак, что не встречал. Гугли по чему-нибудь вроде "mssql *= operator". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 15:05 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
Dima Tsoftwarerпропущено... Вы бы букварь, что ли, почитали, прежде чем пургу нести. Ну ткни тогда меня в букварь по MS SQL, почитаю. Там я подобного не встречал. Или в стандарт SQL. Буквари по ораклу не интересны. Тут не оракловый форум. там вроде так: where t1.pk(*)=t2.fk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 15:06 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
George-IIIDima Tпропущено... Ну ткни тогда меня в букварь по MS SQL, почитаю. Там я подобного не встречал. Или в стандарт SQL. Буквари по ораклу не интересны. Тут не оракловый форум. там вроде так: where t1.pk(*)=t2.fk или без скобок, вроде :) where t1.pk*=t2.fk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 15:11 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
George-IIIтам вроде так: where t1.pk(*)=t2.fk Ошибка Incorrect syntax near '*'. с (+) тоже самое. Нету такого в MS SQL. Я прав softwarer? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 15:12 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
Dima TGeorge-IIIтам вроде так: where t1.pk(*)=t2.fk Ошибка Incorrect syntax near '*'. с (+) тоже самое. Нету такого в MS SQL. Я прав softwarer? Без скобок должно работать, я давно MS SQL Server не использовал, да и внешних объединений в предложении WHERE никогда не пробовал делать, там вроде уже с 6 версии ANSI синтаксис поддерживался, а вот в Oracle, только вроде с 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 15:15 |
|
||
|
Форматирование инструкций ANSI/ISO SQL
|
|||
|---|---|---|---|
|
#18+
softwarerDima TНу ткни тогда меня в букварь по MS SQL, почитаю. Там я подобного не встречал. Или в стандарт SQL. Буквари по ораклу не интересны. Тут не оракловый форум. Ну и дурак, что не встречал. Гугли по чему-нибудь вроде "mssql *= operator". нагуглил http://technet.microsoft.com/en-us/library/ms177634(v=sql.90).aspx Remarks The FROM clause supports the SQL-92-SQL syntax for joined tables and derived tables. SQL-92 syntax provides the INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER, and CROSS join operators. The outer join operators (*= and =*) are not supported when the compatibility level of the database is set to 90. 90 это MSSQL 2005, т.е. в нем уже этот синтаксис не поддерживается. У меня 2012, там compatibility ниже 90 вообще не выставляется. Ну так кто из нас дурак и буквари не читает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 15:46 |
|
||
|
|

start [/forum/search_topic.php?author=Turman&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
186ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
| others: | 465ms |
| total: | 809ms |

| 0 / 0 |
