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