SQL
ORÍGENES Y EVOLUCIÓN
Empieza en 1974 con la definición, por parte de Donald
Chamberlin y de otras personas que trabajaban en los laboratorios de
investigación de IBM, de un lenguaje para la especificación de las
características de las bases de datos que adoptaban el modelo relacional. Este
lenguaje se llamaba SEQUEL (Structured English Query Language) y se implementó
en un prototipo llamado SEQUEL-XRM entre 1974 y 1975. Las experimentaciones con
ese prototipo condujeron, entre 1976 y 1977, a una revisión del lenguaje
(SEQUEL/2), que a partir de ese momento cambió de nombre por motivos legales,
convirtiéndose en SQL. El prototipo (System R), basado en este lenguaje, se
adoptó y utilizó internamente en IBM y lo adoptaron algunos de sus clientes
elegidos. Gracias al éxito de este sistema, que no estaba todavía
comercializado, también otras compañías empezaron a desarrollar sus productos
relacionales basados en SQL. A partir de 1981, IBM comenzó a entregar sus
productos relacionales y en 1983 empezó a vender DB2. En el curso de los años
ochenta, numerosas compañías (por ejemplo Oracle y Sybase, sólo por citar
algunos) comercializaron productos basados en SQL, que se convierte en el
estándar industrial de hecho por lo que respecta a las bases de datos
relacionales.
En 1986,
el ANSI adoptó SQL (sustancialmente adoptó el dialecto SQL de IBM) como
estándar para los lenguajes relacionales y en 1987 se transfomó en estándar
ISO. Esta versión del estándar va con el nombre de SQL/86. En los años
siguientes, éste ha sufrido diversas revisiones que han conducido primero a la
versión SQL/89 y, posteriormente, a la actual SQL/92.
El hecho
de tener un estándar definido por un lenguaje para bases de datos relacionales
abre potencialmente el camino a la intercomunicabilidad entre todos los
productos que se basan en él. Desde el punto de vista práctico, por desgracia
las cosas fueron de otro modo. Efectivamente, en general cada productor adopta
e implementa en la propia base de datos sólo el corazón del lenguaje SQL (el
así llamado Entry level o al máximo el Intermediate level), extendiéndolo de
manera individual según la propia visión que cada cual tenga del mundo de las
bases de datos.
Actualmente,
está en marcha un proceso de revisión del lenguaje por parte de los comités
ANSI e ISO, que debería terminar en la definición de lo que en este momento se
conoce como SQL3.
FUNCIONES DE SQL
- DDL – Data Definition Language
Creación de estructuras de la base de datos.
Integridad de los datos.
- DML – Data Manipulation Language
Recuperación de datos.
Manipulación de datos.
- DCL – Data Control Language
Control acceso.
Compartición de datos.
INVOCACIÓN DE SQL
Invocación directa o interactiva
- La sentencia es invocada desde el terminal.
- Los datos devueltos se presentan en pantalla.
Invocación desde programa
- La sentencia se invoca como parte de la ejecución del programa.
- Los datos devueltos se recogen en una área de entrada del programa.
VENTAJAS DE SQL
-
Independencia de los fabricantes.
-
Portabilidad a cualquier tipo de plataforma.
-
SQL está estandarizado.
-
Basado en el modelo relacional.
-
Lenguaje de alto nivel.
-
Consultas interactivas ad-hoc.
-
Utilización en Lenguaje de programación.
-
Múltiples vistas de los datos.
-
Lenguaje de base de datos.
-
Definición dinámica de datos.
-
Arquitectura cliente/servidor.
TIPOS DE DATOS
BINARIO
1 byte por carácter
Se puede almacenar cualquier clase de datos en un campo de este tipo. No se realiza ninguna conversión de datos (por ejemplo, a texto). El modo en que se proporcionan los datos en un campo binario determina la forma en la que aparecerán como resultado.
BIT
1 byte
Valores Sí y No y campos que contienen uno o dos valores.
TINYINT
1 byte
Valor entero entre 0 y 255.
MONEY
8 bytes
Entero escalado entre
– 922.337.203.685.477,5808 y 922.337.203.685.477,5807.
DATETIME
(Vea DOUBLE)
8 bytes
Valor de fecha u hora entre los años 100 y 9999.
UNIQUEIDENTIFIER
128 bits
Número de identificación exclusivo utilizado en llamadas a procedimientos remotos.
REAL
4 bytes
Valor de punto flotante de precisión simple con un intervalo de – 3,402823E38 a – 1,401298E-45 para valores negativos, 1,401298E-45 a 3,402823E38 para valores positivos, y 0.
FLOAT
8 bytes
Valor de punto flotante de precisión doble con un intervalo de – 1,79769313486232E308 a – 4,94065645841247E-324 para valores negativos, 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos, y 0.
SMALLINT
2 bytes
Entero corto entre – 32.768 y 32.767.
INTEGER
4 bytes
Entero largo entre – 2.147.483.648 y 2.147.483.647.
DECIMAL
17 bytes
Tipo de datos numérico exacto que mantiene valores desde 1028 - 1 hasta - 1028 - 1. Puede definir la precisión (1 - 28) y la escala (0 - precisión definida). La precisión y escala predeterminadas son 18 y 0 respectivamente.
TEXT
2 bytes por carácter (Vea la nota)
De cero a un máximo de 2,14 gigabytes.
IMAGE
Según se requiera
De cero a un máximo de 2,14 gigabytes. Se utiliza para objetos OLE.
CHARACTER
2 bytes por carácter (Vea la nota)
De cero a 255 caracteres.
CREACIÓN DE DOMINIOS
- Los dominios se pueden utilizar como tipos de datos.
- Permite cambiar el tipo simultáneamente a varios atributos.
- Independencia de los fabricantes.
- Portabilidad a cualquier tipo de plataforma.
- SQL está estandarizado.
- Basado en el modelo relacional.
- Lenguaje de alto nivel.
- Consultas interactivas ad-hoc.
- Utilización en Lenguaje de programación.
- Múltiples vistas de los datos.
- Lenguaje de base de datos.
- Definición dinámica de datos.
- Arquitectura cliente/servidor.
TIPOS DE DATOS
BINARIO
|
1 byte por carácter
|
Se puede almacenar cualquier clase de datos en un campo de este tipo. No se realiza ninguna conversión de datos (por ejemplo, a texto). El modo en que se proporcionan los datos en un campo binario determina la forma en la que aparecerán como resultado.
|
BIT
|
1 byte
|
Valores Sí y No y campos que contienen uno o dos valores.
|
TINYINT
|
1 byte
|
Valor entero entre 0 y 255.
|
MONEY
|
8 bytes
|
Entero escalado entre
– 922.337.203.685.477,5808 y 922.337.203.685.477,5807.
|
DATETIME
(Vea DOUBLE)
|
8 bytes
|
Valor de fecha u hora entre los años 100 y 9999.
|
UNIQUEIDENTIFIER
|
128 bits
|
Número de identificación exclusivo utilizado en llamadas a procedimientos remotos.
|
REAL
|
4 bytes
|
Valor de punto flotante de precisión simple con un intervalo de – 3,402823E38 a – 1,401298E-45 para valores negativos, 1,401298E-45 a 3,402823E38 para valores positivos, y 0.
|
FLOAT
|
8 bytes
|
Valor de punto flotante de precisión doble con un intervalo de – 1,79769313486232E308 a – 4,94065645841247E-324 para valores negativos, 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos, y 0.
|
SMALLINT
|
2 bytes
|
Entero corto entre – 32.768 y 32.767.
|
INTEGER
|
4 bytes
|
Entero largo entre – 2.147.483.648 y 2.147.483.647.
|
DECIMAL
|
17 bytes
|
Tipo de datos numérico exacto que mantiene valores desde 1028 - 1 hasta - 1028 - 1. Puede definir la precisión (1 - 28) y la escala (0 - precisión definida). La precisión y escala predeterminadas son 18 y 0 respectivamente.
|
TEXT
|
2 bytes por carácter (Vea la nota)
|
De cero a un máximo de 2,14 gigabytes.
|
IMAGE
|
Según se requiera
|
De cero a un máximo de 2,14 gigabytes. Se utiliza para objetos OLE.
|
CHARACTER
|
2 bytes por carácter (Vea la nota)
|
De cero a 255 caracteres.
|
CREACIÓN DE DOMINIOS
- Los dominios se pueden utilizar como tipos de datos.
- Permite cambiar el tipo simultáneamente a varios atributos.
OPERADORES
Comparación
=, <>, <, >, <=, >=, IS NULL
Lógicos
AND, OR, NOT
Intervalos
BETWEEN ……AND
Cadenas de texto
LIKE
Conjuntos
IN
CREACIÓN DE OBJETOS: TABLAS
- Se utiliza el comando CREATE TABLE.
- Se especifican los atributos de la relación y sus tipos.
- Se especifica la clave primaria.
- Se especifica las restricciones de integridad.
- Se especifica la integridad referencial.
BORRADO DE TABLAS
- Si se utiliza CASCADE CONSTRAINT se elimina la tabla y todas sus restricciones.
- Si no se utiliza CASCADE CONSTRAINT, si la tabla tiene restricciones asociadas no se elimina, hasta que no se eliminen las restricciones.
- Al eliminar una tabla de la base de datos, también se eliminan los datos que tuviera almacenados.
MODIFICAR UNA TABLA
Añadir atributos.
- ADD nuevo_atributo tipo restricciones.
- Las restricciones sólo pueden ser NOT NULL, CHECK y DEFAULT.
- Un atributo NOT NULL sólo se puede añadir a una tabla si esta vacía.
Borrar atributos.
- DROP (nombre_atributo, …).
- DROP COLUMN nombre atributo [CASCADE CONSTRAINT].
Modificar atributos.
- MODIFY nombre_atributo nuevo_tipo restricciones.
- Se puede cambiar el tipo o disminuir el tamaño de un atributo si todas las tuplas tienen ese campo vacío.
- Un atributo existente se puede hacer NOT NULL si todas las tuplas tienen valor en ese atributo.
- Si no se especifica algo en la modificación, permanece como estaba.
INSERCIÓN DE DATOS
- Introduce información en la tabla y atributos indicados.
- El orden y el tipo de los atributos debe coincidir con el orden y tipo de los valores.
- Los valores se pueden obtener mediante una consulta.
- Si un atributo no se indica, toma valor NULL.
- Si se omite la lista de atributos, los valores se almacenan de acuerdo al orden de definición de los mismos en el CREATE TABLE.
- Los tipos de la lista de valores deben coincidir con los tipos de definición en el CREATE TABLE.
MODIFICACIÓN DE DATOS
- Actualiza en la tabla indicada los valores del atributo siempre y cuando se cumpla la condición especificada.
- Los valores se pueden obtener mediante una subconsulta o mediante fórmulas matemáticas.
BORRADO DE DATOS
- Borra de la tabla las tuplas que cumplen cierta condición.
- A diferencia de DROP TABLE no borra la estructura de la tabla
Comparación
=, <>, <, >, <=, >=, IS NULL
Lógicos
AND, OR, NOT
Intervalos
BETWEEN ……AND
Cadenas de texto
LIKE
Conjuntos
IN
CREACIÓN DE OBJETOS: TABLAS
- Se utiliza el comando CREATE TABLE.
- Se especifican los atributos de la relación y sus tipos.
- Se especifica la clave primaria.
- Se especifica las restricciones de integridad.
- Se especifica la integridad referencial.
BORRADO DE TABLAS
- Si se utiliza CASCADE CONSTRAINT se elimina la tabla y todas sus restricciones.
- Si no se utiliza CASCADE CONSTRAINT, si la tabla tiene restricciones asociadas no se elimina, hasta que no se eliminen las restricciones.
- Al eliminar una tabla de la base de datos, también se eliminan los datos que tuviera almacenados.
MODIFICAR UNA TABLA
Añadir atributos.
- ADD nuevo_atributo tipo restricciones.
- Las restricciones sólo pueden ser NOT NULL, CHECK y DEFAULT.
- Un atributo NOT NULL sólo se puede añadir a una tabla si esta vacía.
Borrar atributos.
- DROP (nombre_atributo, …).
- DROP COLUMN nombre atributo [CASCADE CONSTRAINT].
Modificar atributos.
- MODIFY nombre_atributo nuevo_tipo restricciones.
- Se puede cambiar el tipo o disminuir el tamaño de un atributo si todas las tuplas tienen ese campo vacío.
- Un atributo existente se puede hacer NOT NULL si todas las tuplas tienen valor en ese atributo.
- Si no se especifica algo en la modificación, permanece como estaba.
INSERCIÓN DE DATOS
- Introduce información en la tabla y atributos indicados.
- El orden y el tipo de los atributos debe coincidir con el orden y tipo de los valores.
- Los valores se pueden obtener mediante una consulta.
- Si un atributo no se indica, toma valor NULL.
- Si se omite la lista de atributos, los valores se almacenan de acuerdo al orden de definición de los mismos en el CREATE TABLE.
- Los tipos de la lista de valores deben coincidir con los tipos de definición en el CREATE TABLE.
- ADD nuevo_atributo tipo restricciones.
- Las restricciones sólo pueden ser NOT NULL, CHECK y DEFAULT.
- Un atributo NOT NULL sólo se puede añadir a una tabla si esta vacía.
- DROP (nombre_atributo, …).
- DROP COLUMN nombre atributo [CASCADE CONSTRAINT].
- MODIFY nombre_atributo nuevo_tipo restricciones.
- Se puede cambiar el tipo o disminuir el tamaño de un atributo si todas las tuplas tienen ese campo vacío.
- Un atributo existente se puede hacer NOT NULL si todas las tuplas tienen valor en ese atributo.
- Si no se especifica algo en la modificación, permanece como estaba.
INSERCIÓN DE DATOS
MODIFICACIÓN DE DATOS
- Actualiza en la tabla indicada los valores del atributo siempre y cuando se cumpla la condición especificada.
- Los valores se pueden obtener mediante una subconsulta o mediante fórmulas matemáticas.
BORRADO DE DATOS
- Borra de la tabla las tuplas que cumplen cierta condición.
- A diferencia de DROP TABLE no borra la estructura de la tabla
CONSULTA DE DATOS
- Consulta valores de una o varias tablas de acuerdo a las condiciones impuestas en la sentencia.
- Las únicas partes obligatorias son SELECT y FROM
- En la cláusula SELECT se indican los atributos que se quieren obtener como respuesta a la consulta.
- La cláusula FROM indica la tabla o tablas que son necesarias para obtener la información.
- En la cláusula WHERE se indican las condiciones que deben cumplir las tuplas obtenidas como resultado de la consulta.
- GROUP BY se utiliza para formar grupos de datos en función de algún atributo.
- HAVING establece condiciones sobre los grupos que se formen.
- ORDER BY indica si muestra el resultado ordenado en función de algún atributo.
REUNIÓN (JOIN)
- No se realiza automaticamente.
- Hay que escribir la condición en la consulta.
- Si no se pone la condición de join, se obtiene el producto cartesiano (X).
Escritura de join:
- Las tablas tienen que estar relacionadas mediante claves foráneas (atributos comunes).
- Igualar los atributos comunes de las tablas participantes en la consulta.
AMBIGÜEDADES
REUNIÓN (JOIN)
- No se realiza automaticamente.
- Hay que escribir la condición en la consulta.
- Si no se pone la condición de join, se obtiene el producto cartesiano (X).
- Las tablas tienen que estar relacionadas mediante claves foráneas (atributos comunes).
- Igualar los atributos comunes de las tablas participantes en la consulta.
AMBIGÜEDADES
Cuando el mismo nombre de atributo aparece en más de una tabla:
- Hay que distinguir a que atributo se refiere.
- Se cualifica el atributo con el nombre de la tabla.
nombre_tabla.nombre_atributo
FUNCIONES DE AGREGACIÓN
Son funciones que toman una colección de valores como entrada y producen un único valor de salida.
COUNT(atributo)
- Devuelve el número de tuplas o valores especificados en una consulta para el atributo indicado.
- Se puede utilizar como atributo *.
SUM(atributo), MAX(atributo), MIN(atributo), AVG(atributo).
- Se aplican a valores numéricos y devuelven la suma, el máximo, mínimo y media de los atributos indicados.
- Se pueden utilizar en la cláusula SELECT o en el HAVING.
- En el SELECT no pueden aparecer otros atributos a menos que se incluyan en el GROUP BY.
SUBCONSULTAS
- En general se admiten varios niveles de anidación.
- Para evitar la ambigüedad los atributos sin cualificar siempre se referirán a las relaciones declaradas en la consulta más interna.
- Para evitar problemas es aconsejable cualificar los atributos y utilizar alias para las relaciones.
Operadores.-
EXISTS (subconsulta)
- Se utiliza para comprobar si el resultado de una consulta anidada es vacio.
- Devuelve true si la tabla no es vacía, en otro caso devuelve falso.
NOT EXISTS (subconsulta)
- Se utiliza para comprobar si el resultado de una consulta anidada no es vacio.
- Devuelve true si la tabla es vacía, en otro caso devuelve falso.
Atributo operador_comparación ALL (subconsulta)
- Se utiliza para comparar, mediante alguno de los operadores de comparación, si el valor de un atributo es mayor, menor, igual, … que todos los valores de un determinado conjunto de valores.
- La subconsulta debe devolver una lista de valores.
Atributo operador_comparación ANY (subconsulta)
- Es similar al operador ALL, lo único que lo diferencia es que el valor del atributo únicamente tiene que ser igual, menor, mayor, … que al menos uno de los valores del conjunto.
- La subconsulta debe devolver una lista de valores.
GROUP BY
- Se utiliza para formar agrupaciones de tuplas en función de los valores de uno o varios atributos.
- Se utiliza con funciones de agregación.
- No es necesario utilizar WHERE.
- Como resultado en el SELECT, sólo pueden aparecer funciones de agregación o los atributos que aparecen en GROUP BY.
HAVING
-
Se utiliza siempre con GROUP BY.
-
Impone condiciones sobre los grupos formados previamente en GROUP BY.
-
Las condiciones son similares a las utilizadas en WHERE, pero se pueden utilizar funciones de agregación.
-
Mientras que WHERE impone condiciones a las tuplas , HAVING impone condiciones los grupos.
ORDER BY
-
Permite que el usuario ordene el resultado de una consulta por los valores de uno o más atributos .
-
El orden puede ser ascendente (ASC) o descendente (DESC).
GRANT Y REVOKE
- La sentencia GRANT es usada para otorgar permisos a un usuario o rol.
- La sentencia REVOKE es usada para remover un permiso otorgado previamente para un usuario en la base de datos.
REFERENCIAS
- Marco Galarza C.. (29/05/2016). SQL. BASES DE DATOS I, 1, 50.
- Anónimo. (2006). Breve Historia SQL. 29/05/2016, de HTMLPOINT Sitio web: http://www.htmlpoint.com/sql/sql_04.htm
Cuando el mismo nombre de atributo aparece en más de una tabla:
- Hay que distinguir a que atributo se refiere.
- Se cualifica el atributo con el nombre de la tabla.
FUNCIONES DE AGREGACIÓN
Son funciones que toman una colección de valores como entrada y producen un único valor de salida.
COUNT(atributo)- Devuelve el número de tuplas o valores especificados en una consulta para el atributo indicado.
- Se puede utilizar como atributo *.
SUM(atributo), MAX(atributo), MIN(atributo), AVG(atributo).
- Se aplican a valores numéricos y devuelven la suma, el máximo, mínimo y media de los atributos indicados.
- Se pueden utilizar en la cláusula SELECT o en el HAVING.
- En el SELECT no pueden aparecer otros atributos a menos que se incluyan en el GROUP BY.
SUBCONSULTAS
- En general se admiten varios niveles de anidación.
- Para evitar la ambigüedad los atributos sin cualificar siempre se referirán a las relaciones declaradas en la consulta más interna.
- Para evitar problemas es aconsejable cualificar los atributos y utilizar alias para las relaciones.
Operadores.-
EXISTS (subconsulta)
- Se utiliza para comprobar si el resultado de una consulta anidada es vacio.
- Devuelve true si la tabla no es vacía, en otro caso devuelve falso.
NOT EXISTS (subconsulta)
- Se utiliza para comprobar si el resultado de una consulta anidada no es vacio.
- Devuelve true si la tabla es vacía, en otro caso devuelve falso.
Atributo operador_comparación ALL (subconsulta)
- Se utiliza para comparar, mediante alguno de los operadores de comparación, si el valor de un atributo es mayor, menor, igual, … que todos los valores de un determinado conjunto de valores.
- La subconsulta debe devolver una lista de valores.
Atributo operador_comparación ANY (subconsulta)
- Es similar al operador ALL, lo único que lo diferencia es que el valor del atributo únicamente tiene que ser igual, menor, mayor, … que al menos uno de los valores del conjunto.
- La subconsulta debe devolver una lista de valores.
GROUP BY
- Se utiliza para formar agrupaciones de tuplas en función de los valores de uno o varios atributos.
- Se utiliza con funciones de agregación.
- No es necesario utilizar WHERE.
- Como resultado en el SELECT, sólo pueden aparecer funciones de agregación o los atributos que aparecen en GROUP BY.
HAVING
- Se utiliza siempre con GROUP BY.
- Impone condiciones sobre los grupos formados previamente en GROUP BY.
- Las condiciones son similares a las utilizadas en WHERE, pero se pueden utilizar funciones de agregación.
- Mientras que WHERE impone condiciones a las tuplas , HAVING impone condiciones los grupos.
ORDER BY
- Permite que el usuario ordene el resultado de una consulta por los valores de uno o más atributos .
- El orden puede ser ascendente (ASC) o descendente (DESC).
GRANT Y REVOKE
- La sentencia GRANT es usada para otorgar permisos a un usuario o rol.
- La sentencia REVOKE es usada para remover un permiso otorgado previamente para un usuario en la base de datos.
REFERENCIAS
- Marco Galarza C.. (29/05/2016). SQL. BASES DE DATOS I, 1, 50.
- Anónimo. (2006). Breve Historia SQL. 29/05/2016, de HTMLPOINT Sitio web: http://www.htmlpoint.com/sql/sql_04.htm