#PostgreSQL #PostgreSQL #SQL Перенес в my-mans -- подключиться к postgres (утилита psql) ```bash psql -U postgres ``` -- команды помощи help \h -- помощь по командам SQL \? -- помощь по командам psql -- выход из консоли postgres \q -- создать базу ```sql CREATE DATABASE my_database; ``` -- подключиться к базе ``` \connect my_database; ``` -- создать таблицу my_table с полями field1 (тип целочисленный, обязательное для заполнения), field2 (тип строка 255 символов) ```sql CREATE TABLE my_table (field1 INT NOT NULL, field2 VARCHAR(255)); ``` -- вывести все таблицы ```sh \d ``` -- удалить таблицу my_table ```sql DROP TABLE my_table; ``` -- внести в таблицу запись ```sql INSERT INTO my_table(field1, field2) VALUES(1,'Any text value'); ``` -- вывести записи ```sql SELECT * FROM my_table; -- все записи SELECT * FROM my_table WHERE field1 = 1; -- все, где field1 = 1 SELECT * FROM my_table WHERE field1 != 1; -- и т д SELECT * FROM my_table WHERE field1 > 1; SELECT * FROM my_table LIMIT 100; -- первые 100 записей; SELECT * FROM my_table LIMIT 100 OFFSET 200; -- запись с 201 по 300; ``` -- сортировка при выводе ```sql SELECT * FROM my_table ORDER BY field1 ASC; -- вывести отсортировав в возрастающем порядке SELECT * FROM my_table ORDER BY field1 DESC; -- вывести отсортировав в убывающем порядке ``` -- изменить запись таблицы (поле field2 строки, где field1 = 1); ```sql UPDATE my_table SET field2 = 'Other text value' WHERE field1 = 1; ``` -- удаление данных ```sql DELETE FROM my_table; -- удалить все записи; DELETE FROM my_table WHERE field1 = 1; -- удалить запись где field1 = 1; ``` -- *********************************** -- нормализация (разбиение таблиц на несколько) -- *********************************** -- Constraints - ограничения типов данных ```sql CREATE TABLE my_table ( field1 INT NOT NULL, -- запись обязательна field2 VARCHAR(255) NOT NULL UNIQUE, -- запись должна быть уникальной field3 BOOLEAN NOT NULL DEFAULT TRUE -- значение по умолчанию - true ... ); ``` -- Первичный и внешние ключи -- при создании записи таблицы с отсутствующим внешним ключом выведется запись об ошибке. будут выводится ошибки и в иных случаях, когда будут нарушаться связи. CREATE TABLE IF NOT EXISTS my_table ( -- ключ IF NOT EXISTS проверяет, существует ли таблица. field1 SERIAL INT PRIMARY KEY, -- при добавлении PRIMARY KEY поле автоматически наследует ограничения NOT NULL и UNIQUE, и создается индекс. SERIAL тип данных являющийся автоматически увеличивающимся счетчиком (аналог ключа AUTOINCREMENT в Sqlite) field2 VARCHAR(255) NOT NULL UNIQUE, field3 INT NOT NULL, FOREIGN KEY(field3) REFERENCES other_table(field_name) -- поле ссылается на внешнюю таблицу other_table на поле field_name, которое обязательно должно быть с PRIMARY KEY ); -- вывод данных из нескольких таблиц со связанными полями ```sql SELECT * FROM table_1 LEFT JOIN table_2 ON (table_2.field = table_1.field); ``` -- алиасы, нужны для удобства. Также, при выводе наименование таблиц или полей выводится алиасом, при его наличии. ```sql SELECT * FROM table_1 as tab1 LEFT JOIN table_2 as tab2 ON (tab1.field = tab2.field); ```