Lenguaje SQL: El Lenguaje Estándar de las Bases de Datos Relacionales

in #stem-espanol6 years ago (edited)

IBM desarrolló la versión original de SQL, el cual fue nombrado originalmente como Sequel como parte del proyecto System R a principios de 1970. El lenguaje Sequel fue evolucionando desde entonces y su nombre pasó a ser SQL (Structured Query Language, lenguaje estructurado de consultas). A día de hoy muchos productos son compatibles con el lenguaje SQL y se ha convertido en el lenguaje estándar de las bases de datos relacionales.

El SQL está conformado por un amplio espectro de comandos y está diseñado para manejar datos almacenados en las tablas de una base de datos. Según su configuración, se denomina como un lenguaje no procedimental ya que el usuario sólo especifica los datos que deben extraerse pero no la manera en la que estos deben ser manipulados. Este lenguaje tiene dos calificaciones:

  1. El DLL2 donde el usuario define los datos que van a manipularse.
  2. La DML donde el usuario manipula los datos que están almacenados.

Componentes del lenguaje SQL

  • Lenguaje de definición de datos (LDD): 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 (LMD): Incluye un lenguaje de consultas que se basa tanto en el álgebra relacional como en el cálculo relacional de tuplas. Contiene comandos para insertar, borrar y modificar tuplas.
  • Integridad: El LDD de SQL incluye comandos que permiten especificar las restricciones de integridad que deben cumplir los datos almacenados en la base de datos. Las actualizaciones que violan las restricciones de integridad son rechazadas.
  • Definición de vistas: El LDD de SQL incluye comandos para la definición de vistas.
  • Control de transacciones: SQL incluye comandos que se usan para especificar el comienzo y final de las transacciones.
  • SQL incorporado y SQL dinámico: Definen cómo se pueden incorporar instrucciones de SQL en lenguajes de programación de propósito general como C, C++, Java, PL/I, Cobol, Pascal y Fortran.
  • Autorización: El LDD de SQL incluye comandos para especificar los derechos de acceso a las relaciones y las vistas.

Definición de Datos

El conjunto de relaciones de cada base de datos debe especificarse en el sistema en términos de  un lenguaje de definición de datos (LDD). El LDD de SQL no sólo permite especificar un conjunto de relaciones, sino también de la información relativa a esas relaciones, incluyendo:

  • El esquema de cada relación.
  • El dominio de valores asociado a cada atributo.
  • Las restricciones de integridad.
  • El conjunto de índices que se deben mantener para cada relación.
  • La información de seguridad y autorización de cada relación.
  • La estructura de almacenamiento físico de cada relación en el disco.

Tipos Básicos de Dominio

La norma SQL soporta una gran variedad de tipos de dominio, entre ellos tenemos:

  • char(n): Una cadena de caracteres de longitud fija, con una longitud n que es definida por el usuario. También podemos usar la palabra completa character.
  • varchar(n): Es una cadena de caracteres de longitud variable con una longitud máxima n que es especificada por el usuario. Se puede usar la palabra completa character varying.
  • int: Un entero (un subconjunto finito de enteros dependiente de la máquina). Se puede usar la palabra completa integer.
  • smallint: Un entero pequeño (un subconjunto dependiente de la máquina del tipo de dominio entero).
  • numeric(p,d): Un número de coma fija, cuya precisión es definida por el usuario. El número está formado por p dígitos (más el signo), y de estos p dígitos, d pertenecen a la parte decimal.
  • real, double precision: Números de coma flotante y números de coma flotante de doble precisión, con precisión dependiente de la máquina.
  • float(n): Un número de coma flotante cuya precisión es, al menos, de n dígitos.

Definición Básica de Esquemas en SQL

Las relaciones se definen por medio del comando create table:

Donde r es el nombre de la relación, cada Ai es el nombre de un atributo del esquema de la relación r y Di es el tipo de dominio de los valores del dominio del atributo Ai. Hay varias restricciones de integridad válidas.

