Итак, вы закончили курс Data Science, вы изучили Python, статистику, линейную алгебру, машинное обучение, глубокое обучение, вы осваиваете основные библиотеки для исследования данных, вы много практиковались с данными Kaggle, сделал отличное портфолио и получил работу специалиста по данным!
Вы очень взволнованы, когда приедете в первую неделю на работу, откройте файлы .csv или .xlsx с пандами и начните изучать данные! Но подождите…
«Где файлы .csv / .xlsx ???»

В настоящее время все компании хранят свои данные в структурированных или неструктурированных базах данных в облаке (AWS, Google Cloud, Azure), поэтому специалисту по данным важно владеть языками SQL и NoSQL для правильного извлечения информации из этих баз данных.
К сожалению, все, что было сказано в вашем курсе Data Science, касалось SQL, было простыми запросами, такими как знаменитый SELECT * FROM table! Что ж, он действительно работает, но поверьте мне, когда вы будете работать с петабайтами информации вы не захотите импортировать две разные таблицы в merge с помощью pandas (на самом деле, в зависимости от конфигурации вашего ПК вы не сможете это сделать).

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

1. Подзапросы (оператор Select с предложением where вызывает другой оператор Select)

Представьте, что вы работаете в зоомагазине и хотите знать имя, возраст и адрес всех клиентов, у которых есть собака, но информация о клиентах находится в таблице, а информация о домашних животных - в другой таблице. Вы можете перенести обе таблицы и объединить их с Python, но вы лучше этого! Вы можете использовать подзапрос для извлечения всех имен клиентов, у которых есть собака, из таблицы2, а затем используйте эти имена клиентов в качестве параметра предложения WHERE для извлечения желаемой информации, как показано в примере ниже:

SELECT column_name, column_age, column_address
FROM table1
WHERE column_name IN (SELECT column_name
                      FROM table2
                      WHERE column_pet_type = 'dog')
ORDER BY column_age DESC

Второй выбор извлекает имена всех клиентов, у которых есть собака, и использует эти имена в качестве параметров предложения WHERE в первом SELECT. Убедитесь, что оператор подзапроса SELECT вернет один столбец, иначе первый оператор SELECT не будет работать.
Таким образом, время, необходимое для извлечения информации из базы данных, будет быстрее, чем при извлечении всей информации и последующем объединении таблиц.

2. Временные таблицы

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

SELECT column_id, 
       column_name, 
       DATEDIFF(hour, column_birth_date, GETDATE())/8766 AS Age
INTO #TemporaryTable
FROM table1
SELECT column_id
FROM #TemporaryTable
WHERE column_name = 'Daniel'
AND Age = 33

В первой части запроса я преобразовываю столбец Birth_date в Age с помощью функции DATEDIFF, а затем сохраняю информацию INTO #TemporaryTable.
Во второй части я использую созданную мной временную таблицу для запроса идентификатора столбца с определенным возрастом, извлеченным из временной таблицы .

3. Параметризованные запросы

параметризованный запрос (также известный как подготовленный оператор) - это средство предварительной компиляции оператора SQL, чтобы все, что вам нужно было предоставить, это «параметры», которые необходимо вставить в оператор для него. быть исполненным. Он обычно используется для предотвращения атак с использованием SQL-инъекций.
SQL-инъекции - это уязвимость веб-безопасности, которая позволяет злоумышленнику вмешиваться в запросы, которые приложение делает к своей базе данных. Обычно это позволяет злоумышленнику просматривать данные, которые они обычно не могут получить. Во многих случаях злоумышленник может изменить или удалить эти данные, вызывая постоянные изменения содержимого или поведения приложения.
В приведенном ниже примере я передаю в качестве параметра своему запросу «имя» и «возраст» синтаксис. используется для Microsoft Server SQL (%(parameter)s), для других баз данных проверьте их документацию, чтобы увидеть правильный синтаксис.

import pandas as pd
import pymssql
query = """SELECT column_name, column_address, 
                  column_email, column_age
           FROM table1
           WHERE column_name = %(name)s
           AND column_age = %(age)s"""
conn = pymssql.connect(host, user, password, database)
dataframe = pd.read_sql(query, conn, 
                        params = dict(name = 'Daniel', age = 33))
#Or if you execute the query using cursor
cur = conn.cursor()
cur.execute(query, params = dict(name = 'Daniel', age = 33))

Заключение

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