Описание тега sql
Как написать хороший вопрос SQL?
Этот рецепт состоит из пяти ингредиентов:
- Предоставьте четкое текстовое объяснение проблемы под рукой.
- Укажите правильные образцы данных, такие как DDL (операторы таблицы) и DML (операторы таблицы). Примерных данных должно быть достаточно, чтобы продемонстрировать проблему, включая крайние случаи. Обычно достаточно нескольких соответствующих строк.
- Предоставьте ожидаемый результат для демонстрационных данных, которые вы опубликовали.
- Покажите свои попытки решить проблему.
- Отметьте правильно. В дополнение к sql также укажите тег продукта и самую низкую версию, для которой вам необходимо решение.
Помните - разные продукты используют разные диалекты SQL, и это может сильно повлиять на ответы, которые вы можете получить.
Разные версии одного и того же продукта имеют различный набор встроенных функций и возможностей, которые также могут существенно повлиять на ответы.
Не включайте изображения данных или код!
Ссылка на онлайн-среду тестирования SQL, такую как SQL Fiddle или 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 Stored, реализует 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, вы также можете добавить более конкретные теги. Вот список доступных тегов:
- sqlbulkcopy
- sqlconnection
- sqlcommand
- sql-copy
- sql-convert
- sql-delete
- sql-drop
- sqldatetime
- sql-date-functions
- sql-function
- sql-job
- sql-like
- sql-limit
- sql-merge
- sql-pivot
- sql-order-by
- sql-returning
- sql-server-job
- to-date
- triggers
- sql-timestamp
- sql-update
- sql-view
- stored-procedures
- having
- where-clause
- count
- group-by
- greatest-n-per-group
- join
- left-join
- inner-join
- outer-join
- self-join
- cross-join
- right-join
- full-outer-join
- natural-join
- equi-join
- non-equi-join
Реализация конкретных тегов
Вы можете задать свой вопрос, добавив реализацию, которую вы использовали в качестве тега.
- mysql
- mysqli
-
sql-server
- oracle
- postgresql
- sqlite
- db2
- ms-access
- sybase
- google-query-language
- mimer-sql
- hana
Другие источники
Бесплатные книги по программированию на SQL
- Разработка ориентированных на время приложений баз данных в SQL
- Используйте индекс, Люк !: Руководство по производительности базы данных SQL
- Учебник по SQL для начинающих
- SQL - Бесплатные книги
- SQL - Бесплатные книги 2
Бесплатные онлайн-курсы по SQL/базам данных
SQL/База данных Онлайн-учебник
Онлайн тестирование
Хотя вы всегда должны предоставлять полные примеры кода (например, схему, образец данных и ожидаемый результат) в своем вопросе или ответе, вы также можете выделить проблемный код и воспроизвести его в онлайн-среде:
- SQL Fiddle MySQL 5.6, Oracle 11g R2, PostgreSQL 9.6, PostgreSQL 9.3, SQLite (WebSQL), SQLite (SQL.js), SQL Server 2014
- Rextester: SQL Server, PostgreSQL, MySql, Oracle
- Стек Exchange Data Explorer Microsoft SQL Server 2016
- db-fiddle MySQL 5.5, 5.6, 5.7, 8.0 PostgreSQL 9.4, 9.5, 9.6, 10 SQLite 3.16, 3.17, 3.18
- db <> fiddle MariaDB 10.2, 10.3, MySQL 8.0, Oracle 11.2, Postgres 8.4, 9.4, 9.5, 9.6, 10 и 11, SQLite 3.8, 3.16, SQL Server 2012, 2014, 2016 и 2017