En este apartado sólo se estudiarán las de clave primaria (primary key), que adopta la forma:

  • primary key (Aj1, Aj2, ..., Ajm). La especificación de clave primaria determina que los atributos Aj1, Aj2, ..., Ajm forman la clave primaria de la relación. Los atributos de la clave primaria tienen que ser no nulos y únicos; es decir, ninguna tupla puede tener un valor nulo para un atributo de la clave primaria y ningún par de tuplas de la relación puede ser igual en todos los atributos de la clave primaria1. Aunque la especificación de clave primaria es opcional, suele ser una buena idea especificar una clave primaria para cada relación.
La clave primaria es aquella que selecciona el administrador de la base de datos para identificar univocamente los registros. Una base de datos puede tener muchas claves primarias pero sólo pueda haber una clave primaria por tabla. En algunos casos una tabla puede poseer un conjunto de atributos que identifican sin ambigüedad los registros de una tabla y se les denominan claves candidatas. De esos atributos el administrador de base de datos puede elegir cual de estos atributos sería la clave primaria, y al seleccionarla el resto de los atributos que identifican sin ambigüedad los registros de la tabla se denominan claves secundarias.

Figura 1. Definición de la tabla Autor para parte de la base de datos de una biblioteca.Fuente Propia

Aquí podemos notar que esta tabla contiene 3 atributos de los cuales el id_autor es el atributo que identifica sin ambigüedades los registros de una tabla, es decir, que lo representa univocamente por lo tanto se selecciona como la llave primaria.

Si una tupla recién insertada o recién modificada de una relación contiene valores nulos para cualquierade los atributos que forman parte de la clave primaria, o si tiene el mismo valor en ellos que otra tupla de la relación, SQL notifica el error e impide la actualización.

Las relaciones recién creadas están inicialmente vacías. Se utiliza el comando insert para añadir datos a la relación. Por ejemplo, si queremos añadir los datos de un autor en su tabla correspondiente debemos escribir lo siguiente:

Figura 2. Inserción de datos en la tabla autor.Fuente Propia

Los valores se especifican en el orden en que se relacionan los atributos correspondientes en el esquema de la relación. Los datos que son tipo char son escritos dentro de comillas simples (' ').

Se puede utilizar el comando delete para borrar tuplas de una relación. El comando

delete from autor

Esto borraría todas las tuplas de la relación cuenta. Otras formas del comando delete permiten borrar sólo tuplas concretas. Para eliminar una relación de una base de datos SQL se utiliza el comando drop table. Este comando elimina de la base de datos toda la información de la relación. La instrucción drop table r es una acción más drástica que delete from r.

La última conserva la relación r, pero borra todas sus tuplas. La primera no sólo borra todas las tuplas de la relación r, sino que también elimina su esquema. Una vez eliminada r, no se puede insertar ninguna tupla en dicha relación, a menos que se vuelva a crear con la instrucción create table.

El comando alter table se utiliza para añadir atributos a una relación existente. Se asigna a todas las tuplas de la relación un valor nulo como valor del atributo nuevo. La forma del comando alter table es 

alter table r add A D

donde r es el nombre de una relación ya existente, A es el nombre del atributo que se desea añadir y D es el dominio del atributo añadido. Se pueden eliminar atributos de una relación utilizando el comando

alter table r drop A

donde r es el nombre de una relación ya existente y A es el nombre de un atributo de la relación. Muchos sistemas de bases de datos no permiten el borrado de atributos, aunque sí permiten el borrado de tablas completas.

Estructura básicas de las consultas SQL

