Поиск…


Синтаксис

  • SELECT column_name
    FROM table_name
    WHERE значение оператора column_name
  • SELECT column_name, aggregate_function (column_name)
    FROM table_name
    GROUP BY column_name
    ИМЕЕТ значение оператора aggregate_function (column_name)

Предложение WHERE возвращает только строки, соответствующие его критериям

Steam имеет игры под секцией $ 10 на своей странице магазина. Где-то глубоко в центре их систем, вероятно, есть запрос, который выглядит примерно так:

SELECT * 
FROM Items 
WHERE Price < 10

Используйте IN для возврата строк со значением, содержащимся в списке

В этом примере используется таблица автомобилей из примерных баз данных.

SELECT *
FROM Cars
WHERE TotalCost IN (100, 200, 300)

Этот запрос вернет Car # 2, который стоит 200 и Car # 3, который стоит 100. Обратите внимание, что это эквивалентно использованию нескольких предложений с OR , например:

SELECT *
FROM Cars
WHERE TotalCost = 100 OR TotalCost = 200 OR TotalCost = 300

Используйте LIKE, чтобы найти соответствующие строки и подстроки

См. Полную документацию по оператору LIKE .

В этом примере таблица Employees используется в примерах баз данных.

SELECT *
FROM Employees
WHERE FName LIKE 'John'

Этот запрос возвращает только Employee # 1, чье имя точно совпадает с «John».

SELECT *
FROM Employees
WHERE FName like 'John%'

Добавление % позволяет вам искать подстроку:

  • John% - вернет любого Сотрудника, чье имя начинается с «Джона», за которым следует любое количество символов
  • %John - вернет любого Сотрудника, чье имя заканчивается на «Джон», которое исходит из любого количества символов
  • %John% - вернет любого Сотрудника, чье имя содержит «Джон» в любом месте значения

В этом случае запрос вернет Employee # 2, чье имя «John», а также Employee # 4, чье имя «Johnathon».

Предложение WHERE с NULL / NOT NULL значениями

SELECT *
FROM Employees
WHERE ManagerId IS NULL

Этот оператор возвращает все записи Employee, где значение столбца ManagerId равно NULL .

Результатом будет:

Id    FName    LName    PhoneNumber    ManagerId    DepartmentId
1     James    Smith    1234567890     NULL         1

SELECT *
FROM Employees
WHERE ManagerId IS NOT NULL

Этот оператор вернет все записи Employee, где значение ManagerId не NULL .

Результатом будет:

Id    FName       LName     PhoneNumber    ManagerId    DepartmentId
2     John        Johnson   2468101214     1            1
3     Michael     Williams  1357911131     1            2
4     Johnathon   Smith     1212121212     2            1

Примечание. Тот же запрос не будет возвращать результаты, если вы измените предложение WHERE на WHERE ManagerId = NULL или WHERE ManagerId <> NULL .

Использование HAVING с агрегатными функциями

В отличие от WHERE , HAVING может использоваться с совокупными функциями.

Агрегатная функция - это функция, в которой значения нескольких строк группируются вместе как входные данные по определенным критериям, чтобы сформировать одно значение более значимого значения или измерения ( Википедия ).

Общие агрегированные функции включают COUNT() , SUM() , MIN() и MAX() .


В этом примере используется таблица автомобилей из примерных баз данных.

SELECT CustomerId, COUNT(Id) AS [Number of Cars]
FROM Cars
GROUP BY CustomerId
HAVING COUNT(Id) > 1

Этот запрос вернет счетчик CustomerId и Number of Cars любого клиента, у которого есть более одного автомобиля. В этом случае единственным клиентом, у которого есть более одного автомобиля, является Клиент № 1.

Результаты будут выглядеть так:

Пользовательский ИД Количество автомобилей
1 2

Используйте BETWEEN для фильтрации результатов

В следующих примерах используются типовые базы данных Sales and Customers .

Примечание: МЕЖДУ оператора включительно.

Использование оператора BETWEEN с номерами:

SELECT * From ItemSales
WHERE Quantity BETWEEN 10 AND 17

В этом запросе будут возвращены все записи ItemSales , количество которых больше или равно 10 и меньше или равно 17. Результаты будут выглядеть так:

Я бы Дата продажи ItemId Количество Цена
1 2013-07-01 100 10 34,5
4 2013-07-23 100 15 34,5
5 2013-07-24 145 10 34,5

Использование оператора BETWEEN с значениями даты:

SELECT * From ItemSales
WHERE SaleDate BETWEEN '2013-07-11' AND '2013-05-24'

Этот запрос вернет все записи ItemSales с помощью SaleDate который больше или равен 11 июля 2013 года и меньше или равен 24 мая 2013 года.

Я бы Дата продажи ItemId Количество Цена
3 2013-07-11 100 20 34,5
4 2013-07-23 100 15 34,5
5 2013-07-24 145 10 34,5

При сравнении значений даты и времени вместо дат вам может потребоваться преобразовать значения даты и времени в значения даты или добавить или вычесть 24 часа, чтобы получить правильные результаты.


Использование оператора BETWEEN с текстовыми значениями:

SELECT Id, FName, LName FROM Customers
WHERE LName BETWEEN 'D' AND 'L';

Пример Live: скрипт SQL

Этот запрос возвращает всех клиентов, имя которых в алфавитном порядке находится между буквами «D» и «L». В этом случае возвращаются Клиент №1 и №3. Клиент № 2, имя которого начинается с «М», не будет включено.

Я бы FName LName
1 Уильям Джонс
3 Ричард Дэвис

равенство

SELECT * FROM Employees 

Этот оператор вернет все строки из таблицы Employees .

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

Использование WHERE в конце вашего SELECT позволяет ограничить возвращаемые строки условием. В этом случае, когда существует точное совпадение с помощью знака = :

SELECT * FROM Employees WHERE DepartmentId = 1

Вернет только строки, в которых значение параметра DepartmentId равно 1 :

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

И И ИЛИ

Вы также можете объединить несколько операторов для создания более сложных условий WHERE . В следующих примерах используется таблица Employees :

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

А ТАКЖЕ

SELECT * FROM Employees WHERE DepartmentId = 1 AND ManagerId = 1

Вернусь:

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002

ИЛИ ЖЕ

SELECT * FROM Employees WHERE DepartmentId = 2 OR ManagerId = 2

Вернусь:

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

Используйте HAVING для проверки нескольких условий в группе

Таблица заказов

Пользовательский ИД Код товара Количество Цена
1 2 5 100
1 3 2 200
1 4 1 500
2 1 4 50
3 5 6 700

Чтобы проверить клиентов, которые заказали оба продукта - ProductID 2 и 3, можно использовать HAVING

 select customerId
 from orders
 where productID in (2,3)
 group by customerId
 having count(distinct productID) = 2

Возвращаемое значение:

Пользовательский ИД
1

Запрос выбирает только записи с идентификаторами productID в вопросах и с проверкой предложения HAVING для групп, имеющих 2 productIds, а не только один.

Другая возможность

 select customerId
 from orders
 group by customerId
 having sum(case when productID = 2 then 1 else 0 end) > 0
    and sum(case when productID = 3 then 1 else 0 end) > 0

В этом запросе выбираются только группы, имеющие хотя бы одну запись с идентификатором productID 2 и по меньшей мере с идентификатором productID 3.

Где EXISTS

Выберет записи в TableName , имеющие записи, соответствующие в TableName1 .

SELECT * FROM TableName t WHERE EXISTS (
    SELECT 1 FROM TableName1 t1 where t.Id = t1.Id)


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow