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 > 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 > 25 AND c.category_name like 'S%');<p>В нем часть оператора select будет иметь следующий вид:</p>
72
(SELECT c.category_id FROM categories c WHERE c.category_id > 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 > 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