Часть 12.7: Логические выражения при выборке данных: AND, OR и SELECT в SQLite

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Мы научились делать выборку данных из базы данных с условием, а также другим полезным приемам, которые реализуются за счет SQL клаузул. Но было бы неинтересно, если бы мы не могли усложнять условия выборки. Для усложнения условий выборки данных из базы данных используются логические операторы, такие как AND, OR и NOT вместе с SELECT. Кто-то может сказать: зачем усложнять SQL запрос, ведь они и так сложные? Ответ будет очень прост: чтобы делать выборку более точной. Итак, операторы AND, OR и NOT используются в SQL запросах, чтобы сделать выборку данных более точной при помощи логических выражений.

 

Логические выражения при выборке данных: AND, OR и SELECT в SQLite

Логические выражения при выборке данных: AND, OR и SELECT в SQLite

Из этой записи вы узнаете о том, как использовать логические SQL операторы вместе с SELECT и о том, как они работают в базах данных под управлением библиотеки SQLite. Так же посмотрите несколько примеров того, как составлять запросы SELECT с использованием операторов AND, NOT и OR. И в завершающей части данной записи вы можете найти информацию о том, с какими еще командами языка SQL можно использовать операторы AND и OR.


Как использовать SQL операторы при выборке данных из базы данных SQLite: AND, OR и SELECT

SQL запросы SELECT бывают действительно очень громоздкими, но это не означает, что они сложные. Когда мы выполняем команду SELECT, то можем усложнять логику SQL запроса при помощи различных SQL операторов, SQL операторов очень много и ранее мы их уже описывали, напомним, что SQL операторы делятся на: логические, сравнения и арифметические. И любой из перечисленных операторов мы можем использовать вместе с командой SELECT.

Самыми интересными SQL операторами, на наш взгляд являются логические, именно эти операторы могут усложнять логику запроса и делать простую выборку данных из базы данных более сложной. Здесь мы рассмотрим использование операторов AND и OR вместе с командой SELECT, как наиболее часто встречающиеся операторы.

Операторы AND и OR используются вместе с SELECT и различными клаузулами, которые мы рассмотрели ранее. Например, мы можем усложнить условие выборки данных, определяемое WHERE при помощи AND и OR или мы можем усложнить дополнительную фильтрацию данных (клаузула HAVING), которая происходит после группировки данных выборки (клаузула GROUP BY).

В общем и целом, операторы AND и OR делают наши запросы SELECT более точными и позволяют задавать более сложные условия выборки. Так же вам нужно учитывать, что AND и OR являются бинарными операторами, а это означает, что для них следует использовать два операнда (два значения: слева и справа). Синтаксис выражений, которые можно использовать в SQLite3 очень громоздкий, он представлен на рисунке ниже.

Синтаксис использования выражений в базах данных SQLite

Синтаксис использования выражений в базах данных SQLite

Мы не ставим перед собой цели описать каждую строчку данной картинки, но пояснения ниже помогут составлять вам сложные выражения. Давайте посмотрим на примерах, как мы можем использовать операторы AND и OR вместе с SELECT, ведь на словах всё вроде бы понятно.

Примеры использования логических операторов AND, OR вместе с SELECT

Давайте попробуем написать несколько SQL запросов, которые помогут нам понять принцип работы AND, OR и SELECT вместе. Для начала создадим таблицу в базе данных, воспользовавшись командой CREATE:

Таблица проста до безобразия: четыре столбца, для которых заданы ограничения уровня столбца. Так же столбец id имеет ограничение уровня таблицы, которое еще и является индексом таблицы, это мы про PRIMARY KEY, если кто не понял. Всё это нужно для двух вещей: ускорить выборку данных из базы данных и обеспечить целостность данных в базе данных. А теперь давайте добавим данные в таблицу базы данных, для этого воспользуемся командой INSERT INTO:

Таблица наполнена, а теперь давайте попрактикуемся в написании запросов SELECT вместе с AND и OR:

