fbpx
Wikipedia

SQL

SQL (por sus siglas en inglés Structured Query Language; en español lenguaje de consulta estructurada) es un lenguaje de dominio específico utilizado en programación, diseñado para administrar, y recuperar información de sistemas de gestión de bases de datos relacionales.[2]​ Una de sus principales características es el manejo del álgebra y el cálculo relacional para efectuar consultas con el fin de recuperar, de forma sencilla, información de bases de datos, así como realizar cambios en ellas.

SQL
Desarrollador(es)
IBM
Información general
Extensiones comunes sql
Paradigma Multiparadigma
Apareció en 1974
Diseñado por Donald D. Chamberlin
Última versión estable SQL:2014 (2016)
Sistema de tipos Estático, Fuerte
Implementaciones Varias
Dialectos SQL-85, SQL-88, SQL-91, SQL:1999, SQL:2003, SQL:2006, SQL:2008, SQL:2011, SQL:2016
Influido por Datalog
Ha influido a Agena, CQL, LINQ, Windows PowerShell[1]
Sistema operativo multiplataforma
SQL
Desarrollador
IBM
ISO/IEC 9075-1:2008
Información general
Extensión de archivo .sql
Tipo de MIME application/x-sql
Lanzamiento inicial 1986
Última versión SQL:2012
2012
Tipo de formato Base de datos
Estándar(es) ISO/IEC 9075
Formato abierto  

Originalmente basado en el álgebra relacional y en el cálculo relacional, SQL consiste en un lenguaje de definición de datos, un lenguaje de manipulación de datos y un lenguaje de control de datos. El alcance de SQL incluye la inserción de datos, consultas, actualizaciones y borrado, la creación y modificación de esquemas y el control de acceso a los datos. También el SQL a veces se describe como un lenguaje declarativo, también incluye elementos procesales.

SQL fue uno de los primeros lenguajes comerciales para el modelo relacional de Edgar Frank Codd como se describió en su artículo de investigación de 1970 El modelo relacional de datos para grandes bancos de datos compartidos. A pesar de no adherirse totalmente al modelo relacional descrito por Codd, pasó a ser el lenguaje de base de datos más usado.

SQL pasó a ser el estándar del Instituto Nacional Estadounidense de Estándares (ANSI) en 1986 y de la Organización Internacional de Normalización (ISO) en 1987. Desde entonces, el estándar ha sido revisado para incluir más características. A pesar de la existencia de ambos estándares, la mayoría de los códigos SQL no son completamente portables entre sistemas de bases de datos diferentes sin otros ajustes.

Orígenes y evolución

Los orígenes de SQL están ligados a las bases de datos relacionales, específicamente las que residían en máquinas IBM bajo el sistema de gestión System R, desarrollado por un grupo de la IBM en San José, California.

En 1970, E. F. Codd propone el modelo relacional y asociado a este un sublenguaje de acceso a los datos basado en el cálculo de predicados.[3]​ Basándose en estas ideas, los laboratorios de IBM definieron el lenguaje SEQUEL (Structured English Query Language) que más tarde fue ampliamente implementado por el sistema de gestión de bases de datos (SGBD) experimental System R, desarrollado en 1977 también por IBM. Sin embargo, fue Oracle quien lo introdujo por primera vez en 1979 en un producto comercial.

El SEQUEL terminó siendo el predecesor de SQL, que es una versión evolucionada del primero. SQL pasa a ser el lenguaje por excelencia de los diversos sistemas de gestión de bases de datos relacionales surgidos en los años siguientes y fue por fin estandarizado en 1986 por el ANSI, dando lugar a la primera versión estándar de este lenguaje, "SQL-86" o "SQL1". Al año siguiente este estándar es también adoptado por ISO.

Sin embargo, este primer estándar no cubría todas las necesidades de los desarrolladores e incluía funcionalidades de definición de almacenamiento que se consideró suprimirlas. Así que, en 1992, se lanzó un nuevo estándar ampliado y revisado de SQL llamado "SQL-92" o "SQL2".

En la actualidad SQL es el estándar de facto de la inmensa mayoría de los SGBD comerciales. Y, aunque la diversidad de añadidos particulares que incluyen las distintas implementaciones comerciales del lenguaje es amplia, el soporte al estándar SQL-92 es general y muy amplio.

El ANSI SQL sufrió varias revisiones y agregados a lo largo del tiempo:

Año Nombre Alias Comentarios
1986 SQL-86 SQL-87 Primera publicación hecha por ANSI. Confirmada por la Organización Internacional de Normalización en 1987.
1989 SQL-89 Revisión menor.
1992 SQL-92 SQL2 Revisión mayor.
1999 SQL:1999 SQL2000 Se agregaron expresiones regulares, consultas recursivas (para relaciones jerárquicas), triggers y algunas características orientadas a objetos.
2003 SQL:2003   Introduce algunas características de XML, cambios en las funciones, estandarización del objeto sequence y de las columnas autonuméricas.[4]
2005 SQL:2005   ISO/IEC 9075-14:2005 Define las maneras en las cuales SQL se puede utilizar conjuntamente con XML. Define maneras de importar y guardar datos XML en una base de datos SQL, manipulándolos dentro de la base de datos y publicando el XML y los datos SQL convencionales en forma XML. Además, proporciona facilidades que permiten a las aplicaciones integrar dentro de su código SQL el uso de XQuery, lenguaje de consulta XML publicado por el W3C (World Wide Web Consortium) para acceso concurrente a datos ordinarios SQL y documentos XML.
2008 SQL:2008   Permite el uso de la cláusula ORDER BY fuera de las definiciones de los cursores. Incluye los disparadores del tipo INSTEAD OF. Añade la sentencia TRUNCATE.[5]
2011 SQL:2011 Datos temporales (PERIOD FOR). Mejoras en las funciones de ventana y de la cláusula FETCH.
2016 SQL:2016 Permite búsqueda de patrones, funciones de tabla polimórficas y compatibilidad con los ficheros JSON.

Características generales de SQL

SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales y permite así gran variedad de operaciones.[6]

Es un lenguaje declarativo de "alto nivel" o "de no procedimiento" que, gracias a su fuerte base teórica y su orientación al manejo de conjuntos de registros —y no a registros individuales— permite una alta productividad en codificación y la orientación a objetos. De esta forma, una sola sentencia puede equivaler a uno o más programas que se utilizarían en un lenguaje de bajo nivel orientado a registros. SQL también tiene las siguientes características:

  • Lenguaje de definición de datos: El LDD de SQL proporciona comandos para la definición de esquemas de relación, borrado de relaciones y modificaciones de los esquemas de relación.
  • Lenguaje interactivo de manipulación de datos: El LMD de SQL incluye lenguajes de consultas basado tanto en álgebra relacional como en cálculo relacional de tuplas.
  • Integridad: El LDD de SQL incluye comandos para especificar las restricciones de integridad que deben cumplir los datos almacenados en la base de datos.
  • Definición de vistas: El LDD incluye comandos para definir las vistas.
  • Control de transacciones: SQL tiene comandos para especificar el comienzo y el final de una transacción.
  • SQL incorporado y dinámico: Esto quiere decir que se pueden incorporar instrucciones de SQL en lenguajes de programación como: C++, C, Java, PHP, COBOL, Pascal y Fortran.
  • Autorización: El LDD incluye comandos para especificar los derechos de acceso a las relaciones y a las vistas.

