Часть 10.2: Удаление таблицы из базы данных SQLite3
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Мы…
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Мы научились делать выборку данных из базы данных с условием, а также другим полезным приемам, которые реализуются за счет SQL клаузул. Но было бы неинтересно, если бы мы не могли усложнять условия выборки. Для усложнения условий выборки данных из базы данных используются логические операторы, такие как AND, OR и NOT вместе с SELECT. Кто-то может сказать: зачем усложнять SQL запрос, ведь они и так сложные? Ответ будет очень прост: чтобы делать выборку более точной. Итак, операторы AND, OR и NOT используются в SQL запросах, чтобы сделать выборку данных более точной при помощи логических выражений.
Из этой записи вы узнаете о том, как использовать логические SQL операторы вместе с SELECT и о том, как они работают в базах данных под управлением библиотеки SQLite. Так же посмотрите несколько примеров того, как составлять запросы SELECT с использованием операторов AND, NOT и OR. И в завершающей части данной записи вы можете найти информацию о том, с какими еще командами языка SQL можно использовать операторы AND и OR.
Содержание статьи:
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 очень громоздкий, он представлен на рисунке ниже.
Мы не ставим перед собой цели описать каждую строчку данной картинки, но пояснения ниже помогут составлять вам сложные выражения. Давайте посмотрим на примерах, как мы можем использовать операторы AND и OR вместе с SELECT, ведь на словах всё вроде бы понятно.
Давайте попробуем написать несколько SQL запросов, которые помогут нам понять принцип работы AND, OR и SELECT вместе. Для начала создадим таблицу в базе данных, воспользовавшись командой CREATE:
[php]
CREATE TABLE table1 (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
pro TEXT NOT NULL,
sex TEXT NOT NULL,
sal REAL CHECK (sal > 15000)
);
[/php]
Таблица проста до безобразия: четыре столбца, для которых заданы ограничения уровня столбца. Так же столбец id имеет ограничение уровня таблицы, которое еще и является индексом таблицы, это мы про PRIMARY KEY, если кто не понял. Всё это нужно для двух вещей: ускорить выборку данных из базы данных и обеспечить целостность данных в базе данных. А теперь давайте добавим данные в таблицу базы данных, для этого воспользуемся командой INSERT INTO:
[php]
INSERT INTO table1 (name, pro, sex, sal)
VALUES (‘Пупкин Матвей’, 'Дантист', ‘м’, 55000.00);
INSERT INTO table1 (name, pro, sex, sal)
VALUES (‘Cумкин Денис’, 'Юрист', ‘м’, 35040.90);
INSERT INTO table1 (name, pro, sex, sal)
VALUES (‘Иванов Иван’, 'Младший юрист', ‘м’, 16000.00);
INSERT INTO table1 (name, pro, sex, sal)
VALUES (‘Маркова Ирина’, 'Бухгалтер', ‘ж’, 31200.10);
INSERT INTO table1 (name, pro, sex, sal)
VALUES (‘Петрова Алина’, 'Менеджер продаж', ‘ж’, 21200.10);
INSERT INTO table1 (name, pro, sex, sal)
VALUES (‘Михайлова Любовь’, 'Секретарь', ‘ж’, 16200.10);
INSERT INTO table1 (name, pro, sex, sal)
VALUES (‘Сидорова Инна’, 'Руководитель отдела обслуживания', ‘ж’, 66200.10);
INSERT INTO table1 (name, pro, sex, sal)
VALUES (‘Михайлова Любовь’, 'Документооборотчик', ‘ж’, 21200.10);
[/php]
Таблица наполнена, а теперь давайте попрактикуемся в написании запросов SELECT вместе с AND и OR:
[php]
SELECT * FROM table1
WHERE sex = 'м' AND sal > 20000;
1|Пупкин Матвей|Дантист|м|55000.0
2|Cумкин Денис|Юрист|м|35040.9
SELECT * FROM table1
WHERE sex = 'м' OR sal>20000;
1|Пупкин Матвей|Дантист|м|55000.0
2|Cумкин Денис|Юрист|м|35040.9
3|Иванов Иван|Младший юрист|м|16000.0
4|Маркова Ирина|Бухгалтер|ж|31200.1
5|Петрова Алина|Менеджер продаж|ж|21200.1
7|Сидорова Инна|Руководитель отдела обслуживания|ж|66200.1
8|Михайлова Любовь|Документооборотчик|ж|21200.1
[/php]
Казалось бы, запросы одинаковы, разница только в одном операторе 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:
[php]
SELECT * FROM table1
WHERE sex = 'м' OR sal > 20000 AND sex = 'ж' OR sal > 27000;
1|Пупкин Матвей|Дантист|м|55000.0
2|Cумкин Денис|Юрист|м|35040.9
3|Иванов Иван|Младший юрист|м|16000.0
4|Маркова Ирина|Бухгалтер|ж|31200.1
5|Петрова Алина|Менеджер продаж|ж|21200.1
7|Сидорова Инна|Руководитель отдела обслуживания|ж|66200.1
8|Михайлова Любовь|Документооборотчик|ж|21200.1
SELECT * FROM table1
WHERE (sex = 'м' OR sal > 20000 ) AND (sex = 'ж' OR sal > 27000);
1|Пупкин Матвей|Дантист|м|55000.0
2|Cумкин Денис|Юрист|м|35040.9
4|Маркова Ирина|Бухгалтер|ж|31200.1
5|Петрова Алина|Менеджер продаж|ж|21200.1
7|Сидорова Инна|Руководитель отдела обслуживания|ж|66200.1
8|Михайлова Любовь|Документооборотчик|ж|21200.1
[/php]
Обратите внимание: скобки задают приоритет выполнения выражений, как в математике, сначала SQLite вычисляет выражения в скобках, а затем за скобками. Оператор AND имеет более высокий приоритет, чем OR, так как AND – это логической умножение (1 AND 0 = 0), а OR – это логическое сложение (1 OR 0 = 1). Поэтому результаты работы команды SELECT в примерах выше разные.
Мы рассмотрели, как работают логические операторы AND и OR вместе с командой SELECT. Помните, что у логических операторов есть приоритет и о том, что выражения в скобках имеют наивысший приоритет, тогда вы с легкостью сможете составлять сложные условия для выборки данных из базы данных SQLite3.
Логические операторы AND и OR можно использовать не только с командой SELECT, но и с другими командами SQLite. Давайте это обсудим. Во-первых, мы не будем говорить о командах управления транзакциями, так как в транзакции можно использовать практически любое SQL предложение, и мы не будем говорить о командах определения доступа к данным, так как их нет в SQLite.
Команды манипуляции данными в базах данных SQLite:
Команды определения данных в базах данных SQLite3:
Итак, мы убедились, что операторы AND и OR стоит использовать с командой SELECT для того, чтобы усложнить условие выборки данных, тем самым делая SELECT более точным.
Pingback: Антон