Files
obsidian/Prog/Шпаргалка по PostgreSQL.md
2026-09-24 13:22:58 +05:00

107 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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);
```