El lenguaje de consulta estructurado (SQL) es un lenguaje para consultar bases de datos. Las preguntas deben incluir ejemplos de código, estructura de tabla, datos de muestra y una etiqueta para la implementación de DBMS (por ejemplo, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, etc.) que se utiliza. Si su pregunta se relaciona únicamente con un DBMS específico (usa extensiones / características específicas), use la etiqueta de ese DBMS en su lugar. Las respuestas a las preguntas etiquetadas con SQL deben usar SQL estándar ISO / IEC.

¿Cómo escribir una buena pregunta SQL?
Hay cinco ingredientes para esta receta:

  1. Proporcione una explicación textual clara del problema en cuestión.
  2. Proporcione datos de muestra adecuados, como DDL(cree declaraciones de tabla) y DML(insertar declaración (es)). Los datos de muestra deberían ser suficientes para demostrar el problema, incluidos los casos límite. Por lo general, unas pocas filas relevantes son suficientes.
  3. Proporcione el resultado esperado para los datos de muestra que ha publicado.
  4. Muestra tus intentos de resolver el problema.
  5. Etiquetar correctamente. Además de sql, proporcione también la etiqueta rdbms relevante (es decir, sql-server, < a href = "/ tags / oracle">oracle, postgresql) y la versión más baja para la que necesita la solución (es decir, sql-server-2012, oracle10g).
    Recuerde: los diferentes productos utilizan diferentes dialectos de SQL, y esto puede tener un efecto drástico en las respuestas que pueda obtener.
    Diferentes versiones del mismo producto tienen un conjunto diferente de funciones y capacidades integradas que también pueden tener un efecto drástico en las respuestas.

¡No incluya imágenes de datos o código!

Un enlace a un entorno de prueba SQL en línea como SQL Fiddle, Rextester a>, o DB Fiddle pueden ayudar, pero no reemplazan tener todos los datos dentro de la pregunta.
Para obtener más información , Lea ¿Por qué debería proporcionar un MCVE para lo que me parece una consulta SQL muy simple?y Ayúdame a escribir esta consulta en SQL.

Información general
De Wikipedia:

SQL significa lenguaje de consulta estructurado (informalmente) y generalmente se pronuncia como secuela.

SQL se basa en álgebra relacional. En álgebra relacional, la relación de palabras es sinónimo de la tabla de palabras. SQL es un estándar para usar álgebra relacional en un entorno técnico.

Un subconjunto del estándar SQL es DDL (Lenguaje de definición de datos), que se utiliza para crear tablas y restricciones. Éstas incluyen:

  • CREATE
  • DROP
  • ALTER

Otro subconjunto es DML (Lenguaje de manipulación de datos), que se utiliza para modificar y ver datos dentro de la base de datos:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

El subconjunto de comandos "estándar" final es DCL (lenguaje de control de datos):

  • GRANT
  • REVOKE

Muchas implementaciones de bases de datos requieren el uso de SQL y, a lo largo de los años, los proveedores han implementado dialectos de SQL para proporcionar más funcionalidad y simplificarlo. Debido a estas desviaciones del estándar, SQL está fracturado: la sintaxis que funciona en una implementación no necesariamente funciona en otra.

Los estándares ISO / IEC (anteriormente ANSI) han sido beneficiosos para resolver tales situaciones, pero la adopción es selectiva. Las consultas que cumplan con estos estándares deben ser portables a otras bases de datos, aunque el rendimiento puede variar.

La mayoría de los DBMS tienen idiomas adicionales para escribir procedimientos almacenados. En Oracle, esto es PL / SQL (lenguaje de procedimiento / lenguaje de consulta estructurado), en PostgreSQL es PL / pgSQL (lenguaje de procedimiento / PostgreSQL). Fuera de los procedimientos o funciones almacenados, Oracle y PostgreSQL usan SQL. Por lo tanto, las etiquetas plsqly plpgsqlsolo deben usarse para problemas directamente relacionados con la escritura de procedimientos almacenados. Microsoft SQL Server utiliza el término T-SQL (Transact-SQL) (tsql) tanto para SQL "simple" (consultas, DML, ..) como para el idioma utilizado para procedimientos almacenados.

Lista de extensiones de procedimiento

  • Estándar ANSI / ISO: SQL / PSM (SQL / Módulos almacenados persistentes)
  • Interbase / Firebird: PSQL (SQL de procedimiento)
  • IBM DB2 SQL: PL / SQL (lenguaje de procedimiento, implementa SQL / PSM)
  • IBM Informix: SPL (lenguaje de procedimiento almacenado)
  • IBM Netezza: NZPLSQL (basado en Postgres PL / pgSQL)
  • Microsoft / Sybase: T-SQL (Transact-SQL)
  • Mimer SQL: SQL / PSM (Módulo almacenado persistente / SQL, implementa SQL / PSM)
  • MySQL: SQL / PSM (Módulo almacenado persistente / SQL, implementa SQL / PSM)
  • MonetDB: SQL / PSM (Módulo almacenado persistente / SQL, implementa SQL / PSM)
  • NuoDB: SSP (procedimientos almacenados de Starkey)
  • Oracle: PL / SQL (lenguaje de procedimiento / SQL, basado en Ada)
  • PostgreSQL: PL / pgSQL (lenguaje de procedimiento / lenguaje de consulta estructurado PostgreSQL, implementa SQL / PSM)
  • Sybase: Watcom-SQL (SQL Anywhere Watcom-SQL Dialect)
  • Teradata: SPL (lenguaje de procedimiento almacenado)
  • SAP: SAP HANA (secuencia de comandos SQL)

Recomendación de etiquetado

Esta etiqueta debe usarse para preguntas generales sobre lenguaje de programación SQL, además de etiquetas para productos específicos. Por ejemplo, las preguntas sobre Microsoft SQL Server deben usar la etiqueta sql-server, mientras que las preguntas sobre MySQL deben usar la etiqueta mysql. SQL es el paraguas bajo el cual existen estos productos; etiquetándolos por producto (incluida la versión, por ejemplo, oracle11g, sql-server-2008) , hana) es la forma más fácil de saber qué funcionalidad está disponible para la tarea en cuestión. Es muy común que las preguntas de mysqlomitan esta etiqueta porque las discusiones de consultas en MySQL se expresan más a menudo como MySQL en lugar de SQL en general.

Lea este resumensobre el estándar SQL (el de 1992 en este caso, ampliamente implementado) y, si puede, consulte el libro en sí.

Etiquetas más específicas

Cuando hace una pregunta sobre SQL, también puede agregar etiquetas más específicas. Aquí está la lista de etiquetas disponibles:

Implementación de etiquetas específicas

Puede especificar su pregunta agregando la implementación que utilizó como etiqueta.

Otros recursos

Libros de programación SQL gratuitos

Cursos gratuitos de SQL / Base de datos en línea

Tutorial en línea de SQL / Base de datos

Pruebas en línea

Si bien siempre debe proporcionar ejemplos completos de código(por ejemplo, esquema, muestra de datos y resultado esperado) en su pregunta o respuesta, también puede aislar el código problemático y reproducirlo en un entorno en línea:

  • SQL FiddleMySQL 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
  • Stack Exchange Data ExplorerMicrosoft SQL Server 2016
  • db-fiddleMySQL 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 y 11, SQLite 3.8, 3.16, SQL Server 2012, 2014, 2016 y 2017