Как создать простой SQL запрос на выгрузку данных из базы

Язык SQL-запросов (расшифровывается как Struc­tured Query Lan­guage) предназначен для работы с реляционными базами данных, основанных, как правило Microsoft SQL Serv­er или Oracle. При помощи SQL можно создавать или удалять таблицы или строки в них, вносить изменения.  Но чаще всего данный язык запросов используется для выгрузки определенной информации. В этой статье мы узнаем, как создать простой SQL запрос на выгрузку данных из базы.

 

Кратко о методах в SQL

 

SQL насчитывает несколько основных методов для работы с базой данных: CREATE, INSERT, DELETE, DROP, SELECT. 

Метод CREATE — создает новый объект в базе данных. Это может быть новая таблица, представление, индекс и т.д.

Метод INSERT — добавляет новые строки в существующую таблицу.

Метод DELETE— удаляет строки из существующей таблицы.

Метод UPDATE — модифицирует запись в таблице.

Метод DROP — удаляет объект.

Метод SELECT — выводит информацию из базы данных, при этом не изменяя сами данные.

На самом деле, если вы хотя бы на самом примитивном уровне знаете английский язык, то без труда освоите SQL-запросы. Потому что, как вы уже могли заметить, перевод названия методов отражает их значения (например, CREATE с английского переводится как “создать”). И все команды SQL также будут интуитивно понятны по их переводу.

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

 

Как выгрузить информацию из базы данных при помощи SELECT

 

Начнем с того, что определим структуру запроса:

SELECT 

указываем перечень столбцов, которые нужно вывести, или *, если нужно вывести все столбцы. Обязательный элемент.

FROM 

указываем таблицу, из которой выводим информацию. Обязательный элемент

WHERE

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

GROUP BY

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

HAVING

условия фильтрации на уровне сгруппированных данных. Необязательный элемент.

ORDER BY

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

 

Опять хочу обратить внимание, как просто запомнить операторы SQL.

Дословно: 

Выделить (SELECT)— что именно, какие столбцы?

Откуда (FROM) — из какой таблицы?

Где (WHERE) — где такой-то столбец имеет определенное значение.

И сгруппируем по (GROUP BY) — по каким столбцам?

Имеющие (HAVING)— имеющим определенные значения в нужных столбцах.

И упорядочим по (ORDER BY) — по определенным столбцам.

 

Видите, как просто!

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

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

Чтобы стало еще понятнее, рассмотрим примеры.

 

SQL запросы на примерах

 

Предположим, у нас есть таблица Customers, в которой содержатся следующие столбцы:

CustomerID

CustomerName

ContactName

Address

City

PostalCode

Country

SumProd

 

1. Для первого примера воспользуемся только обязательными операторами запроса — SELECT и FROM.

 

SELECT

FROM Customers

Этот запрос выведет все столбцы (потому что в select указана *) и все строки из таблицы Customers.

 

2. Следующий пример выведет только те столбцы, которые мы выбрали:

 

SELECT CustomerName, City

FROM Customers

Этот запрос выведет только столбцы CustomerName и City из таблицы Customers, и все строки по ним (всех покупателей по всем городам).

 

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

 

3. Для следующего запроса добавляем необязательный элемент WHERE. Предыдущий пример вывел всех покупателей по всему миру,  а это несколько миллионов строк… Что делать с таким огромным массивом и зачем он нужен, если нам нужны только покупатели из Парижа?

 

Модифицируем наш запрос:

 

SELECT CustomerName, City

FROM Customers

WHERE City=’Paris’

 

Этот запрос выведет нам столбцы CustomerName и City, но только для тех строк, где City указан Paris.

Причем, столбец, по которому фильтруем (в данному случае, City), может и не содержаться в SELECT.

 

SELECT CustomerName

FROM Customers

WHERE City=’Paris’

 

Данный запрос выведет просто имена покупателей, но только тех, кто проживает в Париже.

 

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

 

SELECT distinct City, SUM(SumProd)

FROM Customers

WHERE Country=’France’

GROUP BY City

 

Этот запрос выведет нам сумму продаж по всем городам Франции.

City SUM(SumProd)
Paris 120020
Marsel 500000
Strastburg 40500

 

Теперь разберемся с новыми понятиями:

 

  • DISTINCT — оператор, который выводит только уникальные значения из списка. В данной таблицу город Paris встречается много раз (т.к.покупателей оттуда много), но в таблицу он вышел только один раз — здесь помог оператор DISTINCT.
  • SUM(SumProd) — это агрегирующая функция. Здесь она суммирует продажи по указанному столбцу (City).

Про агрегирующие функции есть отдельная статья:

 

  • оператор GROUP BY — показывает, по какому столбцу будут сгруппированы данные. 

 

И здесь мы понимаем, что необязательный элемент GROUP BY в данном случае становится обязательным (попробуйте выполнить этот запрос без него).

 

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

 

И отсюда еще одно основное правило SQL-запросов: набор столбцов в SELECT и GROUP BY должен быть одинаковым. Агрегирующие функции в GROUP BY никогда не указываются.

 

5. Добавим оператор HAVING в наш запрос:

 

SELECT distinct City, SUM(SumProd)

FROM Customers

WHERE Country=’France’

GROUP BY City

HAVING SUM(SumProd)>100000

 

Оператор HAVING работает только со сгруппированными данными и указывается после GROUP BY. Чаще всего HAVING используют с числовыми значениями, как в данном случае. Мы выводим список городов Франции с сумму продаж по ним — но только тех городов, где суммы продаж превышает 100000.

 

Почему нельзя было указать это условие в операторе WHERE?

Дело в том, что WHERE работает с несгруппированными, “сырыми” данными из таблицы. Перебирает каждую строку. И если указать: 

WHERE SumProd>100000,

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

 

6. И наконец, добавим последний элемент запроса ORDER BY, который отсортирует выведенные данные в определенном порядке.

 

SELECT distinct City, SUM(SumProd)

FROM Customers

WHERE Country=’France’

GROUP BY City

HAVING SUM(SumProd)>100000

ORDER BY City

 

В данном случае, таблица будет отсортирована по столбцу City в алфавитном порядке от A до Z. 

Если нужно отсортировать в обратном порядке, то используем элемент DESC:

ORDER BY City DESC

Теперь таблица отсортирована по столбцу City в порядке от Z до A.

Также можно использовать несколько столбцов для сортировки.

И в конце разберем основные правила синтаксиса языка SQL.

 

Основные правила синтаксиса языка SQL

 

  • SQL не чувствителен к пробелам и переносам строк. Можно ставить сколько угодно пробелом и нажимать Enter для переноса строки, запрос эту информацию не учитывает
  • SQL не чувствителен также к регистру букв. Можно написать SELECT или select, или Select. И даже SeLeCt. Это правило касается не только операторов, но и всего запроса.
  • В запрос можно вставить комментарий. Иногда запросы бывают таким сложными и длинными, что даже сам автор не сразу понимает, где что написано, поэтому комментирование запросов SQL — очень нужный инструмент. 

Чтобы вставить комментарий, в начале строки указываются два дефиса подряд, например:

— текст комментария

  • Текстовые значения в фильтрах всегда берутся в одинарные кавычки. Например: Where City = ‘Paris’
  • Элементы в блоках SELECT, FROM, GROUP BY и ORDER BY всегда разделяются запятой, а в блоках WHERE и HAVING — операторами AND или OR, в зависимости от от условий запроса.

 

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *