DEV Community

Erlan Akbaraliev
Erlan Akbaraliev

Posted on

База Данных

  1. Создание таблицы
  2. SELECT
  3. LIMIT
  4. WHERE
  5. OR, AND
  6. NULL
  7. LIKE
  8. Интервалы
  9. ORDER BY
  10. SQL функции (AVG, ROUND, MAX, MIN, SUM, COUNT)
  11. DISTINCT

Создайте таблицу книги используя этот запрос:

CREATE TABLE книги (
    isbn VARCHAR(20),
    название TEXT,
    автор TEXT,
    переводчик TEXT,
    формат TEXT,
    страницы INT,
    издательство TEXT,
    опубликовано DATE,
    год INT,
    голоса INT,
    рейтинг NUMERIC(3,2)
);
Enter fullscreen mode Exit fullscreen mode

Добавьте данные:

INSERT INTO книги (isbn, название, автор, переводчик, формат, страницы, издательство, опубликовано, год, голоса, рейтинг)
VALUES
('978-5-1234-5670-1', 'Жизнь и судьба', 'Василий Гроссман', 'Ирина Кузнецова', 'Твердая', 912, 'Издательство Восток', '2018-03-12', 2018, 2541, 4.80),
('978-5-1234-5671-8', 'Зулейха открывает глаза', 'Гузель Яхина', 'Анна Сидорова', 'Мягкая', 480, 'Молодая Гвардия', '2020-09-21', 2020, 3210, 4.70),
('978-5-1234-5672-5', 'Лавр', 'Евгений Водолазкин', 'Мария Белова', 'Твердая', 368, 'Эксмо', '2019-05-15', 2019, 4120, 4.32),
('978-5-1234-5673-2', 'Авиатор', 'Евгений Водолазкин', 'Мария Белова', 'Мягкая', 320, 'Эксмо', '2021-02-15', 2021, 5611, 4.18),
('978-5-1234-5674-9', 'Метро 2033', 'Дмитрий Глуховский', 'Мария Смирнова', 'Мягкая', 330, 'АСТ', '2018-09-02', 2018, 9420, 3.85),
('978-5-1234-5675-6', 'Текст', 'Дмитрий Глуховский', 'Александр Сидоров', 'Мягкая', 320, 'Эксмо', '2019-05-01', 2019, 17845, 4.07),
('978-5-1234-5676-3', 'Зулейха и её судьба', 'Гузель Яхина', 'Анна Сидорова', 'Твердая', 416, 'Молодая Гвардия', '2021-06-10', 2021, 3724, 4.24),
('978-5-1234-5677-0', 'Соловьёв и Ларионов', 'Евгений Водолазкин', 'Мария Белова', 'Твердая', 256, 'Эксмо', '2018-11-07', 2018, 4120, 3.94),
('978-5-1234-5678-7', 'Обливион', 'Сергей Лебедев', 'Антон Лебедев', 'Мягкая', 360, 'НЛР', '2021-07-22', 2021, 1918, 3.88),
('978-5-1234-5679-4', 'Время прощаний', 'Ольга Славникова', 'Мария Смирнова', 'Твердая', 448, 'Corpus Press', '2022-01-18', 2022, 1853, 3.96),
('978-5-1234-5680-0', 'Серые пчёлы', 'Андрей Курков', 'Борис Дралюк', 'Мягкая', 400, 'Фолио', '2022-06-08', 2022, 5256, 4.17),
('978-5-1234-5681-7', 'Смерть и пингвин', 'Андрей Курков', 'Георг Бёрд', 'Мягкая', 304, 'Фолио', '2020-03-03', 2020, 7428, 4.05),
('978-5-1234-5682-4', 'Гора и стена', 'Алиса Ганиева', 'Карол Апполлио', 'Мягкая', 320, 'НЛР', '2021-07-11', 2021, 1543, 3.64),
('978-5-1234-5683-1', 'Невеста и жених', 'Алиса Ганиева', 'Карол Апполлио', 'Мягкая', 272, 'АСТ', '2020-09-22', 2020, 1675, 3.71),
('978-5-1234-5684-8', 'Город мечты', 'Алексей Иванов', 'Екатерина Юнг', 'Твердая', 480, 'Эксмо', '2021-11-30', 2021, 5123, 4.09),
('978-5-1234-5685-5', 'Сердце Пармы', 'Алексей Иванов', 'Екатерина Юнг', 'Мягкая', 640, 'АСТ', '2020-12-14', 2020, 3850, 4.19),
('978-5-1234-5686-2', 'Забор', 'Захар Прилепин', 'Андрей Рейнольдс', 'Мягкая', 416, 'АСТ', '2019-08-16', 2019, 1735, 3.58),
('978-5-1234-5687-9', 'Клуастер', 'Захар Прилепин', 'Андрей Рейнольдс', 'Твердая', 560, 'АСТ', '2020-06-01', 2020, 4679, 4.02),
('978-5-1234-5688-6', 'Метель', 'Владимир Сорокин', 'Джейми Гамбелл', 'Твердая', 256, 'Corpus Press', '2021-01-05', 2021, 3800, 3.89),
('978-5-1234-5689-3', 'Теллурия', 'Владимир Сорокин', 'Макс Лоутон', 'Мягкая', 480, 'Corpus Press', '2022-04-22', 2022, 2901, 4.11),
('978-5-1234-5690-9', 'День опричника', 'Владимир Сорокин', 'Джейми Гамбелл', 'Мягкая', 320, 'Corpus Press', '2020-10-02', 2020, 4156, 3.77),
('978-5-1234-5691-6', 'Ледяная трилогия', 'Владимир Сорокин', 'Джейми Гамбелл', 'Мягкая', 704, 'АСТ', '2020-07-21', 2020, 3810, 3.83),
('978-5-1234-5692-3', 'Анима', 'Мария Галина', 'Мария Смирнова', 'Мягкая', 368, 'Эксмо', '2021-03-27', 2021, 963, 3.75),
('978-5-1234-5693-0', 'Свет и тьма', 'Михаил Шишкин', 'Андрей Бромфилд', 'Мягкая', 384, 'АСТ', '2020-05-05', 2020, 3674, 4.15),
('978-5-1234-5694-7', 'Волосы девы', 'Михаил Шишкин', 'Мария Смирнова', 'Твердая', 480, 'АСТ', '2021-07-29', 2021, 2845, 4.22),
('978-5-1234-5695-4', 'Сад', 'Татьяна Толстая', 'Джейми Гамбелл', 'Мягкая', 352, 'АСТ', '2021-02-20', 2021, 1456, 3.86),
('978-5-1234-5696-1', 'Слинкс', 'Татьяна Толстая', 'Джейми Гамбелл', 'Твердая', 368, 'АСТ', '2020-01-09', 2020, 3250, 3.94),
('978-5-1234-5697-8', 'Завтра', 'Дмитрий Быков', 'Андрей Рейнольдс', 'Мягкая', 416, 'Эксмо', '2020-08-14', 2020, 4920, 4.12),
('978-5-1234-5698-5', 'Орфография', 'Дмитрий Быков', 'Андрей Рейнольдс', 'Твердая', 512, 'АСТ', '2021-10-10', 2021, 4102, 4.01),
('978-5-1234-5699-2', 'Лавр. Дополненное', 'Евгений Водолазкин', 'Мария Белова', 'Твердая', 400, 'Эксмо', '2022-03-02', 2022, 2543, 4.27),
('978-5-1234-5700-5', 'Похороните меня за плинтусом', 'Павел Санаев', 'Екатерина Юнг', 'Мягкая', 208, 'Эксмо', '2019-04-12', 2019, 2845, 3.91),
('978-5-1234-5701-2', 'Пищеблок', 'Сергей Лебедев', 'Антон Лебедев', 'Мягкая', 320, 'НЛР', '2020-09-03', 2020, 1650, 3.88),
('978-5-1234-5702-9', 'Маленькая жизнь', 'Александр Кабаков', 'Мария Смирнова', 'Твердая', 416, 'Corpus Press', '2020-01-28', 2020, 4105, 4.05),
('978-5-1234-5703-6', 'Счастье моё', 'Александр Кабаков', 'Мария Смирнова', 'Мягкая', 384, 'Corpus Press', '2021-06-02', 2021, 2980, 3.97),
('978-5-1234-5704-3', 'Живые и мертвые', 'Василий Гроссман', 'Ирина Кузнецова', 'Твердая', 912, 'Издательство Восток', '2019-11-12', 2019, 2415, 4.78),
('978-5-1234-5705-0', 'Идеальная пара', 'Татьяна Толстая', 'Джейми Гамбелл', 'Мягкая', 272, 'АСТ', '2020-03-11', 2020, 1932, 3.85),
('978-5-1234-5706-7', 'Порог', 'Владимир Сорокин', 'Макс Лоутон', 'Твердая', 384, 'Corpus Press', '2021-08-18', 2021, 2750, 4.00),
('978-5-1234-5707-4', 'Время секонд-хэнд', 'Владимир Сорокин', 'Джейми Гамбелл', 'Мягкая', 416, 'Corpus Press', '2022-02-22', 2022, 3180, 4.05),
('978-5-1234-5708-1', 'Девушка с Земли', 'Михаил Шишкин', 'Андрей Бромфилд', 'Твердая', 432, 'АСТ', '2021-03-07', 2021, 2950, 4.17),
('978-5-1234-5709-8', 'Дети Арбата', 'Анатолий Рыбаков', 'Сергей Ковалёв', 'Твердая', 768, 'Эксмо', '2019-07-22', 2019, 4652, 4.33),
('978-5-1234-5710-4', 'Уроки французского', 'Эмиль Золя', 'Мария Смирнова', 'Мягкая', 368, 'Corpus Press', '2020-05-19', 2020, 2832, 3.95),
('978-5-1234-5711-1', 'Белая гвардия', 'Михаил Булгаков', 'Ирина Кузнецова', 'Твердая', 592, 'Эксмо', '2021-01-12', 2021, 5124, 4.21),
('978-5-1234-5712-8', 'Мастер и Маргарита', 'Михаил Булгаков', 'Ирина Кузнецова', 'Твердая', 672, 'Эксмо', '2018-10-31', 2018, 6783, 4.52),
('978-5-1234-5713-5', 'Собор', 'Александр Куприн', 'Мария Смирнова', 'Мягкая', 432, 'АСТ', '2019-11-18', 2019, 3921, 4.03),
('978-5-1234-5714-2', 'Пиковая дама', 'Александр Пушкин', 'Ирина Кузнецова', 'Твердая', 176, 'Эксмо', '2020-02-14', 2020, 4832, 4.28),
('978-5-1234-5715-9', 'Анна Каренина', 'Лев Толстой', 'Мария Смирнова', 'Твердая', 864, 'АСТ', '2021-06-01', 2021, 12583, 4.56),
('978-5-1234-5716-6', 'Война и мир', 'Лев Толстой', 'Ирина Кузнецова', 'Твердая', 1296, 'Эксмо', '2019-09-22', 2019, 14245, 4.61),
('978-5-1234-5717-3', 'Хождение по мукам', 'Александр Фадеев', 'Андрей Бромфилд', 'Мягкая', 832, 'АСТ', '2020-04-15', 2020, 6542, 4.18),
('978-5-1234-5718-0', 'Черный человек', 'Анна Ахматова', 'Мария Смирнова', 'Мягкая', 224, 'Corpus Press', '2021-07-20', 2021, 2750, 3.97),
('978-5-1234-5719-7', 'Реквием', 'Анна Ахматова', 'Ирина Кузнецова', 'Твердая', 160, 'Corpus Press', '2020-12-14', 2020, 3430, 4.12),
('978-5-1234-5720-3', 'Петр Первый', 'Александр Пушкин', 'Мария Смирнова', 'Твердая', 896, 'Эксмо', '2019-06-22', 2019, 4812, 4.23),
('978-5-1234-5721-0', 'Жизнь Клима Самгина', 'Максим Горький', 'Александр Сидоров', 'Твердая', 832, 'АСТ', '2018-08-15', 2018, 3625, 4.08),
('978-5-1234-5722-7', 'На дне', 'Максим Горький', 'Мария Смирнова', 'Мягкая', 368, 'АСТ', '2021-01-03', 2021, 2958, 4.01),
('978-5-1234-5723-4', 'Тихий Дон', 'Михаил Шолохов', 'Ирина Кузнецова', 'Твердая', 1024, 'Эксмо', '2020-11-05', 2020, 11205, 4.49),
('978-5-1234-5724-1', 'Поднятая целина', 'Михаил Шолохов', 'Мария Смирнова', 'Твердая', 896, 'Эксмо', '2019-05-22', 2019, 9320, 4.37),
('978-5-1234-5670-2', 'Жамиля', 'Чынгыз Айтматов', NULL, 'Твердая', 912, 'Издательство Восток', '2010-03-12', 2010, 2544, 5.00),
('978-5-1234-5670-2', 'Жамиля', 'Чынгыз Айтматов', NULL, 'Твердая', 912, 'Издательство Восток', '2010-03-12', 2010, 2544, 5.00);

