Revista Tecnología

#Curso de SQL: Introducción al SQL y las Bases de Datos Relacionales

Publicado el 05 abril 2018 por Instintobinario

Cuando se lleva un tiempo sin trabajar con un lenguaje de programación, es fácil olvidar cómo se utiliza. Eso es precisamente lo que me ha pasado a mí con el SQL. Llevo un tiempo que no lo utilizo de forma intensiva. Y por eso he olvidado muchas funciones no tan básicas que dotan a este lenguaje de gran flexibilidad y usabilidad. Por éste motivo, comienzo hoy una serie de artículos que formarán un curso lo más completo posible de SQL para Oracle.

SQL significa Structured Query Languaje, o Lenguaje de Consultas Estructuradas. Es el lenguaje estandarizado para el acceso y manipulación de los datos de las base de datos. Se trata de un lenguaje sencillo en apariencia, pero de gran potencia. Mediante las sentencias de éste lenguaje, podemos hacer todo lo necesario en la gestión se éstas: extracción de datos con filtros, modificar y eliminar datos, creación de tablas, restricciones en el tipo de datos a guardar, etc.

SQL es un estándar de la ANSI. Sin embargo, la mayoría de los RDBMS (Sistemas de Gestión de Bases de Datos Relacionales), hacen una interpretación del mismo. De ésta forma se crean diversas versiones, cada cual con pequeñas particularidades y sus propias extensiones. Sin embargo todas soportan los comandos básicos de forma muy similar.

En mi caso me voy a centrar, como he dicho, en el sistema de Oracle. Ese es el sistema con el que más he trabajado y con el que trabajo actualmente, ese es el motivo. Sin embargo, haré apuntes sobre la sintaxis en algunos de los otros gestores, al menos en lo más relevante.

Estructura de la base de datos relacional

Lo primero que hay que comprender es las estructuras sobre las que trabajaremos con SQL. Éste lenguaje trabaja sobre bases de datos relacionales. La idea fundamental del modelo relacional de bases de datos es el uso de relaciones.

En éste modelo tenemos una o más tablas, identificadas por un nombre. Dichas tablas están compuestas por columnas (o campos) que definen el tipo de datos que se guarda. Así mismo las tablas tienen un conjunto de filas (o tuplas) que son los datos guardados en la misma.

Veamos un ejemplo de una tabla “Cliente”:

Id DNI Nombre Apellidos Telefono Ciudad

1 11111111A Juan Pérez Mora 111111111 Madrid

2 22222222B Isabel Jimeno Hoyo 222222222 Madrid

3 33333333C Patricia Rodriguez Denia 333333333 Valladolid

En ésta tabla se puede observar que de un cliente se guardan los datos: ‘DNI’, ‘Nombre’, ‘Apellidos’, ‘Teléfono’ y ‘Ciudad’. El ‘Id’ es un dato para la gestión interna de la base de datos. Por supuesto podemos guardas muchos más datos de un cliente, en cada caso se detallarán los

Dichas tablas están relacionadas entre sí mediante los campos ‘Id’, también llamado clave primaria (pk). Así por ejemplo, un cliente puede tener una dirección, la cual estará compuesta por diferentes campos: calle, número, localidad, etc. Para que la tabla ‘Cliente’ no sea un caos, se crea una nueva tabla ‘Dirección’ con todos los campos necesarios. En la tabla ‘Cliente’ se añadirá únicamente un campo ‘Id_Direccion’ o ‘fkDireccion’ (foreign key o clave externa). En dicho campo se introduce el número que corresponda con el Id de la Dirección. Quedando así ésta asignada a dicho cliente.

Cuando explique el modelo de relacional, daré más detalles y buenas prácticas. Por ahora quédate con ésta mecánica de primary key y foreign key.

Bases del Lenguaje de manipulación de datos de SQL (DML)

El lenguaje SQL puede ser dividido en dos sub-lenguajes: DDL (Data Definition Language) y DML (Data Manipulation Language). Cada uno de ellos hace una función diferente, pero funcionan juntos en la gestión de una base de datos. El DDL contiene todos los comandos utilizados para la creación, edición y destrucción de bases de datos y sus objetos. Por su parte, el DML contiene los comandos para la gestión de los datos contenidos en la misma.

