Saltar la navegación

5. Herramienta en mano: el equipo implementa

Rétor dice:¡El equipo continúa avanzando en su desarrollo software!
En todo el recorrido por el recurso hasta ahora hemos superado con éxito las dos primeras fases de desarrollo de nuestro proyecto software, y ahora afrontamos la siguiente fase: La Implementación.
El equipo ha recopilado toda la información de lo que el cliente necesita, ha especificado los requisitos y ha realizado un diseño de la estructura que soportará los datos. Es la hora de meterse de lleno en el código de la programación.
En esta sección, por tanto, aprenderás un nuevo lenguaje de programación. Un lenguaje para la creación y manejo de bases de datos relacionales llamado SQL. No te preocupes por la complejidad, tienes a tu disposición a todo el equipo y el apoyo del profesorado para salir triunfante.

1. El superpoder resolutivo: la lógica del equipo

Imagen que muestra la pantalla de un ordenador con distintas operaciones de codificación en un lenguaje de programación a su alrededor.En esta nueva fase hay que elegir las herramientas adecuadas: un entorno de desarrollo que facilite el trabajo y un lenguaje de programación apropiado para el tipo de software a construir. Esta elección dependerá tanto de las decisiones de diseño tomadas como del entorno en el que el software deba funcionar.
El lenguaje con el que crearás la base de datos debe permitir obtener informaciones de todas las tablas creando para ello las relaciones necesarias entre ellas.

Para entender mejor cómo este lenguaje debe combinar los datos a la hora de recorrer las diferentes tablas, os proponemos primero crear las instrucciones en nuestro lenguaje natural, explicando de manera lógica lo que necesitáis para dar respuesta a las preguntas planteadas sobre la siguiente base datos: el sistema de gestión de alquileres de películas en un videoclub. Observad las tablas que componen esta base de datos:

Películas

Película Título Tema Año País Precio
1 Two Much Comedia 1995 España 3
2 Tesis Suspense 1996 España 3
3 Desperado Acción 1995 EEUU 3,5
4 Una casa de locos Comedia 2002 Francia 4
5 Apolo 13 Historia 1995 EEUU 2,5

Clientes

Socio Nombre Fecha_alta Telefono DNI Direccion
1 María López Perdigón 14/09/2014 685369896 27711498D Granada, 12 2ºA
2 Pedro Ramos Lucena 13/10/2017 954236742 27148934G Albricias, 23 2ºB
3 Lucas Dobla Marcial 02/12/2015 723568974 23451267Q Miraduero, 46
4 Lucía Cabrera Pérez 24/02/2018 677158523 28565225C Avda. El Puerto, 9, 7ºA

Alquiler

Socio Película Fecha_alquiler Fecha_devolucion
4 Desperado 15/07/2020 16/07/2020
1 Two Much 23/04/2022 26/04/2022
3 Apolo 13 03/11/2022
2 Tesis 07/08/2021 09/08/2021

A continuación debéis trabajar estas tablas en el grupo y anotar los pasos concretos que daríais para dar solución a las siguientes consultas:

  1. ¿En qué orden crearíais las tablas en la base de datos?
  2. ¿Por qué es necesario seguir el orden de creación de las tablas para la inserción de los datos en las tablas?
  3. Explicad qué relaciones existentes entre las tablas utilizaríais para obtener:
    1. Consultar los préstamos que han tenido una duración superior a dos días, visualizando el nombre del socio y el título de la película.
    2. Mostrar el nombre y el número de teléfono de socios que tienen películas en su casa.
    3. Cuánto dinero ha gastado María López Perdigón en el videoclub.

Explicadlo paso a paso en el grupo clase.

2. Para definir una buena solución

Las dos ramas de SQL que vamos a ver: DDL y DMLEl lenguaje SQL está compuesto por elementos que se combinan en las instrucciones para crear, actualizar y manipular las bases de datos. Vamos a ver que el propio lenguaje nos aporta tipos de comandos concretos según la operación a realizar.

Existen dos tipos de comandos SQL:

  • Los DLL que permiten crear y definir nuevas bases de datos, campos e índices.
  • Los DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos.

Comenzamos por las operaciones del Lenguaje de Definición de Datos (DDL), que permiten crear y definir nuevas bases de datos, campos e índices. ¡Conócelos!

CREATE

Las sentencias del DDL utilizan unos verbos que se repiten para los distintos objetos. Por ejemplo para crear un objeto nuevo el verbo será CREATE y a continuación el tipo de objeto a crear.

