Часть 3.8: Третья нормальная форма (3NF)
Здравствуйте, уважаемые посетители сайта ZametkiNaPolyah.ru. Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3.…
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. В этой записи мы поговорим про использование SQL оператора IN и команды SELECT в базах данных SQLite. Оператор IN позволяет делать выборку данных, при этом строки будут выбраны на основе сравнения значений столбцов с заранее определенным набором, который указывается в операторе IN. Часто вы можете встретить подзапросы SELECT с использование оператора IN, но об этом мы поговорим в другой записи.
Определение набора значений в базах данных SQLite: оператор IN и SELECT
Из этой записи вы узнаете:
Содержание статьи:
Бывают ситуации, когда нам нужно сделать выборку данных из базы данных SQLite не в каком-то диапазоне, а по заранее известному набору значение. Такой набор значений нам позволяет определить SQL оператор IN вместе с командой SELECT. SQL запрос SELECT может использовать оператор IN не только для определения заранее известного набора значений, но для создания подзапроса, когда значения неизвестны, но об этом в другой части темы.
SQL оператор IN и команда SELECT дают иногда интересные и полезные результаты. Так же вам стоит понимать, что оператор IN в SQL запросах следует использовать вместе с клаузулой WHERE, когда необходимо задать условие выборки данных или же с клаузулой HAVING, когда нужно отфильтровать строки после группировки данных, реализуемой клаузулой GROUP BY.
SQL оператор IN – это логический оператор, он относится к той же группе операторов, что и AND и OR, а так же оператор LIKE, который реализует поиск по шаблону в базах данных. Оператор IN в левой части принимает значения столбца, а в правой части определяется набор значений, с которыми сравниваются значения столбца в процессе выполнения команды SELECT.
Пожалуй, это всё что нужно знать про использование оператора IN и команды SELECT, теперь можем попрактиковаться в составление запрос SELECT с оператором IN и попробовать определить свои наборы значений.
IN и SELECT часто используются вместе, обычно оператор IN используется для создания подзапроса SELECT, но в данном случае мы рассмотрим пример простого использования оператора IN с командой SELECT, а в следующей части мы посмотрим, как сделать подзапрос. Давайте попробуем определить набор значений IN. Для этого создадим таблицу в базе данных SQLite при помощи команды CREATE:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
CREATE TABLE table1 ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, pro TEXT NOT NULL, sex TEXT NOT NULL, sal REAL CHECK (sal > 15000) ); |
Ничего необычного в созданной таблице нет: мы обеспечили целостность данных при помощи ограничений уровня таблицы и ограничения уровня столбца, а также мы создали индекс таблицы при помощи ограничения первичного ключа PRIMARY KEY. Теперь давайте наполним таблицу данными, для этого есть команда INSERT:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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); |
Для примера оператора IN и команды SELECT у нас всё готово, давайте напишем SQL предложение, которое будет показывать строки только из определенного набора значений:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT * FROM table1 WHERE id IN (1,3, 5, 7); 1|Пупкин Матвей|Дантист|м|55000.0 3|Иванов Иван|Младший юрист|м|16000.0 5|Петрова Алина|Менеджер продаж|ж|21200.1 7|Сидорова Инна|Руководитель отдела обслуживания|ж|66200.1 |
В данном случае наш определенный набор значений – это нечетные строки, в правом операнде оператора IN это видно, так легко и просто можно определить набор значений в базе данных при помощи связки оператора IN и команды SELECT.
Но мы можем использовать логическое отрицание NOT вместе с оператором IN и командой SELECT, тогда мы получим строки, которые не входят в определенный набор значений, давайте это посмотрим:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT * FROM table1 WHERE id NOT IN (1,3, 5, 7); 2|Cумкин Денис|Юрист|м|35040.9 4|Маркова Ирина|Бухгалтер|ж|31200.1 6|Михайлова Любовь|Секретарь|ж|16200.1 8|Михайлова Любовь|Документооборотчик|ж|21200.1 |
Теперь комбинация NOT IN и SELECT дала нам четные строки, потому что они не входят в определенный набор значений.
Мы можем использовать SQL оператор IN не только с командой SELECT, но и с другими командами библиотеки SQLite. Мы не будем говорить про операторы управления транзакциями и команды определения доступа к данным, так внутри первых можно писать какие угодно SQL предложения, а вторых в SQLite нет.
Команды манипуляции данными в SQLite и оператор IN:
Команды определения данных в SQLite и оператор IN:
Оператор IN и команда SELECT позволяют определить набор значений, которые будут отражены в результате выборки, не забывайте о том, что оператор IN бинарный и производит сравнение значений столбца с заданными значениями. Будьте аккуратны используя оператор IN и SELECT, ведь SQLite – это СУБД с динамической типизацией данных, в которой нет типов данных, а есть классы данных и аффинированные типы данных столбцов.
Выберете удобный для себя способ, чтобы оставить комментарий