Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.
Как написать хороший вопрос SQL?
Этот рецепт состоит из пяти ингредиентов:
- Предоставьте четкое текстовое объяснение проблемы под рукой.
- Предоставьте надлежащие примеры данных, такие как DDL(создать оператор (ы) таблицы) и DML(вставить оператор (ы)). Примерных данных должно быть достаточно, чтобы продемонстрировать проблему, включая крайние случаи. Обычно достаточно нескольких соответствующих строк.
- Предоставьте ожидаемый результат для опубликованных вами образцов данных.
- Покажите свои попытки решить проблему.
- Маркируйте правильно. В дополнение к sqlукажите также соответствующий тег rdbms (например, sql-server,< a href="/tags/oracle">oracle,postgresql) и самая ранняя версия, для которой вам нужно решение (т.е.sql-server-2012,oracle10g).
Помните: в разных продуктах используются разные диалекты SQL, и это может сильно повлиять на ответы, которые вы можете получить.
Разные версии одного и того же продукта имеют разные встроенные функции и возможности, которые также могут сильно повлиять на ответы.
Не включайте изображения данных или код!
Ссылка на онлайн-среду тестирования SQL, такую как SQL Fiddle, Rextester a>или db<>fiddleмогут помочь, но это не замена необходимости иметь все данные внутри вопроса.
Для дополнительную информацию, прочитайтеПочему я должен предоставлять MCVE для того, что мне кажется очень простым SQL-запросом?иПомогите мне написать этот запрос на SQL.
Основная информация
Из Википедии:
SQL расшифровывается как Structured Query Language (неофициально) и обычно произносится как Sequel.
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, вы также можете добавить более конкретные теги. Вот список доступных тегов:
- 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
Реализация конкретных тегов
Вы можете задать свой вопрос, добавив реализацию, которую вы использовали в качестве тега.
- db2
- google-query-language
- hana
- hiveql
- ms-access
- mimer-sql
- mysql
- oracle
- postgresql
- snowflake-cloud-data-platform
- sqlite
- sql-server
- sybase
- teradata
Другие источники
Бесплатные книги по программированию на SQL
- Разработка приложений баз данных, ориентированных на время, на SQL[PDF]
- Используйте индекс, Люк !: Руководство по производительности базы данных SQL
- Учебник по SQL для начинающих
- SQL - Бесплатные книги 2
Бесплатные онлайн курсы SQL / Database
SQL / База данных Онлайн-учебник
Онлайн тестирование
Хотя вы всегда должны предоставлять полные примеры кода(например, схему, образец данных и ожидаемый результат) в своем вопросе или ответе, вы также можете изолировать проблемный код и воспроизвести его в онлайн-среде:
- SQL FiddleMySQL 5.6, Oracle 11g R2, PostgreSQL 9.6, PostgreSQL 9.3, SQLite (WebSQL), SQLite (SQL.js), SQL Server 2017
- Rextester: SQL Server, PostgreSQL, MySql, Oracle
- Проводник стековых данных ExchangeMicrosoft SQL Server 2016
- db-fiddleMySQL 5.5, 5.6, 5.7, 8.0 PostgreSQL 9.4, 9.5, 9.6, 10, 11, 12, 13 SQLite 3.26 , 3.30
- db <>fiddleDb2 Developer-C 11.1, Firebird 3.0, MariaDB 10.3, 10.4, 10.5, 10.6, MySQL 5.5, 5.6, 5.7, 8.0, Oracle 11g Release 2, Postgres 9.5, 9.6, 10, 11, 12, 13, SQLite 3.27, SQL Server 2014, 2016 и 2017, 2017 (Linux), 2019, 2019 (Linux)
- Демонстрация HueHive, Trino, MySQL, Flink SQL, Phoenix SQL, ksqlDB, Dask SQL, SparkSQL