· 6 years ago · Aug 19, 2019, 10:58 PM
1Перенес в my-mans
2
3-- подключиться к postgres (утилита psql)
4psql -U postgres
5
6-- команды помощи
7help
8\h -- помощь по командам SQL
9\? -- помощь по командам psql
10
11-- выход из консоли postgres
12\q
13
14-- создать базу
15CREATE DATABASE my_database;
16
17-- подключиться к базе
18\connect my_database;
19
20-- создать таблицу my_table с полями field1 (тип целочисленный, обязательное для заполнения), field2 (тип строка 255 символов)
21CREATE TABLE my_table (field1 INT NOT NULL, field2 VARCHAR(255));
22
23-- вывести все таблицы
24\d
25
26-- удалить таблицу my_table
27DROP TABLE my_table;
28
29-- внести в таблицу запись
30INSERT INTO my_table(field1, field2) VALUES(1,'Any text value');
31
32-- вывести записи
33SELECT * FROM my_table; -- все записи
34SELECT * FROM my_table WHERE field1 = 1; -- все, где field1 = 1
35SELECT * FROM my_table WHERE field1 != 1; -- и т д
36SELECT * FROM my_table WHERE field1 > 1;
37SELECT * FROM my_table LIMIT 100; -- первые 100 записей;
38SELECT * FROM my_table LIMIT 100 OFFSET 200; -- запись с 201 по 300;
39
40-- сортировка при выводе
41SELECT * FROM my_table ORDER BY field1 ASC; -- вывести отсортировав в возрастающем порядке
42SELECT * FROM my_table ORDER BY field1 DESC; -- вывести отсортировав в убывающем порядке
43
44-- изменить запись таблицы (поле field2 строки, где field1 = 1);
45UPDATE my_table SET field2 = 'Other text value' WHERE field1 = 1;
46
47-- удаление данных
48DELETE FROM my_table; -- удалить все записи;
49DELETE FROM my_table WHERE field1 = 1; -- удалить запись где field1 = 1;
50
51
52-- ***************************************
53-- нормализация (разбиение таблиц на несколько)
54-- ***************************************
55
56-- Constraints - ограничения типов данных
57CREATE TABLE my_table (
58 field1 INT NOT NULL, -- запись обязательна
59 field2 VARCHAR(255) NOT NULL UNIQUE, -- запись должна быть уникальной
60 field3 BOOLEAN NOT NULL DEFAULT TRUE -- значение по умолчанию - true
61 ...
62);
63
64-- Первичный и внешние ключи
65-- при создании записи таблицы с отсутствующим внешним ключом выведется запись об ошибке. будут выводится ошибки и в иных случаях, когда будут нарушаться связи.
66CREATE TABLE IF NOT EXISTS my_table ( -- ключ IF NOT EXISTS проверяет, существует ли таблица.
67 field1 SERIAL INT PRIMARY KEY, -- при добавлении PRIMARY KEY поле автоматически наследует ограничения NOT NULL и UNIQUE, и создается индекс. SERIAL тип данных являющийся автоматически увеличивающимся счетчиком (аналог ключа AUTOINCREMENT в Sqlite)
68 field2 VARCHAR(255) NOT NULL UNIQUE,
69 field3 INT NOT NULL,
70 FOREIGN KEY(field3) REFERENCES other_table(field_name) -- поле ссылается на внешнюю таблицу other_table на поле field_name, которое обязательно должно быть с PRIMARY KEY
71);
72
73-- вывод данных из нескольких таблиц со связанными полями
74SELECT * FROM table_1 LEFT JOIN table_2 ON (table_2.field = table_1.field);
75
76-- алиасы, нужны для удобства. Также, при выводе наименование таблиц или полей выводится алиасом, при его наличии.
77SELECT * FROM table_1 as tab1 LEFT JOIN table_2 as tab2 ON (tab1.field = tab2.field);
78
79
80-- ***************************************
81-- Редактирование таблиц, расширенные возможности SELECT, функции
82-- ***************************************
83
84-- Добавление поля в таблицу
85ALTER TABLE table_name ADD COLUMN new_field
86BOOLEAN NOT NULL DEFAULT TRUE;
87
88-- добавление поля с автоинкрементом и primary key в таблицу
89ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
90
91-- Удаление поля из таблицы
92ALTER TABLE table_name DROP COLUMN new_field;
93
94-- переименовать поле
95ALTER TABLE table_name RENAME old_field TO new_field;
96
97-- сменить тип данных
98ALTER TABLE table_name ALTER COLUMN any_field SET
99DATA TYPE VARCHAR(255);
100
101-- изменить значение по умолчанию
102ALTER TABLE table_name ALTER COLUMN any_field SET
103DEFAULT 'new value';
104
105-- добавить/удалить constraint NOT NULL
106ALTER TABLE table_name ALTER COLUMN any_field
107SET|DROP NOT NULL;
108
109-- переименовать таблицу
110ALTER TABLE table_name RENAME TO new_table_name;
111
112-- Расширенные возможности SELECT
113SELECT * FROM table WHERE field1 LIKE 'value'; -- field1 = 'value'
114SELECT * FROM table WHERE field1 LIKE 'val%'; -- field1 начинается с 'val'
115SELECT * FROM table WHERE field1 LIKE '%lue'; -- field1 заканчивается на 'lue'
116SELECT * FROM table WHERE field1 LIKE '%e%'; -- field1 содержит 'e'
117-- несколько условий
118SELECT * FROM table WHERE field1 = 'value' AND field2 > 'value2';
119SELECT * FROM table WHERE field1 = 'value' OR field2 > 'value2';
120
121-- вывод уникальных записей
122SELECT DISTINCT field1 FROM table;
123
124-- группирование записей
125
126SELECT field1, COUNT(field1) FROM table GROUP BY field1;
127-- сгруппирует записи таблицы table по полю field и выведет уникальные значения field и количество повторений
128
129SELECT field1, COUNT(field1) FROM table GROUP BY field1
130HAVING COUNT(field) > 3;
131-- сгруппирует записи таблицы table по полю field и выведет уникальные значения field и количество повторений, где количество повторений больше 3