Enter fullscreen mode Exit fullscreen mode

SELECT

У нас есть таблица с названием книга в базе данных.
Давайте посмотрим какие данные имеются в это таблице.
Используйте SELECT в переводе на русский обозначает ВЫБРАТЬ, чтобы выбрать какие-то или все строки из таблицы.

SELECT * 
FROM книги;
Enter fullscreen mode Exit fullscreen mode

В таблица имеются много столбцов, вместо того чтобы показать все столбцы, мы можем показать только которые хотим, например только имя автора книги.

SELECT автор 
FROM книги;
Enter fullscreen mode Exit fullscreen mode

Мы можем выбрать несколько столбцов.

SELECT название, автор FROM книги;
Enter fullscreen mode Exit fullscreen mode

LIMIT

Если в таблице базы данных содержится миллион строк, с помощью LIMIT мы можем вывести только определённое количество строк.

SELECT * 
FROM книги
LIMIT 10;
Enter fullscreen mode Exit fullscreen mode

WHERE

Ключевое слово WHERE, в переводе на русский ГДЕ, используется, чтобы выбрать строки по определённому условию. Оно выводит только те строки, для которых это условие выполняется.

SELECT *
FROM книги
WHERE автор='Лев Толстой';
Enter fullscreen mode Exit fullscreen mode

