Загрузка данных
### Краткая теория по SQL из практических работ 8-11
#### 1. **Лексическая структура SQL**
- **Команда (запрос)** — минимальная единица выполнения, завершается точкой с запятой.
- **Элементы лексики**: ключевые слова, идентификаторы, константы (литералы), операторы, специальные символы, пропуски, комментарии.
#### 2. **Идентификаторы**
- Имена объектов БД (таблиц, столбцов, функций).
- Полное имя: `схема.объект`.
- SQL нечувствителен к регистру. Для использования спецсимволов идентификатор заключают в двойные кавычки.
#### 3. **Константы (литералы)**
- Числовые: `1`, `1.2`, `1e15`.
- Строковые: в одинарных кавычках. Для экранирования спецсимволов — префикс `E` (например, `E'\n'`).
- Долларовые кавычки: `$$текст$$` — экранирование не требуется.
- Шестнадцатеричные и битовые строки: `X'AB21'`, `B'0101'`.
#### 4. **Операторы**
- Арифметические: `+`, `-`, `*`, `/`, `%`, `^`.
- Сравнения: `=`, `<>`, `<`, `>`, `<=`, `>=`.
- Логические: `AND`, `OR`, `NOT`.
- Строковые: `||` (конкатенация).
- Приоритет операторов определён (например, умножение перед сложением).
#### 5. **Специальные символы**
- `()` — группировка, вызов функций.
- `[]` — доступ к элементу массива.
- `::` — приведение типа (PostgreSQL).
- `,` — разделитель элементов списка.
- `.` — разделитель имён схемы, таблицы, столбца.
- `;` — завершение команды.
- `*` — все столбцы таблицы.
#### 6. **Комментарии**
- Однострочный: `-- комментарий`.
- Многострочный: `/* комментарий */`.
#### 7. **Команды DML**
- `INSERT` — вставка данных.
- `UPDATE` — изменение данных.
- `DELETE` — удаление данных.
- `SELECT` — выборка данных.
#### 8. **Команда SELECT**
- **Упрощённый синтаксис**:
```sql
SELECT [DISTINCT|ALL] выражение [AS псевдоним]
FROM таблица [псевдоним]
[WHERE условие]
[GROUP BY выражение]
[HAVING условие]
[ORDER BY выражение [ASC|DESC]]
[LIMIT число]
[OFFSET число];
```
- **Фразы SELECT**: `FROM`, `WHERE`, `GROUP BY`, `HAVING`, `ORDER BY`, `LIMIT`, `OFFSET`.
- **Список выборки**: определяет столбцы результата, может содержать выражения, константы, вызовы функций.
- **Псевдонимы**: назначаются через `AS` (можно опустить).
#### 9. **Фраза WHERE**
- Фильтрация строк по логическому условию.
- Используются операторы сравнения, логические операторы, `IN`, `BETWEEN`, `LIKE`, `ILIKE`, `SIMILAR`, `~` (регулярные выражения).
- Условия могут группироваться скобками.
#### 10. **Операторы сравнения и сопоставления**
- `IN` — проверка вхождения в список.
- `BETWEEN` — проверка вхождения в диапазон.
- `OVERLAPS` — проверка перекрытия интервалов дат/времени.
- `LIKE` / `ILIKE` — сопоставление с шаблоном (`%` — любая последовательность, `_` — один символ).
- `SIMILAR` / `~` — сопоставление с регулярным выражением.
- `ANY` / `ALL` — сравнение с массивом или подзапросом.
#### 11. **Функции даты/времени**
- `AGE()` — разница между датами.
- `EXTRACT()` / `DATE_PART()` — извлечение части даты (год, месяц и т.д.).
- `DATE_TRUNC()` — обрезка даты до заданной точности.
- `NOW()`, `CURRENT_DATE`, `CURRENT_TIME` — текущие дата и время.
- `MAKE_DATE()`, `MAKE_TIMESTAMP()` — создание даты/времени из частей.
- Операторы `+`/`-` для дат и интервалов.
#### 12. **Агрегатные функции**
- `COUNT()`, `SUM()`, `AVG()`, `MIN()`, `MAX()`.
- Применяются с `GROUP BY` для группировки данных.
- `HAVING` — фильтрация результатов группировки.
#### 13. **Сортировка и ограничение вывода**
- `ORDER BY` — сортировка по столбцам (`ASC` — по возрастанию, `DESC` — по убыванию).
- `LIMIT` — ограничение числа строк в результате.
- `OFFSET` — пропуск указанного числа строк.
#### 14. **Теоретико-множественные операции**
- `UNION` — объединение результатов (без дубликатов).
- `UNION ALL` — объединение (с дубликатами).
- `INTERSECT` — пересечение результатов.
- `EXCEPT` — разность результатов.
#### 15. **Соединения таблиц (JOIN)**
- **INNER JOIN** — только совпадающие строки.
- **LEFT JOIN** — все строки левой таблицы + совпадающие из правой (NULL при отсутствии).
- **RIGHT JOIN** — все строки правой таблицы + совпадающие из левой.
- **FULL JOIN** — все строки обеих таблиц (NULL при отсутствии совпадения).
- **CROSS JOIN** — декартово произведение (все комбинации строк).
- **SELF JOIN** — соединение таблицы с самой собой (через псевдонимы).
- **NATURAL JOIN** — автоматическое соединение по одинаковым именам столбцов.
- **USING** — явное указание столбцов для соединения.
#### 16. **Псевдонимы (алиасы)**
- Для таблиц: `FROM таблица AS псевдоним`.
- Для столбцов: `SELECT столбец AS псевдоним`.
- Ключевое слово `AS` можно опускать.
#### 17. **Условные выражения**
- **CASE**:
```sql
CASE
WHEN условие1 THEN результат1
WHEN условие2 THEN результат2
ELSE результат_иначе
END
```
- **Упрощённый CASE**:
```sql
CASE выражение
WHEN значение1 THEN результат1
WHEN значение2 THEN результат2
ELSE результат_иначе
END
```
#### 18. **Функции для работы с NULL**
- `COALESCE(expr1, expr2, ...)` — возвращает первое не-NULL значение.
- `NULLIF(expr1, expr2)` — возвращает NULL, если выражения равны, иначе `expr1`.
- `IS NULL` / `IS NOT NULL` — проверка на NULL.
- `IS NOT DISTINCT FROM` — сравнение с учётом NULL (эквивалентность).
#### 19. **Встроенные функции**
- **Математические**: `ABS()`, `SQRT()`, `ROUND()`, `POWER()`, `RANDOM()` и др.
- **Строковые**: `CONCAT()`, `SUBSTRING()`, `LENGTH()`, `UPPER()`, `LOWER()`, `TRIM()`, `REPLACE()`, `POSITION()`, `MD5()` и др.
- **Тригонометрические**: `SIN()`, `COS()`, `TAN()` и др.
#### 20. **Приведение типов**
- `CAST(значение AS тип)`.
- `значение::тип` (синтаксис PostgreSQL).
- `тип 'значение'` (для строковых констант).
#### 21. **Представления (VIEW)**
- Виртуальная таблица, определяемая запросом `SELECT`.
- Создание: `CREATE VIEW имя_представления AS запрос`.
- Используется для упрощения сложных запросов, ограничения доступа, кэширования.
#### 22. **Вставка, обновление, удаление данных**
- **INSERT**:
```sql
INSERT INTO таблица (столбцы) VALUES (значения);
INSERT INTO таблица SELECT ...;
```
- **UPDATE**:
```sql
UPDATE таблица SET столбец = значение WHERE условие;
```
- **DELETE**:
```sql
DELETE FROM таблица WHERE условие;
```
- **RETURNING** — возврат данных после модификации.
- **ON CONFLICT** — обработка конфликтов при вставке (PostgreSQL).
#### 23. **Особенности PostgreSQL**
- Поддержка долларовых кавычек для строк.
- Синтаксис `::` для приведения типов.
- Расширенные типы данных (массивы, JSON, геоданные).
- Функции для работы с полнотекстовым поиском, криптографией, сетевыми адресами.
#### 24. **Работа с массивами**
- `ARRAY[элементы]` — создание массива.
- `ANY()` / `ALL()` — сравнение с элементами массива.
- `array[индекс]` — доступ к элементу.
#### 25. **Транзакции**
- Последовательность SQL-операторов, выполняемая как единое целое.
- Управление: `BEGIN`, `COMMIT`, `ROLLBACK`.
Эта теория охватывает основные темы из предоставленных практических работ по SQL и PostgreSQL, включая лексику, запросы, функции, соединения, модификацию данных и особенности СУБД.