- 0. Подготовка и настройка БД (самый быстрый способ через докер)
- 1. DDL (Data Definition Language) - Язык описания структуры данных
- 2. DML (Data Manipulation Language) - Язык манипуляции с данными
Просто заметки по sql. Ничего серьезного
0. Подготовка и настройка БД (самый быстрый способ через докер)
$ PG_VER=11.5
$ echo "START postgres:${PG_VER}";
START postgres:11.5
$ sudo mkdir -p /var/tmp/pg_data/local/${PG_VER}
[sudo] пароль для avis:
$ docker run --rm -d --name postgres -e POSTGRES_PASSWORD=1234 --net=host -v /var/tmp/pg_data/local/${PG_VER}:/var/lib/postgresql/data/ postgres:${PG_VER}
0f94fd225233acadceb2bac3877168124039beba1c540d380962d9d2149d27f8
$ psql -h localhost -p 5432 -U postgres
psql (9.5.23, сервер 11.5 (Debian 11.5-3.pgdg90+1))
ПРЕДУПРЕЖДЕНИЕ: psql имеет базовую версию 9.5, а сервер - 11.
Часть функций psql может не работать.
Введите "help", чтобы получить справку.
postgres=#
Подробнее см.
1. DDL (Data Definition Language) - Язык описания структуры данных
Основные команды: Create, Drup,
Создание БД. CREATE DATABASE
CREATE DATABASE local_db;
CREATE DATABASE
Удаление БД. DROP DATABASE
DROP DATABASE local_db
DROP DATABASE
Создание таблицы. CREATE TABLE
CREATE TABLE movies (
id INTEGER NOT NULL,
name TEXT,
genre TEXT,
year INTEGER,
rating NUMERIC(2, 1),
PRIMARY KEY (id)
);
CREATE TABLE
Удаление таблицы. DROP TABLE
DROP TABLE movies;
DROP TABLE
Добавление нового столбца. ALTER TABLE
ALTER TABLE movies ADD country TEXT;
ALTER TABLE
Удаление столбца. ALTER TABLE
ALTER TABLE movies DROP COLUMN country;
ALTER TABLE
2. DML (Data Manipulation Language) - Язык манипуляции с данными
Основные команды: Select, Insert, Update, Delete
Вставка данных INSERT
INSERT INTO movies (id, name, genre, year, rating)
VALUES (1, 'Avatar', 'action', 2009, 7.9);
INSERT 0 1
Вставка нескольких строк с данными INSERT
INSERT INTO movies (id, name, genre, YEAR, rating) VALUES
(2, 'Jurassic World', 'action', 2015, 7.3),
(3, 'The Avengers', 'action', 2012, 8.1),
(4, 'The Dark Knight', 'action', 2008, 9.0),
(5, 'Star Wars: Episode I - The Phantom Menace', 'action', 1999, 6.6);
INSERT 0 4
Выборка всех данных. SELECT
SELECT * FROM movies;
id | name | genre | year | rating
----+-------------------------------------------+--------+------+--------
1 | Avatar | action | 2009 | 7.9
2 | Jurassic World | action | 2015 | 7.3
3 | The Avengers | action | 2012 | 8.1
4 | The Dark Knight | action | 2008 | 9.0
5 | Star Wars: Episode I - The Phantom Menace | action | 1999 | 6.6
(5 строк)
в postgres эквивалент
TABLE movies;
Выборка NULL
и NOT NULL
значений. SELECT
INSERT INTO movies (id, name, genre, year)
VALUES (6, 'No rating movie', 'action', 2009);
INSERT 0 1
SELECT * FROM movies
WHERE rating IS NULL;
id | name | genre | year | rating
----+-----------------+--------+------+--------
6 | No rating movie | action | 2009 |
(1 строка)
SELECT * FROM movies
WHERE rating IS NOT NULL;
id | name | genre | year | rating
----+-------------------------------------------+--------+------+--------
1 | Avatar | action | 2009 | 7.9
2 | Jurassic World | action | 2015 | 7.3
3 | The Avengers | action | 2012 | 8.1
4 | The Dark Knight | action | 2008 | 9.0
5 | Star Wars: Episode I - The Phantom Menace | action | 1999 | 6.6
(5 строк)
Обновление данных. UPDATE
До обновления
SELECT * FROM movies WHERE id = 1;
id | name | genre | year | rating
----+--------+--------+------+--------
1 | Avatar | action | 2009 | 7.9
(1 строка)
UPDATE movies
SET rating = 9.0
WHERE id = 1;
UPDATE 1
После обновления
SELECT * FROM movies WHERE id = 1;
id | name | genre | year | rating
----+--------+--------+------+--------
1 | Avatar | action | 2009 | 9.0
(1 строка)
Удаление данных. DELETE
DELETE FROM movies WHERE id = 1;
DELETE 1
Агрегатные функции: AVG
, COUNT
, MIN
, MAX
, SUM
и т.п.
Подсчет количества записей в таблице. SELECT COUNT
SELECT COUNT(*) FROM movies;
count
-------
5
(1 строка)
Выборка уникальных записей. SELECT DISTINCT
SELECT DISTINCT genre FROM movies;
genre
--------
action
(1 строка)
Выборка по критерию. SELECT ... WHERE
Выбрать все фильмы, у которых рейтинг строго больше 8
SELECT * FROM movies WHERE rating > 8;
id | name | genre | year | rating
----+-----------------+--------+------+--------
3 | The Avengers | action | 2012 | 8.1
4 | The Dark Knight | action | 2008 | 9.0
(2 строки)
INSERT INTO movies (id, name, genre, year, rating) VALUES
(7, 'Se7en', 'drama', 1995, 8.6),
(8, 'Seven', 'drama', 1979, 6.1);
INSERT 0 2
Выбрать все фильмы, у которых название совпадает по шаблону
SELECT * FROM movies WHERE name LIKE 'Se_en';
id | name | genre | year | rating
----+-------+-------+------+--------
7 | Se7en | drama | 1995 | 8.6
8 | Seven | drama | 1979 | 6.1
(2 строки)
Параметры like:
- _ - любой 1 символ
- % - любые символы
- LIKE 'A%' - начинается с "A"
- LIKE '%a' - заканчивается на "a"