CREAR LA BASE DE DATOS

Al crear una base de datos sólo hay que darle un nombre, Los nombres de base de datos deben ser únicos y tendrán 128 caracteres máximo.

SINTAXIS

CREATE DATABASE nombre_base_de_datos;

EJEMPLO

CREATE DATABASE clientesDeEmpresa;

CREAR TABLAS

Al crear una tabla también lo hacemos dándole un nombre. Se crea en la base de datos actual y ocurre un error si la tabla existe o si la base de datos no existe.
SINTAXIS

CREATE TABLE nombre_tabla
("columna 1" "tipo_de_datos_para_columna_1",
"columna 2" "tipo_de_datos_para_columna_2",
... ,
[parámetros de la tabla]);
EJEMPLO
CREATE TABLE CLIENTE (
DNI VARCHAR2(10),
NOMBRE VARCHAR2(20),
FECHA_NAC DATE NOT NULL,
TFNO VARCHAR2(10),
APELLIDOS VARCHAR2(100),
CONSTRAINT CLIENTE_PK PRIMARY KEY (DNI)
)

DROP

Para eliminar un objeto utilizaremos el verbo DROP (DROP TABLE, DROP INDEX…).

BORRAR LA BASE DE DATOS

DROP DATABASE borra todas las tablas en la base de datos y borra la base de datos. Hay que ser muy cuidadoso con este comando. Retorna el número de tablas que se eliminan. El comando borra del directorio de base de datos los ficheros y directorios que se crean durante operaciones normales.

SINTAXIS

DROP DATABASE [IF EXISTS] db_name;

EJEMPLO

DROP DATABASE IF EXISTS mi_vieja_base_de_datos;

BORRAR TABLAS

Con el comando de borrado se pueden borrar una o más tablas. DROP TABLE no puede utilizarse para eliminar una tabla a la que se hace referencia en una restricción FOREIGN KEY (clave ajena). Primero habrá que eliminar la restricción FOREIGN KEY de la tabla a la que se hace referencia.

SINTAXIS

DROP TABLE nombre_de_la_tabla;
EJEMPLO
Si deseamos eliminar una tabla denominada cliente 
que creamospreviamente, simplemente ejecutamos:
DROP TABLE Cliente;

ALTER

La sentencia SQL ALTER se utiliza para añadir, eliminar o modificar columnas de una tabla.

SINTAXIS

A. Sintaxis para agregar una columna:

ALTER TABLE nombretabla
ADD nombrecolumna tipodatocolumna;

B. Sintaxis para eliminar una columna de una tabla:

ALTER TABLE nombretabla
DROP COLUMN nombrecolumna;

C. Sintaxis para modificar el tipo de dato de una columna de una tabla:

ALTER TABLE nombretabla
ALTER COLUMN nombrecolumna tipodatocolumna;

EJEMPLOS

A. Dada la tabla personas, queremos añadir una nueva columna, denominada fechadenacimiento:

ALTER TABLE personas
ADD fechadenacimiento date;

B. Dada la tabla personas, queremos borrar la columna, denominada fechadenacimiento:

ALTER TABLE personas
DROP COLUMN fechadenacimiento;

C. Si queremos modificar el tipo de dato de la columna fecha, y ponerle tipo year en lugar de tipo date:

ALTER TABLE personas
ALTER COLUMN fechadenacimiento year ;

Data Definition Language, en inglés. Incluye órdenes para definir, modificar o borrar las tablas en las que se almacenan los datos y las relaciones entre estas.

Para los diferentes tipos de datos que podrás usar en SQL puedes consultar los existentes aquí:

Tipos de datos.

Lumen dice Algunos ejemplos

Aquí puedes ver algunos ejemplos más:

Imagen animada donde se pueden ver algunos ejemplos más del uso de CREATE, DROP y ALTER.

Lectura facilitada

En esta imagen podemos ver los comandos DDL: CREATE, DROP y ALTER. Se especifica que para la funcionalidad de creación se usa CREATE DATABASE o CREATE TABLE, para la funcionalidad de modificación se usa ALTER TABLE, ALTER COLUMN y para la funcionalidad de borrado se usa DROP TABLE, DROP DATABASE.

En el ejemplo 1 encontramos los comandos:
CREATE TABLE gente
(Cedula CHAR(8) PRIMARY KEY,
Nombre VARCHAR(20) NOT NULL,
Apellidos VARCHAR(20) NOT NULL)

ALTER TABLE Gente ADD (Edad NUMBER(2));
ALTER TABLE Gente DROP (Edad);

DROP TABLE Gente;


En el ejemplo 2 encontramos los comandos:
CREATE TABLE CLIENTE(
DNI VARCHAR2(10),
&INOMBRE VARCHAR2(20),
FECHA_NAC DATE NOT NULL,
TFNO VARCHAR2(10),
APELLIDOS VARCHAR2(100),
CONSTRAINT CLIENTE_PK PRIMARY KEY (DNI)
);

CREATE DATABASE mibasededatos

En el ejemplo 3 encontramos los comandos para el ejemplo ya trabajado en las pestañas.

Kardia dice Para saber más...

Debes saber que:

1. Una sentencia SQL es como una frase (escrita en inglés ) con la que decimos lo que queremos obtener y de dónde obtenerlo. Todas las sentencias empiezan con un verbo (palabra reservada que indica la acción a realizar), seguido del resto de opciones, algunas obligatorias y otras opcionales que completan la frase.

2. Otros comandos, además de los vistos son:

  • SHOW TABLES: mostrar tablas.
  • DESCRIBE para mostrar estructura de una tabla.
  • Habrás visto que existen, además, algunos comandos que hemos usado en los ejemplos, como:
    • CONSTRAINT: se usa en las instrucciones ALTER TABLE y CREATE TABLE para crear o eliminar restricciones.
    • FOREIGN KEY: identifica una columna o varias columnas, que sirven para señalar cuál es la llave primaria de otra tabla.

Algunos enlaces recomendados para consultar comandos y su uso son:

3. Un equipo manipulador...de datos

Iconos de los comandos DML usados en SQL: SELECT, INSERT, UPDATE, DELETEVamos a conocer ahora las instrucciones de SQL dedicadas a llevar a cabo las tareas de consulta o modificación de los datos contenidos en las Bases de Datos. Estos comandos forman parte del llamado Lenguaje de Manipulación de Datos (DML). A continuación tienes los cuatro comandos básicos del DML, verás que con ellos puedes obtener o actualizar todos los datos que desees en la base de datos:

SELECT

¿Para qué solemos utillizar los comandos SQL? El uso más común es la selección de datos de las tablas en las que se encuentran. La gran mayoría de operaciones que realizamos en una base de datos comienzan con una consulta. Las dos palabras claves que necesitaremos para ello son SELECT y FROM.

La estructura SQL básica para la consulta es:

SELECT "nombre_columna" FROM "nombre_tabla";

EJEMPLO

Para comprobar el funcionamiento del comando utilizaremos la siguiente tabla que representa la transmisión a la central de las ventas de un producto en sus sucursales:

info_ventas
ciudad ventas fecha_txn
Huelva 250 05/01/2022
Córdoba 1500 14/01/2022
Jaén 300 07/01/2022
Almería 700 10/01/2022
SELECT ciudad FROM info_ventas;

RESULTADO

Tras ejecutar el comando anterior obtendremos:

ciudad
Huelva
Córdoba
Jaén
Almería

AMPLIACIÓN

Junto al comando SELECT suele utilizarse la cláusula opcional WHERE. Aunque es opcional, nos resulta muy necesaria ya que nos permite añadir condiciones para filtrar los datos concretos que necesitamos obtener. El comando completo sería entonces:

FORMATO:
SELECT "nombre_columna" FROM "nombre_tabla"
WHERE "condicion_1_de_los_datos"
AND "condicion_2_de_los_datos" [...]
EJEMPLO:
SELECT ciudad FROM info_ventas
WHERE ventas>500

INSERT

Acabas de conocer cómo obtener información de tablas. Pero ¿Cómo se insertan estas filas de datos en estas tablas en primer lugar? Esto es lo que vas a aprender ahora, que realiza la instrucción INSERT.

La estructura básica para insertar una nueva fila de datos en una tabla es:

INSERT INTO "nombre_tabla" ("columna1", "columna2", ...)
VALUES ("valor1", "valor2", ...);

EJEMPLO

Así, si queremos insertar una nueva fila en la tabla info_ventas anterior, respetando siempre los tipos de tados de cada columna de la tabla para no obtener error, el comando a ejecutar sería:

INSERT INTO info_ventas (ciudad, ventas, fecha_txn)
VALUES ('Cádiz', 900, '11/01/2022')

RESULTADO

