SQL SELECT WHERE
Резюме: в этой статье вы узнаете, как использовать предложение SQL WHERE для фильтрации строк на основе заданных условий.
Содержание
- Введение в предложение SQL WHERE
- Примеры SQL WHERE
- Примеры SQL предложения WHERE с числовым сравнением
- Пример SQL предложения WHERE с символами
- Примеры SQL предложения WHERE с датами
- Сводка
- Видео по теме
Введение в предложение SQL WHERE
Чтобы выбрать определенные строки из таблицы, вы используете предложение WHERE в операторе SELECT. Ниже показан синтаксис предложения WHERE в операторе SELECT FROM:
Предложение WHERE появляется сразу после предложения FROM. Предложение WHERE содержит одно или несколько логических выражений, которые оценивают каждую строку в таблице. Если строка, вызывающая условие, оценивается как истина, она будет включена в набор результатов; в противном случае она будет исключена.
Обратите внимание, что SQL имеет трехзначную логику, а именно TRUE, FALSE и UNKNOWN. Это означает, что если строка вызывает оценку условия как FALSE или NULL, то строка не будет возвращена.
Обратите внимание, что логическое выражение, которое следует за предложением WHERE, также известно как предикат. Вы можете использовать различные операторы для формирования критериев выбора строк, используемых в предложении WHERE.
В следующей таблице приведены операторы сравнения SQL:
Оператор | Значение |
---|---|
= | Равно |
(!=) | Не равно |
Меньше, чем | |
> | Больше чем |
Меньше или равно | |
>= | Больше или равно |
Чтобы сформировать простое выражение, вы используете один из вышеперечисленных операторов с двумя операндами, которые могут быть либо именем столбца с одной стороны, либо литеральным значением с другой, например:
Задается вопрос: «Зарплата больше 1000?».
Или вы можете использовать имена столбцов с обеих сторон оператора, например:
Это выражение задает другой вопрос: «Минимальная зарплата меньше максимальной?».
Буквальные значения, которые вы используете в выражении, могут быть числами, символами, датами и временем, в зависимости от используемого формата:
- Число: используйте число, которое может быть целым или десятичным без какого-либо форматирования, например, 100, 200,5.
- Символ: используйте символы, заключенные в одинарные или двойные кавычки, например, «100«, «John Doe«.
- Дата: используйте формат, который хранится в базе данных. Это зависит от системы базы данных, например, MySQL использует формат ‘yyyy-mm-dd’ для хранения данных о дате.
- Время: используйте формат, который система баз данных использует для хранения времени. Например, MySQL использует формат ‘HH:MM:SS’ для хранения данных о времени.
Кроме оператора SELECT, вы можете использовать предложение WHERE в операторе UPDATE или DELETE, чтобы указать, какие строки должны быть обновлены или удалены.
Примеры SQL WHERE
Мы будем использовать таблицу employees, чтобы продемонстрировать, как выбирать данные из таблицы с помощью предложения WHERE.
Примеры SQL предложения WHERE с числовым сравнением
Следующий запрос находит сотрудников, у которых зарплата больше 14 000, и сортирует набор результатов на основе зарплаты в порядке убывания.
Следующий запрос находит всех сотрудников, работающих в отделе с идентификатором 5.
Пример SQL предложения WHERE с символами
SQL не чувствителен к регистру. Однако, когда речь идет о значениях в сравнениях, он чувствителен к регистру. Например, следующий запрос находит сотрудника, чья фамилия Chen.
Однако если вы используете CHEN или chen, ни одна строка не будет возвращена.
Примеры SQL предложения WHERE с датами
Чтобы получить всех сотрудников, которые пришли в компанию после 1 января 1999 года, вы используете следующий запрос:
Если вы хотите найти сотрудников, которые пришли в компанию в 1999 году, у вас есть несколько способов:
- Использовать функцию YEAR для получения данных о годе из столбца hire_date и использовать оператор equal to (=) для формирования выражения.
- Использовать два выражения с помощью оператора AND.
- Использовать оператор BETWEEN.
Следующее утверждение иллюстрирует первый способ:
Сводка
В этой статье мы показали вам, как использовать предложение SQL WHERE для фильтрации данных на основе заданного условия.
Видео по теме
Предыдущая статья: SQL OFFSET FETCH
Следующая статья: Операторы сравнения SQL
Piastrix – это новый золотой стандарт электронного кошелька. Платежный оператор предлагает хранить денежные средства в нескольких распространенных валютах: американский доллар, евро, российский рубль, казахстанский тенге.
Особенность Piastrix Wallet заключается в том, что клиент имеет возможность не пользоваться обменниками, а производить переводы на другие платежные системы внутри Пиастрикс, причем быстро и с адекватной комиссией, а все что нужно – пройти верификацию. Платежный оператор предлагает сайт и мобильное приложение – управлять виртуальными деньгами можно как с ПК, так и со смартфона на базе Android и iOS.
SQL WHERE против HAVING | Блог Pure Storage
Язык структурированных запросов (SQL) имеет несколько предложений для фильтрации результатов в наборе данных. WHERE и HAVING — это два примера фильтров, доступных разработчикам, но тот, который вы используете, зависит от типа оператора SQL. WHERE следует использовать в отдельных строках, а HAVING следует использовать там, где результаты группируются с использованием агрегатных функций.
Что такое ГДЕ в SQL?Предложение WHERE фильтрует данные на основе заданных вами параметров, соответствующих одной строке. Например, если у вас есть 1000 строк в наборе данных, предложение WHERE проверяет каждую из 1000 строк и сравнивает их с заданными вами параметрами. Ниже приведен пример оператора SQL, использующего предложение WHERE:
SELECT first_name, last_name FROM Customer WHERE first_name=’john’
В приведенном выше примере оценивается каждая строка в таблице Customer, и возвращаются только строки, содержащие «john» в столбце first_name. Возвращенный набор данных отображает каждое имя и фамилию клиентов с именем «Джон».
Что такое HAVING в SQL?Предложение HAVING также фильтрует строки из набора данных, но оценивает сгруппированные результаты, а не отдельные строки. С агрегированными командами SQL похожие строки группируются вместе, и каждая группа представляется как одна строка. Например, следующая команда SQL группирует всех клиентов по похожим фамилиям:
SELECT first_name, last_name FROM Customer GROUP BY last_name
В приведенном выше примере набор данных группирует всех клиентов по фамилии, поэтому все клиенты с фамилией «smith» будут отображаться в виде одной строки, а все клиенты с фамилией «doe» будут отображаться в виде одной строки. Если все ваши клиенты имеют фамилии «smith» и «doe», набор данных SQL будет содержать только две строки с подсчетом количества клиентов, сгруппированных в строке.
Предложение HAVING фильтрует сгруппированные записи. SQL имеет несколько агрегатных функций, но HAVING сочетается с GROUP BY. Например, следующая инструкция SQL фильтрует приведенную выше инструкцию и возвращает только сгруппированные записи, в которых фамилия «smith»:
ВЫБЕРИТЕ first_name, last_name FROM Customer GROUP BY last_name HAVING last_name=’smith’
Агрегирующие функции в SQL принимают несколько строк, выполняют вычисления, а затем возвращают одну строку в возвращаемом наборе данных. Функция GROUP BY возвращает сгруппированные записи на основе параметра столбца, включенного в оператор SQL. SQL имеет несколько агрегатных функций, включая COUNT, SUM, AVG, MIN и MAX.
Предложение WHERE и HAVING можно использовать с агрегатными операторами, но они имеют разные функции. Предложение WHERE оценивает все строки, а предложение HAVING оценивает строки после их объединения в наборе данных.
WHERE и HAVING: различияОчень немногие SQL-запросы должны возвращать все записи из базы данных. В любом приложении разработчикам нужен способ вернуть только те записи, которые необходимы для работы их приложений. Предложение WHERE может отфильтровать набор данных до одного результата из миллионов записей таблицы. Предложение HAVING также может фильтровать строки, но оно должно использоваться с агрегированием. Предложение WHERE не требует какой-либо группировки, но вам нужно использовать операцию GROUP BY для работы с предложением HAVING.
HAVING или WHERE: что использовать и когдаДля стандартных запросов SQL WHERE является основным фильтром. Разработчики используют предложение WHERE для выбора только определенных строк. Затем сервер базы данных SQL возвращает только те строки, которые соответствуют параметрам, определенным в предложении WHERE. Следующий SQL-запрос извлекает клиентов с именем «john»:
SELECT first_name, last_name FROM Customer WHERE first_name='john'
HAVING работает только с агрегатными функциями, поэтому вы используете его, когда вам нужно произвести вычисления. или группировать строки, а затем фильтровать совокупные результаты. Например, следующий SQL-запрос извлекает клиентов с заказами на сумму более 100 долларов США:
SELECT first_name, last_name FROM Customer GROUP BY first_name, last_name HAVING SUM(order_total) > 100
В первом запросе предложение WHERE просматривает каждую запись в таблице Customer и извлекает строки, в которых столбец first_name содержит « Джон». Во втором запросе заказы каждого клиента суммируются, и только если сумма total_order больше 100, она возвращается в наборе данных.
HAVING или WHERE в SQL: что быстрее?Если возможно, всегда используйте предложение WHERE в своих SQL-запросах. Предложение WHERE быстрее, чем HAVING. Поскольку вам необходимо сгруппировать записи до того, как предложение HAVING сможет выполниться, это более медленная стратегия, чем фильтрация записей с помощью предложения WHERE. Некоторые запросы потребуют использования HAVING, но его следует использовать только в том случае, если предложение WHERE не даст желаемого результата.
Связанное чтение: SQL DELETE vs TRUNCATE
SQL WHERE — руководство и примеры, включая BETWEEN и IN
На сегодняшнем уроке вы узнаете, как фильтровать результаты запроса с помощью предложения SQL WHERE. Это предложение важно, поскольку в результатах запроса возвращаются только те записи, которые соответствуют условиям предложения where. Цели сегодняшнего урока:
- Узнайте о различных типах условий, таких как равенство, диапазон и членство
- Подробный пример с Select, Where и Order By
- Успешно завершить упражнения
Важно! Пожалуйста, выполняйте примеры в своей базе данных. Если вы еще этого не сделали, подпишитесь на мое руководство по началу работы с SQL Server. Вы получите инструкции по установке бесплатных инструментов и примера базы данных.
Содержание
- SQL WHERE Пункт
- SQL WHERE EQUAL
- SQL WHERE NOT EQUAL
- Условия диапазона – больше и меньше
- SQL WHERE МЕЖДУ
- Используйте BETWEEN с текстом
- Оператор SQL BETWEEN с датами
- Оператор SQL BETWEEN с датой и временем
- SQL WHERE IN
- Использование SQL WHERE с несколькими условиями
- Оператор SQL AND
- Оператор SQL OR
- Оператор НЕ SQL
- Объединение И Логические операторы , ИЛИ и НЕ
Подумайте о предложении where одного большого условия. Если условие истинно, строка возвращается. Есть много способов создать условия. Прежде чем мы углубимся во все их, давайте рассмотрим хороший первый пример.
В этом примере мы возвращаем всех, чья фамилия Миллер:
выберите Имя, Фамилия от Person.Person где Фамилия = 'Миллер'
Обратите внимание, что предложение WHERE идет после предложения from. Также можно увидеть условие LastName = ‘Miller’
Чтобы строка была возвращена, выражение LastName = ‘Miller’ должно быть ИСТИНА.
Как правило, строка включается в результат, когда условие предложения where имеет значение TRUE. Условие предложения where может состоять из одного или нескольких тестов.
Благодаря использованию логической логики, о которой мы говорим, используя SQL WHERE с несколькими условиями, вы можете комбинировать эти тесты для формирования сложных сравнений между одним или несколькими столбцами или выражениями.
SQL ГДЕ РАВНОУсловие равенства проверяет, соответствует ли столбец или выражение значению. Как и следовало ожидать, знак равенства используется для образования равенства. В следующем операторе SQL мы возвращаем всех лиц, чей титул мистер
.ВЫБЕРИТЕ Имя, Фамилия ОТ Person.Person ГДЕ Title = 'Мистер'
Другие примеры использования при равенстве включают:
- Количество = 30
- Цена единицы = 0,25
- Город = «Эль-Пасо»
Вы могли заметить, что числа записываются как есть, однако текст заключен в одинарные кавычки.
Вы также можете включить выражения в условие равенства.
Например, если ваши данные противоречивы и только первые две буквы столбцов состояний являются аббревиатурой, вы можете проверить это:
ЛЕВЫЙ (состояние, 2) = 'MI'
Здесь функция ЛЕВЫЙ берет первые два символа и из состояния и использует их в сравнении.
SQL ГДЕ НЕ РАВНОИногда необходимо исключить значение. Для этого можно использовать неравенство. Чтобы настроить оператор Where Not Equal, используйте оператор <>. Пример неравенства:
- Состояние <> ‘MI’
- Количество <> 0
Если бы вы вернули всех лиц, титул которых не был «мистер. ‘, тогда ваш запрос будет
ВЫБЕРИТЕ Имя, Фамилия ОТ Person.Person ГДЕ Заголовок <> 'Мистер'
Условия диапазонаСовет! Я помню, что <> означает не равно, поскольку < и > противопоставляются друг другу.
— больше и меньше
Иногда требуется узнать, попадает ли значение в диапазон, например количество больше 10. Нас больше всего интересуют условия диапазона: больше, меньше и между. Операторы для выполнения различных тестов:
- > (больше)
- >= (больше или равно)
- < (меньше)
- <= (меньше или равно)
Числовые диапазоны
Рассмотрим нашу таблицу Purchasing. PurchaseOrderDetail. Если вы хотите узнать заказы, в которых количество заказов превышает 10, следующий запрос сделает свое дело!
выберите PurchaseOrderDetailID, DueDate, OrderQty, ProductID, UnitPrice из Purchasing.PurchaseOrderDetail где количество заказов >10
Здесь вы можете увидеть результаты:
Для включения количества заказов на 10 тестов с помощью
Количество заказов >= 10
Использование диапазонов с текстовыми значениями
Работает с текстом так же хорошо, как и с числами. Состояние
выберите Имя, Фамилия от Person.Person где Фамилия < 'Миллер'
возвращает всех лиц, чья фамилия предшествует Миллеру.
Чтобы включить Миллера, вы должны написать
.Фамилия <= 'Миллер'
Таким образом, чтобы найти всех людей с фамилией меньше или равной Миллеру, вы должны написать
выберите Имя, Фамилия от Person.Person где Фамилия <= 'Миллер'
Выражения и порядок операций SQL
Вы также можете использовать выражения. Чтобы найти все OrderDetails с TotalPrice больше 100 долларов, ваш запрос будет выглядеть как
.ВЫБЕРИТЕ ИД ордера на покупку, ID_детали_заказа_покупки, Идантификационный номер продукта, Цена за единицу товара, Заказ Кол-во, UnitPrice * OrderQty AS TotalPrice ОТ Purchasing.PurchaseOrderDetail ГДЕ UnitPrice * OrderQty > = 100
Хотя мы определяем TotalPrice как столбец в операторе SELECT, мы не можем использовать его в предложении WHERE. Порядок операций SQL не позволяет этого.
Но что, если вы хотите, чтобы TotalPrices попадал в диапазон от 100 до 200 долларов? Как вы можете вытащить этот одноразовый?
SQL ГДЕ МЕЖДУ
На самом деле есть несколько способов, но сейчас мы поговорим об операторе Between .
Оператор SQL BETWEEN с различными типами, такими как целое число, varchar и даты.
Оператор between используется в условии как
UnitPrice * OrderQty ОТ 100 до 200
Как вы, вероятно, подозреваете, вы также можете использовать его для теста.
Состояния МЕЖДУ "A" и "CZ" В приведенном выше примере я использовал «CZ», поскольку все сокращения штатов состоят из двух символов, и я знаю, что все сокращения штатов, такие как Коннектикут (CT), стоят перед CZ.
Вернемся к нашему примеру с TotalPrice. Полный оператор для этих запросов равен 9.0003
ВЫБЕРИТЕ ИД ордера на покупку, ID_детали_заказа_покупки, Идантификационный номер продукта, Цена за единицу товара, Заказ Кол-во, UnitPrice * OrderQty AS TotalPrice ОТ Purchasing.PurchaseOrderDetail ГДЕ UnitPrice * OrderQty ОТ 100 ДО 200
Обратите внимание, что оператор BETWEEN является включающим, то есть включает как начальное, так и конечное значение.
Вы можете больше узнать о SQL Between из этого видео.
Используйте МЕЖДУ с текстом
Следующий SQL показывает, как использовать BETWEEN для поиска всех людей, чьи фамилии больше или равны Colvin и меньше или равны Conteras.
ВЫБЕРИТЕ Имя, Фамилию
ИЗ Person.Person
ГДЕ Фамилия МЕЖДУ «Колвин» и «Контрерас»
Использование BETWEEN улучшает читабельность вашего SQL. Обратите внимание, что он исключает несколько операторов сравнения. Приведенный выше пример эквивалентен:
ВЫБЕРИТЕ Имя, Фамилия ОТ Человека.Человека ГДЕ Фамилия >= 'Колвин' И Фамилия <= 'Контрерас
Оператор SQL BETWEEN с датами
SQL BETWEEN хорошо подходит для сравнения диапазонов дат, поскольку помогает улучшить читаемость вашего SQL.
В этом примере показано, как BETWEEN упрощает выбор каждого пользователя , чья запись была в диапазоне дат между 12 и 14 января 2014 года.
ВЫБЕРИТЕ имя, фамилию, дату изменения ОТ Человека.Человека ГДЕ ModifiedDate МЕЖДУ "2014-01-12" И "2014-01-14"
Обратите внимание, что в этом примере дата заключена в одинарные кавычки. За кулисами SQL неявно преобразует «текстовую» дату в тип даты .
Оператор SQL BETWEEN с DateTime
При использовании BETWEEN с типами DATETIME возникают сложности, особенно если вы хотите сравнить значение DATETIME с целым днем.
Предположим, что ModifiedDate имеет тип DATETIME, и вы хотите оштрафовать все записи Person.Person, измененные 12, 13 или 14 января 2014 г.
Хотя заманчиво использовать тот же оператор, что и раньше
ВЫБЕРИТЕ имя, фамилию, дату изменения ОТ Человека.Человека ГДЕ ModifiedDate МЕЖДУ "2014-01-12" И "2014-01-14"
Это возвращает неверные результаты, так как 2014-01-14 неявно преобразуется в значение DATETIME 2014-01-14 00:00:00, которое является началом 14-го числа, а не концом. Вы пропустите целый день модификаций!
Вместо этого напишите следующее предложение SQL BETWEEN:
ВЫБЕРИТЕ имя, фамилию, дату изменения ОТ Человека.Человека ГДЕ ModifiedDate МЕЖДУ «2014-01-12 00:00:00» И «2014-01-14 23:59:59»
Таким образом, используйте оператор SQL BETWEEN для проверки диапазона значений.
Диапазон указан включительно.
Использование SQL BETWEEN является сокращением для использования >= AND <= условий.
SQL ГДЕ ВПоследний тип условия, о котором нужно узнать в этом уроке, — это тип членства. Условие типа членства позволяет компактно проводить несколько тестов на соответствие в одном операторе. Например, подумайте, есть ли у вас несколько JobTitles, которые вы хотите включить в результат запроса. В этом случае вы можете использовать оператор in, чтобы найти все совпадения
JobTitle IN («Бухгалтер», «Покупатель», «Стокер»)
Приведенное выше совпадет или вернется, если в названии JobTitle указано значение «Бухгалтер», «Покупатель» или «Стокер».
Чтобы использовать оператор сравнения IN, разделите элементы, которые вы хотите проверить, запятыми и обязательно заключите их в круглые скобки. Полный оператор SQL для нашего примера —
.ВЫБЕРИТЕ национальный идентификатор, ОрганизацияУзел, Должность ОТ HumanResources.Employee WHERE JobTitle IN ("Бухгалтер", "Закупщик", "Стокер")
Вот результаты:
Предложение IN очень удобно и служит для упрощения вашего предложения WHERE.
Подробный пример использования INУзнайте больше! Если вы хотите использовать еще больше возможностей, прочитайте мою статью SQL IN Operator
.
Теперь давайте соединим все это вместе с примером как для фильтрации, так и для сортировки запроса . Общая структура оператора select:
.ВЫБЕРИТЕ столбцы ИЗ таблицы ГДЕ Где Пункт Сортировать по столбцам
В предыдущем разделе запрос для выбора контактов, которые были владельцами:
ВЫБЕРИТЕ национальный идентификатор, ОрганизацияУзел, Должность ОТ HumanResources.Employee ГДЕ JobTitle IN ("Бухгалтер", "Закупщик", "Стокер")
Для сортировки по JobTitle просто добавьте предложение ORDER BY как
ВЫБЕРИТЕ Национальный идентификатор, ОрганизацияУзел, Должность ОТ HumanResources.Employee ГДЕ JobTitle IN («Бухгалтер», «Закупщик», «Стокер») ЗАКАЗАТЬ ПО JobTitle
Вот результаты.
Упражнения для сравнений, МЕЖДУ и В
Важно практиковаться! Используйте образец базы данных, чтобы ответить на эти вопросы.
- Выберите PurchaseOrderDetailID, дату выполнения и количество заказа для всех позиций деталей заказа на покупку, количество заказа которых меньше 100
- Выберите PurchaseOrderDetailID, дату выполнения и количество заказа для всех позиций деталей заказа на покупку, количество заказа которых находится в диапазоне от 1 до 10
- Найти всех людей с именем «Кен»
- Найти все productID из PurchaseOrders 421, 424, 142
Ответы здесь!
Использование SQL WHERE с несколькими условиями
В предыдущих разделах мы узнали, как используется предложение where для фильтрации любых записей, в которых условие where имеет значение FALSE.
Знаете ли вы, что вы также можете связать условия вместе, чтобы создать более сложные условия? Для этого мы можем использовать операторы И, ИЛИ и НЕ.
Эти три оператора используются для наиболее распространенных аспектов булевой логики. Независимо от того, какой оператор используется, результат всегда сводится к одному из двух результатов: ИСТИНА или ЛОЖЬ.
SQL Предложения Where становятся действительно интересными, когда мы рассматриваем возможность объединения более одного поля для фильтрации результата. Например, используя нашу тестовую базу данных в качестве примера, мы можем захотеть найти крупные заказы на покупку, например, с количеством заказа более 10 и ценой за единицу более 5 долларов США. Это можно записать как
ВЫБЕРИТЕ PurchaseOrderDetailID, Идантификационный номер продукта, Заказ Кол-во, Цена за единицу товара ОТ Purchasing.PurchaseOrderDetail ГДЕ UnitPrice > 5,00 И OrderQty > 10
Записи включаются, только если оба условия ИСТИННЫ.
Теперь, когда мы знаем, как писать более сложные условия, давайте узнаем больше о различных логических операторах. Начнем с И.
Оператор SQL И
Оператор И возвращает ИСТИНА, только если все условия также ИСТИНА. В следующей таблице истинности показаны все комбинации значений условия (A И B).
9 0429 ИСТИНА 9042 9 ЛОЖЬA | B | Результат |
---|---|---|
ИСТИНА | ИСТИНА | |
ИСТИНА | ЛОЖЬ | ЛОЖЬ |
ИСТИНА | ЛОЖЬ | |
ЛОЖЬ | ЛОЖЬ | ЛОЖЬ |
В SQL мы можем объединить предложение where, используя для проверки нескольких полей. Например, если вы ищете клиентов из Мидленда, штат Техас, вы можете написать
ГДЕ Штат = "Техас" И Город = "Мидленд"
Вы также можете использовать оператор И для создания условия диапазона, как мы делаем с МЕЖДУ.
В этом примере давайте вычислим TotalPrices и вернем те, которые находятся в пределах 100,00 и 200,00 долларов США:
ВЫБЕРИТЕ PurchaseOrderDetailID, Идантификационный номер продукта, Заказ Кол-во, Цена за единицу товара, UnitPrice * OrderQty AS TotalPrice ОТ Purchasing.PurchaseOrderDetail ГДЕ UnitPrice * OrderQty >= 100 И UnitPrice * OrderQty <= 200
Возвращаемые строки имеют вычисленное значение TotalPrice в диапазоне от 100 до 200.
Возвращает тот же результат, что и
.ВЫБЕРИТЕ PurchaseOrderDetailID, Идантификационный номер продукта, Заказ Кол-во, Цена за единицу товара, UnitPrice * OrderQty AS TotalPrice ОТ Purchasing.PurchaseOrderDetail ГДЕ UnitPrice * OrderQty ОТ 100 ДО 200
Совет! Имейте в виду, что логическая логика AND не полностью переводится на английское «и». Например, если бы нужно было сказать Поиск всех клиентов в штатах Флорида и Грузия, вы, скорее всего, знаете, что я имел в виду найти всех клиентов из Флориды или Джорджии. Вы бы не подумали, что я хотел, чтобы вы нашли всех клиентов, которые находятся в , , Флориде и Джорджии.
Оператор SQL ИЛИ
Оператор ИЛИ возвращает значение ИСТИНА, если одно или несколько условий также имеют значение ИСТИНА. Вот таблица истинности для оператора ИЛИ. Вы увидите, что в каждом случае одно из условий верно, как и конечный результат.
A | B | Результат |
---|---|---|
ИСТИНА | ИСТИНА | ИСТИНА |
ИСТИНА | ЛОЖЬ | ИСТИНА |
ЛОЖЬ | ИСТИНА | ИСТИНА |
ЛОЖЬ | ЛОЖЬ | ЛОЖЬ |
Предложение where для выбора всех клиентов из Техаса или Флориды равно
ГДЕ Состояние = «FL» ИЛИ Состояние = «TX»
Несколько предложений OR могут быть соединены вместе, чтобы вести себя аналогично оператору IN. Таким образом, они действуют как условие членства.
Чтобы найти всех сотрудников с одной из трех должностей, мы можем написать
ВЫБЕРИТЕ национальный идентификатор, Дата рождения, Должность ОТ HumanResources.Employee ГДЕ JobTitle = "Инженер-конструктор" ИЛИ JobTitle = 'Стокер' ИЛИ JobTitle = "Покупатель"
Это то же самое, что и это
ВЫБЕРИТЕ национальный идентификатор, Дата рождения, Должность ОТ HumanResources.Employee WHERE JobTitle IN ("Инженер-конструктор", "Стокер", "Покупатель")
Оператор SQL НЕ
Оператор not берет условие и изменяет его на противоположное. Таким образом, если задано ИСТИНА, оператор НЕ изменяет его на ЛОЖЬ.
A | Результат |
---|---|
ИСТИНА | Ложь |
ЛОЖЬ 90 432 | Правда |
Некоторые примеры выражений с оператором NOT включают:
- НЕ В ('TX', 'FL') — принимаются все штаты, кроме Техаса и Флориды
- NOT IN («Генеральный директор», «Владелец», «Президент») — принимать всех, кто не является владельцем.
Оператор NOT также может использоваться в сочетании с операторами AND и OR. Однако, чтобы объяснить это, нам сначала нужно понять, в каком порядке оцениваются условия и как их группировать.
Другими словами, нам нужно узнать о скобках и использовать их точно так же, как вы используете их при сложении и умножении чисел.
Объединение логических операторов И, ИЛИ и НЕ
Порядок выполнения логических операторов важен и не является произвольным. Как и в арифметике, где умножение происходит перед сложением, в булевых операторах И оценивается перед ИЛИ .
Можете ли вы сказать, что не так на этой фотографии? Что они на самом деле имели в виду?
На английском языке они пытаются сказать, что вы можете выбрать суп с блинчиком с начинкой или с крабовым рангуном, но, поскольку условие AND оценивается первым, механизм SQL видит следующие варианты:
- Острый суп
- Суп вонтон
- Яичный суп и блинчики с начинкой
- Краб Рангун
Вы также можете использовать круглые скобки. Выражение внутри круглых скобок оценивается первым.
Допустим, вы хотели вернуть всех клиентов, которые не являются владельцами. Как мы могли это сделать?
ContactTitle = 'Генеральный директор' ИЛИ ContactTitle = "Владелец" ИЛИ ContactTitle = "Президент"
Теперь, чтобы получить тех, кто не является владельцем, нам нужно изменить логику как
НЕ (ContactTitle = 'Генеральный директор' ИЛИ ContactTitle = "Владелец" ИЛИ ContactTitle = 'Президент')
Обратите внимание на использование круглых скобок: сначала оценивается условие в круглых скобках, а затем условие НЕ.
Подробный пример
Предположим, нам нужно найти все большие записи сведений о заказе на поставку. Если мы считаем большим заказом тот, в котором количество> 100 или цена за единицу> 10, и мы хотим заказать их по общей цене. Как бы мы это сделали? Давай попробуем:
SELECT PurchaseOrderDetailID, Идантификационный номер продукта, Заказ Кол-во, Цена за единицу товара, UnitPrice * OrderQty AS TotalPrice ОТ Purchasing. PurchaseOrderDetail ГДЕ (Цена за единицу > 10 ИЛИ количество заказов > 100) ЗАКАЗАТЬ ПО TotalPrice
Теперь мы можем уточнить это, утверждая, что TotalPrice больше 1000.
Модифицированный запрос
SELECT PurchaseOrderDetailID, Идантификационный номер продукта, Заказ Кол-во, Цена за единицу товара, UnitPrice * OrderQty AS TotalPrice ОТ Purchasing.PurchaseOrderDetail ГДЕ (Цена за единицу > 10 ИЛИ количество заказов > 100) И UnitPrice * OrderQty >= 1000 ЗАКАЗАТЬ ПО TotalPrice
Я добавил круглые скобки вокруг предложений ИЛИ, чтобы они оценивались перед И; в противном случае оператор имел бы другой результат.
И последнее замечание. Вы заметили, что я использовал псевдоним столбца TotalPrice в предложении ORDER BY, но не использовал его в предложении WHERE. Это связано с ограничением в SQL Server. Некоторые версии, такие как SQLite, позволяют вам писать следующее, что запрещено в SQL Server:
.SELECT PurchaseOrderDetailID, Идантификационный номер продукта, Заказ Кол-во, Цена за единицу товара, UnitPrice * OrderQty AS TotalPrice ОТ Purchasing.