Это запрос покажет все данные книг Лев Толстоя.
Выбрать все столбцы из таблицы книги где автор='Лев Толстой'

SELECT автор, название, год
FROM книги
WHERE год=2021;
Enter fullscreen mode Exit fullscreen mode

Выбери столбцы автор, название книги, год публикации
из таблицы книги
где год=2021

Покажет все книги которые были опубликованы в 2021 году.

SELECT автор, название, год
FROM книги
WHERE год!=2021;
Enter fullscreen mode Exit fullscreen mode

Покажет все книги которые не были опубликованы в 2021 году.

Операторы, которые можно использовать для указания условий в SQL:
= — «равно»,
!= — «не равно»,
<> — тоже «не равно».**

SELECT автор, название, год
FROM книги
WHERE год<>2021;
Enter fullscreen mode Exit fullscreen mode

Ещё один способ получить тот же результат — использовать ключевое слово NOT.

SELECT автор, название, год
FROM книги
WHERE NOT год=2021;
Enter fullscreen mode Exit fullscreen mode

OR, AND

OR = или
AND = и

Чтобы выбрать название, авторы, и год публикации книг которые были опубликованы в 2020 или 2021 году.

SELECT название, автор, год
FROM книги
WHERE год=2020 OR год=2021;
Enter fullscreen mode Exit fullscreen mode

Чтобы выбрать книги Лев Толстоя которые были опубликованы в 2019 году.

SELECT название, автор, год
FROM книги
WHERE автор='Лев Толстой' AND год=2019;
Enter fullscreen mode Exit fullscreen mode

Чтобы выбрать книги Лев Толстоя которые были опубликованы либо в 2019 или 2021 году.

SELECT название, автор, год
FROM книги
WHERE автор='Лев Толстой' AND (год=2019 OR год=2021);
Enter fullscreen mode Exit fullscreen mode

NULL

Иногда в таблицах могут отсутствовать данные. NULL — это специальное значение, которое показывает, что у каких-то данных нет значения или они отсутствуют в таблице.

Например, в нашей базе данных у книг есть автор и переводчик. Однако только некоторые книги были переведены на английский язык. Для остальных значение переводчика будет NULL.

Условия, которые используются с NULL, — это IS NULL и IS NOT NULL.
Чтобы выбрать книги, у которых нет переводчика, мы можем выполнить такой запрос:

SELECT название, переводчик
FROM книги
WHERE переводчик IS NULL;
Enter fullscreen mode Exit fullscreen mode

Чтобы выбрать книги, у которых есть переводчика:

SELECT название, переводчик
FROM книги
WHERE переводчик IS NOT NULL;
Enter fullscreen mode Exit fullscreen mode

LIKE

LIKE=похоже на