info_ventas
ciudad ventas fecha_txn
Huelva 250 05/01/2022
Córdoba 1500 14/01/2022
Jaén 300 07/01/2022
Almería 700 10/01/2022
Cádiz 900 11/01/2022

AMPLIACIÓN

Los comandos SQL también se pueden anidar entre sí. De este modo, podríamos insertar en una tabla varias filas de otra tabla diferente sustituyendo la palabra VALUES por una consulta que nos proporcione efectivamente los valores que queremos insertar. La sintaxis será:

FORMATO:
INSERT INTO "tabla1" ("columna1", "columna2", ...)
SELECT "columna3", "columna4", ...
FROM "tabla2";
EJEMPLO:
INSERT INTO mayores_ventas (ciudad, ventas, fecha_txn)
SELECT ciudad, ventas, fecha_txn
FROM info_ventas
WHERE ventas>500;

UPDATE

Una vez que hay datos en la tabla, podríamos tener la necesidad de modificar los mismos. El comando UPDATE se utiliza para modificar valores en una tabla.

La sintaxis de SQL UPDATE es:

UPDATE nombre_tabla
SET columna1 = valor1, columna2 = valor2
WHERE columna3 = valor3

Donde:

  • SET establece los nuevos valores para las columnas indicadas.
  • WHERE sirve para seleccionar las filas que queremos modificar.
  • Ojos ¡OJO!: Si omitimos la cláusula WHERE, por defecto, ¡modificará los valores en todas las filas de la tabla!.

EJEMPLO

Si, sobre la tabla info_ventas anterior, las ventas en Huelva son 280 en vez de 250 haremos:

UPDATE info_ventas
SET ventas = 280
WHERE ciudad = 'Huelva'
AND fcha_txn = '05/01/2022';

RESULTADO

info_ventas
ciudad ventas fecha_txn
Huelva 280 05/01/2022
Córdoba 1500 14/01/2022
Jaén 300 07/01/2022
Almería 700 10/01/2022
Cádiz 900 11/01/2022

DELETE

A veces podemos desear deshacernos de los registros de una tabla. Para ello, utilizamos el comando DELETE FROM.

Su sintaxis es:

DELETE FROM "nombre_tabla"
WHERE "condición";

EJEMPLO

Si en la tabla anterior queremos borrar las ventas de la segunda fila:

DELETE FROM info_ventas
WHERE ciudad = 'Córdoba';

RESULTADO

info_ventas
ciudad ventas fecha_txn
Huelva 280 05/01/2022
Jaén 300 07/01/2022
Almería 700 10/01/2022
Cádiz 900 11/01/2022

Data Manipulation Language, en inglés, es usado para recuperar y manipular datos en una base de datos relacional.

4. Equipo de rescate: ¿SQL se integra en Python?

Mujer programando en SQL en un ordenador.Seguramente, después de conocer el lenguaje SQL para crear bases de datos y manipularlas, te habrás preguntado: ¿Y cómo utilizo en mi reto este nuevo lenguaje? Realizaremos nuestro programa en Python, pero...¿cómo usar entonces otro lenguaje - SQL - para gestionar la base de datos a crear?

¡Menos mal que nuestro equipo de trabajo dispone de miembros expertos tecnológicos que, a través de este ejercicio guiado que vas a realizar aquí, te van a enseñar cómo SQL se puede integrar y usar desde tu programación con Pyhton. ¡Realiza todos los pasos siguientes en tu entorno de desarrollo y crea tu primera base de datos!

Lumen dice ¿Sabes cómo afrontar el último punto del ejercicio?

Para realizar el último punto del ejercicio necesitarás realizar una consulta ¡utilizando varias tablas! Tranquilidad...no es difícil. Aquí te indicamos cómo:

  1. En el FROM indicarás las tablas que necesitas utilizar separadas por comas.
  2. Para el WHERE debes buscar un campo en común entre las tablas que quieres cruzar (si son varias debes cruzarlas dos a dos hasta que todas intervengan) y pondrás como condición que ese campo en común sea igual en las dos tablas de la condición (por ejemplo: clienes.socio=alquiler.socio)
  3. Finalmente, como acabas de ver, cuando varias tablas participan en una consulta, el nombre de la tabla debe aparecer delate del nombre del campo separado por un punto.

¡Ejemplo!: ¿Qué socio ha alquilado la película "Desperado"? Decir el nombre y apellidos.

SELECT Clientes.nombre
FROM Clientes,Alquiler
WHERE Clientes.Socio=Alquiler.Socio
AND Alquiler.Pelicula='Desperado'