Как написать условие в sql
Перейти к содержимому

Как написать условие в sql

  • автор:

And & Or в SQL

Операторы AND & OR используются для составления условий в запросах.

Описание операторов AND & OR в SQL

AND — оператор, который отображает только те записи, когда первое и второе условие является правдой / true.

OR — оператор, который отображает только те записи, когда хотя бы одно из двух условий является правдой / true.

Поскольку допускается наличие в базе данных неопределенных значений, то вычисление условия поиска производится не в булевой, а в трехзначной логике со значениями true, false и unknown (неизвестно). Для любого предиката известно, в каких ситуациях он может порождать значение unknown.

Как работают AND & OR в SQL

Булевские операции AND, OR и NOT работают в трехзначной логике следующим образом:

Значение Операция Значение Результат
true AND unknown unknown
unknown AND true unknown
unknown AND unknown unknown
true OR unknown true
unknown OR true true
unknown OR unknown unknown
NOT unknown unknown

Примеры AND & OR в SQL

Пример оператора AND

Пример 1. Выборка (SELECT) записи, где поле fname равно ‘Ivan’ AND(и) поле lname равно ‘Abrakov’.

SELECT * FROM table_name WHERE fname=’Ivan’ AND lname=’Abrakov’;

Пример оператора OR

Пример 2. Выборка (SELECT) записи, где поле fname равно ‘Ivan’ OR(или) поле fname равно ‘Alex’.

SELECT * FROM table_name WHERE fname=’Ivan’ OR fname=’Alex’;

Пример комбинирования AND & OR

Пример 3. Выборка (SELECT) записи, которые соответствуют условию: поле lname должно быть равно ‘Abrakov’ AND(и) поле fname должно принимать значение ‘Ivan’ OR(или) значение ‘Alex’.

Как написать условие в sql

Для выполнения действий по условию используется выражение IF . ELSE . SQL Server вычисляет выражение после ключевого слова IF . И если оно истинно, то выполняются инструкции после ключевого слова IF. Если условие ложно, то выполняются инструкции после ключевого слова ELSE.

Если после IF или ELSE располагает блок инструкций, то этот блок заключается между ключевыми словами BEGIN и END :

IF условие [ELSE ]

Выражение ELSE является необязательным, и его можно опускать.

Например, пусть у нас есть следующие таблицы:

CREATE TABLE Products ( Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL ); CREATE TABLE Customers ( Id INT IDENTITY PRIMARY KEY, FirstName NVARCHAR(30) NOT NULL ); CREATE TABLE Orders ( Id INT IDENTITY PRIMARY KEY, ProductId INT NOT NULL REFERENCES Products(Id) ON DELETE CASCADE, CustomerId INT NOT NULL REFERENCES Customers(Id) ON DELETE CASCADE, CreatedAt DATE NOT NULL, ProductCount INT DEFAULT 1, Price MONEY NOT NULL );

Таблица Orders представляет заказы, а столбец CreatedAt — дату заказов. Узнаем, были ли заказы за последние 10 дней:

DECLARE @lastDate DATE SELECT @lastDate = MAX(CreatedAt) FROM Orders IF DATEDIFF(day, @lastDate, GETDATE()) > 10 PRINT 'За последние десять дней не было заказов'

Добавим выражение ELSE:

DECLARE @lastDate DATE SELECT @lastDate = MAX(CreatedAt) FROM Orders IF DATEDIFF(day, @lastDate, GETDATE()) > 10 PRINT 'За последние десять дней не было заказов' ELSE PRINT 'За последние десять дней были заказы'

Выражение IF. ELSE в T-SQL и MS SQL Server

Если после IF или ELSE идут две и более инструкций, то они заключаются в блок BEGIN. END:

DECLARE @lastDate DATE, @count INT, @sum MONEY SELECT @lastDate = MAX(CreatedAt), @count = SUM(ProductCount) , @sum = SUM(ProductCount * Price) FROM Orders IF @count > 0 BEGIN PRINT 'Дата последнего заказа: ' + CONVERT(NVARCHAR, @lastDate) PRINT 'Продано ' + CONVERT(NVARCHAR, @count) + ' единиц(ы)' PRINT 'На общую сумму ' + CONVERT(NVARCHAR, @sum) END; ELSE PRINT 'Заказы в базе данных отсутствуют'

IF. ELSE (Transact-SQL)

Задает условия выполнения для инструкции Transact-SQL. Инструкция Transact-SQL, указанная за ключевым словом IF, и ее условие выполняются только в том случае, если логическое выражение возвращает значение TRUE. Необязательное ключевое слово ELSE вводит еще одну инструкцию языка Transact-SQL, которая выполняется в том случае, если условие IF не выполняется, то есть логическое выражение возвращает значение FALSE.

Синтаксис

IF Boolean_expression < sql_statement | statement_block >[ ELSE < sql_statement | statement_block >] 

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

Boolean_expression
Выражение, возвращающее значение TRUE или FALSE. Если логическое выражение содержит инструкцию SELECT, инструкция SELECT должна быть заключена в скобки.

< sql_statement| statement_block >
Любая инструкция или группа инструкций Transact-SQL, определенная с помощью блока операторов. Если блок инструкций не используется, условия IF и ELSE могут влиять на выполнение только одной инструкции Transact-SQL.

Для определения блока инструкций используйте ключевые слова потока управления BEGIN и END.

Замечания

Конструкция IF. ELSE может быть использована в пакетах, хранимых процедурах и нерегламентированных запросах. При использовании в хранимой процедуре эта конструкция часто применяется для проверки существования некоторого параметра.

Проверки IF могут находиться внутри другого IF или следующего ELSE. Ограничение количества вложенных уровней зависит от свободной памяти.

