BASES DE DATOS RELACIONALES

Almacena cada entidad/dato en una tabla

id usuario pais ciudad
1 juanLinares Colombia Bogotá
2 rosaRoja1 Argentina Buenos Aires

Una fila representa un item/entidad

Una columna representa una propiedad de ese item

id nombre apellido fecha_afiliacion descuento_vip
1 Juan Castillo 2018-06-08 false
2 Diana Quintero 2017-12-22 true

Cada columna tiene un determinado tipo de dato: VARCHAR, BOOLEAN, DATE ...

id tipo tasa
101 Rotativo 1,3
102 Libranza 0,9
103 Libre inversión 1,5
id nombre apellido fecha_afiliacion
1 Juan Castillo 2018-06-08
2 Diana Quintero 2017-12-22

Las relacionales reciben su nombre por su énfasis en las relaciones entre tablas

id_usuario id_credito
1 101
1 103
2 102

USUARIOS

CREDITOS

CREDITOS DE CADA USUARIO

id_usuario nombre apellido fecha_afiliacion id_credito tipo tasa
1 Juan Castillo 2018-06-08 101 Rotativo 1,3
1 Diana Quintero 2018-06-08 103 Libre Inv 1,5
2 Diana Quintero 2017-12-22 102 Libranza 0,9

Las relacionales reciben su nombre por su énfasis en las relaciones entre tablas

Cómo se vería la información sin las relaciones, repitiendo la información por usuario?

NO ES EFICIENTE

Lenguaje de consulta

SQL

Crear tablas

Actualizar los datos

Consultar la información que nos interesa

Agregar datos

PRACTIQUEMOS

/** Lista de carreras, estudiantes actuales y facultad a la que pertenecen: 
Ingenieria de Sistemas (324) Ingenieria
Arquitectura (180)           Arquitectura   
Ciencias politicas (145)     Ciencias sociales
Ingenieria Electrónica (100) Ingenieria
**/

CREATE TABLE carreras (nombre TEXT, cantidad INTEGER , facultad TEXT);

CREATE TABLE carreras (id INTEGER PRIMARY KEY, nombre TEXT, cantidad INTEGER , facultad TEXT);

Necesitamos algo que nos ayude a identificar las columnas y que no varíe con el tiempo.

/** Lista de carreras, estudiantes actuales y facultad a la que pertenecen: 
Ingenieria de Sistemas (324) Ingenieria
Arquitectura (180)           Arquitectura   
Ciencias politicas (145)     Ciencias sociales
Ingenieria Electrónica (100) Ingenieria
**/


INSERT INTO carreras VALUES (1, 'Ingenieria de Sistemas' , 324, 'Ingenieria');

Ahora podemos agregar datos a esa tabla que tenemos

Inserte las otras carreras 

Qué sucede si usamos el mismo id para dos carreras?

Una vez tenemos datos, podemos proceder a consultarlos.

SELECT  nombre FROM carreras;

De cuál tabla queremos consultar

Qué información queremos ver.
 

Si queremos ver todos los atributos usamos un asterisco

*

Consultemos el nombre y cantidad de estudiantes de las carreras.

SELECT * FROM carreras WHERE nombre = 'Arquitectura';

Condición o condiciones por la que queremos filtrar

CLAUSULA WHERE

Cómo consultaríamos las carreras con más de 150 estudiantes?

Cómo consultaríamos las carreras con más de 150 estudiantes y menos de 200?

CLAUSULA WHERE

En la claúsula WHERE puede ir cualquier función que soporta SQL (excepto las de agregación o resumen).

Operadores lógicos.

 

Operadores de comparación.

 

Operadores matemáticos y funciones relacionadas.

 

Operadores de cadena.

 

Operadores de fecha.

AND , OR , NOT
> , < , >= , <> , BETWEEN, IS NULL
concat, upper, substr 

Ejecute las siguientes consultas:

SELECT nombre || ' - ' || cantidad as informacion FROM carreras;
SELECT nombre FROM carreras WHERE cantidad BETWEEN 150 AND 200;
SELECT UPPER(nombre) FROM carreras;
SELECT SUBSTR(nombre, 2, 5) FROM carreras;

ORDER BY 

Organizar los resultados puede ser util.

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;

Organice ascendentemente las carreras por sus cantidad de estudiantes.

FUNCIONES DE AGREGACION

Permiten efectuar operaciones sobre un conjunto de resultados devolviendo un único valor agregado para todos.

  • COUNT
  • MIN
  • MAX
  • SUM
  • AVG
SELECT COUNT(*) FROM carreras;
SELECT MAX(cantidad) FROM carreras;

Cúal es el promedio de estudiantes?

GROUP BY

SELECT facultad, SUM(cantidad) FROM carreras GROUP BY facultad;

A menudo se usa con las funciones de agregación. Permite agrupar por una o varias columnas.

id nombre cantidad facultad
1 Ingenieria de Sistemas  324 Ingenieria
2 Arquitectura 180 Arquitectura
3 Ciencias politicas 145 Ciencias sociales
4 Ingenieria Electrónica 100 Ingenieria

JOINS

Permiten efectuar operaciones sobre un conjunto de resultados devolviendo un único valor agregado para todos.

Creemos la tabla cursos:

 

CREATE TABLE cursos (id INTEGER PRIMARY KEY, nombre TEXT, cupos INTEGER, carrera TEXT);

Crucemos las dos tablas que tenemos:

SELECT * FROM carreras, cursos;

Qué ocurre?

Podemos cruzar información de diferentes tablas:

SELECT * FROM carreras, cursos
    WHERE carreras.nombre = cursos.carrera;

LLAVES FORANEAS

Ayudan a relacionar dos tablas, usando la llave primaria de alguna. 

Prevee datos inválidos, dado que debe corresponder a un valor de las llaves primarias de la tabla a la que apunta.

id nombre cantidad facultad
1 Ingenieria de Sistemas  324 Ingenieria
2 Arquitectura 180 Arquitectura
3 Ciencias politicas 145 Ciencias sociales
4 Ingenieria Electrónica 100 Ingenieria
id nombre cupos id_carrera
1 Programación 1 50 1
2 Programación 1 50 4
3 Urbanismo 1 40 2
4 Construcciones y seguridad 30 2
CREATE TABLE cursos (
    id int NOT NULL,
    nombre text NOT NULL,
    cupos int,
    id_carrera int,
    PRIMARY KEY (id),
    FOREIGN KEY (id_carrera) REFERENCES carreras(id)
);
ALTER TABLE Cursos
ADD FOREIGN KEY (id_carrera)
REFERENCES carrera(id);

Resumiendo características

 

  • Uso de llaves (keys): Cada fila en una tabla es identificada por una llave única (primary key).
  • Se restringen los tipos de los datos.
  • Evitar la redundancia de datos.
  • SQL: Lenguaje de consulta estructurada.
  • Integridad de los datos a través de restricciones : llaves primarias, foráneas, unique ...
  • Transacciones como un todo o nada.

deck

By nychi713

deck

  • 523