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

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

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

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

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

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

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

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

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

  • CREATE
  • DROP
  • ALTER

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

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

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

  • GRANT
  • REVOKE

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

Стандарты ИСО / МЭК (ранее 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 / Persistent Stored, реализует SQL / PSM)
  • MySQL: SQL / PSM (хранимый модуль SQL / Persistent, реализует SQL / PSM)
  • MonetDB: SQL / PSM (модуль хранения SQL / Persistent, реализует SQL / PSM)
  • NuoDB: SSP (хранимые процедуры Starkey)
  • Oracle: PL / SQL (процедурный язык / SQL, основанный на Ada)
  • PostgreSQL: PL / pgSQL (процедурный язык / PostgreSQL язык структурированных запросов, реализует SQL / PSM)
  • Sybase: Watcom-SQL (SQL Anywhere Watcom-SQL Dialect)
  • Teradata: 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 / Database

SQL / База данных Онлайн-учебник

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

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