Tipos de datos

Algunos de los tipos de datos básicos de SQL's son:

  • Varchar: Recibe cadena de palabras compuestas de letras, números y caracteres especiales.
  • Int es el principal tipo de datos de valores enteros de SQL Server. Con números enteros con o sin signo
  • Date: una fecha de calendario que contiene el año (de cuatro cifras), el mes y el día.
  • Time: La hora del día en horas minutos segundos (el valor predeterminado es 0).

Optimización

Como ya se dijo antes, y suele ser común en los lenguajes de acceso a bases de datos de alto nivel, SQL es un lenguaje declarativo. O sea, que especifica qué es lo que se quiere y no cómo conseguirlo, por lo que una sentencia no establece explícitamente un orden de ejecución.

El orden de ejecución interno de una sentencia puede afectar seriamente a la eficiencia del SGBD, por lo que se hace necesario que este lleve a cabo una optimización antes de su ejecución. Muchas veces, el uso de índices acelera una instrucción de consulta, pero ralentiza la actualización de los datos. Dependiendo del uso de la aplicación, se priorizará el acceso indexado o una rápida actualización de la información. La optimización difiere sensiblemente en cada motor de base de datos y depende de muchos factores.

Los sistemas de bases de datos modernos poseen un componente llamado optimizador de consultas. Este realiza un detallado análisis de los posibles planes de ejecución de una consulta SQL y elige aquel que sea más eficiente para llevar adelante la misma.

Existe una ampliación de SQL conocida como FSQL (Fuzzy SQL, SQL difuso) que permite el acceso a bases de datos difusas, usando la lógica difusa. Este lenguaje ha sido implementado a nivel experimental y está evolucionando rápidamente.

Lenguaje de definición de datos (DDL)

El lenguaje de definición de datos (en inglés Data Definition Language, o DDL), es el que se encarga de la modificación de la estructura de los objetos de la base de datos. Incluye órdenes para modificar, borrar o definir las tablas en las que se almacenan los datos de la base de datos. Existen cuatro operaciones básicas: CREATE, ALTER, DROP y TRUNCATE.[7]

CREATE (Crear)

Este comando permite crear objetos de datos, como nuevas bases de datos, tablas, vistas y procedimientos almacenados.

Ejemplo (crear una tabla)
CREATE TABLE clientes; 

ALTER (Alterar)

Este comando permite modificar la estructura de una tabla u objeto. Se pueden agregar/quitar campos a una tabla, modificar el tipo de un campo, agregar/quitar índices a una tabla, modificar un trigger, etc.

Ejemplo (agregar columna a una tabla)
ALTER TABLE alumnos ADD edad INT UNSIGNED; 

DROP (Eliminar)

Este comando elimina un objeto de la base de datos. Puede ser una tabla, vista, índice, trigger, función, procedimiento o cualquier objeto que el motor de la base de datos soporte. Se puede combinar con la sentencia ALTER.

Ejemplo
DROP TABLE alumnos; 

TRUNCATE (Truncar)

Este comando solo aplica a tablas y su función es borrar el contenido completo de la tabla especificada. La ventaja sobre el comando DELETE, es que si se quiere borrar todo el contenido de la tabla, es mucho más rápido, especialmente si la tabla es muy grande. La desventaja es que TRUNCATE solo sirve cuando se quiere eliminar absolutamente todos los registros, ya que no se permite la cláusula WHERE. Si bien, en un principio, esta sentencia parecería ser DML (Lenguaje de Manipulación de Datos), es en realidad una DDL, ya que internamente, el comando TRUNCATE borra la tabla y la vuelve a crear y no ejecuta ninguna transacción.

Ejemplo
 TRUNCATE TABLE nombre_tabla; 

Lenguaje de manipulación de datos DML (Data Manipulation Language)

Definición

Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en inglés) es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo de datos adecuado.[7]

El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar y manipular datos en una base de datos relacional.

SELECT (Seleccionar)

La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de datos.

Forma básica

SELECT [{ALL|DISTINCT}] <nombre_campo>[, <nombre_campo>...] FROM {<nombre_tabla>|<nombre_vista>}[, {<nombre_tabla>|<nombre_vista>}...] [WHERE <condición> [{AND|OR} <condición>...]] [GROUP BY <nombre_campo>[, <nombre_campo>...]] [HAVING <condición> [{AND|OR} <condición>...]] [ORDER BY {<nombre_campo>|<indice_campo>} [{ASC|DESC}][, {<nombre_campo>|<indice_campo>} [{ASC|DESC}]]]; 


SELECT Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de selección.
ALL Indica que queremos seleccionar todos los valores. Es el valor por defecto y no suele especificarse casi nunca.
DISTINCT Indica que queremos seleccionar solo los valores distintos.
FROM Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el caso de que exista más de una tabla se denomina a la consulta "consulta combinada" o "join". En las consultas combinadas es necesario aplicar una condición de combinación a través de una cláusula WHERE.
WHERE Especifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Admite los operadores lógicos AND y OR.
GROUP BY Especifica la agrupación que se da a los datos. Se usa siempre en combinación con funciones agregadas.
HAVING Especifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es similar al de WHERE pero aplicado al conjunto de resultados devueltos por la consulta. Debe aplicarse siempre junto a GROUP BY y la condición debe estar referida a los campos contenidos en ella.
ORDER BY Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse con ASC (orden ascendente) y DESC (orden descendente). El valor predeterminado es ASC.

Ejemplo:

Para formular una consulta a la tabla coches y recuperar los campos matrícula, marca, modelo, color, número_kilómetros, num_plazas debemos ejecutar la siguiente consulta. Los datos serán devueltos ordenados por marca y por modelo en orden ascendente, de menor a mayor. La palabra clave FROM indica que los datos serán recuperados de la tabla Coches.

SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas FROM coches ORDER BY marca, modelo; 

Ejemplo de consulta simplificada a través de un comodín de campos (*):

El uso del asterisco indica que queremos que la consulta devuelva todos los campos que existen en la tabla y los datos serán devueltos ordenados por marca y por modelo.

SELECT * FROM coches ORDER BY marca, modelo; 

Cláusula WHERE (Donde)

La cláusula WHERE es la instrucción que nos permite filtrar el resultado de una sentencia SELECT. Habitualmente no deseamos obtener toda la información existente en la tabla, sino que queremos obtener solo la información que nos resulte útil en ese momento. La cláusula WHERE filtra los datos antes de ser devueltos por la consulta. Cuando en la Cláusula WHERE queremos incluir un tipo texto, debemos incluir el valor entre comillas simples.

Ejemplos:

En nuestro ejemplo, se desea consultar un coche en concreto, para esto se agregó una cláusula WHERE. Esta cláusula especifica una o varias condiciones que deben cumplirse para que la sentencia SELECT devuelva los datos. En este caso la consulta devolverá solo los datos del coche con matrícula para que la consulta devuelva solo los datos del coche con matrícula MF-234-ZD o bien la matrícula FK-938-ZL . Se puede utilizar la cláusula WHERE solamente, o en combinación con tantas condiciones como queramos.

SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas FROM coches WHERE matricula = 'MF-234-ZD' OR matricula = 'FK-938-ZL'; 

Una condición WHERE puede ser negada a través del Operador Lógico NOT. La Siguiente consulta devolverá todos los datos de la tabla Coches, menos el que tenga la Matrícula MF-234-ZD.

SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas FROM coches WHERE NOT matricula = 'MF-234-ZD'; 

La siguiente consulta utiliza la condicional DISTINCT, la cual nos devolverá todos los valores distintos formados por los campos marca y modelo. de la tabla coches.

SELECT DISTINCT marca, modelo FROM coches; 

Cláusula ORDER BY (Ordernar por)

La cláusula ORDER BY es la instrucción que nos permite especificar el orden en el que serán devueltos los datos. Podemos especificar el orden de forma ascendente o descendente a través de las palabras clave ASC y DESC. El orden depende del tipo de datos que estén definidos en la columna, de forma que un campo numérico será ordenado como tal, y un alfanumérico se ordenará de la A a la Z, aunque su contenido sea numérico. El valor predeterminado es ASC si no se especifica al hacer la consulta.

Ejemplos:

SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas FROM coches ORDER BY marca ASC, modelo DESC; 

Este ejemplo, selecciona todos los campos matricula, marca, modelo, color, numero_kilometros y num_plazas de la tabla coches, ordenándolos por los campos marca y modelo, marca en forma ascendente y modelo en forma descendente.

SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas FROM coches ORDER BY 2; 

Este ejemplo, selecciona todos los campos matrícula, marca, modelo, color, numero_kilometros y num_plazas de la tabla coches, ordenándolos por el campo marca, ya que aparece en segundo lugar dentro de la lista de campos que componen la SELECT.

Subconsultas

Una subconsulta es una sentencia SELECT que está embebida en una cláusula de otra sentencia SQL. También pueden utilizarse subconsultas en los comandos INSERT, UPDATE, DELETE y en la cláusula FROM.[8]

Las subconsultas pueden resultar útiles si necesitas seleccionar filas de una tabla con una condición que depende de los datos de la propia tabla o de otra tabla.

La subconsulta (consulta interna), se ejecuta antes de la consulta principal; el resultado de la subconsulta es utilizado por la consulta principal (consulta externa).

SELECT c.matricula, c.modelo FROM coches AS c WHERE c.matricula IN ( SELECT m.matricula FROM multas AS m WHERE m.importe > 100 ); 

En este ejemplo, se seleccionan las matrículas y los modelos de los coches cuyas multas superan los u$s 100.

INSERT (Insertar)

Una sentencia INSERT de SQL agrega uno o más registros a una (y solo una) tabla en una base de datos relacional.

Forma básica

INSERT INTO tablatura(columnaA, [columnaB, ...]) VALUES ('valor1', ['valor2', ...]); -- O también se puede utilizar como: INSERT INTO tablatura VALUES ('valor1', 'valor2'); 

Las cantidades de columnas y valores deben ser iguales. Si una columna no se especifica, le será asignado el valor por omisión. Los valores especificados (o implícitos) por la sentencia INSERT deberán satisfacer todas las restricciones aplicables. Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no se agrega la fila y se devuelve un error.

Ejemplo

INSERT INTO agenda_telefonica (nombre, numero) VALUES ('Roberto Jeldrez', 4886850); 

Cuando se especifican todos los valores de una tabla, se puede utilizar la sentencia acortada:

INSERT INTO nombre_tabla VALUES ('valor1', ['valor2', ...]); 

Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas de la tabla 'agenda_telefonica'):

INSERT INTO agenda_telefonica VALUES ('Johnny Aguilar', 080473968); 

Formas avanzadas

Una característica de SQL (desde SQL-92) es el uso de constructores de filas para insertar múltiples filas a la vez, con una sola sentencia SQL:

INSERT INTO tabla(columna1[, columna2, ...]) VALUES ('valor1A', ['valor1B', ...]), ('value2A', ['value2B', ...]), ...; 

Esta característica es soportada por DB2, PostgreSQL (desde la versión 8.2), MySQL, y H2.

Ejemplo (asumiendo que nombre y número son las únicas columnas en la tabla agenda_telefonica):

INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850'), ('Alejandro Sosa', '4556550'); 

Que podía haber sido realizado por las sentencias

INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850'); INSERT INTO agenda_telefonica VALUES ('Alejandro Sosa', '4556550'); 

Notar que las sentencias separadas pueden tener semántica diferente (especialmente con respecto a los triggers), y puede tener diferente rendimiento que la sentencia de inserción múltiple.

Para insertar varias filas en MS SQL puede utilizar esa construcción:

INSERT INTO phone_book SELECT 'John Doe', '555-1212' UNION ALL SELECT 'Peter Doe', '555-2323'; 

Tenga en cuenta que no se trata de una sentencia SQL válida de acuerdo con el estándar SQL (SQL: 2003), debido a la cláusula subselect incompleta.

Para hacer lo mismo en Oracle se usa la Tabla DUAL, siempre que se trate de solo una simple fila:

INSERT INTO phone_book SELECT 'John Doe', '555-1212' FROM DUAL UNION ALL SELECT 'Peter Doe','555-2323' FROM DUAL 

Una implementación conforme al estándar de esta lógica se muestra el siguiente ejemplo, o como se muestra arriba (no aplica en Oracle):

INSERT INTO phone_book SELECT 'John Doe', '555-1212' FROM LATERAL ( VALUES (1) ) AS t(c) UNION ALL SELECT 'Peter Doe','555-2323' FROM LATERAL ( VALUES (1) ) AS t(c) 
Copia de filas de otras tablas

Un INSERT también puede utilizarse para recuperar datos de otros, modificarla si es necesario e insertarla directamente en la tabla. Todo esto se hace en una sola sentencia SQL que no implica ningún procesamiento intermedio en la aplicación cliente. Un SUBSELECT se utiliza en lugar de la cláusula VALUES. El SUBSELECT puede contener la sentencia JOIN, llamadas a funciones, y puede incluso consultar en la misma TABLA los datos que se inserta. Lógicamente, el SELECT se evalúa antes que la operación INSERT esté iniciada. Un ejemplo se da a continuación.

INSERT INTO phone_book2 SELECT * FROM phone_book WHERE name IN ('John Doe', 'Peter Doe'); 

Una variación es necesaria cuando algunos de los datos de la tabla fuente se está insertando en la nueva tabla, pero no todo el registro. (O cuando los esquemas de las tablas no son iguales.)

INSERT INTO phone_book2 ([name], [phoneNumber]) SELECT [name], [phoneNumber] FROM phone_book WHERE name IN ('John Doe', 'Peter Doe'); 

El SELECT produce una tabla (temporal), y el esquema de la tabla temporal debe coincidir con el esquema de la tabla donde los datos son insertados.

UPDATE (Actualizar)

Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en una tabla.

Ejemplo

UPDATE My_table SET field1 = 'updated value' WHERE field2 = 'N'; 

DELETE (Borrar)

Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla.

Forma básica

