¡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.
5. Herramienta en mano: el equipo implementa
1. El superpoder resolutivo: la lógica del equipo
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:
- ¿En qué orden crearíais las tablas en la base de datos?
- ¿Por qué es necesario seguir el orden de creación de las tablas para la inserción de los datos en las tablas?
- Explicad qué relaciones existentes entre las tablas utilizaríais para obtener:
- 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.
- Mostrar el nombre y el número de teléfono de socios que tienen películas en su casa.
- 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
El 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]);
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;
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í:
Lumen dice Algunos ejemplos
Aquí puedes ver algunos ejemplos más:
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
Vamos 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:
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
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.
- ¡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
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
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?
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!
Paso 1: Crea y conecta la base de datos
En principio no se requiere más que tener Python instalado para poder trabajar con SQL gracias al módulo sqlite3, que forma parte de la librería estándar de Python. La primera vez que ejecutemos este programa como no existe la base de datos bdventas.db se crea, consiste en un único archivo que se localiza en la misma carpeta de nuestra aplicación. Entonces, en tu entorno de desarrollo sólo tienes que:
import sqlite3
conexion=sqlite3.connect("bdventas.db")
¿Qué has conseguido con estos comandos?
- Importar el módulo 'sqlite3' para poder trabajar con bases de datos SQL.
- Crear o abrir una conexión con una base de datos existente gracias a la función 'connect' del módulo 'sqlite3'.
Paso 2: Crea una tabla
Una vez que se tiene una conexión se puede llamar a su método execute() para ejecutar comandos SQL.
try:
conexion.execute("""create table productos (
codigo integer primary key autoincrement,
nombre text,
precio real
)""")
print("se creo la tabla productos")
except sqlite3.OperationalError:
print("La tabla productos ya existe")
Este bloque de código:
- Utiliza un try/except en el momento de crear la tabla porque si ejecutamos por segunda vez este programa se tratará de crear nuevamente la tabla 'articulos' y, al ya existir, se genera una excepción de tipo OperationalError.
Paso 3: Inserta filas en la tabla
Vamos a insertar tres filas en la tabla anterior creada:
conexion.execute("insert into productos(nombre,precio) values (?,?)", ("ventilador", 41.50))
conexion.execute("insert into productos(nombre,precio) values (?,?)", ("taburete", 34))
conexion.execute("insert into productos(nombre,precio) values (?,?)", ("tostador", 15))
conexion.commit()
En este código:
- Se llama a execute pasándole como primer parámetro un comando SQL 'insert' con el carácter '?' indicando las posiciones donde se van a sustituir los valores que vienen a continuación.
- Tras efectuar todos los insert debemos llamar a 'commit' para que se actualicen los datos realmente en la tabla de la base de datos.
Paso 4: Recupera todas las filas de una tabla
Vamos a programar una estructura SELECT para obtener todas las filas de nuestra tabla:
cursor= (conexion.execute("select codigo,
nombre,precio from productos"))
for fila in cursor:
print(fila)
En este código:
- El método execute retorna un objeto de la clase Cursor que se guarda en la variable del mismo nombre.
- Recorremos la variable sacando por pantalla cada fila.
Paso 5: Recupera una fila de la tabla
Vas a practicar con este programa que pedirá el código de un producto para después, tras localizarlo, mostrarnos su nombre y precio:
codigo=int(input("Ingrese el código de un artículo:"))
cursor=(conexion.execute("select nombre,precio from productos
where codigo=?", (codigo, )))
fila=cursor.fetchone()
if fila!=None:
print(fila)
else:
print("No existe un artículo con dicho código.")
En este programa:
- El método fechone de la clase Cursor retorna una tupla con la fila de la tabla que coincide con el código ingresado o retorna 'None'.
Paso 6: Recupera varias filas de la tabla
Para ver cómo recuperar varias filas, vamos a realizar un programa que pida un precio por pantalla y nos muestre todos los productos de precio menor al introducido:
precio=float(input("Ingrese un precio:"))
cursor= (conexion.execute("select nombre from articulos
where precio<?", (precio, )))
filas=cursor.fetchall()
if len(filas)>0:
for fila in filas:
print(fila)
else:
print("No existen artículos con un precio menor
al ingresado.")
conexion.close()
¿Qué has realizado en este programa?
- Ahora, el resultado del comando 'select' pueden ser muchas filas.
- El método 'fetchall' de la clase Cursor y nos retorna una lista con todas las filas de la tabla que cumplen la condición dada.
- ¡No olvides cerrar siempre la conexión al terminar con el método close()!
¡Ahora te toca a ti!
¿Te atreves a crear una nueva base de datos con las tablas del primer ejercicio grupal de esta página?
Con los comandos aprendidos, crea ahora las consultas que te devuelvan los datos:
- ¿Cuántas personas se hicieron socias a partir de 2017?
- ¿Cuál es el precio medio de una película en el videoclub?
- Muestra en pantalla 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.
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:
- En el FROM indicarás las tablas que necesitas utilizar separadas por comas.
- 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)
- 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'
Obra publicada con Licencia Creative Commons Reconocimiento Compartir igual 4.0