Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. Часто бывает нужно сделать так, чтобы в результирующей таблице запроса SELECT не было дублирующихся и или повторяющихся строк. Для этих целей в языке запросов SQL и базах данных SQLite есть ключевое слово DISTINCT. DISTINCT исключает повторяющиеся/дублирующиеся строки в результате выборки данных. В этой записи мы с вами разберемся с принципами работы ключевого слова DISTINCT в SQL и в SQLite3.  А также посмотрим пример запроса SELECT, в котором не будет дублирующихся строк в результате выборки.

Исключить повторяющиеся строки из выборки данных: SELECT DISTINCT в SQLite

Исключить повторяющиеся строки из выборки данных: SELECT DISTINCT в SQLite

 

Как исключить повторяющиеся строки при выборке данных из базы данных: SELECT DISTINCT в SQLite

Иногда бывает так, что таблицы в базе данных избыточны и строки в них повторяются, чтобы не выводить повторяющиеся строки в результирующей таблице, которую мы получаем в результате SQL запроса SELECT, у нас есть модификатор DISTINCT. Все очень просто, вы пишите SELECT DISTINCT, а библиотека SQLite3 исключает дубликаты строк в результате выборки. Больше нам здесь добавить нечего.

Хотя нам стоит добавить, что команда SELECT имеет два модификатора: ALL и DISTINCT, как вы уже поняли, эти модификаторы необязательные, а SQLite по умолчанию считает, что вы используете значение ALL, когда делаете выборку данных из базы данных.

Пример исключения повторяющихся строк из выборки данных в базе данных: SELECT DISTINCT в SQLite

Давайте реализуем пример использования 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.

Возможно, эти записи вам покажутся интересными


Выберете удобный для себя способ, чтобы оставить комментарий

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Loading Disqus Comments ...