En éste caso voy a comenzar por el DML, ya que se trata de los comandos más sencillos y básicos. Más adelante, en otros artículos nos iremos introduciendo en la creación de bases de datos. Por el momento supondré que existe una base de datos creada y con datos y solo vamos a jugar con estos. Dejaré un script al final del artículo, para que se puedas practicar todos los comandos.

Antes de comenzar es muy importante señalar que todas las palabras clave del lenguaje SQL no son sensibles a las mayúsculas. Esto quiere decir que da lo mismo escribir ‘SELECT’, ‘select’ o ‘Select’. Para dar mayor claridad, escribiré las palabras clave de SQL en mayúsculas siempre.

Cuando hablemos de comandos nos referimos a las palabras clave que indican a SQL una opción. Las sentencias, por su parte se refieren a una acción completa de SQL. Es fácil distinguir entre varias sentencias, ya que en SQL, éstas finalizan siempre con ‘;’.

SELECT

El comando SELECT es el más básico de todos. Se utiliza para seleccionar o extraer datos almacenados en la base de datos. La forma más básica de uso es la siguiente:

SELECT * FROM Cliente;

En ésta consulta indicamos que queremos seleccionar todas las columnas (*) de la tabla ‘Cliente’. Pero puede que solo nos interesen algunos de los datos, por ejemplo una lista del nombre y apellidos de todos los clientes registrados en la base de datos. Para ello podemos hacer lo siguiente:

SELECT Nombre, Apellidos FROM Cliente;

Avancemos un poco más. Imagina que quieres conocer todas las ciudades donde tienes clientes. Lógicamente, para ello usaremos la sentencia:

SELECT Ciudad FROM Cliente;

Lo malo es que, si hay dos clientes de la ciudad “Madrid”, vamos a recibir dos veces dicha ciudad, lo que no nos interesa. Para evitarlo, utilizamos el comando DISTINCT de la siguiente forma:

SELECT DISTINCT Ciudad FROM Cliente;

De esta forma obtenemos una lista de las ciudades donde tenemos clientes sin repetir ninguna.

Por último, podemos filtrar los resultados de una tabla mediante el comando WHERE. Con este comando podemos poner una o varias condiciones lógicas para seleccionar los datos según las mismas. Así, para obtener los clientes de “Madrid” utilizamos la siguiente sentencia:

SELECT * FROM Cliente WHERE Ciudad='Madrid';

Podemos utilizar los operadores lógicos típicos de los lenguajes de programación, como AND, OR y NOT. Veamos varios ejemplos, no los voy a explicar en detalle, si existe alguna duda se puede preguntar en los comentarios:

  • Seleccionar los clientes de “Madrid” o de “Sevilla”:
SELECT * FROM Cliente WHERE Ciudad='Madrid' OR Ciudad='Sevilla';
  • Seleccionar los clientes de “Madrid”, que se llamen “Juan”:
SELECT * FROM Cliente WHERE Ciudad='Madrid' AND Nombre='Juan';
  • Seleccionar los clientes que no sean de “Madrid”:
SELECT * FROM Cliente WHERE NOT Ciudad='Madrid';

En futuros artículos veremos más posibilidades del comando SELECT con las diversas opciones de WHERE. Existen multitud de opciones y no podemos abarcarlas todas de una vez, por el momento procura dominar lo que he explicado aquí para poder avanzar.

UPDATE

El comando UPDATE se utiliza para modificar registros existentes en la base de datos. Lo podemos usar de forma básica como sigue:

UPDATE Cliente SET Telefono='123456789';

Esta sentencia actualiza el campo “Teléfono” de la tabla “Cliente” al valor indicado (en este caso “123456789”). El problema es que lo hace para todas las filas, lo que no es muy lógico. Al igual que pasa con el comando SELECT, en UPDATE también podemos utilizar WHERE para filtrar las filas:

UPDATE Cliente SET Telefono='123456789' WHERE Nombre='Juan' AND Apellidos='Pérez Mora';

