Full Stack amb React
Full Stack amb React
Full Stack amb React
Full Stack amb React
Colección de datos a la que puedo acceder para crearlos, manipularlos o leerlos
La mayoría pertenecen al backend (aunque también hay de frontend)
Dos grandes grupos:
Relacionales (SQL)
MySQL, MariaDB, SQL Server, Oracle, PostgreSQL
NoSQL
MongoDB, Redis, Cassandra, CouchDB, DynamoDB
Bases de datos
Full Stack amb React
Full Stack amb React
Servidor
Cliente
Bases de datos
Full Stack amb React
Full Stack amb React
Tablas
Campos
Registros
Bases de datos relacionales
Full Stack amb React
Full Stack amb React
Lenguaje de consultas, para hacer peticiones a la base de datos
Operaciones para crear y modificar datos (CREATE TABLE, INSERT, UPDATE)
Operaciones para leer datos (SELECT)
El lenguaje SQL
SELECT * FROM alumnos WHERE nota >= 5;
SELECT nombre, apellidos, dni, aula FROM alumnos ORDER BY apellidos, nombre;
UPDATE alumnos SET nota = 10 WHERE dni = "28638192H";
Full Stack amb React
Full Stack amb React
CREATE TABLE
Hay que dar el nombre de la tabla y definir las columnas
Cada columna (campo):
nombre
tipo
restricciones
Crear tablas
CREATE TABLE alumnos (
id int PRIMARY KEY AUTO_INCREMENT,
nombre varchar(32) NOT NULL,
apellidos varchar(32),
dni varchar(9) NOT NULL UNIQUE,
aula int DEFAULT 0
)
Full Stack amb React
Full Stack amb React
ALTER TABLE
Hay que dar el nombre de la tabla y la acción que queremos hacer
Añadir columna: ADD COLUMN
Borrar columna: DROP COLUMN
Modificar columna: MODIFY COLUMN
Modificar tablas
ALTER TABLE gatos ADD COLUMN raza VARCHAR(32);
ALTER TABLE gatos MODIFY COLUMN raza VARCHAR(10) NOT NULL;
ALTER TABLE gatos DROP COLUMN raza;
Full Stack amb React
Full Stack amb React
TRUNCATE TABLE
Hay que dar el nombre de la tabla
¡No se puede deshacer!
Vaciar tablas
TRUNCATE TABLE gatos;
Full Stack amb React
Full Stack amb React
DROP TABLE
Hay que dar el nombre de la tabla
¡No se puede deshacer!
Borrar tablas
DROP TABLE gatos;
Full Stack amb React
Full Stack amb React
INSERT INTO tabla (columnas) VALUES (valores)
Insertar registros
INSERT INTO alumnos (nombre, apellidos, dni, aula) VALUES ("Arturo", "Valls", "87376211S", 1);
INSERT INTO alumnos (nombre, apellidos, dni, aula) VALUES
("Margarita", "Ferrán Soria", "12657483I", 2),
("Ana", "Rimbaud Flores", "71998300P", 3),
("Jorge", "Oms Peláez", "81928473V", 2);
Full Stack amb React
Full Stack amb React
UPDATE tabla SET campo = valor WHERE condición
Modificar registros
UPDATE alumnos SET dni = "87743912X" WHERE id = 3;
Full Stack amb React
Full Stack amb React
DELETE FROM tabla WHERE condición
Importante: poner el WHERE (recordatorio)
Borrar registros
DELETE FROM alumnos WHERE id = 7;
Full Stack amb React
Full Stack amb React
Numéricos
INT, TINYINT, DECIMAL
Textos
VARCHAR(n), TEXT
Fechas
DATE, DATETIME
Tipos de datos
Full Stack amb React
Full Stack amb React
Relaciones
alumnos
exámenes
Relaciones entre tablas
Tipos de relaciones:
1-1 (candidatos-cvs)
1-N (clientes-pedidos)
N-M (actores-películas)
candidatos
cvs
1-1
Full Stack amb React
Full Stack amb React
Relaciones
clientes
pedidos
Relaciones entre tablas
Tipos de relaciones:
1-1 (candidatos-cvs)
1-N (clientes-pedidos)
N-M (actores-películas)
1-N
municipios
habitantes
Full Stack amb React
Full Stack amb React
Relaciones
actores
películas
Relaciones entre tablas
Tipos de relaciones:
1-1 (candidatos-cvs)
1-N (clientes-pedidos)
N-M (actores-películas)
N-M
libros
usuarios
Full Stack amb React
Full Stack amb React
Relaciones
Clave primaria
única
not null
un registro sólo puede tener una
columnas múltiples
CREATE TABLE alumnos (
id int PRIMARY KEY AUTO_INCREMENT,
nombre varchar(32) NOT NULL UNIQUE,
apellidos varchar(32),
dni varchar(9) NOT NULL,
aula int DEFAULT 0
)
CREATE TABLE alumnos (
id int AUTO_INCREMENT,
nombre varchar(32) NOT NULL,
apellidos varchar(32),
dni varchar(9) NOT NULL UNIQUE,
aula int DEFAULT 0,
PRIMARY KEY (id)
)
CREATE TABLE prestamos (
id_usuario int,
id_libro int,
fecha datetime,
estado varchar(16),
PRIMARY KEY (id_usuario, id_libro)
)
Full Stack amb React
Full Stack amb React
Relaciones
Claves foráneas
apuntan a una columna de otra tabla
múltiples
restricciones ON DELETE y ON UPDATE
RESTRICT / NO ACTION
CASCADE
SET NULL
CREATE TABLE examenes (
id int AUTO_INCREMENT,
alumno int,
PRIMARY KEY (id),
FOREIGN KEY (alumno) REFERENCES alumnos (id)
)
CREATE TABLE examenes (
id int AUTO_INCREMENT,
alumno int,
PRIMARY KEY (id),
FOREIGN KEY (alumno) REFERENCES alumnos (id) ON DELETE SET NULL
)
Full Stack amb React
Full Stack amb React
SELECT sobre varias tablas
INNER JOIN
Todos los registros que están en ambas tablas
SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1
FROM tabla1 INNER JOIN tabla2
ON tabla1.columna3 = tabla2.columna3
Full Stack amb React
Full Stack amb React
SELECT sobre varias tablas
LEFT JOIN
Todos los registros que están en la primera tabla
Valores NULL en la segunda tabla
SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1
FROM tabla1 LEFT JOIN tabla2
ON tabla1.columna3 = tabla2.columna3
Full Stack amb React
Full Stack amb React
SELECT sobre varias tablas
RIGHT JOIN
Todos los registros que están en la segunda tabla
Valores NULL en la primera tabla
SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1
FROM tabla1 RIGHT JOIN tabla2
ON tabla1.columna3 = tabla2.columna3
Full Stack amb React
Full Stack amb React
MongoDB
NoSQL
Documental
Estructura flexible
Colecciones y documentos
Relaciones o documentos embebidos
/* 1 */
{
"_id" : ObjectId("5f8d83ddb2d082350806eb9d"),
"nombre" : "Luis",
"apellidos" : "Gutiérrez Márquez",
"curso" : ObjectId("5f8d80291fe7a908a05c6935"),
"nota" : 6,
"__v" : 0
}
/* 2 */
{
"_id" : ObjectId("5f8d844bc6414a33c87c07b5"),
"nombre" : "María Jesús",
"apellidos" : "Suárez Romero",
"curso" : ObjectId("5f8d80291fe7a908a05c6937"),
"nota" : 7,
"__v" : 0
}
/* 3 */
{
"_id" : ObjectId("5f8d84ae5a9f7c36c01b5ca4"),
"nombre" : "Marta",
"apellidos" : "Castejón de la Huerta",
"curso" : ObjectId("5f8d80291fe7a908a05c6937"),
"nota" : 6,
"__v" : 0
}
/* 4 */
{
"_id" : ObjectId("5f8d853341710e373cb2d32f"),
"nombre" : "Roberto",
"apellidos" : "Marco Santos",
"curso" : ObjectId("5f8d80291fe7a908a05c6936"),
"nota" : 7.5,
"__v" : 0
}
/* 5 */
{
"_id" : ObjectId("5f8d8c1703d82c0e40c0f933"),
"nombre" : "Julia",
"apellidos" : "Sanz Reverte",
"curso" : ObjectId("5f8d80291fe7a908a05c6936"),
"nota" : 6,
"__v" : 0
}
/* 1 */
{
"_id" : ObjectId("605d76b1d166de4699ce9830"),
"nombre" : "Luis",
"edad" : 25,
"direccion" : {
"calle" : "Luis Montoto",
"numero" : 32,
"planta" : 1,
"puerta" : 2,
"localidad" : "Sevilla",
"provincia" : "Sevilla"
}
}
/* 2 */
{
"_id" : ObjectId("605d76c7d166de4699ce9ee5"),
"nombre" : "Ana",
"edad" : 32,
"direccion" : {
"calle" : "Bruc",
"numero" : 76,
"planta" : 3,
"puerta" : 2,
"localidad" : "Barcelona",
"provincia" : "Barcelona"
}
}
/* 3 */
{
"_id" : ObjectId("605d76cfd166de4699cea133"),
"nombre" : "Lorenzo",
"edad" : 53,
"direccion" : {
"calle" : "Plaça del Dr. Galtés",
"numero" : 1,
"planta" : 1,
"puerta" : 1,
"localidad" : "Sant Cugat del Vallès",
"provincia" : "Barcelona"
}
}
Full Stack amb React
Full Stack amb React
MQL
Seleccionar / crear una base de datos:
use nombre_bd
Crear colección:
db.createCollection(nombre_colección)
Borrar colección:
db.colección.drop()
Full Stack amb React
Full Stack amb React
MQL
Insertar documentos:
db.colección.insertOne(documento)
db.colección.insertMany(array_de_documentos)
db.personas.insertOne({
nombre: "Luis",
edad: 34
})
db.personas.insertMany([
{
nombre: "Marta",
edad: 30
},
{
nombre: "José Luis",
edad: 48
},
{
nombre: "Antonia",
edad: 59
}
])
Full Stack amb React
Full Stack amb React
MQL
Borrar documentos:
db.colección.deleteOne(condición)
db.colección.deleteMany(condición)
db.personas.deleteOne({ nombre: "Marta" })
db.personas.deleteMany({ edad: { $lt: 50 } })
Full Stack amb React
Full Stack amb React
MQL
Modificar documentos:
db.colección.updateOne(condición, modificación)
db.colección.updateMany(condición, modificación)
db.personas.updateMany({edad: {$gt: 20}}, { $set: { edad: 20 }})
Full Stack amb React
Full Stack amb React
MQL
Sustituir un documento:
db.colección.replaceOne(condición, nuevo_documento)
db.personas.replaceOne({ nombre: "Antonia"}, { nombre: "Antoñita", edad: 33 })
Full Stack amb React
Full Stack amb React
MQL
Crear un índice único:
db.colección.createIndex( { nombre_campo : 1 }, { unique : true } )
db.personas.createIndex( { "dni" : 1 }, { unique : true } )
Full Stack amb React
Full Stack amb React
MQL - Ejemplos de consultas
db.alumnos.find( { nota: { $in: ["A", "B"] } } )
db.alumnos.find( { aula: "A", nota: { $gte: 5 } } )
db.alumnos.find( { dni: { $exists: true } } )
db.alumnos.find( { aula: "A", nota: { $gte: 5, $lte: 8 } } ).count()
db.alumnos.find( { aula: "A", "direccion.poblacion": "Sevilla" } )
Full Stack amb React
Full Stack amb React
MQL - Ejemplos de consultas
db.alumnos.find( { nota: { $lt: 5 } }, { nombre: 1, aula: 1 } )
Elegir campos
Full Stack amb React
Full Stack amb React
MQL - Ejemplos de consultas
db.alumnos.find({}).sort({ nota: -1 })
Ordenar
Full Stack amb React
Full Stack amb React
MQL - Ejemplos de consultas
db.alumnos.find({}).limit(10)
Límite y offset (desplazamiento)
db.alumnos.find({}).skip(10).limit(10)
Full Stack amb React
Full Stack amb React
MQL - Consultas en dos tablas
db.pedidos.aggregate([
{
$lookup: {
from: "clientes",
localField: "cliente",
foreignField: "_id",
as: "cliente"
}
}
])
db.clientes.aggregate([
{
$lookup: {
from: "pedidos",
localField: "pedidos",
foreignField: "_id",
as: "pedidos"
}
}
])
db.pedidos.aggregate([
{
$match: { estado: "enviado" }
},
{
$sort: { fecha: 1 }
},
{
$lookup: {
from: "clientes",
localField: "cliente",
foreignField: "_id",
as: "cliente"
}
}
])