SELECT (с англ. «выбрать») – это команда выборки из базы данных любой информации и преобразование ее к любому удобному виду. С помощью этой команды можно получить информацию из любой таблицы или сразу из нескольких. Получаемый результат можно группировать, анализировать, сортировать.
SELECT – это самая часто используемая команда языка SQL. С помощью нее можно получать как табличные данные (например, список клиентов с подробными сведениями о них, топ самых продаваемых товаров за прошлый год, или список доступных банковских продуктов для клиента), так и какую–либо обобщающую информацию (доступный баланс на банковской карте – одна цифра, количество друзей друга/подруги в социальной сети, оставшееся количество мест в любимом отеле на интересующую дату). Любые данные в любом виде из базы данных получает команда SELECT.
Синтаксис команды SELECT максимально прост, чтобы выбрать какую–либо информацию из таблицы нужно написать:
Итак, чтобы выбрать информацию из некоторой таблицы, нужно написать слово SELECT, потом какие именно столбцы нас интересуют (через запятую), потом слово FROM и далее имя таблицы.
Любой запрос можно писать хоть весь в одну строку, хоть разбивать его на несколько строк. Если запрос получается большой и сложный, то, чтобы он был более легко читаем, его принято разбивать на несколько строк. Постепенно мы будем привыкать к хорошему стилю написания SQL–кода.
Теперь попробуем написать первую команду выборки данных:
Приведенный выше запрос выберет данные из таблицы Persons. Покажет информацию из столбцов ID и Name. Получим результат вида:
Давай выведем еще и даты рождения сотрудников:
Чтобы полученный результат SQL–запроса упорядочить по одному или нескольким столбцам (сортировка), нужно в предложение добавить еще блок ORDER BY (с англ. «упорядочить по»):
Выборка информации из таблицы базы данных без условий, то есть всех строк таблицы (!) не часто бывает нужна и поэтому, почти всегда, на выбираемые строки накладывают условие или условия с помощью еще одного блока – блока WHERE. Именно в блоке WHEREпишутся одно или несколько (комбинация) условий тех данных, которые нужно выбрать. Его место в запросе SELECT:
Блок ORDER BY всегда пишется в самом конце SQL–запроса!
Если к выводимым данным необходимо добавить данные еще из одной или нескольких таблиц (присоединить к выводящимся данным данные из других таблиц), то после того, как мы написали слово FROM и имя основной таблицы, мы можем присоединять дополнительные таблицы с помощью слова JOIN:
Ничего себе, сколько всего, скажешь ты, как это можно все запомнить и понять?! Каждый блок мы разберем по–отдельности и каждому уделим достаточно внимания!
Но и это еще не все. Есть еще одна возможность команды SELECT – это группировка.
Получаемые данные можно группировать по одному или нескольким признакам одновременно.
Для того чтобы указать по одинаковым значениям в каком столбце необходимо данные группировать, нужно команду SELECT дополнить блоком GROUP BY (с англ. группировать по) и затем написать имя столбца, по которому необходима группировка. И теперь все строки получаемого набора данных будут группироваться по одинаковому значению в этом столбце.
Например, в конце года, нам может понадобится отобрать «любимых» клиентов нашей организации для того, чтобы поздравить их с наступающими праздниками и сделать некоторый приятный бонус. Любимыми являются клиенты, у которых сумма заказов за прошедший год более 500.000 рублей.
Для решения подобной задачи, вначале, из таблицы «Продаж» мы отберем все сделки за прошедший год. Для выборки данных согласно этому условию воспользуемся блоком WHERE. Итак, когда данные будут извлечены из таблицы, за нужный нам промежуток времени, мы можем увидеть, что ни один из единичных заказов не больше 500.000 р. Но, если сгруппировать полученные данные по каждому клиенту, то может получиться, что некоторые клиенты, суммарно за год хорошо превышают этот порог.
До выполнения группировки мы видели каждую строчку продаж всем клиентам в полученной таблице данных, затем мы все данные сгруппировали по клиентам.
Например, все выбранные продажи «Клиенту А» сгруппировались в одну строку, подсчитав сумму продаж ему, а все продажи «Клиенту Б» в другую строку, также с итогом по нему. И так по каждому клиенту. Теперь мы видим итоги с суммами продаж за год с группировкой по клиентам. Так как «Клиент А», например, в течение года каждый месяц делал заказы на 100.000 р. Поэтому, после группировки всех сумм его заказов, мы получим 1.200.000 р (100.000 × 12 месяцев).
Подробнее про группировку и ее мощные сопутствующие возможности, мы рассмотрим в отдельной главе. Место слова GROUP BY в предложении SELECT:
После группировки всех продаж за год в общем отчете, тем не менее, еще остается много клиентов, которые обращались в нашу компанию один или два раза, и, что самое главное, общая сумма их заказов не превышает порог «любимых клиентов». И таких клиентов много. Руководство нашей компании не хотело бы вручную из полученных итогов отбирать «Любимых клиентов». Чтобы оставить только нужные данные на основе получаемых сгруппированных итогов, мы воспользуемся опцией «HAVING» блока GROUP BY.
Важно понять, что только после группировки по клиентам мы смогли получить итоговую сумму заказов за год по каждому клиенту, и, чтобы на основе уже этой полученной суммы (сгруппированной суммы) отфильтровать результирующий набор клиентов, мы можем применить HAVING.
На собеседованиях часто можно встретить такой вопрос: в чем разница между WHERE и HAVING? И теперь мы знаем ответ: WHERE выполняет первичный отбор данных из таблицы (таблиц) (например, мы сначала отобрали данные продаж только за прошедший год), а HAVING отсеивает уже на основе сгруппированной информации.
То есть после того, как будут получены суммы по клиентам, в результирующем наборе останутся только те клиенты, у которых эти суммы более интересующего нас значения.
Кончено, мы можем отбирать строчки из таблицы заказов тех, где стоимость заказов больше, например, определенной. Но у нас задача была другая. Нам необходимо было получить клиентов, сумма заказов за год которых превысила 500.000 р. Поэтому мы применили и WHERE для первичного отбора строчек данных из таблицы «Заказов» тех, которые относятся к прошедшему году, и затем еще GROUP BY и HAVING, чтобы сгруппировать данные по клиентам и на основе сгруппированной (агрегированной, то есть обобщенной) информации сделать еще одну фильтрацию данных.
Так как HAVING – это необязательная опция слова GROUP BY, то его следует писать после GROUP BY:
И это уже полная структура одного предложения SELECT. Полный список ключевых слов, которые можно применять при выборке данных. Из всех перечисленных ключевых слов обязательными являются только SELECT и FROM. Запросы могут быть даже без WHERE и без сортировки – ORBER BY. Главное, что всегда нужно указывать, – это какие столбцы отбирать и откуда.
Конечно, мы будем применять еще и кейсы, и подзапросы, но это все будет строиться на основе структуры, которая приведена выше. Поэтому, ее нужно запомнить.
Для Гуру: в СУБД MS SQL Server и MySQL даже FROM не обязателен при выводе данных, но это исключение и применяется при решении специфических задач. Объясню тебе про это на уроке про псевдотаблиц.
Буду рад, если подпишешься на мой канал или оставишь комментарий к моему посту! Скоро будет продолжение!
Заходи на наш Youtube-канал и найдешь много интересного и полезного про базы данных и язык SQL.
А здесь ты можешь пройти наш курс обучения языку SQL и получить мощные знания и умения! Всего за 27 уроков до уровня специалиста, имеющего трёхлетний стаж. Много практики в реальной базе данных! С нашей поддержкой и проверкой твоих самостоятельный задач! Записывайся, буду тебя ждать!