{"id":23137786,"url":"https://github.com/andreiextr/guide_sql","last_synced_at":"2026-01-19T11:01:08.925Z","repository":{"id":267015855,"uuid":"900029283","full_name":"AndreiExtr/Guide_SQL","owner":"AndreiExtr","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-15T17:51:40.000Z","size":142,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-04T09:46:07.145Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AndreiExtr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-07T17:10:17.000Z","updated_at":"2024-12-15T17:51:44.000Z","dependencies_parsed_at":"2025-02-09T20:22:08.528Z","dependency_job_id":"5b2e4d2e-795e-4f9d-80fe-3f1b0f65c97a","html_url":"https://github.com/AndreiExtr/Guide_SQL","commit_stats":null,"previous_names":["andreiextr/guide_sql"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AndreiExtr/Guide_SQL","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiExtr%2FGuide_SQL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiExtr%2FGuide_SQL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiExtr%2FGuide_SQL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiExtr%2FGuide_SQL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AndreiExtr","download_url":"https://codeload.github.com/AndreiExtr/Guide_SQL/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiExtr%2FGuide_SQL/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28565873,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T08:53:44.001Z","status":"ssl_error","status_checked_at":"2026-01-19T08:52:40.245Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-17T13:08:58.306Z","updated_at":"2026-01-19T11:01:08.908Z","avatar_url":"https://github.com/AndreiExtr.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"![img](/img/image.png)\n\n# Справочник по SQL\n\n### Ссылки на источники\n\n1. [Официальная документация по MySQL](https://dev.mysql.com/doc/refman/8.0/en/)\n2. [Официальная документация по PostreSQL](https://postgrespro.ru/docs/postgresql/13/index)\n\n## Что такое SQL?\nSQL — это язык структурированных запросов (Structured Query Language), позволяющий хранить, манипулировать и извлекать данные из реляционных баз данных (далее — РБД, БД).\n\n## Почему SQL?\nSQL позволяет:\n- получать доступ к данным в системах управления РБД\n- описывать данные (их структуру)\n- определять данные в БД и управлять ими\n- взаимодействовать с другими языками через модули SQL, библиотеки и предваритальные компиляторы\n- создавать и удалять БД и таблицы\n- создавать представления, хранимые процедуры (stored procedures) и функции в БД\n- устанавливать разрешения на доступ к таблицам, процедурам и представлениям\n\n## Процесс SQL\nПри выполнении любой SQL-команды в любой RDBMS (Relational Database Management System — система управления РБД, СУБД, например, PostgreSQL, MySQL, MSSQL, SQLite и др.) система определяет наилучший способ выполнения запроса, а движок SQL определяет способ интерпретации задачи.\n\nВ данном процессе участвует несколького компонентов:\n- диспетчер запросов (Query Dispatcher)\n- движок оптимизации (Optimization Engines)\n- классический движок запросов (Classic Query Engine)\n- движок запросов SQL (SQL Query Engine) и т.д.\n\nКлассический движок обрабатывает все не-SQL-запросы, а движок SQL-запросов не обрабатывает логические файлы.\n\n## Команды SQL\nСтандартными командами для взаимодействия с РБД являются `CREATE`, `SELECT`, `INSERT`, `UPDATE`, `DELETE` и `DROP`. Эти команды могут быть классифицированы следующим образом:\n- `DDL` — язык определения данных (Data Definition Language)\n\n|N|Команда|Описание|\n|-----------|-----------|-----------|\n| 1 | CREATE | Создает новую таблицу, представление таблицы или другой объект в БД |\n| 2 | ALTER | Модифицирует существующий в БД объект, такой как таблица |\n| 3 | DROP | Удаляет существующую таблицу, представление таблицы или другой объект в БД |\n\n- `DML` — язык изменения данных (Data Manipulation Language)\n\n|N|Команда|Описание|\n|-----------|-----------|-----------|\n| 1 | SELECT | Извлекает записи из одной или нескольких таблиц |\n| 2 | INSERT | Создает записи |\n| 3 | UPDATE | Модифицирует записи |\n| 4 | DELETE | Удаляет записи |\n\n- `DCL` — язык управления данными (Data Control Language)\n\n|N|Команда|Описание|\n|-----------|-----------|-----------|\n| 1 | GRANT | Наделяет пользователя правами |\n| 2 | REVOKE | Отменяет права пользователя |\n\n***Обратите внимание***: использование верхнего регистра в названиях команд SQL — это всего лишь соглашение, большинство СУБД нечувствительны к регистру. Тем не менее, форма записи инструкций, когда названия команд пишутся большими буквами, а названия таблиц, колонок и др. — маленькими, позволяет быстро определять назначение производимой с данными операции.\n\n## Что такое таблица?\n\nДанные в СУБД хранятся в объектах БД, называемых таблицами (tables). Таблица, как правило, представляет собой коллекцию связанных между собой данных и состоит из определенного количества колонок и строк.\n\nТаблица — это самая распространенная и простая форма хранения данных в РБД. Вот пример таблицы с пользователями (users):\n\n|userId|userName|age|city|status|\n|-----------|-----------|-----------|-----------|-----------|\n| 1 | Igor | 24 | Moscow | active |\n| 2 | Vika | 26 | Ekaterinburg | inactive |\n| 3 | Elena | 27 | Ekaterinburg | active |\n\n## Что такое нулевое значение?\n\nНулевое значение (NULL) — это значение поля, которое является пустым, т.е. нулевое значение — это значение поля, не имеющего значения. Важно понимать, что нулевое значение отличается от значения 0 и от значения поля, содержащего пробелы. `Поле с нулевым значением - это такое поля, которое осталось пустым при создании записи. Также, следует учитывать, что в некоторых СУБД пустая строка ('') — этоNULL`, а в некоторых — это разные значения.\n\n## Ограничения\n\nОграничения (constraints) — это правила, применяемые к данным. Они используются для ограничения данных, которые могут быть записаны в таблицу. Это обеспечивает точность и достоверность данных в БД.\n\nОграничения могут устанавливаться как на уровне колонки, так и на уровне таблицы.\n\nСреди наиболее распространенных ограничений можно назвать следующие:\n- `NOT NULL` — колонка не может иметь нулевое значение\n- `DEFAULT` — значение колонки по умолчанию\n- `UNIQUE` — все значения колонки должны быть уникальными\n- `PRIMARY KEY` — первичный или основной ключ, уникальный идентификатор записи в текущей таблице\n- `FOREIGN KEY` — внешний ключ, уникальный идентификатор записи в другой таблице (таблице, связанной с текущей)\n- `CHECK` — все значения в колонке должны удовлетворять определенному условию\n- `INDEX` — быстрая запись и извлечение данных\n\nЛюбое ограничение может быть удалено с помощью команды `ALTER TABLE` и `DROP CONSTRAINT` + название ограничения. Некоторые реализации предоставляют сокращения для удаления ограничений и возможность отключать ограничения вместо их удаления.\n\n## Целостность данных\n\nВ каждой СУБД существуют следующие категории целостности данных:\n- целостность объекта (Entity Integrity) — в таблице не должно быть дубликатов (двух и более строк с одинаковыми значениями)\n- целостность домена (Domain Integrity) — фильтрация значений по типу, формату или диапазону\n- целостность ссылок (Referential integrity) — строки, используемые другими записями (строки, на которые в других записях имеются ссылки), не могут быть удалены\n- целостность, определенная пользователем (User-Defined Integrity) — дополнительные правила\n\n## Синтаксис SQL\n\nСинтаксис — это уникальный набор правил и рекомендаций. Все инструкции SQL должны начинаться с ключевого слова, такого как `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `ALTER`, `DROP`, `CREATE`, `USE`, `SHOW` и т.п. и заканчиваться точкой с запятой (;) (точка с запятой не входит в синтаксис SQL, но ее наличия, как правило, требуют консольные клиенты СУБД для обозначения окончания ввода команды). SQL не чувствителен к регистру, т.е. `SELECT`, `select` и `SeLeCt` являются идентичными инструкицями. Исключением из этого правила является MySQL, где учитывается регистр в названии таблицы.\n\n### Примеры синтаксиса\n\n```\n-- выборка\nSELECT col1, col2, ...colN\nFROM tableName;\n\nSELECT DISTINCT col1, col2, ...colN\nFROM tableName;\n\nSELECT col1, col2, ...colN\nFROM tableName\nWHERE condition;\n\nSELECT col1, col2, ...colN\nFROM tableName\nWHERE condition1 AND|OR condition2;\n\nSELECT col2, col2, ...colN\nFROM tableName\nWHERE colName IN (val1, val2, ...valN);\n\nSELECT col1, col2, ...colN\nFROM tableName\nWHERE colName BETWEEN val1 AND val2;\n\nSELECT col1, col2, ...colN\nFROM tableName\nWHERE colName LIKE pattern;\n\nSELECT col1, col2, ...colN\nFROM tableName\nWHERE condition\nORDER BY colName [ASC|DESC];\n\nSELECT SUM(colName)\nFROM tableName\nWHERE condition\nGROUP BY colName;\n\nSELECT COUNT(colName)\nFROM tableName\nWHERE condition;\n\nSELECT SUM(colName)\nFROM tableName\nWHERE condition\nGROUP BY colName\nHAVING (function condition);\n\n-- создание таблицы\nCREATE TABLE tableName (\n  col1 datatype,\n  col2 datatype,\n  ...\n  colN datatype,\n  PRIMARY KEY (одна или более колонка)\n);\n\n-- удаление таблицы\nDROP TABLE tableName;\n\n-- создание индекса\nCREATE UNIQUE INDEX indexName\nON tableName (col1, col2, ...colN);\n\n-- удаление индекса\nALTER TABLE tableName\nDROP INDEX indexName;\n\n-- получение описания структуры таблицы\nDESC tableName;\n\n-- очистка таблицы\nTRUNCATE TABLE tableName;\n\n-- добавление/удаление/модификация колонок\nALTER TABLE tableName ADD|DROP|MODIFY colName [datatype];\n\n-- переименование таблицы\nALTER TABLE tableName RENAME TO newTableName;\n\n-- вставка значений\nINSERT INTO tableName (col1, col2, ...colN)\nVALUES (val1, val2, ...valN)\n\n-- обновление записей\nUPDATE tableName\nSET col1 = val1, col2 = val2, ...colN = valN\n[WHERE condition];\n\n-- удаление записей\nDELETE FROM tableName\nWHERE condition;\n\n-- создание БД\nCREATE DATABASE [IF NOT EXISTS] dbName;\n\n-- удаление БД\nDROP DATABASE [IF EXISTS] dbName;\n\n-- выбор БД\nUSE dbName;\n\n-- завершения транзакции\nCOMMIT;\n\n-- отмена изменений\nROLLBACK;\n```\n\n## Выражения\n\nВыражение (expression) — это комбинация значений, операторов и функций для оценки (вычисления) значения. Выражения похожи на формулы, написанные на языке запросов. Они могут использоваться для извлечения из БД определенного набора данных.\n\nБазовый синтаксис выражения выглядит так:\n```\nSELECT col1, col2, ...colN\nFROM tableName\nWHERE [condition|expression];\n```\nСуществуют различные типы выражений: логические, числовые и выражения для работы с датами.\n\n### Логические\n\nЛогические выражения извлекают данные на основе совпадения с единичным значением.\n```\nSELECT col1, col2, ...colN\nFROM tableName\nWHERE выражение для поиска совпадения с единичным значением;\n```\n\nПредположим, что в таблице users имеются следующие записи:\n|userId|userName|age|city|status|\n|-----------|-----------|-----------|-----------|-----------|\n| 1 | Igor | 24 | Moscow | active |\n| 2 | Vika | 26 | Ekaterinburg | inactive |\n| 3 | Elena | 27 | Ekaterinburg | active |\n\nВыполняем поиск активных пользователей:\n```\nSELECT * FROM users WHERE status = active;\n```\n\nРезультат:\n|userId|userName|age|city|status|\n|-----------|-----------|-----------|-----------|-----------|\n| 1 | Igor | 24 | Moscow | active |\n| 3 | Elena | 27 | Ekaterinburg | active |\n\n### Числовые\n\nИспользуются для выполнения арифметических операций в запросе.\n\n```\nSELECT numericalExpression as operationName\n[FROM tableName\nWHERE condition];\n```\n\nПростой пример использования числового выражения:\n```\nSELECT (10 + 5) AS addition;\n```\n\nРезультат:\n\n|addition|\n|-----------|\n| 15 |\n\nСуществует несколько встроенных функций, таких как count(), sum(), avg(), min(), max() и др. для выполнения так называемых агрегирующих вычислений данных таблицы или колонки.\n\n```\nSELECT COUNT(*) AS records FROM users;\n```\n\nРезультат:\n|records|\n|-----------|\n| 4 |\n\n- ```AVG``` - вычисляет среднее значение\n- ```SUM``` - вычисляет сумму значений\n- ```MIN``` - вычисляет наименьшее значение\n- ```MAX``` - вычисляет наибольшее значение\n- ```COUNT``` - вычисляет количество записей в таблице\n\nТакже существует несколько встроенных функций для работы со строками:\n- ```CONCAT``` - объединение строк\n- ```LENGTH``` - возвращает количество символов в строке\n- ```TRIM``` - удаляет пробелы в начале и конце строки\n- ```SUBSTRING``` - извлекает подстроку из строки\n- ```REPLACE``` - заменяет подстроку в строке\n- ```LOWER``` - переводит символы строки в нижний регистр\n- ```UPPER``` - переводит символы строки в верхний регистр\n\nс числами:\n- ```ROUND``` - округляет число\n- ```TRUNCATE``` - обрезает дробное число до указанного количества знаков после запятой\n- ```CEILING``` - возвращает наименьшее целое число, которое больше или равно текущему значению\n- ```FLOOR``` - возвращает наибольшее целое число, которое меньше или равно текущему значению\n- ```POWER``` - возводит число в указанную степень\n- ```SQRT``` - возвращает квадратный корень числа\n- ```RAND``` - генерирует случайное число с плавающей точкой в диапазоне от 0 до 1\n\n### Выражения для работы с датами\nЭти выражения, как правило, возвращают текущую дату и время.\n```\nSELECT CURRENT_TIMESTAMP;\n```\n\nРезультат:\n|Current_Timestamp|\n|-----------|\n| 2021-06-20 12:45:00 |\n\n```CURRENT_TIMESTAMP``` - это и выражение, и функция (```CURRENT_TIMESTAMP()```). Другая функция для получения текущей даты и времени - ```NOW()```.\n\nДругие функции для получения текущей даты и времени:\n- ```CURDATE/CURRENT_DATE``` - возвращает текущую дату\n- ```CURTIME/CURRENT_TIME``` - возвращает текущее время\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreiextr%2Fguide_sql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreiextr%2Fguide_sql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreiextr%2Fguide_sql/lists"}