Казалось бы, запросы одинаковы, разница только в одном операторе AND и OR, а какие разные результаты. Дело все в том, что оператор AND – это «логическое И», поэтому SQLite посмотрел на левый операнд, выполнил его условие (sex=’м’) составил у себя внутри таблицу по данному условию, а затем наложил на эту таблицу второе условие, которое стоит справа от AND (sal>20000) и удалил все строки, которые не подходят под это условие, а результат вывел нам в виде таблице. Мы говорим SQLite3: дай нам информацию о мужчинах, зарплата которых больше двадцати тысяч рублей.

Оператор OR или «логическое ИЛИ» действует несколько иначе. SQLite видит условие слева (sex = ‘м’), выбирает из таблицы строку, удовлетворяющие этому условию, затем SQLite видит условие справа (sal>20000) и добавляет к строкам, полученным из первого условия новые строки, удовлетворяющие второму условию. Мы как бы говорим SQLite: дай нам информацию о мужчинах (sex =’м’) или дай нам информацию о тех людях, которые получают больше двадцати тысяч рублей (sal>20000).

AND и OR в запросах SELECT можно повторять сколько угодно раз и строить очень сложные SQL предложения, давайте скомбинируем AND и OR в одном запросе SELECT:

Обратите внимание: скобки задают приоритет выполнения выражений, как в математике, сначала SQLite вычисляет выражения в скобках, а затем за скобками. Оператор AND имеет более высокий приоритет, чем OR, так как AND – это логической умножение (1 AND 0 = 0), а OR – это логическое сложение (1 OR 0 = 1). Поэтому результаты работы команды SELECT в примерах выше разные.

Мы рассмотрели, как работают логические операторы AND и OR вместе с командой SELECT. Помните, что у логических операторов есть приоритет и о том, что выражения в скобках имеют наивысший приоритет, тогда вы с легкостью сможете составлять сложные условия для выборки данных из базы данных SQLite3.

Использование операторов AND и OR с другими командами SQLite

Логические операторы AND и OR можно использовать не только с командой SELECT, но и с другими командами SQLite. Давайте это обсудим. Во-первых, мы не будем говорить о командах управления транзакциями, так как в транзакции можно использовать практически любое SQL предложение, и мы не будем говорить о командах определения доступа к данным, так как их нет в SQLite.

Команды манипуляции данными в базах данных SQLite:

  1. При добавлении данных в таблицы баз данных мы можем использовать операторы AND и OR, когда используем команду INSERT с подзапросом SELECT.
  2. Когда мы хотим удалить строки из таблицы базы данных SQLite3, то мы можем использовать AND и OR вместе с командой DELETE, чтобы более точно указать SQLite, какие строки мы хотим удалить.
  3. Когда мы модифицируем данные в таблицах базы данных SQLite, то вместе с командой UPDATE мы можем использовать AND и OR, чтобы более точно определить строки, в которые нужно внести изменения.

Команды определения данных в базах данных SQLite3:

  1. Мы можем создавать таблицы в базах данных SQLite при помощи ключевого слова AS и подзапроса SELECT, поэтому мы можем сказать, что AND и OR можно использовать с командой CREATE TABLE.
  2. Когда мы удаляем таблицы из базы данных, мы не можем использовать логические операторы AND и OR вместе с командой DROP.
  3. Когда мы хотим модифицировать таблицу в базе данных, то мы не сможем использовать операторы AND и OR с командой ALTER.

Итак, мы убедились, что операторы AND и OR стоит использовать с командой SELECT для того, чтобы усложнить условие выборки данных, тем самым делая SELECT более точным.

Один комментарий к записи Часть 12.7: Логические выражения при выборке данных: AND, OR и SELECT в SQLite

Антон

Прогуливал я в универе дискретную математику, теперь приходится наверстывать, ибо и в программирование и в базах данных без этого никуда. Везде есть логические операторы сложения, умножения, которые в результате дают истину или ложь, как и у вас в примерах с AND и OR. Если этот блог читают учащиеся вузов, то хочу вам посоветовать не забивать на фундаментальные основы, потому что они есть везде и их понимание — ключ к успеху любого языка, а не только языка SQL.

Текст комментария: