Язык структурированных запросов (SQL) — основа манипулирования и извлечения данных в современных базах. Будь то MySQL, PostgreSQL, SQL Server или Oracle, SQL предоставляет мощные инструменты для эффективной работы с данными. Среди них важнейшую роль в упрощении сложных операций играют Common Table Expressions (CTE) и подзапросы.
Однако многие разработчики — особенно начинающие — задаются вопросом, чем именно отличаются CTE от подзапросов, когда выбирать одно вместо другого и как каждый влияет на читаемость, производительность и сопровождение.
В SQL подзапросы вместе с CTE позволяет разбивать сложную логику на более компактные и управляемые части. Часто достигая одинаковых результатов, они различаются структурой, повторным использованием и пригодностью для разных задач. Выбор подходящего инструмента (CTE или подзапросов) зависит от сложности запроса, необходимости повторного использования и простоты читаемости кода.
Это руководство подробно разбирает разницу между CTE и подзапросами в SQL, с примерами, вариантами применения и советами по оптимизации, которые сделают вас более эффективным SQL‑разработчиком.
Двойственные представления таблица-JSON в Oracle Database 23ai позволяют хранить данные в виде строк таблицы для получения преимуществ доступа SQL в реляционной модели, в то же время допуская доступ чтения и записи в виде документов JSON для тех же самых данных. Они могут использоваться из таких языков, как Node.js и ODP.NET. В этой статье показывается, как использовать новые представления в Python.
Реляционная модель великолепна: вы можете избегать дублирования данных; гарантируется согласованность данных; вы имеете доступ посредством очень мощного и очень эффективного языка - SQL. Но от разработчиков требуется определить реляционную схему - таблицы, столбцы и типы данных - прежде, чем начать писать код. Не так легко предсказать будущее использование системы, которое может вызывать затруднения для выбранной схемы.
Вот почему вы так любите JSON. Объект JSON может содержать информацию для одного случая использования без необходимости использовать SQL для соединения таблиц. Доступ через простой запрос или единичное обращение к API базы данных. JSON имеет гибкую схему, поэтому, поскольку ваши случаи использования меняются в процессе жизненного цикла системы, вы можете легко модифицировать приложения. Но есть и недостатки: единственная иерархия может подходить лишь нескольким случаям использования. В данных могут оказаться дубликаты, что не только влияет на занимаемое пространство, но делает очень сложным поддержание согласованности. Более трудной становится оптимизация. Поэтому на первый взгляд простая модель может вызывать сложности в долгосрочной перспективе.
Continue reading "Лучшее из двух подходов - реляционного и JSON - одновременно"
При фантастических заявлениях относительно возможностей Oracle Database 23ai, которые уже в целом доступны, я захотел поделиться некоторыми улучшениями в SQL*Plus 23ai.
Традиционный инструмент командной строки в Oracle SQL*Plus остается привычным для многих пользователей баз данных Oracle. Он позволяет выполнять ad-hoc операторы SQL к базе данных Oracle или создавать скрипты операторов для выполнения. Инструмент включается во все установки ПО базы данных и легко устанавливается на других машинах с помощью небольших свободно распространяемых пакетов ZIP (или RPM) Oracle Instant Client. Никаких переходов по ссылкам, никакого длительного времени выполнения. Вы просто распаковываете архив, устанавливаете PATH или LD_LIBRARY_PATH и начинаете его использовать. (Инструкции по установке на Linux находятся здесь.)
Добро пожаловать в мир программирования баз данных, в котором языки Oracle PL/SQL и PostgreSQL PL/pgSQL помогают привнести структуру и логику в данные. Эти процедурные языки являются основой внедрения бизнес-правил и манипуляции данными в сами базы данных, играя важную роль в администрировании баз данных.
Оба языка предоставляют возможность использовать переменные, операторы управления типа IF, CASE и LOOP, а также управлять исключениями - инструменты, необходимые для адаптивных и динамичных процедур работы с базами данных. Когда бы вы ни создавали новые функции или выполняли сложные процедуры, синтаксис CREATE PROCEDURE и CREATE FUNCTION станет частью вашего стандартного инструментария.
Запросы с GROUP BY могут стать слишком путаными, если столбцом группировки является сложное выражение. В силу логического порядка обработки запроса вам часто приходится повторять такое выражение, поскольку его алиас не может быть использован в предложении GROUP BY.
Оно существует уже давно: предложение WITH в Oracle SQL. И, действительно, я использовал его в прошлом. Предложение WITH весьма полезно для модуляризации вашего SQL, особенно в представлениях.
Первое время его использования, у меня был случай, когда я не знал, как решить задачу без предложения WITH. Это было до того времени (в районе 2018), когда я заставил себя познакомиться с ANSI-SQL. Так или иначе, я полюбил предложение WITH, поэтому использовал его также в случаях, когда оно не было необходимо. Но выглядело это изящно. И это модулизировало мои запросы.
Continue reading "Предложение With Function в Oracle SQL"
Имеется много способов генерации фиктивных данных для базы данных. Вы можете создать генератор данных, используя Mock-сервисы для тестирования, или получить подмножество собственных производственных данных. Помимо этого многие базы данных предлагают встроенные возможности для создания синтетических данных.
В своих запросах SQL вы, вероятно, использовали предложение WHERE для фильтрации конкретного текста, выполняя поиск на точное совпадение. Например, вы могли бы использовать запрос типа “SELECT * FROM EMP WHERE name = 'Alex'”. Этот подход возвращает записи, которые точно соответствуют имени Alex в том же регистре. Однако имеется более универсальный способ обработки сложных текстовых шаблонов, использующих регулярные выражения (regex). Continue reading "REGEX в SQL"
В SQL предложение “ROWS BETWEEN” является мощным средством, которое позволяет вам определить окно строк для анализа или вычислений непосредственно в запросе. Указывая диапазон строк, вы можете выполнять вычисления или применять агрегатные функции к подмножеству данных, а не ко всему результирующему набору. Цель данной статьи - сделать понятным предложение “ROWS BETWEEN” и его использование на примерах. Continue reading "Понимание предложения ROWS BETWEEN в SQL"
Специальное значение NULL означает отсутствие данных, утверждение того факта, что значение неизвестно. По умолчанию столбцы и переменные любого типа могут принимать это значение, если они не имеют ограничения NOT NULL. Помимо этого, СУБД автоматически добавляет ограничение NOT NULL для столбцов, входящих в первичный ключ таблицы.
Главная особенность NULL состоит в том, что оно ничему не равно, даже другому NULL. Вы не можете сравнивать с ним любое значение с помощью операторов: =, <, >, like ... Даже выражение NULL != NULL не будет истинным, поскольку нельзя однозначно сравнивать одно неизвестное значение с другим. К слову, это выражение не будет и ложным (false), т.к. при вычислении условий Oracle не ограничивается состояниями TRUE и FALSE. Благодаря наличию элемента неопределенности в виде NULL, имеется еще одно состояние - UNKNOWN. Continue reading "NULL в Oracle"
Серьезно, давайте поговорим о схеме абстрактно и о буквальной схеме, реализованной в некоторых из самых популярных систем баз данных.
Что такое схема?
В целом, в стороне от специфических реализаций в реляционных базах данных, "схема" - это концептуальная основа или проект, который определяет структуру, связи и ограничения данных или информации. Она предоставляет способ описания и организации данных в структурированном виде. Такое понятие схемы не уникально для баз данных; например, в GraphQL схема определяет типы, запросы, мутации и связи между ними, ограничивая набор возможных операций, которые могут выполняться с использованием API, и форму возвращаемых данных.
Continue reading "Давайте поговорим о схеме базы данных"
Oracle PL/SQL, универсальный инструмент для управления базами данных, который совершенно сливается с SQL. В нашей предыдущей статье мы рассматривали его основы и промежуточные аспекты, закладывающие прочную основу для понимания этого сложного языка.
Теперь мы готовы погрузиться в продвинутый Oracle PL/SQL. В этой статье рассматривается развитое использование курсоров, сложная обработка исключений, естественная компиляция, динамический SQL и поставляемые Oracle пакеты. Мы также исследуем методы настройки производительности, взаимодействие с SQL*PLUS и триггеры уровня базы данных. Continue reading "Освоение Oracle PL/SQL: продвинутые концепции и методы"
Не всегда проблемы проявляются в тот момент, когда мы ведем наблюдение. К счастью, каждый движок базы данных содержит представления, которые удерживают прошлые запросы в течение более продолжительного времени. Эти представления могут помочь администратору баз данных вести упреждающий мониторинг кэшированных планов выполнения с целью улучшения существующих запросов и, насколько это возможно, избежать проблем до их возникновения. Но эту информацию необходимо правильно интерпретировать, знать как извлечь и измерить каждое поле, является ли значение накопительным или нет.