В этой статье я расскажу о основах использования оператора 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

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

Оператор SELECT * полезен для запросов на ходу или для изучения столбцов и данных таблицы, с которой вы не знакомы. Однако вы не должны использовать этот оператор для продакшн-кода – обычно он извлекает больше данных, чем нужно вашему приложению, и вы не хотите увеличивать нагрузку на SQL Server.
Как фильтровать строки с помощью 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';

Фильтрация строк, содержащих значение внутри строки
Сила использования оператора WHERE с оператором SELECT заключается в его гибкости. Оператор WHERE превосходит простое сравнение по равенству, “больше” и “меньше” операторы сравнения. Давайте ближе рассмотрим, что можно сделать с оператором WHERE, начиная с использования оператора SQL LIKE.
Оператор LIKE используется для определения, соответствует ли конкретная последовательность символов указанному шаблону. В примере ниже мы извлекаем все строки из таблицы Customer, которые содержат слово ‘Bike’ в любом месте колонки ‘CompanyName’. В этом случае мы должны использовать знак % как wargsymbol перед и после слова ‘Bike’.
USE AdventureWorksLT2019 SELECT SalesPerson, CompanyName FROM SalesLT.Customer WHERE CompanyName LIKE('%Bike%');

Фильтрация строк, соответствующих любому из трех условий
Вы также можете использовать子句 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;

Фильтрация строк, принадлежащих списку значений
Точно так же вы можете использовать оператор WHERE для выбора строк, содержащихся в списке, определенном с помощью оператора IN. В следующем примере оператор SELECT вернет строки, содержащие значения «Bothell», «Bellevue» или «Renton» в столбце «City» таблицы SalesLT.Address.
USE AdventureWorksLT2019 SELECT AddressID, AddressLine1, City FROM SalesLT.Address WHERE City IN ('Bothell', 'Bellevue', 'Renton');

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

Фильтрация строк с оператором 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 ;

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