Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, образцы данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные тегом SQL, должны использовать стандартный SQL ISO/IEC.

Как написать хороший SQL-вопрос?
Этот рецепт состоит из пяти ингредиентов:

  1. Предоставьте четкое текстовое объяснение проблемы.
  2. Предоставьте надлежащие образцы данных в виде DDL (оператор (я) создания таблицы) и DML (оператор (я) вставки). Образцов данных должно быть достаточно, чтобы продемонстрировать проблему, включая крайние случаи. Обычно достаточно нескольких релевантных строк.
  3. Предоставьте ожидаемый результат для опубликованных вами образцов данных.
  4. Покажи свои попытки решить проблему.
  5. Пометьте правильно. В дополнение к sql также предоставьте соответствующий тег rdbms (например, sql-server, oracle, postgresql) и самую низкую версию, для которой вам нужно решение (например, sql-server-2012, oracle10g).
    Помните - разные продукты используют разные диалекты SQL, и это может сильно повлиять на ответы, которые вы можете получить.
    Различные версии одного и того же продукта имеют разный набор встроенных функций и возможностей, которые также могут существенно повлиять на ответы.

Не включайте изображения данных или кода!

Ссылка на онлайн-тестовую среду SQL, такую ​​как SQL Fiddle, Rextester или DB Fiddle, может помочь, но она не заменяет наличие всех данных внутри вопроса.
Для получения дополнительной информации прочтите, почему я должен предоставлять MCVE для того, что мне кажется очень простым запросом SQL? и Помогите мне написать этот запрос на SQL.

Общая информация
из Википедии:

SQL означает язык структурированных запросов (неформально) и обычно произносится как Sequel.

SQL основан на реляционной алгебре. В реляционной алгебре слово "отношение" является синонимом слова "таблица". SQL - это стандарт использования реляционной алгебры в технической среде.

Одним из подмножеств стандарта SQL является DDL (язык определения данных), который используется для создания таблиц и ограничений. Это включает:

  • CREATE
  • DROP
  • ALTER

Другое подмножество - это DML (язык манипулирования данными), который используется для изменения и просмотра данных в базе данных:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

Последний "стандартный" набор команд - DCL (Data Control Language):

  • GRANT
  • REVOKE

Многие реализации баз данных требуют использования SQL, и с годами поставщики внедрили диалекты SQL, чтобы обеспечить больше функциональных возможностей, а также упростить его. Из-за этих отклонений от стандарта SQL ломается - синтаксис, работающий в одной реализации, не обязательно работает в другой.

Стандарты ISO / IEC (ранее ANSI) оказались полезными в разрешении таких ситуаций, но их принятие является выборочным. Запросы, соответствующие этим стандартам, следует переносить в другие базы данных, хотя производительность может отличаться.

В большинстве СУБД есть дополнительные языки для написания хранимых процедур. В Oracle это PL/SQL (процедурный язык / язык структурированных запросов), в PostgreSQL - это PL/pgSQL (процедурный язык /PostgreSQL). Вне хранимых процедур или функций Oracle и PostgreSQL используют SQL. Таким образом, теги plsql и plpgsql следует использовать только для проблем, непосредственно связанных с написанием хранимых процедур. Microsoft SQL Server использует термин T-SQL (Transact-SQL)( tsql) как для "простого" SQL (запросы, DML, ..), так и для языка, используемого для хранимых процедур.

Список процедурных расширений

  • Стандарт ANSI/ISO: SQL/PSM (SQL/ постоянные хранимые модули)
  • Interbase / Firebird: PSQL (процедурный SQL)
  • IBM DB2 SQL: PL / SQL (процедурный язык, реализует SQL/PSM)
  • IBM Informix: SPL (хранимый процедурный язык)
  • IBM Netezza: NZPLSQL (на основе Postgres PL / pgSQL)
  • Microsoft / Sybase: T-SQL (Transact-SQL)
  • Mimer SQL: SQL/PSM (SQL/ постоянный хранимый модуль, реализует SQL/ PSM)
  • MySQL: SQL/PSM (SQL/ Persistent Stored Module, реализует SQL/ PSM)
  • MonetDB: SQL/PSM (SQL/ Persistent Stored Module, реализует SQL/PSM)
  • NuoDB: SSP (хранимые процедуры Старки)
  • Oracle: PL / SQL (процедурный язык / SQL, основанный на Ada)
  • PostgreSQL: PL / pgSQL (процедурный язык / язык структурированных запросов PostgreSQL, реализует SQL/PSM)
  • Sybase: Watcom-SQL (диалект SQL Anywhere Watcom-SQL)
  • Тераданные: SPL (хранимый процедурный язык)
  • SAP: SAP HANA (сценарий SQL)

Рекомендации по тегам

Этот тег следует использовать для ответов на общие вопросы о языке программирования SQL в дополнение к тегам для конкретных продуктов. Например, вопросы о Microsoft SQL Server должны использовать тег sql-server, а вопросы, касающиеся MySQL, должны использовать тег mysql. SQL - это зонтик, под которым существуют эти продукты; пометка их по продукту (включая версию, например, oracle11g, sql-server-2008, hana) - самый простой способ узнать, какие функции доступны для данной задачи. В вопросах mysql очень часто пропускают этот тег, потому что обсуждения запросов в MySQL чаще обозначаются как MySQL, а не как SQL в целом.

Пожалуйста, прочтите это резюме о стандарте SQL (в данном случае широко применяемом в 1992 году) и, если можете, обратитесь к самой книге.

Более конкретные теги

Когда вы задаете вопрос о SQL, вы также можете добавить более конкретные теги. Вот список доступных тегов:

Теги для конкретной реализации

Вы можете указать свой вопрос, добавив реализацию, которую вы использовали, в качестве тега.

Другие источники

Бесплатные книги по программированию SQL

Бесплатные онлайн-курсы по SQL/ базам данных

Онлайн-руководство по SQL/ базам данных

Онлайн-тестирование

Хотя вы всегда должны предоставлять полные примеры кода (например, схему, образец данных и ожидаемый результат) в своем вопросе или ответе, вы также можете выделить проблемный код и воспроизвести его в онлайн-среде: