Загрузка данных


### Краткая теория по 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, включая лексику, запросы, функции, соединения, модификацию данных и особенности СУБД.