Это ключевое слово используется, чтобы выбрать данные, которые примерно совпадают с указанной строкой.
Например, LIKE можно использовать, чтобы выбрать книги, в названии которых есть определённое слово или фраза.

LIKE используется вместе с оператором %, который обозначает любые символы до или после заданной строки.

% означает любое количество любых символов (включая ноль).

SELECT автор 
FROM книги
WHERE автор LIKE 'Чынгыз%';
Enter fullscreen mode Exit fullscreen mode

Выбери автор чьё имя начинается с Чынгыз

Если % означает любое количество любых символов (включая ноль), то _ означает ровно один любой символ.

SELECT автор 
FROM книги
WHERE автор LIKE 'Чынгыз Айтмато_';
Enter fullscreen mode Exit fullscreen mode

Если не знаем последний символ.

Интервалы

В условиях можно использовать операторы <, >, <=, >=, чтобы выбрать значения в определённом диапазоне.

Например, чтобы выбрать все книги, с 2019 по 2022 год (включительно), можно выполнить такой запрос:

SELECT название, год
FROM книги
WHERE год >= 2019 AND год <= 2022;
Enter fullscreen mode Exit fullscreen mode

Другой способ получить тот же результат

SELECT название, год
FROM книги
WHERE год BETWEEN 2019 AND 2022;
Enter fullscreen mode Exit fullscreen mode

Выбери книги у которых больше 4.0 рейтинга

SELECT название, рейтинг
FROM книги
WHERE рейтинг > 4.0;
Enter fullscreen mode Exit fullscreen mode
SELECT название, рейтинг, голоса 
FROM книги 
WHERE рейтинг > 4.0 AND голоса > 10000;
Enter fullscreen mode Exit fullscreen mode

ORDER BY

ORDER BY = группировать по
Позволяет группировать по заданному столбцу.

SELECT название, рейтинг
FROM книги
ORDER BY рейтинг;
Enter fullscreen mode Exit fullscreen mode

Выбери книги и группируй по рейтингу по возрастанию

SELECT название, рейтинг
FROM книги
ORDER BY рейтинг DESC;
Enter fullscreen mode Exit fullscreen mode

Выбери книги и группируй по рейтингу по убыванию

SELECT название
FROM книги 
ORDER BY название;
Enter fullscreen mode Exit fullscreen mode

SQL функции

AVG = Average = Среднее значение

SELECT AVG(рейтинг)
FROM книги;
Enter fullscreen mode Exit fullscreen mode

Выбери среднее значение всех книг

ROUND = Округлять

SELECT ROUND(AVG(рейтинг))
FROM книги;
Enter fullscreen mode Exit fullscreen mode

Выбери среднее значение всех книг и округли это среднее значение

MAX = Maximum = Максимум

SELECT MAX(рейтинг)
FROM книги;
Enter fullscreen mode Exit fullscreen mode

Выбери максимум рейтинг из таблицы

MIN = Minimum = Минимум

SELECT MIN(рейтинг)
FROM книги;
Enter fullscreen mode Exit fullscreen mode

Выбери минимум рейтинг из таблицы

SUM = сумма

SELECT SUM(голосы)
FROM книги;
Enter fullscreen mode Exit fullscreen mode

Выбери сумму голос из таблицы

COUNT = Количество

SELECT COUNT(*)
FROM книги;
Enter fullscreen mode Exit fullscreen mode

Выбери количество всех книг

SELECT COUNT(переводчик)
FROM книги;
Enter fullscreen mode Exit fullscreen mode

Выбери количество всех переводчиков

SELECT COUNT(издательство)
FROM книги;
Enter fullscreen mode Exit fullscreen mode

Выбери количество всех издательств

DISTINCT

DISTINCT = уникальные или без повторений.

SELECT * 
FROM книги
WHERE автор = 'Чынгыз Айтматов';
Enter fullscreen mode Exit fullscreen mode

После выполнения запроса вы увидите что произведение "Жамиля" был дважды добавлен в базу данных. Это не правильно, нам не нужны копии данных.
Чтобы выбрать только уникальные данные которые не повторяются:

SELECT DISTINCT(автор)
FROM книги
WHERE автор = 'Чынгыз Айтматов';
Enter fullscreen mode Exit fullscreen mode
SELECT COUNT(DISTINCT(издательство))
FROM книги;
Enter fullscreen mode Exit fullscreen mode

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

Top comments (0)