0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Краткое определение</a><ul><li><a>С чем применяются</a></li>
1
<ul><li><a>Краткое определение</a><ul><li><a>С чем применяются</a></li>
2
<li><a>Правила составления</a></li>
2
<li><a>Правила составления</a></li>
3
</ul></li>
3
</ul></li>
4
<li><a>Управляющие структуры</a><ul><li><a>Возврат значения функции</a></li>
4
<li><a>Управляющие структуры</a><ul><li><a>Возврат значения функции</a></li>
5
<li><a>Return</a></li>
5
<li><a>Return</a></li>
6
<li><a>Return Next и Return Query</a></li>
6
<li><a>Return Next и Return Query</a></li>
7
<li><a>Условные операторы</a></li>
7
<li><a>Условные операторы</a></li>
8
</ul></li>
8
</ul></li>
9
</ul><p>Для работы с таблицами и базами данных пользователям, а также системным администраторам требуется знать SQL. Это язык запросов, который открывает довольно широкий спектр возможностей. К примеру, если вы знакомы с SQL, вы сможете уверенно работать с такой популярной системой управления базами данных, как PostgreSQL. В данной статье будет рассказано об основах применения подобной "лексики", а также о ее subquery.</p>
9
</ul><p>Для работы с таблицами и базами данных пользователям, а также системным администраторам требуется знать SQL. Это язык запросов, который открывает довольно широкий спектр возможностей. К примеру, если вы знакомы с SQL, вы сможете уверенно работать с такой популярной системой управления базами данных, как PostgreSQL. В данной статье будет рассказано об основах применения подобной "лексики", а также о ее subquery.</p>
10
<h2>Краткое определение</h2>
10
<h2>Краткое определение</h2>
11
<p>PostgreSQL - свободная система управления реляционными БД с открытым исходным кодом. Имеет поддержку:</p>
11
<p>PostgreSQL - свободная система управления реляционными БД с открытым исходным кодом. Имеет поддержку:</p>
12
<ul><li>транзакций;</li>
12
<ul><li>транзакций;</li>
13
<li>схем;</li>
13
<li>схем;</li>
14
<li>внешние ключи.</li>
14
<li>внешние ключи.</li>
15
</ul><p>Более строго соответствует требованиям SQL. Выступает в качестве безопасного средства составления подзапросов.</p>
15
</ul><p>Более строго соответствует требованиям SQL. Выступает в качестве безопасного средства составления подзапросов.</p>
16
<p>PostgreSQL - запрос, вложенный в другой. Работает с предложением Where. Представляет собой subquery для применения во время функционирования баз информации на устройствах.</p>
16
<p>PostgreSQL - запрос, вложенный в другой. Работает с предложением Where. Представляет собой subquery для применения во время функционирования баз информации на устройствах.</p>
17
<h3>С чем применяются</h3>
17
<h3>С чем применяются</h3>
18
<p>Для того, чтобы полноценно использовать таблицы и БД, программеру может потребоваться рассматриваемых подзапрос. Здесь предстоит запомнить следующую информацию:</p>
18
<p>Для того, чтобы полноценно использовать таблицы и БД, программеру может потребоваться рассматриваемых подзапрос. Здесь предстоит запомнить следующую информацию:</p>
19
<ul><li>подзапрос нужен для возврата информации, которая задействована в основном запросе в качестве своеобразного ограничителя сведений, подлежащих извлечению;</li>
19
<ul><li>подзапрос нужен для возврата информации, которая задействована в основном запросе в качестве своеобразного ограничителя сведений, подлежащих извлечению;</li>
20
<li>subquery применяется с select, insert, update, delete. In;</li>
20
<li>subquery применяется с select, insert, update, delete. In;</li>
21
<li>может использоваться совместно с операторами =, >, <, >=, <=.</li>
21
<li>может использоваться совместно с операторами =, >, <, >=, <=.</li>
22
</ul><p>В базе данных соответствующий элемент позволяет создавать сложные структурированные запросы.</p>
22
</ul><p>В базе данных соответствующий элемент позволяет создавать сложные структурированные запросы.</p>
23
<h3>Правила составления</h3>
23
<h3>Правила составления</h3>
24
<p>Подзапрос мало изучить - требуется уяснить несколько правил, которые помогут в конечном итоге грамотно составлять соответствующие "посылы". Обратить внимание необходимо на такие принципы:</p>
24
<p>Подзапрос мало изучить - требуется уяснить несколько правил, которые помогут в конечном итоге грамотно составлять соответствующие "посылы". Обратить внимание необходимо на такие принципы:</p>
25
<ul><li>подзапрос составляется с круглыми скобками;</li>
25
<ul><li>подзапрос составляется с круглыми скобками;</li>
26
<li>в предложении select может быть только один столбец, если в ключевом запросе нет нескольких подобных элементов для сравнения;</li>
26
<li>в предложении select может быть только один столбец, если в ключевом запросе нет нескольких подобных элементов для сравнения;</li>
27
<li>order by не используют в подзапросе - только в основном "обращении";</li>
27
<li>order by не используют в подзапросе - только в основном "обращении";</li>
28
<li>group by применяется точно так же, как и order by в основном запросе;</li>
28
<li>group by применяется точно так же, как и order by в основном запросе;</li>
29
<li>подзапросы, которые возвращают больше одной строки, могут быть задействованы с операторами значений IN, Exists not in, any, some, all;</li>
29
<li>подзапросы, которые возвращают больше одной строки, могут быть задействованы с операторами значений IN, Exists not in, any, some, all;</li>
30
<li>between - оператор, который не используется с подзапросом.</li>
30
<li>between - оператор, который не используется с подзапросом.</li>
31
</ul><p>Также стоит обратить внимание на то, что МЕЖДУ разрешено использовать в подзапросе. Эти правила помогут работать с базами данных и грамотно обращаться к таблицам через PostgreSQL.</p>
31
</ul><p>Также стоит обратить внимание на то, что МЕЖДУ разрешено использовать в подзапросе. Эти правила помогут работать с базами данных и грамотно обращаться к таблицам через PostgreSQL.</p>
32
<h2>Управляющие структуры</h2>
32
<h2>Управляющие структуры</h2>
33
<p>Управляющие структуры помогают работать с PS/pgSQL. Они помогают гибко и эффективно манипулировать информацией в имеющихся таблицах.</p>
33
<p>Управляющие структуры помогают работать с PS/pgSQL. Они помогают гибко и эффективно манипулировать информацией в имеющихся таблицах.</p>
34
<h3>Возврат значения функции</h3>
34
<h3>Возврат значения функции</h3>
35
<p>Первое, на что стоит обратить внимание - команды, с помощью которых осуществляется возврат значения функции. Речь идет о return и return next.</p>
35
<p>Первое, на что стоит обратить внимание - команды, с помощью которых осуществляется возврат значения функции. Речь идет о return и return next.</p>
36
<h3>Return</h3>
36
<h3>Return</h3>
37
<p>Самый простой запрос. Имеет вид "Return выражение";. Прекращает выполнение функции и возвращает значение выражения в вызванную утилиту. Применяется для подзапросов, которые не возвращают набор строк.</p>
37
<p>Самый простой запрос. Имеет вид "Return выражение";. Прекращает выполнение функции и возвращает значение выражения в вызванную утилиту. Применяется для подзапросов, которые не возвращают набор строк.</p>
38
<p>Стоит отметить следующие моменты:</p>
38
<p>Стоит отметить следующие моменты:</p>
39
<ol><li>Функции, отвечающие за возврат скалярного типа, предусматривают автоматическое приведение результирующего выражения к типу возвращаемого значения. Но, если возвращаемый тип является составным (строка), возвращаемое выражение должно обязательно содержать необходимый набор столбцов. Здесь иногда нужно провести явное приведение типов.</li>
39
<ol><li>Функции, отвечающие за возврат скалярного типа, предусматривают автоматическое приведение результирующего выражения к типу возвращаемого значения. Но, если возвращаемый тип является составным (строка), возвращаемое выражение должно обязательно содержать необходимый набор столбцов. Здесь иногда нужно провести явное приведение типов.</li>
40
<li>Функции, которые имеют выходные параметры, спокойно используются с return. Для этого выражение не требуется. Это повлечет за собой возврат текущих значений выходных параметров.</li>
40
<li>Функции, которые имеют выходные параметры, спокойно используются с return. Для этого выражение не требуется. Это повлечет за собой возврат текущих значений выходных параметров.</li>
41
<li>Если происходит возврат void, return может быть поставлен в любом месте, но без выражения - только после return.</li>
41
<li>Если происходит возврат void, return может быть поставлен в любом месте, но без выражения - только после return.</li>
42
<li>Возвращаемое значение функций не может быть неопределенным. Если конец верхнего блока достигнут, а return не встретился, появляется ошибка времени реализации. Соответствующий принцип не имеет никакого отношения к функциям с выходными параметрами или возвращающих void.</li>
42
<li>Возвращаемое значение функций не может быть неопределенным. Если конец верхнего блока достигнут, а return не встретился, появляется ошибка времени реализации. Соответствующий принцип не имеет никакого отношения к функциям с выходными параметрами или возвращающих void.</li>
43
</ol><p>В последней описанной ситуации оператор будет выполняться автоматически, когда система достигнет блока верхнего уровня.</p>
43
</ol><p>В последней описанной ситуации оператор будет выполняться автоматически, когда система достигнет блока верхнего уровня.</p>
44
<p>Выше - несколько примеров, которые помогут сориентироваться на изученной команде.</p>
44
<p>Выше - несколько примеров, которые помогут сориентироваться на изученной команде.</p>
45
<h3>Return Next и Return Query</h3>
45
<h3>Return Next и Return Query</h3>
46
<p>Обладает видом:</p>
46
<p>Обладает видом:</p>
47
<p><em>Return next выражение</em><em>;</em></p>
47
<p><em>Return next выражение</em><em>;</em></p>
48
<p><em>Return query запрос</em><em>;</em></p>
48
<p><em>Return query запрос</em><em>;</em></p>
49
<p><em>Return query execute строка</em><em>-команды</em><em>[using выражение</em><em>, […]];</em></p>
49
<p><em>Return query execute строка</em><em>-команды</em><em>[using выражение</em><em>, […]];</em></p>
50
<p>Применяется для операций подзапроса, которые возвращают setof некий_тип. Отдельные составляющие возвращаемого значения будут формироваться командами return next и return query. Итоговая команда return без аргументов отвечает за завершение функции.</p>
50
<p>Применяется для операций подзапроса, которые возвращают setof некий_тип. Отдельные составляющие возвращаемого значения будут формироваться командами return next и return query. Итоговая команда return без аргументов отвечает за завершение функции.</p>
51
<p>Здесь стоит обратить внимание на такие данные:</p>
51
<p>Здесь стоит обратить внимание на такие данные:</p>
52
<ol><li>Return next применяется со скалярными и составными типами информации.</li>
52
<ol><li>Return next применяется со скалярными и составными типами информации.</li>
53
<li>Для того, чтобы использовать скалярный тип, результат будет возвращаться в виде таблицы.</li>
53
<li>Для того, чтобы использовать скалярный тип, результат будет возвращаться в виде таблицы.</li>
54
<li>Return next и query не будут осуществлять возврат из функции. Они лишь добавляют строки в результирующие множества, после чего работа продолжается со следующего оператора в функции.</li>
54
<li>Return next и query не будут осуществлять возврат из функции. Они лишь добавляют строки в результирующие множества, после чего работа продолжается со следующего оператора в функции.</li>
55
<li>Если return (next, query) прошел обработку успешно, будет сформировано множество строчек результатов.</li>
55
<li>Если return (next, query) прошел обработку успешно, будет сформировано множество строчек результатов.</li>
56
<li>Для того, чтобы выйти из функции, применяется return, но без аргументов.</li>
56
<li>Для того, чтобы выйти из функции, применяется return, но без аргументов.</li>
57
<li>У Return query есть return query executive, которая предназначается для динамической обработки сформированного пользователем запроса. В текст можно добавлять различные параметры при помощи using или execute.</li>
57
<li>У Return query есть return query executive, которая предназначается для динамической обработки сформированного пользователем запроса. В текст можно добавлять различные параметры при помощи using или execute.</li>
58
<li>Для подзапроса с выходными параметрами рекомендуется задействовать return next без аргументов. Тогда текущие значения оных сохранятся для последующего возврата в качестве результирующей строки.</li>
58
<li>Для подзапроса с выходными параметрами рекомендуется задействовать return next без аргументов. Тогда текущие значения оных сохранятся для последующего возврата в качестве результирующей строки.</li>
59
</ol><p>Выше представлены примеры использования соответствующих структур.</p>
59
</ol><p>Выше представлены примеры использования соответствующих структур.</p>
60
<h3>Условные операторы</h3>
60
<h3>Условные операторы</h3>
61
<p>Подразделяются на if и case. Предназначены для того, чтобы выполнять те или иные команды в зависимости от заданных условий. В подзапросах можно увидеть три трипа if:</p>
61
<p>Подразделяются на if и case. Предназначены для того, чтобы выполнять те или иные команды в зависимости от заданных условий. В подзапросах можно увидеть три трипа if:</p>
62
<ul><li>If … then… end if;</li>
62
<ul><li>If … then… end if;</li>
63
<li>If… then… else…. End if;</li>
63
<li>If… then… else…. End if;</li>
64
<li>If … then… elsif … then…else…end if.</li>
64
<li>If … then… elsif … then…else…end if.</li>
65
</ul><p>У Case две формы представления:</p>
65
</ul><p>У Case две формы представления:</p>
66
<p>Первый if - самый простой. Операторы между then и end будут выполняться, если условие (логическое выражение) выступает в качестве истины. Когда подобный принцип не соблюден, оные будут пропускаться системой.</p>
66
<p>Первый if - самый простой. Операторы между then и end будут выполняться, если условие (логическое выражение) выступает в качестве истины. Когда подобный принцип не соблюден, оные будут пропускаться системой.</p>
67
<p>Второй тип подзапроса if добавляет к if-then возможность указания альтернативного набора операторов. Они обрабатываются, если прописанное требование - это ложь или null.</p>
67
<p>Второй тип подзапроса if добавляет к if-then возможность указания альтернативного набора операторов. Они обрабатываются, если прописанное требование - это ложь или null.</p>
68
<p>Третий тип подзапроса if позволяет проверять несколько альтернатив в порядке очереди. Условия в If будут последовательно проверяться до тех пор, пока не будет обнаружена "истина". После операторы, которые относятся к соответствующему условию, пройдут стадию обработки. Управление перейдет к следующей после end if команде. Если же if не истина во всех ситуациях, будет реализован блок else (при наличии).</p>
68
<p>Третий тип подзапроса if позволяет проверять несколько альтернатив в порядке очереди. Условия в If будут последовательно проверяться до тех пор, пока не будет обнаружена "истина". После операторы, которые относятся к соответствующему условию, пройдут стадию обработки. Управление перейдет к следующей после end if команде. Если же if не истина во всех ситуациях, будет реализован блок else (при наличии).</p>
69
<p>А вот эти сведения помогут разобраться с case:</p>
69
<p>А вот эти сведения помогут разобраться с case:</p>
70
<ol><li>Первая форма подзапросов отвечает за реализацию условного выполнения на основе сравнивания операндов. Выражение поиска вычисляется всего один раз, после чего сравнивается с каждым выражением в when. При наличии совпадений начинается работа тех или иных операторов. Управление будет передано команде, идущей за "концом" подзапроса. При отсутствии совпадений начинается реализация условий из блока else. Когда таковой отсутствует, вызывается исключение case_not_found.</li>
70
<ol><li>Первая форма подзапросов отвечает за реализацию условного выполнения на основе сравнивания операндов. Выражение поиска вычисляется всего один раз, после чего сравнивается с каждым выражением в when. При наличии совпадений начинается работа тех или иных операторов. Управление будет передано команде, идущей за "концом" подзапроса. При отсутствии совпадений начинается реализация условий из блока else. Когда таковой отсутствует, вызывается исключение case_not_found.</li>
71
<li>Case с перебором условий отвечает за условное выполнение на основе истинности логических условий. Каждое выражение в when вычисляется по порядку до тех пор, пока не обнаруживается истина. Далее происходит обработка соответствующих запросов и переход к следующей команде. В противном случае выполняется else или вызывается case_not_found.</li>
71
<li>Case с перебором условий отвечает за условное выполнение на основе истинности логических условий. Каждое выражение в when вычисляется по порядку до тех пор, пока не обнаруживается истина. Далее происходит обработка соответствующих запросов и переход к следующей команде. В противном случае выполняется else или вызывается case_not_found.</li>
72
</ol><p>Выше представлен пример if-then-elsif подзапроса. Исключение здесь только одно - при невыполнении заданных условий, а также отсутствии else, if-then-elsif ничего не будет делать. В случае с case на экране появится ошибка.</p>
72
</ol><p>Выше представлен пример if-then-elsif подзапроса. Исключение здесь только одно - при невыполнении заданных условий, а также отсутствии else, if-then-elsif ничего не будет делать. В случае с case на экране появится ошибка.</p>
73
<p>Продолжение статьи читайте<a>здесь</a>.</p>
73
<p>Продолжение статьи читайте<a>здесь</a>.</p>
74
<p>Интересует PostgreSQL? Обратите внимание на<a>специализированный курс Otus</a>!</p>
74
<p>Интересует PostgreSQL? Обратите внимание на<a>специализированный курс Otus</a>!</p>
75
75