Часть 12.2: Условия при выборке данных: WHERE и SELECT в SQLite

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Было бы скучно, если бы у нас была возможность делать простые запросы на выборку данных и к тому же, если бы в языке SQL были бы только простые запросы без различных условий, то логика приложений, использующих базы данных была бы намного сложнее. Итак, данная запись будет целиком и полностью посвящена условиям при выборке данных, которые задаются при помощи уточняющей фразы WHERE.

Условия при выборке данных: WHERE и SELECT в SQLite

Условия при выборке данных: WHERE и SELECT в SQLite

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


Как задать условие при выборке данных из базы данных SQLite: комбинация WHERE и SELECT

Мы рассмотрели примеры простой выборки данных из таблиц базы данных под управлением SQLite, но иногда бывает так, что простые SQL запросы SELECT не дают удовлетворительных результатов. Основной минус заключается в том, что если мы не налагаем на выборку данных из таблицы какие-то условия, то СУБД нам возвращает все строки таблицы.

Иногда таблицы бывают очень большими и не очень удобно просматривать все строки таблицы и искать нужные значения. Иногда нам нужно специально наложить условие на выборку данных из таблицы, чтобы получить только нужные строки. Поэтому нам следует научиться делать выборку данных с условиями.

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

На практике вы редко встретите SQL запрос SELECT без WHERE, так как мало кому нужно получать все строки из таблицы базы данных. Чаще нужно наложить условие при помощи WHERE и сделать выборку с условием. Клаузула или предикат WHERE используются после имени таблицы в предложение, которое осуществляет выборку данных, то есть все условия выборки данных мы задаем только после того, как указали объект базы данных и столбцы, значения которых мы хотим получить.

WHERE и SELECT используются вместе, но не было бы никакого смысла использовать WHERE, если бы мы не могли задать логику условия. Логика условия задается при помощи SQL операторов. Причем SQL операторы могут быть, как операторами сравнения, так и логическими операторами. Кстати, не забывайте о том, что сравнение значений в SQLite бывает трех видов и от выбранного сравнения зависят результаты работы выборки данных с условиями, так как SQLite сравнивает значение, заданное в условие, со значениями, которые хранятся в таблице.

Примеры использования условий при выборке данных из таблиц SQLite3: SELECTс использованием WHERE

Мы довольно подробно на словах описали комбинацию WHERE и SELECT, но слова словами, а примеры осуществления выборки данных с условием будут намного нагляднее и понятнее, чем слова. Поэтому давайте скомбинируем WHERE и SELECT, чтобы понять как работают условия при выборке данных. Для начала создадим таблицу в базе данных, для этого у нас есть команда CREATE:

Мы создали простую таблицу в базе данных с четырьмя столбцами, чтобы приблизить условия к боевым, мы побеспокоились об обеспечение целостности данных в базах данных, задав ограничения уровня столбца и ограничения уровня таблицы. Для тех кто не помнит, напомним, что ограничение первичного ключа PRIMARY KEY является ограничением уровня таблицы. А также мы задали аффинированный тип данных для столбца, чтобы SQLite знала о том, как сравнивать данные в базе данных. Теперь добавим данные в таблицу базы данных при помощи команды INSERT:

Допустим нам необходимо получить данные обо всех женщина, которые работают в компании. Давайте сделаем выборку данных из таблицы table1 с условием, скомбинировав WHERE и SELECT:

В результате выборки данных мы получили не все строки из таблицы, а только те строки, в которых хранится информация о женщинах, добились мы этого за счет наложения условия на выборку данных. Мы просто взяли и скомбинировали WHERE и SELECT.

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

Усложняем условия выборки данных при помощи SQL операторов

Давайте усложним условие выборки данных при помощи SQL операторов и посмотрим, как еще более точно мы можем получать строки из таблицы, комбинируя WHERE и SELECT.

Обратите внимание: мы задали два условия на выборку данных, воспользовавшись предикатом WHERE. Так же стоит отметить, что тип данных (в SQLite это класс данных), который хранится в столбце, должен совпадать с типом данных значения, которое задается в условии. В нашем случае мы сделали не совсем корректно, и выборка сработала только лишь потому, что SQLite–это СУБД с динамической типизацией данных.

Стоит пояснить то, в чем мы допустили неточность: в качестве значение сравнения мы указали 30000 – это число с классом данных INTEGER, а аффинированный тип данных столбца sal – REAL. Нам стоило записать 30000, как 30000.00.

Так же заметим, что некоторые СУБД требуют от разработчика того, чтобы он использовал для условия WHERE только те столбцы, которые он перечислил для выборки, в случае с SQLite можно использовать любые столбцы таблицы в условии WHERE, например:

В данном случае мы не получали данные из столбца sex, но условие WHERE работает со значениями данного столбца, сравнивая их с заданным. Вот так мы можем комбинировать WHERE, SELECTи SQL операторы, чтобы создавать сложные условия выборки данных.

Использование условий WHERE с другими SQL командами в SQLite

Предикат или клаузула WHERE может быть использована вместе с другими SQL командами для того, чтобы задать какие-то условия. В базах данных SQLite3 мы не можем использовать WHERE с командами определения доступа к данным, так как их нет в SQLite. Так же мы не берем в расчет команды управления транзакциями, так как внутри транзакции могут быть любые SQL запросы.

Использование условия WHERE с командами определения данных:

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

Использование условия WHERE с командами манипуляции данными:

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

Мы рассмотрели реализацию выборки данных из базы данных с условием и посмотрели на примерах, как можно комбинировать условие WHERE и SELECT.

2 комментария к записи Часть 12.2: Условия при выборке данных: WHERE и SELECT в SQLite

Владислав

Насколько сложными могут быть условия WHERE и от чего это всё зависит?

Кирилл

Владислав, условия клаузулы WHERE могут быть на самом деле очень сложными. Вот синтаксис из документации SQLite3, в котором показано насколько сложным может быть условие WHERE. Плюс к этому добавьте, что после WHERE можно сделать вложенный запрос. А зависит это: 1) от возможностей СУБД, всё-таки каждая метла по своему метет; 2) и от ваших потребностей и хотелок или от потребностей вашего заказчика/клиента. Исходя из второго пункта, нужно выбирать под первый пункт

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