Написание sql запросов: основные операторы, виды, синтаксис, написание, создание базы данных, примеры простых и сложных команд

Содержание

🗄️ ✔️ 10 лучших практик написания SQL-запросов

Статья является переводом. Оригинал доступен по ссылке.

Я работаю с данными уже 3 года, и меня до сих пор удивляет, что есть люди, которые хотят стать аналитиками, практически не зная SQL. Хочу особо подчеркнуть, что SQL является фундаментальным языком независимо от того, кем вы будете работать в сфере анализа данных.

Конечно, я видел исключения, когда люди, обладающие впечатляющими знаниями в других областях, помимо SQL, получают работу, но при этом после получения оффера им все равно приходится изучать SQL. Я думаю, что почти невозможно быть профессионалом в сфере анализа данных без знаний SQL.

Данные советы предназначены для всех специалистов, независимо от опыта. Я перечислил самые распространенные случаи в моей практике, разместив в порядке возрастания сложности.

Для примеров я буду использовать базу данных SQLite: sql-practice.com

1. Проверка уникальных значений в таблице

SELECT count(*), count(distinct patient_id) FROM patients

    

В этом примере показано, как проверить, является ли ваш столбец первичным ключом в таблице. Конечно, это обычно используется в создаваемых вами таблицах, поскольку в большинстве баз данных есть возможность указать первичный ключ в метаданных информационной схемы.

Если числа из двух столбцов равны, то столбец, который вы подсчитали во второй части запроса, может быть первичным ключом. Это не всегда является гарантией, но иногда может помочь разобраться.

Однако становится немного сложнее, когда у вас есть несколько столбцов, которые создают первичный ключ. Чтобы решить эту проблему, просто объедините столбцы, составляющие первичный ключ, после ключевого слова DISTINCT. Простой пример — объединение имени и фамилии для создания первичного ключа.

SELECT count(*), count(distinct first_name || last_name) FROM patients
    

2. Поиск повторяющихся записей

SELECT 
    first_name 
    , count(*) as ct
    
FROM patients
GROUP BY
    first_name
HAVING
    count(*) > 1
ORDER BY 
    COUNT(*) DESC
;
    

Таблица из примера — это упрощенная версия баз данных, которые вы будете использовать в своей работе. В большинстве случаев вы захотите выяснить причины дублирования значений в базе данных. Для этого вам пригодится данный запрос.

Вы можете использовать ключевое слово HAVING для сортировки повторяющихся значений. В таком случае вы заметите, что чаще всего дублируется имя Джон. Затем вы запустите еще один запрос, чтобы увидеть причину повторяющихся значений, и увидите, что все пациенты имеют разные фамилии и ID.

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека программиста»

Интересно, перейти к каналу

3. Обработка NULL с DISTINCT

with new_table as (
select patient_id from patients
UNION
select null
)
select 
    count(*)
  , count(distinct patient_id)
  , count(patient_id) 
from new_table
    

Результатом запроса будет значение 4531 для столбца COUNT(*) и 4530 для двух оставшихся столбцов. Когда вы указываете столбец, ключевое слово COUNT исключает нулевые значения. Однако, при использовании звездочки в подсчет включаются значения NULL. Это может сбивать с толку при проверке, является ли столбец первичным ключом, поэтому я посчитал нужным упомянуть об этом.

4. CTE > Подзапросы

-- Use of CTE
with combined_table as (
select
  *
 
FROM patients p
JOIN admissions a 
  on p.patient_id = a.patient_id
)
, name_most_admissions as (
select
    first_name || ' ' || last_name as full_name
  , count(*)                       as admission_ct
  
FROM combined_table
)
select * from name_most_admissions
;
-- Use of sub-queries :(
select * from 
   (select
        first_name || ' ' || last_name as full_name
      , count(*)                       as admission_ct
  
    FROM (select
             *
 
          FROM patients p
          JOIN admissions a 
              on p. patient_id = a.patient_id
          ) combined_table
    ) name_most_admissions
;
    

Когда я впервые начал работать аналитиком данных 3 года назад, я писал SQL-запросы с большим количеством подзапросов, чем это было необходимо. Я быстро понял, что это не приводит к читабельному коду. В большинстве ситуаций вы хотите использовать общее табличное выражение вместо подзапроса. Зарезервируйте подзапросы для однострочников, которые вы хотите использовать.

5. Использование SUM и CASE WHEN вместе

select 
     sum(case when allergies = 'Penicillin' and city = 'Burlington' then 1 else 0 end) as allergies_burl
   , sum(case when allergies = 'Penicillin' and city = 'Oakville' then 1 else 0 end)   as allergies_oak
  
from patients
    

Предложение WHERE может работать, если вы хотите суммировать количество пациентов, отвечающих определенным условиям. Но если вы хотите проверить несколько условий, вы можете использовать ключевые слова SUM и CASE WHEN вместе. Это делает код лаконичным и легко читаемым.

Данную комбинацию также можно использовать в выражении WHERE, как в примере ниже.

select
  * 
FROM patients
WHERE TRUE
  and 1 = (case when allergies = 'Penicillin' and city = 'Burlington' then 1 else 0 end)
    

6. Будьте осторожны с датами

with new_table as (
select
    patient_id
  , first_name
  , last_name
  , time(birth_date, '+1 second') as birth_date
from patients
where TRUE
   and patient_id = 1
UNION
  
select
    patient_id
  , first_name
  , last_name
  , birth_date 
from patients
WHERE TRUE
  and patient_id != 1
)
select 
  birth_date 
  
from new_table 
where TRUE 
  and birth_date between '1953-12-05' and '1953-12-06'
    

В этой базе данных все даты сокращены до дня. Это означает, что все значения времени столбца Birthday_date в этом примере равны 00:00:00. Однако в реальных наборах данных это обычно не так.

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

В приведенном выше примере я искусственно добавил секунду к пациенту №1. Как видите, этой 1-й секунды было достаточно, чтобы исключить пациента из результатов при использовании ключевого слова BETWEEN.

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

7.

Не забывайте об оконных функциях

select
    p.*
  , MAX(weight) over (partition by city) as maxwt_by_city
   
 from patients p
    

Оконные функции — отличный способ сохранить все строки данных, а затем добавить еще один столбец с важными агрегатными сведениями. В этом случае мы смогли сохранить все данные и добавить максимальный вес по столбцу города.

Я видел, как некоторые аналитики пробовали обходные пути, когда оконная функция делала код короче и читабельнее и, скорее всего, также экономила им время.

Существует множество различных оконных функций, но приведенный выше пример является распространенным и простым вариантом использования.

8. По возможности избегайте DISTINCT

Последние 3 совета не содержат примеров программного кода, но они так же важны, как и приведенные выше. По моему опыту, специалисты по работе с данными слишком часто используют distinct, чтобы предотвратить дублирование, не разбираясь в причине.

Это ошибка. Если вы не можете с самого начала объяснить, почему в данных есть дубликаты, возможно, вы исключили из своего анализа какую-то полезную информацию. Вы всегда должны быть в состоянии объяснить, почему вы помещаете distinct в таблицу и почему есть дубликаты. Использование WHERE обычно предпочтительнее, так как вы можете увидеть то, что исключается.

9. Форматирование SQL

Об этом сказано довольно много, но стоит повторить. Обязательно отформатируйте SQL. Лучше создать больше строк с хорошим форматированием, чем пытаться сжать весь код всего в несколько строк. Это позволит ускорить разработку.

Вы можете заметить, что в примерах я использовал TRUE в WHERE выражении. Это было сделано для того, чтобы все аргументы в выражении WHERE начинались с AND. Таким образом, аргументы начинаются с одного и того же места.

Еще один быстрый совет — добавить запятые в начале столбца в выражении SELECT. Это позволяет легко найти пропущенные запятые, поскольку все они будут упорядочены.

10. Совет по отладке

Некоторые SQL-запросы могут быть очень сложными для отладки. Что мне больше всего помогло, когда я сталкивался с этим в прошлом, так это то, что я очень усердно документировал свои шаги.

Чтобы задокументировать шаги, я пронумерую часть кода в комментариях перед запросом. Комментарий описывает, что я пытаюсь сделать в этом разделе запроса. Затем я напишу свой ответ под заголовком комментария после выполнения запроса.

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

***

Надеюсь, вы узнали что-то полезное из приведенных выше советов. Какие из них вы нашли наиболее полезными? Мы также с нетерпением ждем ваших советов и, пожалуйста, дайте ссылки на любые другие полезные статьи в комментариях, спасибо!

Материалы по теме

  • 📜 Основные SQL-команды и запросы с примерами, которые должен знать каждый разработчик
  • 🐘 Руководство по SQL для начинающих. Часть 1: создание базы данных, таблиц и установка связей между таблицами
  • 🐘 Руководство по SQL для начинающих. Часть 2: фильтрация данных, запрос внутри запроса, работа с массивами
  • 🐘 Руководство по SQL для начинающих. Часть 3: усложняем запросы, именуем вложенные запросы, анализируем скорость запроса

10 полезных советов по написанию SQL запросов | Info-Comp.ru

Сегодня я хочу поговорить о тех простых моментах, которые помогут начинающим программистам SQL более правильно, продуманно и просто составлять логику своих запросов и быстрей освоить язык SQL.

Все эти моменты я выделяю как «полезные советы», которые основаны как на личном опыте, так и на опыте других более опытных людей. И сегодня я хочу поделиться ими с Вами. Получилось у меня их 10.

Содержание

  1. Совет 1 — перечисляйте поля
  2. Совет 2 — не пишите сложные многоуровневые запросы
  3. Совет 3 — не используйте в WHERE функции
  4. Совет 4 — перечисляйте столбцы во время INSERT
  5. Совет 5 — используйте значение по умолчанию, избегайте NULL
  6. Совет 6 — в ORDER BY используйте имена столбцов
  7. Совет 7 — сохраняйте SQL запросы
  8. Совет 8 — не создавайте много курсоров
  9. Совет 9 — проверяйте и тестируйте условия при UPDATE и DELETE
  10. Совет 10 — используйте понятные названия

Совет 1 — перечисляйте поля

При написании запроса перечисляйте поля. Не ставьте *, так как в дальнейшем могут возникнуть некоторые проблемы, хотя с первого взгляда Вы их не замечаете, а, напротив, думаете, что это намного удобней. Проблемы могут возникнуть следующие: не задействуются индексы, появляются столбцы с одинаковыми названиями, это возникает тогда, когда в запросе Вы объединяете несколько таблиц, в которых есть поля с одинаковыми названиями. И в данном случае потом, например, разработчик клиентской части, не подозревая, может выводить пользователю не те данные, которые нужны.

Не нужно так делать

    
   SELECT *  
   FROM table


Лучше так

   
   SELECT col, col2, col3 
   FROM table


Примечание! Если Вы начинающий программист и у Вас нет базовых знаний языка SQL, то я Вам рекомендую почитать книгу «SQL код» это самоучитель по данному языку. Книга написана мной, в ней я очень подробно рассказываю о языке SQL.

Совет 2 — не пишите сложные многоуровневые запросы

Не делайте сложные, большие, многоуровневые запросы. Вы просто запутаетесь, так как такой запрос трудно переделывать, и вообще — это влияет на скорость работы. Если запрос используется часто, то вынесите наиболее сложную часть в функцию или процедуру, и вообще, не стесняйтесь писать свои функции для любых нужд, конечно, если предполагается, что эти функции будут активно использоваться во всевозможных запросах, а в запросе в нужном месте вызывайте ее. Это намного упрощает написание запросов, в дальнейшем не придется изучать заново логику запроса, например, если Вам необходимо что-то в нем переделать, а также в некоторых случаях увеличится скорость работы запроса.

Примечание! Если Вы не знаете, как писать собственные функции, можете ознакомиться со статьей, которая посвящена именно этому Как написать функцию на PL/pgSQL. В языке T-SQL для упрощения написания кода запросы есть специальная конструкция WITH.

Совет 3 — не используйте в WHERE функции

Не используйте в условии функции, которые будут вычислять какое-то значение на основе поля в текущей таблице, так как это будет сделано для каждой строки, и, соответственно, увеличится нагрузка и как следствие уменьшится скорость работы. Также это относится и к подзапросам. Хотя во многих случаях без этого не обойтись, но помните, если есть возможность подумать и не использовать это, то лучше подумайте и реализуйте эту задачу по-другому. Все это можно отнести, например, и к секции SELECT, но здесь такое требуется довольно часто.

Совет 4 — перечисляйте столбцы во время INSERT

При добавлении данных в таблицу, так же как и в SELECT перечисляйте поля таблицы, например:

Не нужно так делать


    
   INSERT INTO table 
      VALUES (col1, col2, col3……)


Лучше так

     
   INSERT INTO table (col1, col2, col3……) 
       VALUES (col1, col2, col3……)


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

Совет 5 — используйте значение по умолчанию, избегайте NULL

Данный совет вытекает из предыдущего. Старайтесь при создании таблицы задавать значения по умолчанию, чтобы избавиться от NULL, так как если Вы этого не будете делать, то могут возникать такие значения как NULL, а следует помнить, что NULL — это не значение, а это состояние ячейки, т.е. отсутствие значения. Чем так плохо это значение, а тем, что при написании запросов, Вам придется помнить, что у Вас могут встречаться такие значения и соответственно принимать их во внимание. Так как если Вы забудете или попросту не знаете, что в какой-то таблице есть значения NULL, то в дальнейшем Вы можете выводить неправильные данные, а это не есть хорошо.

Совет 6 — в ORDER BY используйте имена столбцов

При сортировке (ORDER BY) лучше использовать имена столбцов, а не их позиции (номера), так как могут возникнуть проблемы. Например, Вы использовали сортировку по их номеру и отдали запрос разработчику приложения, затем через некоторое время возникла необходимость изменить данный запрос путем добавления или удаления некоторых полей, а про сортировку забыли и снова отдали запрос разработчику. И теперь при выводе данных будет использоваться неправильная сортировка, а со стороны пользователя вообще может возникнуть мнение, что выводятся неправильные данные, он об этом скажет Вам, а Вы будете не понимать, ведь все же работало, что же не так. А все потому, что никакой ошибки не возникнет, чтобы ее можно было отследить, а все банально и просто, Вы использовали сортировку по номеру столбца.

Не нужно так делать

   
   SELECT col, col2, col3
   FROM table
   ORDER BY 2, 1


А лучше так

   
   SELECT col, col2, col3
   FROM table
   ORDER BY col2, col


Совет 7 — сохраняйте SQL запросы

Если Вы пишите какой-то разовый запрос и в дальнейшем он может, и никогда не будет использоваться, все равно сохраните этот запрос в любом виде, обычно в файлах .sql, так как по опыту могу сказать, что он может пригодиться и для других задач или помочь их решить намного быстрей. Если Вы не сохраните, то Вам придется продумывать всю логику, алгоритм заново что, конечно же, влияет на скорость выполнения задания.

Совет 8 — не создавайте много курсоров

Не создавайте много курсоров. Так как курсор — это достаточно ресурсоемкая операция для сервера, поэтому если есть возможность обойтись без него, то лучше его не использовать. Хотя есть такие задачи, когда курсор это единственное возможное решение, поэтому он тоже, в некоторых случаях, очень полезен.

Примечание! А если Вы даже не знаете, как создавать курсоры, то в этом Вам поможет следующая статья Как использовать курсор в функциях на PL/pgSQL

Совет 9 — проверяйте и тестируйте условия при UPDATE и DELETE

Совет на собственную проверку. Иногда, когда требуется что-то массово обновить (UPDATE), всегда тестируйте запрос на тестовой базе, иначе, например, одно не верное условие может быть практически необратимо. Поэтому всегда под рукой должна быть тестовая база.

Совет 10 — используйте понятные названия

Создавайте понятные названия столбцов в таблицах, а также используйте понятные название переменных, данный совет относится не только к SQL, но и к программированию в целом.

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

Использование искусственного интеллекта OpenAI ChatGPT 4 для написания SQL-запросов для анализа данных

Выпуск продукта искусственного интеллекта OpenAI ChatGPT как никогда упростил для бизнес-пользователей и аналитиков данных повышение продуктивности их работы. Одним из больших преимуществ этой новой технологии для бизнес-аналитиков является ее способность помогать вам писать SQL-запросы. SQL уже давно используется бизнес-аналитиками для запросов и анализа данных. Изучение и написание SQL стало проще, чем когда-либо, благодаря технологии искусственного интеллекта, которая поможет вам автоматически писать, редактировать, отлаживать и оптимизировать SQL-запросы за считанные секунды.

Если вы хотите использовать ИИ, чтобы помочь вам с SQL непосредственно в вашей собственной схеме данных, вы можете начать сегодня с SQL-бота LogicLoop с поддержкой ИИ, который использует мощь ИИ генерации SQL ChatGPT, чтобы помочь вам генерировать SQL-запросы, которые вы можете запускать непосредственно в своей базе данных.

Как ChatGPT и искусственный интеллект (ИИ) могут помочь вам в написании SQL-запросов

ChatGPT — это мощная языковая модель, которая может помочь пользователям в написании SQL-запросов. Этот инструмент может быть особенно полезен для тех, кто плохо знаком с SQL или кому нужна помощь с более сложными запросами. Одним из основных преимуществ использования ChatGPT для написания SQL-запросов является его способность понимать входные данные на естественном языке. Это означает, что пользователи могут просто объяснить данные, которые они ищут, и модель сгенерирует соответствующий SQL-запрос. Это может сэкономить пользователям значительное количество времени и усилий по сравнению с написанием запроса вручную.

Еще одним преимуществом использования ChatGPT для SQL-запросов является возможность генерировать несколько вариантов для данного запроса. Это может быть полезно для пользователей, которые не уверены в том, как лучше всего структурировать запрос, или для тех, кто хочет сравнить различные варианты. Кроме того, ChatGPT может помочь пользователям в отладке их SQL-запросов, выявляя и указывая на любые ошибки.

ChatGPT также может помочь пользователям с более сложными концепциями SQL, такими как объединение таблиц и создание подзапросов. Это может быть сложно понять и реализовать для тех, кто плохо знаком с SQL, но ChatGPT может предоставить четкие объяснения и примеры, чтобы помочь пользователям лучше понять эти концепции.

В дополнение к возможности писать и объяснять SQL-запросы, ChatGPT также может предоставлять контекстно-зависимые предложения во время написания запроса. Он также может предоставлять информацию о таблице и ее столбцах, что может помочь пользователям понять данные, с которыми они работают. С ChatGPT вы можете тратить меньше времени и усилий на написание SQL-запросов и больше времени на анализ необходимых вам данных.

Давайте рассмотрим несколько конкретных примеров с наиболее популярными вариантами использования LogicLoop: 

Пример: пометка пользователей с высокой скоростью транзакций

Одним из самых популярных вариантов использования LogicLoop является мониторинг мошенничества и транзакций. Пользователи хотят писать SQL-запросы для выявления подозрительных транзакций на своей платформе. В следующем примере мы использовали ИИ, чтобы помочь нам написать SQL-запрос, чтобы найти всех пользователей, которые потратили более 10 000 долларов США за последний месяц, что указывает на высокую скорость транзакций, что должно побудить аналитика мошенничества провести расследование.

Пример: поиск опытных пользователей, которые приглашают многих других пользователей

Еще один популярный вариант использования LogicLoop — найти опытных пользователей на вашей платформе, чтобы еще больше привлечь их, предоставив им дополнительную поддержку или побудив их рассмотреть вопрос о дополнительных продажах вашего продукта. В этом примере ИИ помог нам создать SQL-запрос, чтобы найти всех опытных пользователей нашей платформы, которые за последнюю неделю пригласили в наше приложение не менее 10 других товарищей по команде, чтобы члены отдела продаж могли связаться с конкретными людьми.

Пример: научиться находить низкий уровень запасов

Если вы впервые изучаете SQL, ChatGPT может даже объяснить вам, как он построил SQL-запрос и что означает каждая строка. Другой вариант использования, который популярен в LogicLoop, — это мониторинг логистики и уровня запасов. Таким образом, вы можете определить, какие товары заканчиваются на складе и нуждаются в повторном заказе. В этом примере ИИ смог объяснить нам, как создать SQL-запрос, который вычисляет, какие SKU имеют наименьший уровень запасов.

Пример: найдите компании, которые тратят много денег на вашу платформу, но у которых медленное время отклика на обращение в службу поддержки

ИИ может даже генерировать очень сложные SQL-запросы. Еще одним популярным вариантом использования LogicLoop является отслеживание SLA заявок на поддержку. Пользователи LogicLoop хотят написать SQL-запрос, который находит всех своих клиентов (пользователей или компании), у которых медленное время отклика на запросы в службу поддержки, чтобы они могли предупредить своих сотрудников службы поддержки о необходимости принять меры. Это особенно актуально, если пользователь или компания является важным клиентом или совершает покупки на большие суммы и представляет собой организацию, которая приносит большой доход. В следующем запросе ИИ принял во внимание эти различные факторы, чтобы сгенерировать довольно сложный SQL-запрос для получения нужных нам данных.

Начните сегодня и раскройте мощь SQL + Open AI ChatGPT с LogicLoop

Как мы видели всего на 4 примерах, использование AI для генерации SQL может быть чрезвычайно эффективным. Как и любая новая технология, искусственный интеллект не является панацеей, и вы не должны ожидать, что сможете просто копировать и вставлять SQL-запросы, не понимая, как работают ваши данные. Однако искусственный интеллект делает изучение и использование возможностей сложного SQL значительно более эффективным и удобным. Вы можете зарегистрироваться в LogicLoop, чтобы попробовать его самостоятельно и использовать возможности SQL с поддержкой ИИ непосредственно на ваших собственных данных. Повысьте операционную эффективность вашего бизнеса, уменьшите потери и недобросовестных игроков на вашей платформе или воспользуйтесь возможностями роста уже сегодня.

Как использовать ChatGPT для написания SQL-запросов

Написание SQL-запросов может занимать много времени и быть сложным. Если перед вами стоит задача создания решений для конкретных бизнес-сценариев, вы должны быть уверены, что ваши запросы эффективны и точны.

ChatGPT — это инструмент искусственного интеллекта, обученный работе с огромным набором технических текстов, включая SQL. Он может отвечать на вопросы о синтаксисе SQL, генерировать запросы SQL или объяснять вывод данного запроса SQL.

Используя ChatGPT для генерации SQL-запросов, вы можете сосредоточиться на задачах более высокого уровня, таких как разработка отчетов и потоков данных. Это не только экономит ваше время, но также обеспечивает качество и эффективность анализа данных.

К концу этой статьи у вас будет четкое представление о том, как использовать ChatGPT для написания SQL-запросов.

Содержание

Переключить

Преимущества использования ChatGPT для SQL-запросов

ChatGPT — это мощный инструмент искусственного интеллекта, который понимает естественный язык. Он может служить ценным инструментом как для начинающих, так и для опытных разработчиков.

Новичкам может показаться, что синтаксис SQL сложен и труден для запоминания. ChatGPT может помочь, превращая запросы на естественном языке в запросы SQL. Это делает изучение SQL более интерактивным и менее сложным, так как вы можете видеть перевод простого английского языка в SQL в режиме реального времени.

Опытные разработчики могут обнаружить, что формулирование сложных SQL-запросов, включающих несколько таблиц и условий, может занимать много времени. ChatGPT может ускорить процесс, генерируя скелеты запросов или даже завершая запросы на основе задачи, описанной на естественном языке.

Это также снижает вероятность синтаксических ошибок. Говоря об ошибках, ChatGPT также может помочь в отладке SQL-запросов, предоставляя возможные решения или объяснения. Он также может предложить различные способы оптимизации запроса для повышения производительности.

Если вы хотите получить более общее представление об этом инструменте, ознакомьтесь со следующими статьями:

  • Что такое ChatGPT?

  • Как использовать ChatGPT.

  • Что такое ChatGPT API?

Если вы хотите начать использовать его для запросов SQL, читайте дальше.

Как начать работу с ChatGPT для SQL-запросов

Если у вас еще нет учетной записи Open AI (это бесплатно!), выполните следующие действия.

  1. Запустите браузер и перейдите на https://chat.openai.com/.

  2. Нажмите кнопку регистрации.

  3. Зарегистрируйтесь, используя адрес электронной почты, учетную запись Microsoft или учетную запись Google.

  4. Укажите номер телефона для проверки.

После входа в систему вы можете сразу начать отправлять сообщения, на которые нужно ответить. Ваше сообщение известно как приглашение ChatGPT.

В этой статье приведено множество примеров, которые помогут вам ознакомиться с использованием инструмента при работе с SQL.

Как начать сеансы ChatGPT для SQL-запросов

Различные поставщики баз данных расширили стандартный код SQL с помощью собственного синтаксиса.

Например, у Microsoft есть Transact-SQL (сокращенно T-SQL) для взаимодействия с экземпляром Microsoft SQL Server. Синтаксис T-SQL не будет работать в базе данных SQL другого типа, например MySQL или PostgreSQL.

PostgreSQL — это расширение с открытым исходным кодом, которое имеет дополнительные команды и синтаксис, которые не будут работать на SQL Server или Oracle.

Это означает, что когда вы просите ChatGTP предоставить SQL-запрос с использованием расширенных функций системы баз данных, вы должны начать сеанс чата, указав, какую реализацию SQL вы используете.

Вы можете начать сеанс с заявления вроде « Я работаю с Microsoft SQL Server». и задайте свой вопрос в следующем предложении.

Чтобы сделать это проще, вы можете использовать « С SQL Server , как мне …?» когда спрашивают о понятии или термине.

В оставшейся части этой статьи я сосредоточусь на стандартных SQL-запросах, которые работают во всех основных системах управления базами данных.

Как сформулировать свои намерения в ChatGPT

Важно четко сформулировать свои намерения в ChatGPT.

Начните с описания структуры ваших таблиц, чтобы ChatGPT имел представление о модели данных, с которой вы работаете. Упомяните имена и отношения таблиц, а также столбцы и их типы данных. Например:

У меня есть две таблицы: заказы и клиенты. В таблице заказов есть столбцы id, customer_id, product и price. В таблице клиентов есть идентификатор столбца, имя и адрес электронной почты. Customer_id в таблице заказов — это внешний ключ, ссылающийся на столбец id в таблице клиентов.

Затем просто объясните конкретный запрос, который вы хотите сгенерировать, используя естественный язык ( человекоподобный текст вместо кода ).

Будьте максимально точными, чтобы помочь ChatGPT понять, что вы ищете. Например:

Напишите SQL-запрос, который находит общий доход каждого клиента путем вычисления суммы цен их заказов.

ChatGPT возвращает запрос SQL с разбивкой по различным частям. Взгляните на следующий пример оператора select:

Технология искусственного интеллекта сгенерировала SQL-запрос на основе предоставленных вами имен таблиц и запроса.

Но на этом инструмент не останавливается. Он указывает на пару дополнительных вещей:

Формулирование запросов на основе результатов запроса

Чтобы добиться лучших результатов запросов с помощью ChatGPT, вы можете разбивать сложные запросы на более мелкие фрагменты, чтобы поддерживать диалоговый поток.

Например, предположим, что вам нужен более сложный запрос, фильтрующий клиентов по их городу.

Вы можете продолжить сеанс чата, предоставив эту новую информацию.

У меня есть другая таблица с именем customer_address со столбцами id, customer_id, street, city, state. Customer_id — это внешний ключ к таблице клиентов.

Изменить предыдущий запрос SQL, чтобы отфильтровать клиентов из Чикаго.

ChatGPT возвращает измененный запрос с новым предложением WHERE.

Если у вас нет опыта работы с SQL, это отличный способ расширить свои знания.

Помните, что ваши запросы должны быть краткими и соответствовать контексту, чтобы обеспечить бесперебойную работу с ChatGPT.

4 Рекомендации по созданию запросов

Вот несколько советов, которые помогут убедиться, что код SQL, который выдает ChatGPT, является правильным решением:

  • Будьте точны с именами таблиц и столбцов, чтобы избежать двусмысленности.

  • Четко укажите любые условия, фильтры или требования к сортировке.

  • Укажите желаемый формат вывода, например столбцы или агрегаты.

  • При необходимости приведите примеры подобных сложных запросов.

Чем точнее ваше описание, тем точнее будет сгенерированный запрос.

2 способа оптимизации производительности

При использовании ChatGPT для генерации SQL-запросов крайне важно учитывать аспект производительности запросов. Вот два способа оптимизировать SQL-запросы для повышения производительности:

Использовать соответствующие индексы

В некоторых расширениях SQL можно указать, что запрос должен использовать определенный индекс, однако это не считается хорошей практикой. Если схема базы данных или профиль данных со временем изменяются, вы можете получить запрос, вынужденный использовать неэффективный индекс.

Однако вы можете обратиться в ChatGPT за советом по оптимальным индексам для вашего запроса. Вот пример.

Я хочу создать один или несколько индексов, которые сделают этот запрос наиболее эффективным. Пожалуйста помогите.

ChatGPT порекомендует индексы и объяснит причины выбора.

Важно, чтобы разработчики SQL не создавали вслепую все предлагаемые индексы. Они могут не соответствовать фактическим данным. Я советую вам попробовать и протестировать каждый из них.

Избегайте чрезмерно сложных запросов

Одним из преимуществ построения запросов, как мы предлагали в предыдущем разделе, является то, что вы с меньшей вероятностью получите длинный сложный запрос, который трудно читать и поддерживать.

Если ChatGPT выдает вам запрос с несколькими подзапросами, которые трудно отследить, вы можете попросить предоставить альтернативный сценарий, который использует несколько запросов и одну или несколько временных таблиц.

Допустим, я решил, что фильтрация запросов по «Чикаго» слишком сложна (это не так!). Я бы проинструктировал ChatGPT так:

Я хочу разбить предыдущий запрос на два отдельных запроса, использующих временную таблицу. Сценарий должен достигать таких же результатов.

Вечно услужливый ChatGPT чуть не падает, выполняя ваши приказы. Там написано:

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

Инструмент продолжает предоставлять два отдельных раздела кода, которые дают те же результаты, что и в предыдущих примерах.

Как представить данные в ChatGPT

Если вы хотите устранить неполадки в своих запросах, вы можете предоставить образец данных в ChatGPT и попросить его выполнить SQL.

В предыдущем разделе было показано, как описывать таблицы и отношения. Вы также можете предоставить операторы CREATE TABLE для ChatGPT.

Следующим шагом является предоставление данных в сводном или табличном формате, чтобы помочь ChatGPT понять вашу базу данных и интерпретировать результаты.

Например, вы можете указать такие данные:

Вот данные в этих таблицах.

Клиенты

1, «Джон Смит», «[электронная почта защищена]»

2, «Мэри Доу», «[электронная почта защищена]»

Заказов

1, 1, «Толстовка», 14,99

2, 1, «Футболка», 5,99

3, 2, «Джинсы», 24.99

Адрес_Клиента

1, 1, «Хоуп Стрит», «Чикаго», «Иллинойс»

2, 2, «Черри Лейн», «Филадельфия», «Пенсильвания»

Обратите внимание, что в Чикаго живет только Джон Смит. Предоставив данные, вы можете попросить ChatGPT предоставить результат конкретного запроса.

Если вы попросили инструмент попробовать несколько вариантов в сеансе, я советую вам скопировать и вставить точный запрос, который вы хотите, чтобы он «выполнял», чтобы не было двусмысленности.

Введите это как приглашение: « Предоставьте результат этого запроса: »

ChatGPT будет использовать запрос для расчета общего дохода от заказов Джона Смита. Вот пример, и это правильный ответ!

2 Недостатки использования ChatGPT

Два основных недостатка, на которые следует обратить внимание:

  • неправильный синтаксис

  • неэффективные запросы

Неверный синтаксис

Иногда ChatGPT генерирует SQL, который не компилируется или выдает неверные результаты. Это более вероятно, если вы попросили его работать с проприетарными расширениями стандартного SQL.

Если вы заключаете сгенерированные запросы в хранимые процедуры, обязательно протестируйте их, прежде чем предоставлять результаты аналитику данных или бизнес-пользователям.

Если вас интересует более продуманный способ использования запросов на естественном языке для ваших данных, ознакомьтесь с реализацией Microsoft в Power BI:

Неэффективные запросы

Если вы хотите убедиться, что ваши SQL-запросы эффективны, вы изучаете план выполнения запроса.

Это последовательность операций, выполняемых системой управления базами данных. Это все равно, что открыть машину и посмотреть, что там работает.

Проблема с ChatGPT заключается в том, что он не может видеть, как ваша система управления базами данных обрабатывает ваш SQL-запрос.

Например, сначала фильтрует клиентов по состоянию или выполняет эту часть в последнюю очередь? Это решение может иметь большое значение для производительности.

Если вы обнаружите, что ваш запрос медленно выводит продукт, вам нужно будет засучить рукава и самостоятельно изучить план выполнения.