DELETE FROM tabla WHERE columna1 = 'valor1'; 

Ejemplo

DELETE FROM mi_tabla WHERE columna2 = 'N'; 

Recuperación de clave

Los diseñadores de base de datos que usan una clave suplente como la clave principal para cada tabla, se ejecutará en el ocasional escenario en el que es necesario recuperar automáticamente la base de datos, generando una clave primaria de una sentencia SQL INSERT para su uso en otras sentencias SQL. La mayoría de los sistemas no permiten sentencias SQL INSERT para retornar fila de datos. Por lo tanto, se hace necesario aplicar una solución en tales escenarios.

Implementaciones comunes incluyen:

  • Utilizando un procedimiento almacenado específico de base de datos que genera la clave suplente, realice la operación INSERT, y finalmente devuelve la clave generada.
  • Utilizando una sentencia SELECT especifica de base de datos, sobre una tabla temporal que contiene la última fila insertada. DB2 implementa esta característica de la siguiente manera:
SELECT * FROM NEW TABLE ( INSERT INTO phone_book VALUES ('Cristobal Jeldrez','0426.817.10.30') ) AS t 
  • Utilizando una sentencia SELECT después de la sentencia INSERT con función específica de base de datos, que devuelve la clave primaria generada por el registro insertado más recientemente.
  • Utilizando una combinación única de elementos del original SQL INSERT en una posterior sentencia SELECT.
  • Utilizando un GUID en la sentencia SQL INSERT y la recupera en una sentencia SELECT.
  • Utilizando la función de PHP mysql_insert_id() de MySQL después de la sentencia INSERT.
  • Utilizando un INSERT con la cláusula RETURNING para Oracle, que solo se puede utilizar dentro de un PL/SQL bloque, en el caso de PostgreSQL se puede usar también tanto con SQL como con PL/SQL.
INSERT INTO phone_book VALUES ('Cristobal Jeldrez', '0426.817.10.30') RETURNING phone_book_id INTO v_pb_id 
  • En el caso de MS SQL se puede utilizar la siguiente instrucción:
Set NoCount On; INSERT INTO phone_book VALUES ('Cristobal Jeldrez', '0426.817.10.30'); Select @@Identity as id 

Disparadores

Los disparadores, también conocidos como desencadenantes (triggers en inglés) son definidos sobre la tabla en la que opera la sentencia INSERT, y son evaluados en el contexto de la operación. Los desencadenantes BEFORE INSERT permiten la modificación de los valores que se insertarán en la tabla. Los desencadenantes AFTER INSERT no puede modificar los datos de ahora en adelante, pero se puede utilizar para iniciar acciones en otras tablas, por ejemplo para aplicar mecanismos de auditoría Excel.

Sistemas de gestión de base de datos

Los sistemas de gestión de base de datos con soporte SQL más utilizados son, por orden alfabético:

Interoperabilidad

El lenguaje de consultas de los diferentes sistemas de gestión de bases de datos son incompatibles entre ellos y no necesariamente siguen completamente el estándar. En particular, la sintaxis de fecha y tiempo, la concatenación de cadenas, nulas, y la comparación de textos en cuanto al tratamiento de mayúsculas y minúsculas varían de un proveedor a otro. Una excepción particular es PostgreSQL, que se esfuerza por lograr el cumplimiento del estándar.[9]

Las implementaciones populares de SQL omiten comúnmente soporte para funciones básicas de SQL estándar, como la de los tipos de dato DATE o TIME. Es el caso del manejador de bases de datos de Oracle (cuyo tipo DATE se comporta como DATETIME, y carece de un tipo TIME)[10]​ y MS SQL Server (antes de la versión de 2008). Como resultado, el código SQL rara vez puede ser portado entre los sistemas de base de datos sin modificaciones.

Hay varias razones para esta falta de portabilidad entre sistemas de bases de datos:

  • La complejidad y el tamaño del estándar SQL conlleva a que la mayoría de las implementaciones de SQL no sean compatibles con la norma completa.
  • La norma no especifica el comportamiento de la base de datos en varias áreas importantes (por ejemplo, índices, almacenamiento de archivos, etc.), dejando a las implementaciones decidir cómo comportarse.
  • El estándar SQL especifica con precisión la sintaxis que un sistema de base de datos conforme debe implementar. Sin embargo, no está tan bien definida la especificación en el estándar de la semántica de las construcciones del lenguaje, lo que lleva a ambigüedad.
  • Muchos proveedores de bases de datos tienen grandes bases de clientes existentes, por lo que introducir cambios para adaptarse el estándar podría producir incompatibilidades en las instalaciones de los usuarios y el proveedor puede no estar dispuesto a abandonar la compatibilidad con versiones anteriores.
  • Hay poco incentivo comercial para que un proveedor facilite a los usuarios el cambiar de proveedor de bases de datos.
  • Los usuarios que evalúan el software de base de datos tienden a valorar más otros factores tales como el rendimiento más alto en sus prioridades sobre las conformidad al estándar.

El estándar ODBC (Open Database Connectivity) permite acceder a la información desde cualquier aplicación independientemente del sistema de gestión de base de datos (DBMS) en el que esté almacenada la información, desacoplando así la aplicación de la base de datos.

Véase también

https://onlinedevtools.in/online/sqlformatter

Referencias

  1. Paul, Ryan (24 de octubre de 2005). «A guided tour of the Microsoft Command Shell». Ars Technica (en inglés). Consultado el 4 de agosto de 2020. 
  2. Morteo, Bocalandro, Francisco, Nicolás (2004). Un enfoque práctico de SQL. Ediciones Cooperativas. ISBN 987-1076-61-4. 
  3. EF Codd; A relational model of data for large shared data banks. Comm. ACM, 13 (1970), pp. 377-387.
  4. Eisenberg et al.: SQL:2003 Has Been Published.
  5. Chapple, Mike. «SQL Fundamentals». En About.com, ed. Databases. Consultado el 17 de octubre de 2015. 
  6. Rockoff, Larry (2011). Course Technology/Cengage Learning, ed. The language of SQL. 
  7. Morteo, Bocalandro., Francisco, Nicolás (2004). Un enfoque práctico de SQL. Ediciones cooperativas. ISBN 987-1076-61-4. 
  8. «About PostgreSQL». PostgreSQL 9.1 official website. PostgreSQL Global Development Group. 2012. Consultado el 8 de junio de 2016. «PostgreSQL prides itself in standards compliance. Its SQL implementation strongly conforms to the ANSI-SQL:2008 standard». 
  9. «Basic Elements of Oracle SQL: Data Types». Oracle Database SQL Language Reference 11g Release 2 (11.2). Oracle Database Documentation Library. Redwood City, CA: Oracle USA, Inc. Consultado el 8 de junio de 2016. 


  •   Datos: Q47607
  •   Multimedia: Structured Query Language

