Часть 12.12: Использование подзапросов в базах данных SQLite: оператор EXISTS и SELECT
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Одна…
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Часто бывает нужно сделать так, чтобы в результирующей таблице запроса SELECT не было дублирующихся и или повторяющихся строк. Для этих целей в языке запросов SQL и базах данных SQLite есть ключевое слово DISTINCT. DISTINCT исключает повторяющиеся/дублирующиеся строки в результате выборки данных. В этой записи мы с вами разберемся с принципами работы ключевого слова DISTINCT в SQL и в SQLite3. А также посмотрим пример запроса SELECT, в котором не будет дублирующихся строк в результате выборки.
Содержание статьи:
Иногда бывает так, что таблицы в базе данных избыточны и строки в них повторяются, чтобы не выводить повторяющиеся строки в результирующей таблице, которую мы получаем в результате SQL запроса SELECT, у нас есть модификатор DISTINCT. Все очень просто, вы пишите SELECT DISTINCT, а библиотека SQLite3 исключает дубликаты строк в результате выборки. Больше нам здесь добавить нечего.
Хотя нам стоит добавить, что команда SELECT имеет два модификатора: ALL и DISTINCT, как вы уже поняли, эти модификаторы необязательные, а SQLite по умолчанию считает, что вы используете значение ALL, когда делаете выборку данных из базы данных.
Давайте реализуем пример использования SELECT DISTINCT в SQLite и исключим повторяющиеся строки из результирующей таблицы в базе данных SQLite3. Для начала создадим таблицу в базе данных, воспользовавшись командой 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]
Довольно-таки простая таблица, но мы обеспечили целостность данных за счет использования ограничения уровня таблицы и ограничений уровня столбца. Помимо того, что ограничение первичного ключа PRIMARY KEY является ограничение уровня таблицы, это еще и индекс таблицы, который совпадает с внутренним индексом ROWID (это столбец, который SQLite генерирует автоматически). А теперь добавим строки в таблицу, для этого есть команда 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 – DISTINCT:
[php]
SELECT DISTINCT name FROM table1;
Пупкин Матвей
Cумкин Денис
Иванов Иван
Маркова Ирина
Петрова Алина
Михайлова Любовь
Сидорова Инна
— для сравнения выполним обычный SELECT
SELECT name FROM table1;
Пупкин Матвей
Cумкин Денис
Иванов Иван
Маркова Ирина
Петрова Алина
Михайлова Любовь
Сидорова Инна
Михайлова Любовь
[/php]
Теперь мы видим разницу между SELECT DISTINCT и обычным SELECT, в первом случае у нас не повторяется строка «Михайлова Любовь». Как видите, ничего сложно в том, чтобы исключить дубли значений из выборки данных, нет: просто используйте ключевую фразу SELECT DISTINCT.
Выберете удобный для себя способ, чтобы оставить комментарий