Las bases de datos relacionales están formadas por un conjunto de relaciones (tablas), a las cuales se le asigna un nombre único. Cada relación permite el uso de valores nulos para indicar que el valor es desconocido o no existe. También permite al usuario especificar los atributos que no pueden contener valores nulos. La estructura básica de una expresión SQL consta de tres cláusulas: select, from y where.

  • La cláusula select se corresponde con la operación proyección del álgebra relacional. Es usada para obtener una relación de los atributos deseados en el resultado de una consulta.
  • La cláusula from se corresponde con la operación producto cartesiano del álgebra relacional. Genera una lista de las relaciones que deben ser analizadas en la evaluación de la expresión.
  • La cláusula where se corresponde con el predicado selección del álgebra relacional. Es un predicado que engloba a los atributos de las relaciones que aparecen en la cláusula from.

A continuación se explicará de una mejor forma estas 3 cláusulas:

La cláusula Select:

La cláusula select consiste en recuperar un conjunto de tuplas de una relación que cumpla una condición dada. El resultado de las consultas SQL es una relación. Consideremos la consulta simple basada en el ejemplo de la biblioteca “Obtener el nombre de todos los autores de la relación autor”:

En esta consulta estamos buscando los registros de un atributo específico, si quisiéramos buscar los registros de todos los atributos de la tabla pondríamos después del select un asterisco (*).

A continuación les presentaré un ejemplo de esta consulta con una base de datos que hice para mi proyecto final de esta materia, se trata de una base de datos de una biblioteca:

Figura 3. Registros del atributo nombre de la tabla autor.Fuente Propia

La cláusula from:

La cláusula from define por sí misma un producto cartesiano de las relaciones que aparecen en la cláusula. Dado que la reunión natural se define en términos de un producto cartesiano, una selección y una proyección, resulta relativamente sencillo escribir una expresión de SQL para la reunión natural.

La cláusula Where:

Consideremos la consulta “Obtener todos los nombres de los autores cuyo nombre sea 'Alejandro' ”. Esta consulta puede escribirse en SQL como:

SQL usa las conectivas lógicas and, or y not (en lugar de los símbolos matemáticos ^, V y ~:) en la cláusula where. Los operandos de las conectivas lógicas pueden ser expresiones que contengan los operadores de comparación <, <=, >, >=, = y <>. SQL permite utilizar los operadores de comparación para comparar cadenas y expresiones aritméticas, así como tipos especiales, como los tipos de fecha. SQL incluye también un operador de comparación between para simplificar las cláusulas where, el cual especifica que un valor sea menor o igual que un valor y mayor o igual que otro valor.

A continuación se presenta un ejemplo de estas condiciones:

Figura 4. Uso de between.Fuente Propia
Como podemos observar estamos mostrando todos los datos de los registros mientras que el id_autor esté entre 15 y 26.

Fuente de las Imágenes: A B C

Referencias Bibliográficas:

  1. Libro: Fundamentos de Base de Datos 5ta Edición. ABRAHAM SILBERSCHATZ, HENRY F. KORTH, S. SUDARSHAN.
  2. Libro: Introducción al SQL Teoría y Práctica. Olinto Rodríguez.

Espero que hayan disfrutado del contenido, pronto publicaré la segunda parte. Hasta la próxima.

Sort:  

Buen post, el SQL es el estándar de las bases de datos relacionales y lo bueno es que conociéndolo podemos trabajar con casi todos los manejadores de bases de datos, por lo cual su aprendizaje es altamente recomendado para los que estamos interesados en desarrollar sistemas de información.

Muchas gracias por el comentario, llevo poco tiempo usando el lenguaje pero desde que empece a aprenderlo me engancho, me gusta mucho. Saludos.

Muy completo el post, la verdad es que había experimentado con esta herramienta pero muy por encimita, voy a investigar más acerca de ello , pero estos tipos de post valen la pena te felicito por ello.

Muchas gracias @greylml me alegra que te haya gustado el contenido, este tema a mi me resulta muy fascinante y me gusta mucho, espero que también puedas aprender mucho sobre esto, un saludo.

Coin Marketplace

STEEM 0.28
TRX 0.13
JST 0.032
BTC 66304.34
ETH 2983.64
USDT 1.00
SBD 3.68