Добавить в корзинуПозвонить
Найти в Дзене
Old Programmer

Postgres. Пишем запросы на SQL. Статья 8 (intersect и другое)

Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). Мои материалы по языку SQL здесь. Давненько, давненько я не писал запросы. Ну, т.е. я писал, конечно, в роликах, которых об SQL набралось уже целых пять. Но это для начинающих, а чуть по сложнее это уже текстовые статьи. Впрочем, сегодня ничего сложного. Да, сегодня все просто, но есть нюанс. До сих в многотабличных запросах я использовал статически-связанные таблицы. Как я уже неоднократно говорил, статическая связь обусловлена особенностями предметной области. Такая связь в реляционных базах данных осуществляется по линии первичный ключ - > внешний ключ (PK->FK). При выполнении же команды select осуществляется так называемая динамическая связь. Связь, которая обусловлена просто выполнением команды, при чем не имеющая в некоторых случаях, вообще никакого смысла. Select. Три способа решения: многотабличный запрос, подзапросы, объединение И так, зад

Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). Мои материалы по языку SQL здесь.

  • Список разделов канала Old Programmer, канала о программировании и программистах

Давненько, давненько я не писал запросы. Ну, т.е. я писал, конечно, в роликах, которых об SQL набралось уже целых пять. Но это для начинающих, а чуть по сложнее это уже текстовые статьи. Впрочем, сегодня ничего сложного.

Да, сегодня все просто, но есть нюанс. До сих в многотабличных запросах я использовал статически-связанные таблицы. Как я уже неоднократно говорил, статическая связь обусловлена особенностями предметной области. Такая связь в реляционных базах данных осуществляется по линии первичный ключ - > внешний ключ (PK->FK). При выполнении же команды select осуществляется так называемая динамическая связь. Связь, которая обусловлена просто выполнением команды, при чем не имеющая в некоторых случаях, вообще никакого смысла.

Select. Три способа решения: многотабличный запрос, подзапросы, объединение

И так, задача заключается в следующем. Имеется три таблицы: tb1, tb2, tb3. В первой таблице есть столбец fio, во второй столбец name, в третьей столбец im. Как вы догадались, это фамилии некоторых людей. Требуется найти фамилии, общие для всех трех таблиц. Я представлю здесь три решения, а вы, возможно, найдете еще одно. Напишите.

И так, первое решение, это типичный многотабличный запрос, со связью, определенной в разделе from (50a.sql). Связь, как видим, не имеет какого-либо смыслового значения, но команда select к смыслам безучастна.

Второй вариант решения представлен в 50.sql. Решение основано на подзапросах. Что тоже, довольно очевидно, вытекает из смысла задачи. Берем из первой таблицы только те фамилии, которые есть и во второй и в третьей.

Но, в команде select есть еще одна замечательная возможность. Объединять запросы можно не только с помощью связки union, но и с помощью intersect. Конечно, точнее это следует назвать пересечением, но в широком смысле, конечно, объединением тоже. Запрос представлен в 51.sql.

Да и следует обратить на один важный момент. Как и для объединения с помощью union, из результирующего запроса автоматически удаляются дублирующие строки. Чтобы этого не происходила используем intersect all.

Ну вот и все. Утренний запрос select, все равно, что чашечка свежезаваренного кофе. Подписываетесь на мой канал Old Programmer.

Список разделов канала Old Programmer, канала о программировании и программистах

Фрагмент запроса 50.sql
Фрагмент запроса 50.sql

#программирование #программисты #sql #postgresql