Пример

IF DATENAME(weekday, GETDATE()) IN (N'Saturday', N'Sunday') SELECT 'Weekend'; ELSE SELECT 'Weekday'; 

Дополнительные сведения см. в статье ELSE (IF. ELSE) (Transact-SQL).

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

В следующем примере используется IF. ELSE для определения того, какой из двух ответов показать пользователю, на основе веса элемента в таблице DimProduct .

-- Uses AdventureWorksDW DECLARE @maxWeight FLOAT, @productKey INTEGER SET @maxWeight = 100.00 SET @productKey = 424 IF @maxWeight  

Команда SQL для выборки из базы данных (SELECT, WHERE, LIKE, AND, OR)

Команда SELECT позволяет получить данные из базы. Существует возможность задать различные фильтры и лимиты на выборку. Попробуем привести несколько примеров SQL запросов с ограничением выборки в таблице USERS, в которой содержатся данные пользователей.

Условие WHERE в SQL запросе

Получение всех записей в таблице в одном запросе - это очень редкий случай в реальных проектах. Зачастую нужна либо одна запись, либо диапазон, к примеру из 10 или 100 записей либо отвечающее определённому условию. Такую выборку можно сделать с помощью команды условия WHERE в SQL запросе (слово WHERE переводится с английского как "ГДЕ").

Сравнение (=, !=, , =)

Продемонстрируем это условие на ограничении выборки по ID пользователя. Приведём сразу несколько примеров запросов:

SELECT * FROM `USERS` WHERE `ID` = 2; SELECT * FROM `USERS` WHERE `ID` != 2; SELECT * FROM `USERS` WHERE `ID` < 2; SELECT * FROM `USERS` WHERE `ID` 2; SELECT * FROM `USERS` WHERE `ID` >= 2;

Как можно догадаться по математическим символам в этих запросах, выборка ограничена по ID пользователя (по целому числу). При каждом условии может возвращаться разное количество строк из таблицы. К примеру, если указано "WHERE `ID` = 2", то вернётся только одна строка, потому что поле "ID" зачастую уникально (то есть у столбца установлено свойство "PRIMARY KEY"). Если в запросе есть символ неравенства "!=" или сравнения "<, >, headline" >Поиск подстроки (LIKE) и полное соответствие (=)

Знак равенства "=" можно использовать в SQL запросах не только для чисел, но и для строк. Представим что нам нужно получить выборку из базы, в которой будут содержаться данные о пользователе с именем "Мышь". Запрос получится такой:

SELECT * FROM `USERS` WHERE `NAME` = 'Мышь';

В результате мы получим все строки, в которых в столбце имени пользователя "NAME" содержится строка "Мышь". Обратите внимание, что совпадение должно быть полным. То есть в выборку не попадут пользователи, имена которых "Мышь серая", "Мышь белая", "Мышь чёрная". Чтобы выбрать и этих пользователей, необходимо сделать текстовый поиск по значению столбца. Для этого используется команда "LIKE" (в переводе с английского этот предлог звучит как "ПОДОБНО", "ВРОДЕ" или "СЛОВНО").

С помощью команды "LIKE" можно искать подстроку в столбце. Чтобы сделать это поставьте знак процента "%" с той стороны подстроки, с которой могут находиться другие символы. К примеру:

SELECT * FROM `USERS` WHERE `NAME` LIKE 'Мышь%';

В результаты выборки попадёт не только пользователь с именем "Мышь", но и "Мышь серая", "Мышь белая", "Мышь чёрная". Если поставить знак процента ещё и до подстроки:

SELECT * FROM `USERS` WHERE `NAME` LIKE '%Мышь%';

то в выборку попадут не только все предыдущие результаты, но и пользователь с именем "Большая мышь".

LIKE делает поиск независимо от регистра. То есть результаты от '%мышь%' и '%МЫШЬ%' будут одинаковыми.

Логика "и" (AND) и "или" (OR)

Бывают случаи, когда необходимо задать несколько ограничений, связанных логикой. К примеру, если надо выбрать пользователей с ID от 2 до 5, то можно использовать условие с "AND":

SELECT * FROM `USERS` WHERE `ID` >= 2 AND `ID` < 5;

Количество условий и "AND" неограниченно:

SELECT * FROM `USERS` WHERE `ID` >= 2 AND `ID` < 5 AND `NAME` LIKE 'Мышь%';

Существует возможность использовать логику "ИЛИ" благодаря условию "OR". Продемонстрируем это:

SELECT * FROM `USERS` WHERE `ID` < 2 OR `ID` >5;

С помощью круглых скобок ( ) можно группировать условия OR и AND:

SELECT * FROM `USERS` WHERE (`ID` >= 2 AND `ID` < 5) OR (`ID` >10 AND `NAME` LIKE 'Мышь%');

Выбор определённых столбцов в SELECT

В этой статье во всех SELECT запросах к базе запрашивались все поля. Потому что после слова SELECT стояла звёздочка *. Но чем больше объём данных вы выборке, тем медленнее база данных возвращает ответ. Поэтому старайтесь запрашивать у базы только то, что будете использовать. К примеру, если нужно получить только ID пользователя и имя 'NAME', то перечислите эти поля через запятую после слова SELECT:

SELECT `ID`, `NAME` FROM `USERS` WHERE `ID` 

Базы данных сайтов не приспособлены к получению больших выборок. Быстрее всего они работают на объёмах до 100 строк. Если попробовать запросить 100 000 строк из базы и указать вместо конкретных полей *, то можно будет увидеть значительное падение производительности. А чем медленнее загружается ваш сайт, тем меньше посетителей на него будут заходить. Поэтому всегда старайтесь оптимизировать свои запросы к базе.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *