Все ссылки на статьи и ролики моего канала:
Мои материалы по языку SQL здесь.
Некоторые мои статьи по языку SQL
"Давненько не брал я в руки шашек" - воскликнул один литературный герой. Давненько и мы не разминались запросами SQL. Значит пришла пора. Сегодня пришло время узнать, как можно в первом разделе команды select, т.е. там где перечисляются столбцы результирующего запроса, использовать условную конструкцию.
Условие CASE против объединений запросов UNION
Но в начале о задаче и как ее можно решать. Имеется такая база данных: две связанные таблицы students <id, fio> и marks <id, id_s, mark>. Другими словами имеем учащихся и их оценки (см. Рисунок 1). Другая информация нас не интересует. Связаны таблицы, как вы понимаете по линии id - id_s, т.е. как обычно PK-FK.
Задача заключается в том, чтобы получить список студентов и для каждого студента указать уровень:
1. Отличник, если средняя оценка больше 4.5.
2. Ударник, если средняя оценка меньше или равна 4.5 и больше или равна 4.
3. Троечник, если средняя оценка меньше 4 и больше или равна трем.
4. Двоечник, если средняя оценка меньше 3.
При этом результат следует упорядочить начиная с отличников и заканчивая двоечниками. Конечно, напрашивается решение с использование union, что вы и видите ниже (40a.sql). Смысл решения заключается в том, что мы в начале объединяем четыре запроса select в один, с помощью оператора union. И затем, рассматривая результат как подзапрос, используем его в качестве такой виртуальной таблицы. При этом упорядочивание следует проводить, естественно, по среднему значению оценки, а не по названию уровня ученика. Согласитесь, что получился довольно неуклюжий запрос, хотя и вполне понятный.
А вот если использовать условную конструкцию case - end, то решение получится более коротким и изящным. Этот запрос представлен в 40.sql, согласитесь это красиво.
Да, язык SQL не слишком похож на обычные языки программирования, но он просто незаменим, когда мы имеем дело с реляционными базами данных.
Ну вот и все. Пока! Пишите запросы sql, используйте postgresql и подписываемся на мой канал.
#программирование #программисты #sql #postgresql #языки программирования