T-SQL | SELECT | Примеры

 

SELECT

ORDER BY (Ascending)

ORDER BY (Descending)

INNER JOIN

LEFT JOIN

RIGHT JOIN

FULL JOIN

WHERE

WHERE ... OR/AND ...

WHERE ... AND...OR ...

GROUP BY или DISTINCT

GROUP BY and aggregate

GROUP BY, aggregate and HAVING

 

См. также

SELECT FROM Linked Server & COLLATE

UNION SELECT

SELECT FROM SubQuery

JOIN TO SubQuery

 

 


 

SELECT

 

--данные по клиентам с результатом выражения '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)

 



© 2018 | Анна Петросян | pashelp@yandex.ru