HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><ul><li><a>Несколько слов о циклах</a><ul><li><a>Loop</a></li>
1 <ul><ul><li><a>Несколько слов о циклах</a><ul><li><a>Loop</a></li>
2 <li><a>Exit</a></li>
2 <li><a>Exit</a></li>
3 <li><a>Continue</a></li>
3 <li><a>Continue</a></li>
4 <li><a>While</a></li>
4 <li><a>While</a></li>
5 </ul></li>
5 </ul></li>
6 <li><a>For для целочисленных</a></li>
6 <li><a>For для целочисленных</a></li>
7 <li><a>По результатам запроса</a></li>
7 <li><a>По результатам запроса</a></li>
8 <li><a>Оконная функция</a></li>
8 <li><a>Оконная функция</a></li>
9 </ul><li><a>Подробнее о подзапросах</a><ul><li><a>Where в помощь</a></li>
9 </ul><li><a>Подробнее о подзапросах</a><ul><li><a>Where в помощь</a></li>
10 <li><a>Оператор From</a></li>
10 <li><a>Оператор From</a></li>
11 <li><a>Оператор Select</a></li>
11 <li><a>Оператор Select</a></li>
12 </ul></li>
12 </ul></li>
13 <li><a>Почему нужны курсы</a></li>
13 <li><a>Почему нужны курсы</a></li>
14 </ul><p>Продолжим разговор о работе с реляционной базой данных PostgreSQL. Начало читайте<a>по этой ссылке</a>.</p>
14 </ul><p>Продолжим разговор о работе с реляционной базой данных PostgreSQL. Начало читайте<a>по этой ссылке</a>.</p>
15 <h3>Несколько слов о циклах</h3>
15 <h3>Несколько слов о циклах</h3>
16 <p>Используя подзапрос, может быть вызвана любая функция, а также прописаны разнообразные условия ее реализации. Следующий важный момент - циклы. Можно использовать их для повтора нескольких команд в функциях на pgSQL.</p>
16 <p>Используя подзапрос, может быть вызвана любая функция, а также прописаны разнообразные условия ее реализации. Следующий важный момент - циклы. Можно использовать их для повтора нескольких команд в функциях на pgSQL.</p>
17 <h4>Loop</h4>
17 <h4>Loop</h4>
18 <p>Существуют различные подзапросы с циклами. Первый - Loop. Имеет вид:</p>
18 <p>Существуют различные подзапросы с циклами. Первый - Loop. Имеет вид:</p>
19 <p>Отвечает за организацию безусловного цикла, который будет повторяться бесконечно до тех пор, пока не наткнется на exit или return. Для подзапросов допускается использование метки в операторах exit и continue. Это необходимо для того, чтобы указывать, какой цикл имеет отношение к оным.</p>
19 <p>Отвечает за организацию безусловного цикла, который будет повторяться бесконечно до тех пор, пока не наткнется на exit или return. Для подзапросов допускается использование метки в операторах exit и continue. Это необходимо для того, чтобы указывать, какой цикл имеет отношение к оным.</p>
20 <h4>Exit</h4>
20 <h4>Exit</h4>
21 <p>Выше указана форма представления соответствующей "команды". Запомнить необходимо такие данные:</p>
21 <p>Выше указана форма представления соответствующей "команды". Запомнить необходимо такие данные:</p>
22 <ol><li>При отсутствии метки осуществляется завершение самого внутреннего цикла.</li>
22 <ol><li>При отсутствии метки осуществляется завершение самого внутреннего цикла.</li>
23 <li>Далее будет выполняться оператор, который следует за end loop.</li>
23 <li>Далее будет выполняться оператор, который следует за end loop.</li>
24 <li>При наличии метки, она должна иметь отношение к внутреннему или внешнему циклу. Допускается метка блока.</li>
24 <li>При наличии метки, она должна иметь отношение к внутреннему или внешнему циклу. Допускается метка блока.</li>
25 <li>В именованном блоке/цикле обработка будет завершаться, а управление - переходить к следующему оператору после соответствующего end.</li>
25 <li>В именованном блоке/цикле обработка будет завершаться, а управление - переходить к следующему оператору после соответствующего end.</li>
26 <li>Используется exit со всеми типами циклов, а не только с безусловными.</li>
26 <li>Используется exit со всеми типами циклов, а не только с безусловными.</li>
27 <li>Когда применяется для выхода из блока, управление перейдет к оператору, следующим за окончанием блока.</li>
27 <li>Когда применяется для выхода из блока, управление перейдет к оператору, следующим за окончанием блока.</li>
28 <li>При применении подзапроса для выхода обязательно прописывать метку.</li>
28 <li>При применении подзапроса для выхода обязательно прописывать метку.</li>
29 </ol><p>А вот наглядный пример того, как в подзапросе работает соответствующий цикл.</p>
29 </ol><p>А вот наглядный пример того, как в подзапросе работает соответствующий цикл.</p>
30 <h4>Continue</h4>
30 <h4>Continue</h4>
31 <p>Если метки нет, реализовывается следующая итерация в пределах самого внутреннего цикла. Все остальные операторы будут пропущены, управление перейдет к управляющему выражению цикла (при наличии). Это необходимо, чтобы узнать, требуется ли еще один проход или нет.</p>
31 <p>Если метки нет, реализовывается следующая итерация в пределах самого внутреннего цикла. Все остальные операторы будут пропущены, управление перейдет к управляющему выражению цикла (при наличии). Это необходимо, чтобы узнать, требуется ли еще один проход или нет.</p>
32 <p>При наличии метки она будет указывать на метку цикла, обработка которого предусматривается подзапросом. А если есть when, следующая итерация начнется тогда, когда логическое выражение выступит в качестве истины. В противном случае осуществится переход к оператору, идущему после continue.</p>
32 <p>При наличии метки она будет указывать на метку цикла, обработка которого предусматривается подзапросом. А если есть when, следующая итерация начнется тогда, когда логическое выражение выступит в качестве истины. В противном случае осуществится переход к оператору, идущему после continue.</p>
33 <p>Continue можно использовать со всеми типами циклов.</p>
33 <p>Continue можно использовать со всеми типами циклов.</p>
34 <h4>While</h4>
34 <h4>While</h4>
35 <p>While в данном случае выполняет некий набор команд до тех пор, пока истинно логическое выражение. Оно будет проверяется перед каждым входом в тело цикла.</p>
35 <p>While в данном случае выполняет некий набор команд до тех пор, пока истинно логическое выражение. Оно будет проверяется перед каждым входом в тело цикла.</p>
36 <h3>For для целочисленных</h3>
36 <h3>For для целочисленных</h3>
37 <p>Здесь:</p>
37 <p>Здесь:</p>
38 <ol><li>Итерации будут выполнять по диапазону целых чисел.</li>
38 <ol><li>Итерации будут выполнять по диапазону целых чисел.</li>
39 <li>Имя автоматически получает тип int. Существует в пределах цикла.</li>
39 <li>Имя автоматически получает тип int. Существует в пределах цикла.</li>
40 <li>Для верхней и нижней границ диапазона выражения вычисляются один раз - когда осуществляется вход в цикл.</li>
40 <li>Для верхней и нижней границ диапазона выражения вычисляются один раз - когда осуществляется вход в цикл.</li>
41 <li>При отсутствии by шаг в итерации 1, в противном случае применяется значение by, вычисляемое один раз. Происходит это тоже при входе в цикл.</li>
41 <li>При отсутствии by шаг в итерации 1, в противном случае применяется значение by, вычисляемое один раз. Происходит это тоже при входе в цикл.</li>
42 <li>При наличии reverse в подзапросе после каждой итерации размер шага вычитается.</li>
42 <li>При наличии reverse в подзапросе после каждой итерации размер шага вычитается.</li>
43 </ol><p>А еще стоит запомнить - если нижняя граница цикла больше верхней, то тело оного вообще не будет обрабатываться. Ошибка не возникнет.</p>
43 </ol><p>А еще стоит запомнить - если нижняя граница цикла больше верхней, то тело оного вообще не будет обрабатываться. Ошибка не возникнет.</p>
44 <h3><strong>По результатам запроса</strong></h3>
44 <h3><strong>По результатам запроса</strong></h3>
45 <p>Есть еще один вариант For - по результатам запроса.</p>
45 <p>Есть еще один вариант For - по результатам запроса.</p>
46 <p>Цель может выступать в качестве строковой переменной, record или разделенными запятыми списком скалярных. Соответствующее "хранилище информации" присваивает себе строки результата запроса. Для каждой будет выполняться тело цикла.</p>
46 <p>Цель может выступать в качестве строковой переменной, record или разделенными запятыми списком скалярных. Соответствующее "хранилище информации" присваивает себе строки результата запроса. Для каждой будет выполняться тело цикла.</p>
47 <p>Если цикл завершается exit, последняя присвоенная строка в подзапросе станет доступна после цикла. В виде запроса может задаваться любая команда SQL, отвечающая за возврат строк. Чаще всего - select. Возможно применение служебных команд.</p>
47 <p>Если цикл завершается exit, последняя присвоенная строка в подзапросе станет доступна после цикла. В виде запроса может задаваться любая команда SQL, отвечающая за возврат строк. Чаще всего - select. Возможно применение служебных команд.</p>
48 <h3>Оконная функция</h3>
48 <h3>Оконная функция</h3>
49 <p>Оконные функции отвечают за вычисление набора строк, тем или иным способом связанных с текущей строкой. Возможно сравнение агрегатной функции. При использовании оконной операции несколько строк не группируются в одну. Они продолжают отдельное самостоятельное существование. Внутри оконные функции, как и агрегатные, обращаются не только к текущим строкам результата запросов.</p>
49 <p>Оконные функции отвечают за вычисление набора строк, тем или иным способом связанных с текущей строкой. Возможно сравнение агрегатной функции. При использовании оконной операции несколько строк не группируются в одну. Они продолжают отдельное самостоятельное существование. Внутри оконные функции, как и агрегатные, обращаются не только к текущим строкам результата запросов.</p>
50 <p>Вот пример в postgres, который демонстрирует сравнение зарплаты каждого сотрудника со средним показателем по соответствующим отделам:</p>
50 <p>Вот пример в postgres, который демонстрирует сравнение зарплаты каждого сотрудника со средним показателем по соответствующим отделам:</p>
51 <p>Здесь происходит следующее:</p>
51 <p>Здесь происходит следующее:</p>
52 <ol><li>Первые 3 столбца будут извлекаться из empdalary.</li>
52 <ol><li>Первые 3 столбца будут извлекаться из empdalary.</li>
53 <li>Для каждой таблички будет иметься строка результата.</li>
53 <li>Для каждой таблички будет иметься строка результата.</li>
54 <li>Четвертый столбец select средние значения, вычисленные по всем строкам с одинаковым значением depname, что и текущая строчка.</li>
54 <li>Четвертый столбец select средние значения, вычисленные по всем строкам с одинаковым значением depname, что и текущая строчка.</li>
55 <li>Вызов оконной функции всегда включает в себя over, которое идет после названия и аргументов.</li>
55 <li>Вызов оконной функции всегда включает в себя over, которое идет после названия и аргументов.</li>
56 <li>Over отвечает за planning, как именно происходит разделение строки запроса для обработки через "окна".</li>
56 <li>Over отвечает за planning, как именно происходит разделение строки запроса для обработки через "окна".</li>
57 <li>Объединение происходит посредством partition by.</li>
57 <li>Объединение происходит посредством partition by.</li>
58 <li>Оконная функция предусматривает план работы по вычислению строк, попадающих в один раздел с текущей.</li>
58 <li>Оконная функция предусматривает план работы по вычислению строк, попадающих в один раздел с текущей.</li>
59 <li>Можно определять порядок обработки строчек через order by, прописанные в over.</li>
59 <li>Можно определять порядок обработки строчек через order by, прописанные в over.</li>
60 </ol><p>Также стоит запомнить, что для каждой строки имеется набор строк в ее разделе, который носит название рамки. Изначально включает в себя все строки от начала раздела до текущей строки и строк, равных текущей по значению order by. Без последнего "оператора" состоит из всех строк раздела.</p>
60 </ol><p>Также стоит запомнить, что для каждой строки имеется набор строк в ее разделе, который носит название рамки. Изначально включает в себя все строки от начала раздела до текущей строки и строк, равных текущей по значению order by. Без последнего "оператора" состоит из всех строк раздела.</p>
61 <p>Для того, чтобы фильтровать или группировать strings, нужно использовать вложенные запросы:</p>
61 <p>Для того, чтобы фильтровать или группировать strings, нужно использовать вложенные запросы:</p>
62 <p>Если происходит вычисление нескольких запросов, для одинаково определенных окно можно прописывать для каждой отдельное over. Но тогда план будет предусматривать дублирование. Это приведет к ошибкам. Поэтому для определения окна требуется выделить window, а потом сослаться на него в over.</p>
62 <p>Если происходит вычисление нескольких запросов, для одинаково определенных окно можно прописывать для каждой отдельное over. Но тогда план будет предусматривать дублирование. Это приведет к ошибкам. Поэтому для определения окна требуется выделить window, а потом сослаться на него в over.</p>
63 <p>Выше дан пример реализации соответствующей особенности в Postgre.</p>
63 <p>Выше дан пример реализации соответствующей особенности в Postgre.</p>
64 <h2>Подробнее о подзапросах</h2>
64 <h2>Подробнее о подзапросах</h2>
65 <p>Изучение в PostgreSQL оконных функций - не слишком трудная задача, если разобраться в принципах и plan составления запросов. Стоит учитывать следующие факты о вложенности:</p>
65 <p>Изучение в PostgreSQL оконных функций - не слишком трудная задача, если разобраться в принципах и plan составления запросов. Стоит учитывать следующие факты о вложенности:</p>
66 <ul><li>подзапрос носит название inner select;</li>
66 <ul><li>подзапрос носит название inner select;</li>
67 <li>основной запрос, который содержит вложенный - это outer select (или outer query).</li>
67 <li>основной запрос, который содержит вложенный - это outer select (или outer query).</li>
68 </ul><p>Теперь вложенные функции можно рассмотреть более подробно на примере работы с теми или иными операторами.</p>
68 </ul><p>Теперь вложенные функции можно рассмотреть более подробно на примере работы с теми или иными операторами.</p>
69 <h3>Where в помощь</h3>
69 <h3>Where в помощь</h3>
70 <p>Чаще всего select будет обнаруживаться в операторе where. Это - вложенные подзапросы. Вот пример кода:</p>
70 <p>Чаще всего select будет обнаруживаться в операторе where. Это - вложенные подзапросы. Вот пример кода:</p>
71 SELECT p.product_id, p.product_name FROM products p WHERE p.category_id IN (SELECT c.category_id FROM categories c WHERE c.category_id &gt; 25 AND c.category_name like 'S%');<p>В нем часть оператора select будет иметь следующий вид:</p>
71 SELECT p.product_id, p.product_name FROM products p WHERE p.category_id IN (SELECT c.category_id FROM categories c WHERE c.category_id &gt; 25 AND c.category_name like 'S%');<p>В нем часть оператора select будет иметь следующий вид:</p>
72 (SELECT c.category_id FROM categories c WHERE c.category_id &gt; 25 AND c.category_name like 'S%');<p>После того, как компьютер выполнил соответствующий Select, удастся обнаружить все category_id из таблицы category, где искомое значение больше 25, а name начинается с буквы S. Этот limit поможет составить условия поиска. Далее будет задействован select для того, чтобы фильтровать результаты основной "команды" с применением in.</p>
72 (SELECT c.category_id FROM categories c WHERE c.category_id &gt; 25 AND c.category_name like 'S%');<p>После того, как компьютер выполнил соответствующий Select, удастся обнаружить все category_id из таблицы category, где искомое значение больше 25, а name начинается с буквы S. Этот limit поможет составить условия поиска. Далее будет задействован select для того, чтобы фильтровать результаты основной "команды" с применением in.</p>
73 <p>Рассмотренная операция может иметь иную интерпретацию. Добавьте inner join, а не select, чтобы запрос имел такой вид:</p>
73 <p>Рассмотренная операция может иметь иную интерпретацию. Добавьте inner join, а не select, чтобы запрос имел такой вид:</p>
74 <p>А рассмотренном примере соответствующий вариант будет более эффективен. Стоит помнить и о том, что не все select можно преобразовать в joins-соединения.</p>
74 <p>А рассмотренном примере соответствующий вариант будет более эффективен. Стоит помнить и о том, что не все select можно преобразовать в joins-соединения.</p>
75 <h3>Оператор From</h3>
75 <h3>Оператор From</h3>
76 <p>Второй вариант использования Select - это в операторе from. Оные носят название представлений встроенного характера.</p>
76 <p>Второй вариант использования Select - это в операторе from. Оные носят название представлений встроенного характера.</p>
77 <p>Здесь select был создан через:</p>
77 <p>Здесь select был создан через:</p>
78 <p>Этот вариант обладает именем subquery1. Соответствующее название используется для ссылки на нужный select или любое из его полей.</p>
78 <p>Этот вариант обладает именем subquery1. Соответствующее название используется для ссылки на нужный select или любое из его полей.</p>
79 <h3>Оператор Select</h3>
79 <h3>Оператор Select</h3>
80 <p>Далее план предусматривает изучение оператора select. В нем тоже могут встречать вложенные "команды". Это далеко не limit.</p>
80 <p>Далее план предусматривает изучение оператора select. В нем тоже могут встречать вложенные "команды". Это далеко не limit.</p>
81 <p>Запомнить стоит такие факты:</p>
81 <p>Запомнить стоит такие факты:</p>
82 <ol><li>Select используется для того, чтобы получать расчеты с агрегатными функциями.</li>
82 <ol><li>Select используется для того, чтобы получать расчеты с агрегатными функциями.</li>
83 <li>Не хочется применять агрегатную функцию к основному query.</li>
83 <li>Не хочется применять агрегатную функцию к основному query.</li>
84 </ol><p>Пример предусматривает создание вложенной операции в Select так:</p>
84 </ol><p>Пример предусматривает создание вложенной операции в Select так:</p>
85 <p>Данный вариант имеет псевдоним subquery2. Соответствующее название будет использоваться для ссылки на подобный query или любое его поле.</p>
85 <p>Данный вариант имеет псевдоним subquery2. Соответствующее название будет использоваться для ссылки на подобный query или любое его поле.</p>
86 <p>Размещение subquery в Select заключается в том, что оный должен отвечать за возврат одного значения. Из-за этого имеет место частое применение агрегатных функций.</p>
86 <p>Размещение subquery в Select заключается в том, что оный должен отвечать за возврат одного значения. Из-за этого имеет место частое применение агрегатных функций.</p>
87 <p>А для того, чтобы лучше разбираться не только в Select, но и в limit, insert into и PostgreSQL лучше, подойдут специальные курсы. В дистанционной форме люди смогут обучаться основам работы с БД и их командами.</p>
87 <p>А для того, чтобы лучше разбираться не только в Select, но и в limit, insert into и PostgreSQL лучше, подойдут специальные курсы. В дистанционной форме люди смогут обучаться основам работы с БД и их командами.</p>
88 <p>Интересует PostgreSQL? Обратите внимание на<a>специализированный курс Otus</a>!</p>
88 <p>Интересует PostgreSQL? Обратите внимание на<a>специализированный курс Otus</a>!</p>
89 <h2>Почему нужны курсы</h2>
89 <h2>Почему нужны курсы</h2>
90 <p>Дистанционные курсы выделяются следующими моментами:</p>
90 <p>Дистанционные курсы выделяются следующими моментами:</p>
91 <ul><li>хорошо продуманные программы, составленные опытными программерами;</li>
91 <ul><li>хорошо продуманные программы, составленные опытными программерами;</li>
92 <li>постоянное кураторство;</li>
92 <li>постоянное кураторство;</li>
93 <li>возможность узнать, что такое select и inner "с нуля";</li>
93 <li>возможность узнать, что такое select и inner "с нуля";</li>
94 <li>предложения не только для новичков, но и для опытных разработчиков;</li>
94 <li>предложения не только для новичков, но и для опытных разработчиков;</li>
95 <li>доступность - можно подключиться с любого места, где есть интернет;</li>
95 <li>доступность - можно подключиться с любого места, где есть интернет;</li>
96 <li>совместимость с жизнью, семьей и работой;</li>
96 <li>совместимость с жизнью, семьей и работой;</li>
97 <li>выдача электронного сертификата по выпуску.</li>
97 <li>выдача электронного сертификата по выпуску.</li>
98 </ul><p>Так удастся сконцентрироваться на определенных направлениях в IT и информационных технологиях, получая бесценные знания и практику.</p>
98 </ul><p>Так удастся сконцентрироваться на определенных направлениях в IT и информационных технологиях, получая бесценные знания и практику.</p>
99  
99