T-SQL | SELECT | Примеры |
➢GROUP BY, aggregate and HAVING
См. также ➢SELECT FROM Linked Server & COLLATE
--данные по клиентам с результатом выражения 'Call today', если дата рождения клиента совпадает с текущей SELECT firstname AS [First Name] ,lastname AS [Last Name] ,CASE WHEN birthdate = GETDATE() THEN 'Call today' ELSE NULL END AS [Birthday Call] FROM customers
➢ORDER BY (Ascending) / сортировка в порядке возрастания
--данные по клиентам, отсортированные по фамилии в порядке возрастания SELECT firstname AS [First Name] ,lastname AS [Last Name] FROM customers ORDER BY lastname
➢ORDER BY (Descending) / сортировка в порядке убывания
--данные по клиентам, отсортированные по фамилии в порядке убывания SELECT firstname AS [First Name] ,lastname AS [Last Name] FROM customers ORDER BY lastname DESC
➢INNER JOIN / связывание объектов "один к одному"
--данные по клиентам и связанными с ними городами SELECT cust.firstname AS [First Name] ,cust.lastname AS [Last Name] ,city.cityName AS [City Name] FROM customers cust INNER JOIN cities city ON cust.cityid = city.cityid
или
SELECT cust.firstname AS [First Name] ,cust.lastname AS [Last Name] ,city.cityName AS [City Name] FROM Customers cust, Cities city WHERE cust.CityID = city.CityID
➢LEFT JOIN / связывание объектов "многие к одному"
--данные по клиентам и городам со связью типа "выбор всех строк из таблицы клиентов, даже если города на клиента не найдено" SELECT cust.firstname AS [First Name] ,cust.lastname AS [Last Name] ,city.cityName AS [City Name] FROM customers cust LEFT JOIN cities city ON cust.cityid = city.cityid
➢Пример SELECT-выражения, связывающего объекты с помощью RIGHT JOIN
Отбираем данные по клиентам (customers) и городам (cities) со связью типа "выбор всех строк из таблицы cities, даже если на город не найдено подможества клиентов":
SELECT cust.firstname AS [First Name] ,cust.lastname AS [Last Name] ,city.cityName AS [City Name] FROM customers cust RIGHT JOIN cities city ON cust.cityid = city.cityid
➢Пример SELECT-выражения, связывающего объекты с помощью FULL OUTER JOIN
Отбираем данные по клиентам (customers) и по городам (cities) со связью типа "выбор всех строк из таблицы customers и всех строк из таблицы cities даже если по связи не найдено подможеств с обеих сторон":
SELECT cust.firstname AS [First Name] ,cust/lastname AS [Last Name] ,city.cityName AS [City Name] FROM customers cust FULL OUTER JOIN cities city ON cust.cityid = city.cityid
➢Пример SELECT-выражения с фильтрацией данных с помощью оператора WHERE
Отбираем данные по клиентам в городе "Москва":
SELECT cust.firstname AS [First Name] ,cust.lastname AS [Last Name] ,city.cityName AS [City Name] FROM customers cust INNER JOIN cities city ON cust.cityid = city.cityid WHERE (city.cityName LIKE 'Moscow')
➢Пример SELECT-выражения с несколькими фильтрами данных с помощью WHERE ... OR/AND ...
Отбираем данные по клиентам в городе "Москва" или "Санкт Петербург":
SELECT cust.firstName AS [First Name] ,cust.lastName AS [Last Name] ,city.cityName AS [City Name] FROM customers cust INNER JOIN cities city ON cust.cityid = city.cityid WHERE (city.cityName LIKE 'Moscow' OR city.cityName LIKE 'St. Petersburg')
Отбираем данные по клиентам в городе "Москва" и чтобы были только "Петровы":
SELECT cust.firstname AS [First Name] ,cust.lastname AS [Last Name] ,city.cityName AS [City Name] FROM customers cust INNER JOIN cities city ON cust.cityid = city.cityid WHERE (city.cityName LIKE 'Moscow' AND cust.lastname LIKE 'Petrov')
➢Пример SELECT-выражения с несколькими фильтрами данных с помощью WHERE... AND...OR...
Отбираем данные по клиентам "Петровым" в городе "Москва" или "Петровым" в "Санкт Петербурге":
SELECT cust.firstname AS [First Name] ,cust.lastname AS [Last Name] ,city.cityName AS [City Name] FROM customers cust INNER JOIN cities city ON cust.cityid = city.cityid WHERE city.cityName IN ('Moscow', 'St. Petersburg') AND cust.lastname LIKE 'Petrov'
или (другой вариант):
SELECT cust.firstname AS [First Name] ,cust.lastname AS [Last Name] ,city.cityName AS [City Name] FROM customers cust INNER JOIN cities city ON cust.cityid = city.cityid WHERE (city.cityName LIKE 'Moscow' AND cust.lastname LIKE 'Petrov') OR (city.cityName LIKE 'St. Petersburg' AND cust.lastname LIKE 'Petrov')
➢Пример SELECT-выражения с группировкой данных с помощью оператора GROUP BY
Отбираем сгруппированные данные по городам и фамилиям клиентов:
SELECT city.cityName AS [City Name] ,cust.lastname AS [Client Last Name] FROM customers cust INNER JOIN cities city ON cust.cityid = city.cityid GROUP BY city.cityName, cust.lastname
Аналогом такой группировки в целях получения уникальных записей Город-Клиент может быть выражение с применением оператора DISTINCT. Такой запрос сработает быстрее:
SELECT DISTINCT city.cityName AS [City Name] ,cust.lastname AS [Client Last Name] FROM customers cust INNER JOIN cities city ON cust.cityid = city.cityid
➢Пример SELECT-выражения с группировкой данных с помощью оператора GROUP BY и вычислением агрегированных итогов
Отбираем данные по городам и количеству записей клиентов в каждом городе:
SELECT city.cityName AS [City Name] ,COUNT(cust.lastname) AS [Count of Customers] FROM customers cust INNER JOIN cities city ON cust.cityid = city.cityid GROUP BY city.cityName
См. также: Aggregate Functions (агрегирующие функции)
➢Пример SELECT-выражения с группировкой данных с помощью оператора GROUP BY, вычислением агрегированных итогов и фильтрацией с помощью оператора HAVING
Отбираем данные по городам и количеству записей клиентов в каждом городе, но клиентов берем только "Петровых":
SELECT city.cityName AS [City Name] ,COUNT(cust.lastname) AS [Count of Customers] ,cust.lastname FROM customers cust INNER JOIN cities city ON cust.cityid = city.cityid GROUP BY city.cityName, cust.lastname HAVING (cust.lastname LIKE 'Petrov')
См. также: ➢Проверка уникальности с помощью GROUP BY ➢Применение OVER (PARTITION BY)
|