siglas, inglés, structured, query, language, español, lenguaje, consulta, estructurada, lenguaje, dominio, específico, utilizado, programación, diseñado, para, administrar, recuperar, información, sistemas, gestión, bases, datos, relacionales, principales, car. SQL por sus siglas en ingles Structured Query Language en espanol lenguaje de consulta estructurada es un lenguaje de dominio especifico utilizado en programacion disenado para administrar y recuperar informacion de sistemas de gestion de bases de datos relacionales 2 Una de sus principales caracteristicas es el manejo del algebra y el calculo relacional para efectuar consultas con el fin de recuperar de forma sencilla informacion de bases de datos asi como realizar cambios en ellas SQLDesarrollador es IBMInformacion generalExtensiones comunessqlParadigmaMultiparadigmaAparecio en1974Disenado porDonald D ChamberlinUltima version estableSQL 2014 2016 Sistema de tiposEstatico FuerteImplementacionesVariasDialectosSQL 85 SQL 88 SQL 91 SQL 1999 SQL 2003 SQL 2006 SQL 2008 SQL 2011 SQL 2016Influido porDatalogHa influido aAgena CQL LINQ Windows PowerShell 1 Sistema operativomultiplataforma editar datos en Wikidata SQLDesarrolladorIBMISO IEC 9075 1 2008Informacion generalExtension de archivo sqlTipo de MIMEapplication x sqlLanzamiento inicial1986Ultima versionSQL 2012 2012Tipo de formatoBase de datosEstandar es ISO IEC 9075Formato abierto editar datos en Wikidata Originalmente basado en el algebra relacional y en el calculo relacional SQL consiste en un lenguaje de definicion de datos un lenguaje de manipulacion de datos y un lenguaje de control de datos El alcance de SQL incluye la insercion de datos consultas actualizaciones y borrado la creacion y modificacion de esquemas y el control de acceso a los datos Tambien el SQL a veces se describe como un lenguaje declarativo tambien incluye elementos procesales SQL fue uno de los primeros lenguajes comerciales para el modelo relacional de Edgar Frank Codd como se describio en su articulo de investigacion de 1970 El modelo relacional de datos para grandes bancos de datos compartidos A pesar de no adherirse totalmente al modelo relacional descrito por Codd paso a ser el lenguaje de base de datos mas usado SQL paso a ser el estandar del Instituto Nacional Estadounidense de Estandares ANSI en 1986 y de la Organizacion Internacional de Normalizacion ISO en 1987 Desde entonces el estandar ha sido revisado para incluir mas caracteristicas A pesar de la existencia de ambos estandares la mayoria de los codigos SQL no son completamente portables entre sistemas de bases de datos diferentes sin otros ajustes Indice 1 Origenes y evolucion 2 Caracteristicas generales de SQL 2 1 Tipos de datos 2 2 Optimizacion 3 Lenguaje de definicion de datos DDL 3 1 CREATE Crear 3 2 ALTER Alterar 3 3 DROP Eliminar 3 4 TRUNCATE Truncar 4 Lenguaje de manipulacion de datos DML Data Manipulation Language 4 1 Definicion 4 2 SELECT Seleccionar 4 2 1 Forma basica 4 2 2 Clausula WHERE Donde 4 2 3 Clausula ORDER BY Ordernar por 4 3 Subconsultas 4 4 INSERT Insertar 4 4 1 Forma basica 4 4 2 Ejemplo 4 4 3 Formas avanzadas 4 4 3 1 Copia de filas de otras tablas 4 5 UPDATE Actualizar 4 5 1 Ejemplo 4 6 DELETE Borrar 4 6 1 Forma basica 4 6 2 Ejemplo 5 Recuperacion de clave 6 Disparadores 7 Sistemas de gestion de base de datos 8 Interoperabilidad 9 Vease tambien 10 ReferenciasOrigenes y evolucion EditarLos origenes de SQL estan ligados a las bases de datos relacionales especificamente las que residian en maquinas IBM bajo el sistema de gestion System R desarrollado por un grupo de la IBM en San Jose California En 1970 E F Codd propone el modelo relacional y asociado a este un sublenguaje de acceso a los datos basado en el calculo de predicados 3 Basandose en estas ideas los laboratorios de IBM definieron el lenguaje SEQUEL Structured English Query Language que mas tarde fue ampliamente implementado por el sistema de gestion de bases de datos SGBD experimental System R desarrollado en 1977 tambien por IBM Sin embargo fue Oracle quien lo introdujo por primera vez en 1979 en un producto comercial El SEQUEL termino siendo el predecesor de SQL que es una version evolucionada del primero SQL pasa a ser el lenguaje por excelencia de los diversos sistemas de gestion de bases de datos relacionales surgidos en los anos siguientes y fue por fin estandarizado en 1986 por el ANSI dando lugar a la primera version estandar de este lenguaje SQL 86 o SQL1 Al ano siguiente este estandar es tambien adoptado por ISO Sin embargo este primer estandar no cubria todas las necesidades de los desarrolladores e incluia funcionalidades de definicion de almacenamiento que se considero suprimirlas Asi que en 1992 se lanzo un nuevo estandar ampliado y revisado de SQL llamado SQL 92 o SQL2 En la actualidad SQL es el estandar de facto de la inmensa mayoria de los SGBD comerciales Y aunque la diversidad de anadidos particulares que incluyen las distintas implementaciones comerciales del lenguaje es amplia el soporte al estandar SQL 92 es general y muy amplio El ANSI SQL sufrio varias revisiones y agregados a lo largo del tiempo Ano Nombre Alias Comentarios1986 SQL 86 SQL 87 Primera publicacion hecha por ANSI Confirmada por la Organizacion Internacional de Normalizacion en 1987 1989 SQL 89 Revision menor 1992 SQL 92 SQL2 Revision mayor 1999 SQL 1999 SQL2000 Se agregaron expresiones regulares consultas recursivas para relaciones jerarquicas triggers y algunas caracteristicas orientadas a objetos 2003 SQL 2003 Introduce algunas caracteristicas de XML cambios en las funciones estandarizacion del objeto sequence y de las columnas autonumericas 4 2005 SQL 2005 ISO IEC 9075 14 2005 Define las maneras en las cuales SQL se puede utilizar conjuntamente con XML Define maneras de importar y guardar datos XML en una base de datos SQL manipulandolos dentro de la base de datos y publicando el XML y los datos SQL convencionales en forma XML Ademas proporciona facilidades que permiten a las aplicaciones integrar dentro de su codigo SQL el uso de XQuery lenguaje de consulta XML publicado por el W3C World Wide Web Consortium para acceso concurrente a datos ordinarios SQL y documentos XML 2008 SQL 2008 Permite el uso de la clausula ORDER BY fuera de las definiciones de los cursores Incluye los disparadores del tipo INSTEAD OF Anade la sentencia TRUNCATE 5 2011 SQL 2011 Datos temporales PERIOD FOR Mejoras en las funciones de ventana y de la clausula FETCH 2016 SQL 2016 Permite busqueda de patrones funciones de tabla polimorficas y compatibilidad con los ficheros JSON Caracteristicas generales de SQL EditarSQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales y permite asi gran variedad de operaciones 6 Es un lenguaje declarativo de alto nivel o de no procedimiento que gracias a su fuerte base teorica y su orientacion al manejo de conjuntos de registros y no a registros individuales permite una alta productividad en codificacion y la orientacion a objetos De esta forma una sola sentencia puede equivaler a uno o mas programas que se utilizarian en un lenguaje de bajo nivel orientado a registros SQL tambien tiene las siguientes caracteristicas Lenguaje de definicion de datos El LDD de SQL proporciona comandos para la definicion de esquemas de relacion borrado de relaciones y modificaciones de los esquemas de relacion Lenguaje interactivo de manipulacion de datos El LMD de SQL incluye lenguajes de consultas basado tanto en algebra relacional como en calculo relacional de tuplas Integridad El LDD de SQL incluye comandos para especificar las restricciones de integridad que deben cumplir los datos almacenados en la base de datos Definicion de vistas El LDD incluye comandos para definir las vistas Control de transacciones SQL tiene comandos para especificar el comienzo y el final de una transaccion SQL incorporado y dinamico Esto quiere decir que se pueden incorporar instrucciones de SQL en lenguajes de programacion como C C Java PHP COBOL Pascal y Fortran Autorizacion El LDD incluye comandos para especificar los derechos de acceso a las relaciones y a las vistas Tipos de datos Editar Algunos de los tipos de datos basicos de SQL s son Varchar Recibe cadena de palabras compuestas de letras numeros y caracteres especiales Int es el principal tipo de datos de valores enteros de SQL Server Con numeros enteros con o sin signo Date una fecha de calendario que contiene el ano de cuatro cifras el mes y el dia Time La hora del dia en horas minutos segundos el valor predeterminado es 0 Optimizacion Editar Como ya se dijo antes y suele ser comun en los lenguajes de acceso a bases de datos de alto nivel SQL es un lenguaje declarativo O sea que especifica que es lo que se quiere y no como conseguirlo por lo que una sentencia no establece explicitamente un orden de ejecucion El orden de ejecucion interno de una sentencia puede afectar seriamente a la eficiencia del SGBD por lo que se hace necesario que este lleve a cabo una optimizacion antes de su ejecucion Muchas veces el uso de indices acelera una instruccion de consulta pero ralentiza la actualizacion de los datos Dependiendo del uso de la aplicacion se priorizara el acceso indexado o una rapida actualizacion de la informacion La optimizacion difiere sensiblemente en cada motor de base de datos y depende de muchos factores Los sistemas de bases de datos modernos poseen un componente llamado optimizador de consultas Este realiza un detallado analisis de los posibles planes de ejecucion de una consulta SQL y elige aquel que sea mas eficiente para llevar adelante la misma Existe una ampliacion de SQL conocida como FSQL Fuzzy SQL SQL difuso que permite el acceso a bases de datos difusas usando la logica difusa Este lenguaje ha sido implementado a nivel experimental y esta evolucionando rapidamente Lenguaje de definicion de datos DDL EditarEl lenguaje de definicion de datos en ingles Data Definition Language o DDL es el que se encarga de la modificacion de la estructura de los objetos de la base de datos Incluye ordenes para modificar borrar o definir las tablas en las que se almacenan los datos de la base de datos Existen cuatro operaciones basicas CREATE ALTER DROP y TRUNCATE 7 CREATE Crear Editar Este comando permite crear objetos de datos como nuevas bases de datos tablas vistas y procedimientos almacenados Ejemplo crear una tabla CREATE TABLE clientes ALTER Alterar Editar Este comando permite modificar la estructura de una tabla u objeto Se pueden agregar quitar campos a una tabla modificar el tipo de un campo agregar quitar indices a una tabla modificar un trigger etc Ejemplo agregar columna a una tabla ALTER TABLE alumnos ADD edad INT UNSIGNED DROP Eliminar Editar Este comando elimina un objeto de la base de datos Puede ser una tabla vista indice trigger funcion procedimiento o cualquier objeto que el motor de la base de datos soporte Se puede combinar con la sentencia ALTER EjemploDROP TABLE alumnos TRUNCATE Truncar Editar Este comando solo aplica a tablas y su funcion es borrar el contenido completo de la tabla especificada La ventaja sobre el comando DELETE es que si se quiere borrar todo el contenido de la tabla es mucho mas rapido especialmente si la tabla es muy grande La desventaja es que TRUNCATE solo sirve cuando se quiere eliminar absolutamente todos los registros ya que no se permite la clausula WHERE Si bien en un principio esta sentencia pareceria ser DML Lenguaje de Manipulacion de Datos es en realidad una DDL ya que internamente el comando TRUNCATE borra la tabla y la vuelve a crear y no ejecuta ninguna transaccion EjemploTRUNCATE TABLE nombre tabla Lenguaje de manipulacion de datos DML Data Manipulation Language EditarDefinicion Editar Un lenguaje de manipulacion de datos Data Manipulation Language o DML en ingles es un lenguaje proporcionado por el sistema de gestion de base de datos que permite a los usuarios llevar a cabo las tareas de consulta o manipulacion de los datos organizados por el modelo de datos adecuado 7 El lenguaje de manipulacion de datos mas popular hoy dia es SQL usado para recuperar y manipular datos en una base de datos relacional SELECT Seleccionar Editar La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de datos Forma basica Editar SELECT ALL DISTINCT lt nombre campo gt lt nombre campo gt FROM lt nombre tabla gt lt nombre vista gt lt nombre tabla gt lt nombre vista gt WHERE lt condicion gt AND OR lt condicion gt GROUP BY lt nombre campo gt lt nombre campo gt HAVING lt condicion gt AND OR lt condicion gt ORDER BY lt nombre campo gt lt indice campo gt ASC DESC lt nombre campo gt lt indice campo gt ASC DESC SELECT Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de seleccion ALL Indica que queremos seleccionar todos los valores Es el valor por defecto y no suele especificarse casi nunca DISTINCT Indica que queremos seleccionar solo los valores distintos FROM Indica la tabla o tablas desde la que queremos recuperar los datos En el caso de que exista mas de una tabla se denomina a la consulta consulta combinada o join En las consultas combinadas es necesario aplicar una condicion de combinacion a traves de una clausula WHERE WHERE Especifica una condicion que debe cumplirse para que los datos sean devueltos por la consulta Admite los operadores logicos AND y OR GROUP BY Especifica la agrupacion que se da a los datos Se usa siempre en combinacion con funciones agregadas HAVING Especifica una condicion que debe cumplirse para que los datos sean devueltos por la consulta Su funcionamiento es similar al de WHERE pero aplicado al conjunto de resultados devueltos por la consulta Debe aplicarse siempre junto a GROUP BY y la condicion debe estar referida a los campos contenidos en ella ORDER BY Presenta el resultado ordenado por las columnas indicadas El orden puede expresarse con ASC orden ascendente y DESC orden descendente El valor predeterminado es ASC Ejemplo Para formular una consulta a la tabla coches y recuperar los campos matricula marca modelo color numero kilometros num plazas debemos ejecutar la siguiente consulta Los datos seran devueltos ordenados por marca y por modelo en orden ascendente de menor a mayor La palabra clave FROM indica que los datos seran recuperados de la tabla Coches SELECT matricula marca modelo color numero kilometros num plazas FROM coches ORDER BY marca modelo Ejemplo de consulta simplificada a traves de un comodin de campos El uso del asterisco indica que queremos que la consulta devuelva todos los campos que existen en la tabla y los datos seran devueltos ordenados por marca y por modelo SELECT FROM coches ORDER BY marca modelo Clausula WHERE Donde Editar La clausulaWHERE es la instruccion que nos permite filtrar el resultado de una sentencia SELECT Habitualmente no deseamos obtener toda la informacion existente en la tabla sino que queremos obtener solo la informacion que nos resulte util en ese momento La clausula WHERE filtra los datos antes de ser devueltos por la consulta Cuando en la Clausula WHERE queremos incluir un tipo texto debemos incluir el valor entre comillas simples Ejemplos En nuestro ejemplo se desea consultar un coche en concreto para esto se agrego una clausula WHERE Esta clausula especifica una o varias condiciones que deben cumplirse para que la sentencia SELECT devuelva los datos En este caso la consulta devolvera solo los datos del coche con matricula para que la consulta devuelva solo los datos del coche con matricula MF 234 ZDo bien la matricula FK 938 ZL Se puede utilizar la clausula WHERE solamente o en combinacion con tantas condiciones como queramos SELECT matricula marca modelo color numero kilometros num plazas FROM coches WHERE matricula MF 234 ZD OR matricula FK 938 ZL Una condicion WHERE puede ser negada a traves del Operador Logico NOT La Siguiente consulta devolvera todos los datos de la tabla Coches menos el que tenga la Matricula MF 234 ZD SELECT matricula marca modelo color numero kilometros num plazas FROM coches WHERE NOT matricula MF 234 ZD La siguiente consulta utiliza la condicional DISTINCT la cual nos devolvera todos los valores distintos formados por los campos marca y modelo de la tabla coches SELECT DISTINCT marca modelo FROM coches Clausula ORDER BY Ordernar por Editar La clausulaORDER BY es la instruccion que nos permite especificar el orden en el que seran devueltos los datos Podemos especificar el orden de forma ascendente o descendente a traves de las palabras clave ASCy DESC El orden depende del tipo de datos que esten definidos en la columna de forma que un campo numerico sera ordenado como tal y un alfanumerico se ordenara de la A a la Z aunque su contenido sea numerico El valor predeterminado es ASC si no se especifica al hacer la consulta Ejemplos SELECT matricula marca modelo color numero kilometros num plazas FROM coches ORDER BY marca ASC modelo DESC Este ejemplo selecciona todos los campos matricula marca modelo color numero kilometros y num plazas de la tabla coches ordenandolos por los campos marca y modelo marca en forma ascendente y modelo en forma descendente SELECT matricula marca modelo color numero kilometros num plazas FROM coches ORDER BY 2 Este ejemplo selecciona todos los campos matricula marca modelo color numero kilometros y num plazas de la tabla coches ordenandolos por el campo marca ya que aparece en segundo lugar dentro de la lista de campos que componen la SELECT Subconsultas Editar Una subconsulta es una sentencia SELECT que esta embebida en una clausula de otra sentencia SQL Tambien pueden utilizarse subconsultas en los comandos INSERT UPDATE DELETE y en la clausula FROM 8 Las subconsultas pueden resultar utiles si necesitas seleccionar filas de una tabla con una condicion que depende de los datos de la propia tabla o de otra tabla La subconsulta consulta interna se ejecuta antes de la consulta principal el resultado de la subconsulta es utilizado por la consulta principal consulta externa SELECT c matricula c modelo FROM coches AS c WHERE c matricula IN SELECT m matricula FROM multas AS m WHERE m importe gt 100 En este ejemplo se seleccionan las matriculas y los modelos de los coches cuyas multas superan los u s 100 INSERT Insertar Editar Una sentencia INSERT de SQL agrega uno o mas registros a una y solo una tabla en una base de datos relacional Forma basica Editar INSERT INTO tablatura columnaA columnaB VALUES valor1 valor2 O tambien se puede utilizar como INSERT INTO tablatura VALUES valor1 valor2 Las cantidades de columnas y valores deben ser iguales Si una columna no se especifica le sera asignado el valor por omision Los valores especificados o implicitos por la sentencia INSERT deberan satisfacer todas las restricciones aplicables Si ocurre un error de sintaxis o si alguna de las restricciones es violada no se agrega la fila y se devuelve un error Ejemplo Editar INSERT INTO agenda telefonica nombre numero VALUES Roberto Jeldrez 4886850 Cuando se especifican todos los valores de una tabla se puede utilizar la sentencia acortada INSERT INTO nombre tabla VALUES valor1 valor2 Ejemplo asumiendo que nombre y numero son las unicas columnas de la tabla agenda telefonica INSERT INTO agenda telefonica VALUES Johnny Aguilar 080473968 Formas avanzadas Editar Una caracteristica de SQL desde SQL 92 es el uso de constructores de filas para insertar multiples filas a la vez con una sola sentencia SQL INSERT INTO tabla columna1 columna2 VALUES valor1A valor1B value2A value2B Esta caracteristica es soportada por DB2 PostgreSQL desde la version 8 2 MySQL y H2 Ejemplo asumiendo que nombre y numero son las unicas columnas en la tabla agenda telefonica INSERT INTO agenda telefonica VALUES Roberto Fernandez 4886850 Alejandro Sosa 4556550 Que podia haber sido realizado por las sentencias INSERT INTO agenda telefonica VALUES Roberto Fernandez 4886850 INSERT INTO agenda telefonica VALUES Alejandro Sosa 4556550 Notar que las sentencias separadas pueden tener semantica diferente especialmente con respecto a los triggers y puede tener diferente rendimiento que la sentencia de insercion multiple Para insertar varias filas en MS SQL puede utilizar esa construccion INSERT INTO phone book SELECT John Doe 555 1212 UNION ALL SELECT Peter Doe 555 2323 Tenga en cuenta que no se trata de una sentencia SQL valida de acuerdo con el estandar SQL SQL 2003 debido a la clausula subselect incompleta Para hacer lo mismo en Oracle se usa la Tabla DUAL siempre que se trate de solo una simple fila INSERT INTO phone book SELECT John Doe 555 1212 FROM DUAL UNION ALL SELECT Peter Doe 555 2323 FROM DUAL Una implementacion conforme al estandar de esta logica se muestra el siguiente ejemplo o como se muestra arriba no aplica en Oracle INSERT INTO phone book SELECT John Doe 555 1212 FROM LATERAL VALUES 1 AS t c UNION ALL SELECT Peter Doe 555 2323 FROM LATERAL VALUES 1 AS t c Copia de filas de otras tablas Editar Un INSERT tambien puede utilizarse para recuperar datos de otros modificarla si es necesario e insertarla directamente en la tabla Todo esto se hace en una sola sentencia SQL que no implica ningun procesamiento intermedio en la aplicacion cliente Un SUBSELECT se utiliza en lugar de la clausula VALUES El SUBSELECT puede contener la sentencia JOIN llamadas a funciones y puede incluso consultar en la misma TABLA los datos que se inserta Logicamente el SELECT se evalua antes que la operacion INSERT este iniciada Un ejemplo se da a continuacion INSERT INTO phone book2 SELECT FROM phone book WHERE name IN John Doe Peter Doe Una variacion es necesaria cuando algunos de los datos de la tabla fuente se esta insertando en la nueva tabla pero no todo el registro O cuando los esquemas de las tablas no son iguales INSERT INTO phone book2 name phoneNumber SELECT name phoneNumber FROM phone book WHERE name IN John Doe Peter Doe El SELECT produce una tabla temporal y el esquema de la tabla temporal debe coincidir con el esquema de la tabla donde los datos son insertados UPDATE Actualizar Editar Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en una tabla Ejemplo Editar UPDATE My table SET field1 updated value WHERE field2 N DELETE Borrar Editar Una sentencia DELETE de SQL borra uno o mas registros existentes en una tabla Forma basica Editar DELETE FROM tabla WHERE columna1 valor1 Ejemplo Editar DELETE FROM mi tabla WHERE columna2 N Recuperacion de clave EditarLos disenadores de base de datos que usan una clave suplente como la clave principal para cada tabla se ejecutara en el ocasional escenario en el que es necesario recuperar automaticamente la base de datos generando una clave primaria de una sentencia SQL INSERT para su uso en otras sentencias SQL La mayoria de los sistemas no permiten sentencias SQL INSERT para retornar fila de datos Por lo tanto se hace necesario aplicar una solucion en tales escenarios Implementaciones comunes incluyen Utilizando un procedimiento almacenado especifico de base de datos que genera la clave suplente realice la operacion INSERT y finalmente devuelve la clave generada Utilizando una sentencia SELECT especifica de base de datos sobre una tabla temporal que contiene la ultima fila insertada DB2 implementa esta caracteristica de la siguiente manera SELECT FROM NEW TABLE INSERT INTO phone book VALUES Cristobal Jeldrez 0426 817 10 30 AS t Utilizando una sentencia SELECT despues de la sentencia INSERT con funcion especifica de base de datos que devuelve la clave primaria generada por el registro insertado mas recientemente Utilizando una combinacion unica de elementos del original SQL INSERT en una posterior sentencia SELECT Utilizando un GUID en la sentencia SQL INSERT y la recupera en una sentencia SELECT Utilizando la funcion de PHP mysql insert id de MySQL despues de la sentencia INSERT Utilizando un INSERT con la clausula RETURNING para Oracle que solo se puede utilizar dentro de un PL SQL bloque en el caso de PostgreSQL se puede usar tambien tanto con SQL como con PL SQL INSERT INTO phone book VALUES Cristobal Jeldrez 0426 817 10 30 RETURNING phone book id INTO v pb id En el caso de MS SQL se puede utilizar la siguiente instruccion Set NoCount On INSERT INTO phone book VALUES Cristobal Jeldrez 0426 817 10 30 Select Identity as idDisparadores EditarLos disparadores tambien conocidos como desencadenantes triggers en ingles son definidos sobre la tabla en la que opera la sentencia INSERT y son evaluados en el contexto de la operacion Los desencadenantes BEFORE INSERT permiten la modificacion de los valores que se insertaran en la tabla Los desencadenantes AFTER INSERT no puede modificar los datos de ahora en adelante pero se puede utilizar para iniciar acciones en otras tablas por ejemplo para aplicar mecanismos de auditoria Excel Sistemas de gestion de base de datos EditarLos sistemas de gestion de base de datos con soporte SQL mas utilizados son por orden alfabetico DB2 Firebird HSQL Informix InterBase MariaDB Microsoft SQL Server MySQL Oracle PostgreSQL PervasiveSQL SQLite Sybase ASEInteroperabilidad EditarEl lenguaje de consultas de los diferentes sistemas de gestion de bases de datos son incompatibles entre ellos y no necesariamente siguen completamente el estandar En particular la sintaxis de fecha y tiempo la concatenacion de cadenas nulas y la comparacion de textos en cuanto al tratamiento de mayusculas y minusculas varian de un proveedor a otro Una excepcion particular es PostgreSQL que se esfuerza por lograr el cumplimiento del estandar 9 Las implementaciones populares de SQL omiten comunmente soporte para funciones basicas de SQL estandar como la de los tipos de dato DATE o TIME Es el caso del manejador de bases de datos de Oracle cuyo tipo DATE se comporta como DATETIME y carece de un tipo TIME 10 y MS SQL Server antes de la version de 2008 Como resultado el codigo SQL rara vez puede ser portado entre los sistemas de base de datos sin modificaciones Hay varias razones para esta falta de portabilidad entre sistemas de bases de datos La complejidad y el tamano del estandar SQL conlleva a que la mayoria de las implementaciones de SQL no sean compatibles con la norma completa La norma no especifica el comportamiento de la base de datos en varias areas importantes por ejemplo indices almacenamiento de archivos etc dejando a las implementaciones decidir como comportarse El estandar SQL especifica con precision la sintaxis que un sistema de base de datos conforme debe implementar Sin embargo no esta tan bien definida la especificacion en el estandar de la semantica de las construcciones del lenguaje lo que lleva a ambiguedad Muchos proveedores de bases de datos tienen grandes bases de clientes existentes por lo que introducir cambios para adaptarse el estandar podria producir incompatibilidades en las instalaciones de los usuarios y el proveedor puede no estar dispuesto a abandonar la compatibilidad con versiones anteriores Hay poco incentivo comercial para que un proveedor facilite a los usuarios el cambiar de proveedor de bases de datos Los usuarios que evaluan el software de base de datos tienden a valorar mas otros factores tales como el rendimiento mas alto en sus prioridades sobre las conformidad al estandar El estandar ODBC Open Database Connectivity permite acceder a la informacion desde cualquier aplicacion independientemente del sistema de gestion de base de datos DBMS en el que este almacenada la informacion desacoplando asi la aplicacion de la base de datos Vease tambien EditarAQL FSQL Lenguaje de definicion de datos Modelo de base de datos Inyeccion SQLhttps onlinedevtools in online sqlformatterReferencias Editar Paul Ryan 24 de octubre de 2005 A guided tour of the Microsoft Command Shell Ars Technica en ingles Consultado el 4 de agosto de 2020 Morteo Bocalandro Francisco Nicolas 2004 Un enfoque practico de SQL Ediciones Cooperativas ISBN 987 1076 61 4 EF Codd A relational model of data for large shared data banks Comm ACM 13 1970 pp 377 387 Eisenberg et al SQL 2003 Has Been Published Aprobacion de SQL 2008 Chapple Mike SQL Fundamentals En About com ed Databases Consultado el 17 de octubre de 2015 a b Rockoff Larry 2011 Course Technology Cengage Learning ed The language of SQL Morteo Bocalandro Francisco Nicolas 2004 Un enfoque practico de SQL Ediciones cooperativas ISBN 987 1076 61 4 About PostgreSQL PostgreSQL 9 1 official website PostgreSQL Global Development Group 2012 Consultado el 8 de junio de 2016 PostgreSQL prides itself in standards compliance Its SQL implementation strongly conforms to the ANSI SQL 2008 standard Basic Elements of Oracle SQL Data Types Oracle Database SQL Language Reference 11g Release 2 11 2 Oracle Database Documentation Library Redwood City CA Oracle USA Inc Consultado el 8 de junio de 2016 Datos Q47607 Multimedia Structured Query LanguageObtenido de https es wikipedia org w index php title SQL amp oldid 137345025, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos