Основы SQL Server: Использование SQL SELECT и условий WHERE и HAVING для извлечения данных

В этой статье я расскажу о основах использования оператора SQL SELECT для извлечения данных из одной или нескольких таблиц SQL Server. Я также опишу, как извлекать выбранные столбцы, а также как использовать предложения SQL WHERE и HAVING для фильтрации строк.

Все примеры в этой статье используют образец базы данных AdventureWorksLT2019. В предыдущей статье из этой серии я объяснил, как заполнить таблицы SQL Server с помощью операторов INSERT, UPDATE и DELETE. Эти операторы языка структурированных запросов (SQL) изменяют содержимое таблицы, но оператор SQL SELECT имеет другой смысл.

Реклама

 

Как использовать простой оператор SQL SELECT

Оператор SQL SELECT используется для запроса данных из таблицы. Следующий код иллюстрирует самый простой синтаксис оператора SELECT.

SELECT columns FROM schema_name.table_name;

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

Первое соглашение оператора SELECT – это список имен столбцов, которые будут извлечены. Здесь вы указываете список столбцов, разделенных запятыми, из которых хотите извлечь данные.

Реклама

Затем в разделе FROM указывается исходная таблица и ее имя схемы, если это требуется. SQL Server использует схемы для логической группировки таблиц и других объектов базы данных. Схема по умолчанию для каждой базы данных – dbo, и поскольку именно эта схема используется здесь, ее можно опустить.

В следующем примере показан простой оператор SELECT:

  • Первая команда USE устанавливает текущую базу данных в AdventureWorksLT2019.
  • Оператор SELECT предоставляет список столбцов для набора результатов, который будет извлечен из таблицы SalesLT.Customer.
  • В данном случае образец базы данных AdventureWorksLT2019 использует имя схемы ‘SalesLT’ (среди прочих), поэтому вам нужно включить имя схемы, точку, а затем имя таблицы, которое является ‘Customers’.
  • Столбцы ‘FirstName’ и ‘LastName’ извлекают имя и фамилию клиента.
USE AdventureWorksLT2019
SELECT FirstName, LastName from SalesLT.Customer
An example of a simple SQL SELECT statement (Image credit: Petri/Michael Otey)

В качестве сокращения вы можете использовать звездочку (*) для извлечения всех столбцов в таблице независимо от их количества. Ниже приведен пример:

USE AdventureWorksLT2019
SELECT * from SalesLT.Customer
You can use an asterisk (*) to retrieve all of the columns in the table (Image credit: Petri/Michael Otey)

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

Advertisement

Как фильтровать строки с помощью SQL WHERE

Реальная сила оператора SELECT проявляется в его возможностях фильтрации и объединения. Запрос SELECT может использовать необязательное WHERE условие для фильтрации данных, которые будут возвращены.

WHERE-условие использует одно или несколько логических условий для выбора необходимых данных таблицы. WHERE-условие всегда идет после FROM-условия и перед условиями GROUP BY, HAVING и ORDER BY.

Вы можете увидеть пример использования оператора WHERE в SQL ниже. Здесь оператор WHERE используется для фильтрации списка выбранных столбцов ‘FirstName’, ‘LastName’, ‘Phone’ и ‘CompanyName’ из строк, содержащих значение ‘Sharp Bikes’ в столбце ‘CompanyName’.

USE AdventureWorksLT2019
SELECT FirstName, LastName, Phone, CompanyName FROM SalesLT.Customer WHERE CompanyName = 'Sharp Bikes';
Using the WHERE clause to filter data that will be returned (Image credit: Petri/Michael Otey)

Фильтрация строк, содержащих значение внутри строки

Сила использования оператора WHERE с оператором SELECT заключается в его гибкости. Оператор WHERE превосходит простое сравнение по равенству, “больше” и “меньше” операторы сравнения. Давайте ближе рассмотрим, что можно сделать с оператором WHERE, начиная с использования оператора SQL LIKE.