Lo normal aquí sería utilizar un identificador único, como el DNI o el Id, pero aquí he utilizado el nombre y los apellidos en combinación.

DELETE

El comando DELETE se utiliza para eliminar registros existentes de la base de datos. Así si ejecutamos la siguiente sentencia, vamos a eliminar todos los datos de la tabla Cliente. La tabla no será eliminada pero no contendrá dato alguno.

DELETE FROM Cliente;

Para evitar que esto pase, utilizamos, nuevamente, el comando WHERE. Así podemos establecer un filtro que nos permita eliminar solo lo que deseamos. Por ejemplo, si la empresa cierra la sede de Zamora, podemos eliminar todos los clientes de esta ciudad de la siguiente forma:

DELETE FROM Cliente WHERE Ciudad='Zamora';

Hay que tener mucho cuidado con este comando, pues se han perdido muchos datos por olvidar escribir la sentencia WHERE. Si escribimos ‘;’ entre DELETE y su sentencia WHERE, se ejecutará el primero antes de comprobar las condiciones, por lo que es el mismo resultado. No hay que preocuparse mucho por escribir mal los datos. Por ejemplo, si escribimos “Zamroa”, no encontrará ningún cliente con dicha ciudad, por lo que no se eliminará nada.

Probando los ejemplos de código de éste artículo

Para probar los ejemplos de código y experimentar con las consultas puedes ir al siguiente enlace:

http://sqlfiddle.com/#!4/6c02a

En caso de estar en blanco el cuadro de texto sobre el botón “Build Schema”, pegar el siguiente código y pulsar sobre dicho botón.

CREATE TABLE Cliente (
Id int,
Dni varchar(9),
Nombre varchar(255),
Apellidos varchar(255),
Telefono varchar (255),
Ciudad varchar (255)
);


INSERT INTO Cliente(Id, Dni, Nombre, Apellidos, Telefono, Ciudad)
VALUES (1,'11111111A', 'Juan', 'Pérez Mora', '111111111', 'Madrid');

INSERT INTO Cliente(Id, Dni, Nombre, Apellidos, Telefono, Ciudad)
VALUES (2,'22222222B', 'Isabel', 'Jimeno Hoyo', '22222222', 'Madrid');

INSERT INTO Cliente(Id, Dni, Nombre, Apellidos, Telefono, Ciudad)
VALUES (3,'33333333C', 'Patricia', 'Rodriguez Denia', '333333333', 'Valladolid');

INSERT INTO Cliente(Id, Dni, Nombre, Apellidos, Telefono, Ciudad)
VALUES (4,'44444444D', 'Mario', 'Fernandez Bosque', '444444444', 'Zamora');

INSERT INTO Cliente(Id, Dni, Nombre, Apellidos, Telefono, Ciudad)
VALUES (5,'55555555E', 'Lucia', 'Cobo Valero', '555555555', 'Santander');

INSERT INTO Cliente(Id, Dni, Nombre, Apellidos, Telefono, Ciudad)
VALUES (6,'66666666F', 'Clarise', 'Dupon', '666666666', 'Sevilla');

INSERT INTO Cliente(Id, Dni, Nombre, Apellidos, Telefono, Ciudad)
VALUES (7,'77777777G', 'Guillermo', 'Tuy Higuera', '777777777', 'Zamora');

INSERT INTO Cliente(Id, Dni, Nombre, Apellidos, Telefono, Ciudad)
VALUES (8,'88888888H', 'Juan', 'Dima Niquel', '888888888', 'Madrid');

En el recuadro de la derecha se escriben las consultas y se ejecutan pulsando sobre “Run SQL”. En la parte inferior se mostrarán los resultados de la ejecución de la consulta. Para ver la diferencia pulsa sobre después de las sentencias UPDATE o DELETE, ejecuta la sentencia:

SELECT * FROM Cliente;

El artículo #Curso de SQL: Introducción al SQL y las Bases de Datos Relacionales apareció por primera vez en Instinto Binario.


Volver a la Portada de Logo Paperblog

Revista