Оператор LIKE используется для определения, соответствует ли конкретная последовательность символов указанному шаблону. В примере ниже мы извлекаем все строки из таблицы Customer, которые содержат слово ‘Bike’ в любом месте колонки ‘CompanyName’. В этом случае мы должны использовать знак % как wargsymbol перед и после слова ‘Bike’.

USE AdventureWorksLT2019
SELECT SalesPerson, CompanyName FROM SalesLT.Customer WHERE CompanyName LIKE('%Bike%');
Using the WHERE clause with the LIKE operator (Image credit: Petri/Michael Otey)

Фильтрация строк, соответствующих любому из трех условий

Вы также можете использовать子句 WHERE для фильтрации строк на основании нескольких различных значений.下述代码清单显示了如何使用 SELECT выражение с WHERE子句 выбрать три различных значения из таблицы Product. В этом примере WHERE子句 использует operatornor, чтобы выбрать строки, где ‘ProductID’ равен 680, 711 или 722.

USE AdventureWorksLT2019
SELECT Name, ProductID, ProductNumber FROM SalesLT.Product
 WHERE ProductID = 680 OR ProductID = 711 OR ProductID = 722; 
Filtering rows that meet different conditions with the WHERE clause (Image credit: Petri/Michael Otey)

Фильтрация строк, принадлежащих списку значений

Точно так же вы можете использовать оператор WHERE для выбора строк, содержащихся в списке, определенном с помощью оператора IN. В следующем примере оператор SELECT вернет строки, содержащие значения «Bothell», «Bellevue» или «Renton» в столбце «City» таблицы SalesLT.Address.

USE AdventureWorksLT2019
SELECT AddressID, AddressLine1, City FROM SalesLT.Address
WHERE City IN ('Bothell', 'Bellevue', 'Renton');
Filtering rows that are in a list of values with the IN operator (Image credit: Petri/Michael Otey)

Фильтрация строк с значением между двумя значениями

Также можно использовать оператор WHERE оператора SELECT с оператором BETWEEN для выбора значений строки, попадающих в определенный диапазон в определенном столбце. В следующем примере показано, как использовать BETWEEN для возврата строк из таблицы Product, у которых значение в столбце «ListPrice» больше 10 и меньше 50.

USE AdventureWorksLT2019
SELECT ProductID, Name  FROM SalesLT.Product  WHERE ListPrice Between 10 AND 50; 
Filtering rows that have a value between two values (Image credit: Petri/Michael Otey)

Фильтрация строк с оператором HAVING

Вы также можете фильтровать строки в наборе результатов, используяCLAUSE>. CLAUSE добавлен в SQL Server из-за того, что ключевое слово WHERE не может использоваться с агрегирующими функциями, такими как GROUP BY. Он используется для определения условия поиска для группы или агрегированного значения, которое включает одно или несколько условий, которые верны для различных групп записей.

CLAUSE всегда идет после CLAUSE и перед CLAUSE, как видите в следующем SQL запросе. В этом примере набор результатов состоит из ‘SalesOrderID’ и alias колонки ‘SubTotal’. Порядок указан как асс (по возрастанию) и строки являются агрегированными группами, сгруппированными по ‘SalesOrderID’.

USE AdventureWorksLT2019 ; 
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal 
FROM SalesLT.SalesOrderDetail  GROUP BY SalesOrderID 
HAVING SUM(LineTotal) > 5000.00 
ORDER BY SalesOrderID ;
Filtering rows with the HAVING clause (Image credit: Petri/Michael Otey)

Резюме

В этом учебнике я объяснил основы использования оператора SELECT в T-SQL для фильтрации строк различными способами. Оператор WHERE предоставляет чрезвычайно гибкий набор операторов, которые позволяют выбирать строки на основе различных условий. Точно так же оператор HAVING позволяет выбирать группы строк, удовлетворяющие определенному условию. Спасибо за внимание, следите за моей следующей статьей в серии “Основы SQL Server”.

Связанная статья:

Source:
https://petri.com/sql-select-where-clause/