
Un poco de historia
Antes de que existieran las computadoras la información era plasmada en libros y/o cuadernos y almacenada en cuartos o librerias.
¿Que es una Base de Datos?
Existen muchas definiciones de lo que es una base de datos, incluso la definicion ha cambiado con el tiempo pero todas esas definiciones tienen en comun en que una base de datos es: una colección de datos organizada en un formato estructurado.
Existen muchos tipos de bases de datos con muchos propositos, en este curso aprenderemos sobre las bases de datos relacionales.
Bases de Datos Relacionales
Fueron creadas en los años 70s.
Organiza los datos en filas y columnas, que en conjunto forman una tabla.
Los datos normalmente se estructuran en varias tablas, que se pueden unir a través de una llave principal o una llave foránea.
RDBMS
Un sistema de gestión de base de datos relacional (RDBMS) es una referencia más específica al software de base de datos subyacente que permite a los usuarios mantenerlo.
Estos programas permiten a los usuarios crear, actualizar, insertar o eliminar datos en el sistema y proporcionan:
Estructura de datos
Acceso multiusuario
Control de privilegios
Acceso a la red
Ejemplos:
Motores de bases de datos relacionales
Oracle
Microsoft SQL Server
PostgreSQL
MySQL
Propiedades de ACID
(Atomicity, Consistency, Isolation, Durability)
Atomicidad todos los cambios en los datos se realizan como si fueran una sola operación. Es decir, se realizan todos los cambios, o ninguno.
Consistencia los datos permanecen en un estado consistente de un estado a otro, lo que refuerza la integridad de los datos.
Aislamiento la realización de una operación no debería afectar a las otras.
Durabilidad después de completar con éxito una transacción, los cambios en los datos persisten y no se deshacen, incluso en caso de falla del sistema.
PostgreSQL es un sistema de base de datos relacional avanzado, de clase empresarial y de código abierto. PostgreSQL admite consultas SQL (relacionales) y JSON (no relacionales).
PostgreSQL es una base de datos altamente estable respaldada por más de 20 años de desarrollo por parte de la comunidad de código abierto.
PostgreSQL se utiliza como base de datos principal para muchas aplicaciones web, así como para aplicaciones móviles y de análisis.
Instalar PostgreSQL
https://www.tiktok.com/@mayra_code/video/7252911017091403013
https://www.tiktok.com/@mayra_code/video/7255364020721536262
https://www.tiktok.com/@mayra_code/video/7268494424265592069
https://www.tiktok.com/@mayra_code/video/7249901680664349958
Configuracion BD para el curso
https://www.postgresqltutorial.com/postgresql-getting-started/postgresql-sample-database/
¿Que es un diagrama Entidad Relación?
Un modelo entidad-relación es una herramienta para el modelo de datos, la cual facilita la representación de entidades de una base de datos. Los diagramas ER son un lenguaje gráfico para describir conceptos.
Entidad
Las entidades son el fundamento del modelo entidad relación. Podemos adoptar como definición de entidad cualquier cosa o parte del mundo que es distinguible del resto.
Atributos
Los atributos son las características que definen o identifican a una entidad. Éstas pueden ser muchas, y el diseñador sólo utiliza o implementa las que considere más relevantes.
Relación
Describe cierta dependencia entre entidades o permite la asociación de las mismas.
Restricciones
Son reglas que deben respetar las entidades y relaciones almacenadas en la base de datos.
Cardinalidad
La cardinalidad de la correspondencia indica el número de entidades con las que puede estar relacionada una entidad dada.
Uno a Uno: Un registro de una entidad A se relaciona con solo un registro en una entidad B.
Uno a Muchos: Un registro en una entidad en A se relaciona con uno o muchos registros en una entidad B. Pero los registros de B solamente se relacionan con un registro en A.
Muchos a Muchos: Una entidad en A se puede relacionar con 1 o con muchas entidades en B y viceversa.
Diagrama ER - Modelo Físico
Especificación de todas las tablas y columnas.
Las claves externas se usan para identificar relaciones entre tablas.
La desnormalización puede ocurrir según los requisitos del usuario.
Entidad o Tabla:
Propiedades:
Nombre de la tabla, debe ser único
Campos o atributos
Cada campo tiene un tipo de dato asociado. (El tipo de dato no siempre se especifica)
La tabla puede tener una llave primaria. (PK)
Si ningún campo de la tabla es único, se puede usar un correlativo. (Lo recomendable es que todas las tablas tengan llave primaria)
Una tabla puede tener una o varias llaves foráneas si hubieran relaciones de uno a muchos. (FK)
Los campos pueden tener otros contraints como Unique Key (UK), Not Null, etc.
Llaves Primarias:
Puede estar conformada por uno o varios campos.
Ayudan a cuidar que no haya duplicados.
Lo más común es que las llaves primarias sean correlativos (automáticos o manuales) pero cualquier campo podría ser llave primaria siempre y cuando sea único null.
Llaves Foráneas:
Puede estar conformada por uno o varios campos.
Es utilizada para conectar los datos de una tabla con otra(s).
La llave primaria de una tabla pasa a ser llave foránea de otra tabla.
El campo (o los campos) que son llave primaria en una tabla pueden tener el mismo nombre o no, en la tabla en la que son llave foránea.
El campo (o los campos) que son llave primaria en una tabla y pasan a ser llave foránea a otra deben de tener el mismo tipo de dato.
El lenguaje estructurado de consultas (SQL, Structured Query Language) apoya la creación y mantenimiento de la base de datos relacional y la gestión de los datos.
Existen otros lenguajes para trabajar con datos, pero SQL es el mas utilizado, especialmente en las bases de datos relacionales.
SQL muestra los datos en filas y columnas, muy similar a lo que vemos en un Excel.
Que podemos hacer con SQL?
SQL puede ejecutar consultas en una base de datos
SQL puede recuperar datos de una base de datos
SQL puede insertar registros en una base de datos
SQL puede actualizar registros en una base de datos
SQL puede eliminar registros de una base de datos
SQL puede crear nuevas bases de datos
SQL puede crear nuevas tablas en una base de datos
SQL puede crear procedimientos almacenados en una base de datos.
SQL puede crear vistas en una base de datos
SQL puede establecer permisos sobre tablas, procedimientos y vistas
Tipos de instrucciones de SQL
DDL: Data Definition Language
DCL: Data Control Language
DML: Data Manipulation Language
TCL: Transaction Control Language
DML (Data Manipulation Language)
Lenguaje de manipulación de datos
Se usan para recuperar, agregar, modificar o borrar datos almacenados en los objetos de una base de datos.
Son los tipos de instrucciones probablemente son más usadas.
Las palabras clave asociadas con las instrucciones DML son:
SELECT, INSERT, UPDATE y DELETE.
Ejemplos:
INSERT para agregar datos a una tabla.
UPDATE para modificar datos de una tabla.
DELETE para eliminar datos de una tabla.
SELECT para leer datos de una tabla.
SELECT first_name, last_name
FROM actor;
Nos permite unicamente ver los datos que tenemos almacenados en la BD.
Estructura basica de un query select.
SELECT
[DISTINCT] *, columns, or expressions
[FROM tabla(s)]
[JOIN tabla(s) ON condicion(es)]
[WHERE condicion(es)]
[GROUP BY columna(s)]
[HAVING condicion(es)]
[ORDER BY columna(s)]
Los alias son opcionales, pero mejoran la visualización de los datos.
Podemos asignar el alias justo a la derecha del campo, expresion o tabla, de forma opcional podemos agregar la palabra “AS” y luego el alias.
Un alias es una forma de renombrar un campo, expresion o tabla, en el caso de las columnas y expresiones el alias asignado será lo que se visualizará en el resultado.
En el caso de alias para tablas puede ser una forma abreviada de referirse a la tabla, son muy practicos cuando se hacen Joins entre varias tablas.
Cuando en un mismo query hay varias tablas, y mas de una tabla tienen columnas con el mismo nombre un alias puede ayudar a reducir ambiguedad.
SELECT first_name primer_nombre, last_name AS primer_apellido FROM actor;
SELECT first_name, last_name FROM actor A;
SELECT first_name, last_name FROM actor AS A;
Define una condición (o varias) que debe cumplirse para que los datos sean devueltos. Los operadores utilizados en la cláusula WHERE (o cualquier condición definida en la cláusula) no tienen efecto en los datos almacenados en las tablas. Sólo afectan a los datos devueltos cuando se invoca la vista. Se puede incluir en una instrucción SELECT, UPDATE o DELETE.
PostgreSQL evalua la clausula WHERE despues del FROM y antes del SELECT yORDER BY.
Si se asignan alias a las columnas en el SELECT , esos alias no pueden ser usados en el WHERE.
Operadores de Comparación
Típicos (=, !=, <>, <, <=, >, >=)
AND: Para unir dos condiciones, ambas deben ser verdaderas.
OR: Para unir dos condiciones, una condición debe ser verdadera.
IS NULL: Para obtener las filas donde X columna tiene valor null.
BETWEEN: para identificar un rango de valores.
NOT: Para negar una condición.
LIKE: es posible especificar valores que son solamente similares a los valores almacenados.
IN: permite determinar si los valores en la columna especificada de una tabla están contenidos en una lista definida o contenidos dentro de otra tabla.
La sintaxis de la clausula IN es la siguiente:
valor IN (valor1, valor2, ...)
valor IN (SELECT columna FROM tabla);
Al evaluar la condicion con el operador IN se retornará true si value hace match con almenos un elemento de la lista ej., value1 , value2 , …
SELECT customer_id, rental_id, return_date
FROM rental
WHERE customer_id IN (1, 2)
ORDER BY return_date DESC;
Una alternativa a usar el IN podria ser utilizar varias condiciones utilizando OR.
SELECT rental_id, customer_id, return_date
FROM rental
WHERE customer_id = 1
OR customer_id = 2
ORDER BY return_date DESC;
El query con el operador IN es mas corto y legigle que el query con igual (=) y OR. Ademas, PostgreSQL ejecuta el query con IN mas rapido que la lista de OR.
Tambien es posible combinar los operadores IN y NOT para seleccionar el valor que no esta incluido en la lista.
SELECT customer_id, rental_id, return_date
FROM rental
WHERE customer_id NOT IN (1, 2);
Ejemplo del operador IN con una subconsulta o subquery.
SELECT customer_id, rental_id, return_date
FROM rental
WHERE customer_id IN (SELECT customer_id FROM customer WHERE active = 1 );
Sirve para evaluar si un valor se encuentra dentro de un rango de valores.
La sintaxis es:
valor BETWEEN limite_inferior AND limite_superior;
Y es equivalente a:
valor >= limite_inferior and valor <= limite_superior
Para evaluar que el valor no este en un rango de valores se puede combinar con NOT.
valor NOT BETWEEN limite_inferior AND limite_superior;
El cual seria equivalente a:
valor < limite_inferior and valor > limite_superior
Ejemplo:
SELECT customer_id, payment_id, amount
FROM payment
WHERE amount BETWEEN 8 AND 9;
SELECT customer_id, payment_id, amount
FROM payment
WHERE amount NOT BETWEEN 8 AND 9;
SELECT customer_id, payment_id, amount, payment_date
FROM payment
WHERE payment_date BETWEEN '2007-02-07' AND '2007-02-15';
SELECT first_name, RIGHT(first_name, 1) final
FROM actor
WHERE RIGHT(first_name, 1) BETWEEN 'a' AND 'e';
Es posible especificar valores que son solamente similares a los valores almacenados.
Signo de porcentaje (%): representa cero o más caracteres desconocidos.
Guión bajo (_): representa exactamente un carácter desconocido.
Los comodines % y _ pueden ser usados en cualquier posición del patron, pueden usarse ambos comodiones en un mismo patron y pueden repetirse n veces.
SELECT first_name, last_name
FROM customer
WHERE first_name LIKE 'A%';
SELECT first_name, last_name
FROM customer
WHERE first_name LIKE '_her%'
ORDER BY first_name;
El string ‘A%’ es llamado patron.
El operador like se puede combinar con el operador NOT para filtrar las filas que no cumplan el patron.
SELECT first_name, last_name
FROM customer
WHERE first_name NOT LIKE 'A%';
Si el patrón dentro del operador LIKE no contiene ningun comodin (% o _) entonces el comportamiento sera el mismo que el operador igual ( =).
SELECT first_name, last_name
FROM customer
WHERE first_name LIKE 'Jamie';
SELECT first_name, last_name
FROM customer
WHERE first_name = 'Jamie';
Tambien existe el operador ILIKE el cual es similar a LIKE. Con la diferencia que el operador ILIKE verifica el patron sin importar mayusculas y minisculas (case-insensitive).
Con la instrucción UPDATE se pueden modificar datos en una o más filas para una o más columnas.
La cláusula UPDATE y la cláusula SET son obligatorias, mientras que la cláusula WHERE es opcional.
La cláusula WHERE funciona aquí de una forma muy parecida a como lo hace en la instrucción SELECT.
Solamente las filas que cumplen con estas condiciones son actualizadas.
UPDATE nombre_tabla
SET columna1 = valor1,
columna2 = valor2,
...
WHERE condicion(es)
[RETURNING * | output_expression AS output_name];
Contiene solamente dos cláusulas, y una sola de ellas es obligatoria.
La cláusula WHERE, la cual es similar a la cláusula WHERE en una instrucción SELECT y en una instrucción UPDATE, requiere que se especifique una condición de búsqueda.
Si no se incluye una cláusula WHERE en la instrucción DELETE, todas las filas serán eliminadas de la tabla especificada.
Es importante comprender que la instrucción DELETE no elimina la tabla en sí, sino solamente filas en la tabla (la instrucción DROP TABLE, se utiliza para eliminar definiciones de tabla de la base de datos).
* Es muy importante ser cuidados al momento de ejecutar un query DELETE para no eliminar registros que no se debian eliminar.**
Al eliminar con el id (llave primaria) nos aseguramos que solo una fila podrá ser eliminada.
Con otras condiciones que abarquen mas filas podriamos eliminar mas filas.
Sintaxis:
DELETE FROM nombre_tabla
WHERE condicion(es);
DELETE
FROM country
WHERE country_id = 141;
DELETE
FROM country
WHERE country_id >= 141
AND country_id <= 150;
DELETE
FROM country;
DELETE
FROM country
WHERE country_id >= 139
RETURNING country_id;
Lenguaje de definición de datos
Se usan para crear, modificar o borrar objetos en una base de datos como tablas, vistas, activadores, y almacenar procedimientos.
Los nombres de los objetos deben de ser unicos.
Las instrucciones DDL más comunes son:
CREATE, ALTER y DROP.
Ejemplos:
CREATE TABLE para crear una tabla.
ALTER TABLE para modificar las características de una tabla.
DROP TABLE para borrar la definición de la tabla de la base de datos.
CREATE DATABASE dvdrental;
¿Que es una Tabla?
Son objetos de esquema que tienen los datos de SQL.
Tipos de Tablas:
Tablas persistentes
Tablas Temporales
Tablas Variables
Sintaxis del create table:
CREATE TABLE [IF NOT EXISTS] nombre_tabla (
columna1 tipodedato(longitud) contraint_de_columna,
columna2 tipodedato(longitud) contraint_de_columna,
columna3 tipodedato(longitud) contraint_de_columna,
contraints_de_tabla
);
Constraints
Con el fin de asegurar la integridad de los datos, SQL proporciona una serie de restricciones de integridad, reglas que se aplican a la base de datos para restringir los valores que se pueden colocar en esas tablas. Se pueden aplicar restricciones a columnas individuales, a tablas individuales o a múltiples tablas.
Constraints más comunes:
NOT NULL: Asegura que en una columna no haya valores nulos.
UNIQUE: Asegura que cada valor sea único.
PRIMARY KEY: Una combinación de NOT NULL y UNIQUE. Identifica cada fila de una tabla.
FOREIGN KEY: Evita que se destruya la relación entre tablas.
CHECK: Garantiza que los valores de una columna cumplan una condición.
DEFAULT: Asigna un valor por default cuando ningún valor es especificado.
CREATE INDEX: Sirve para leer información más rápidamente.
Los constraints podemos definirlos al crear las tablas o podemos utilizar ALTER TABLE para definirlos.
Una vez definida una tabla, es posible cambiar su estructura por medio de sentencias ALTER.
Sintaxis alter table:
ALTER TABLE nombre_tabla accion;
Podemos usar la clausula ALTER para:
Agregar llave foranea
Agregar columnas
Renombrar columnas
Eliminar columnas
Modificar la llave primaria.
Agregar contraints.
ALTER TABLE users ADD COLUMN birthdate DATE;
ALTER TABLE users ADD COLUMN state DATE;
ALTER TABLE users DROP COLUMN state;
ALTER TABLE users RENAME COLUMN birthdate TO birth_date;
SELECT *
FROM users;
ALTER TABLE users RENAME TO dvdrental_users;
Podemos usar DROP para eliminar objetos de la base de datos o toda la base de datos:
DROP eliminar el objeto no únicamente los datos.
DROP DATABASE nombre_base_de_datos;
DROP TRIGGER nombre_trigger;
DROP FUNCTION nombre_funcion;
DROP TABLE dvdrental_users;
Un componente importante de cualquier base de datos relacional es la correlación que puede existir entre dos tablas cualesquiera. En SQL podemos unir las tablas en una instrucción. Una operación join es una operación que hace coincidir las filas en una tabla con las filas de manera tal que las columnas de ambas tablas puedan ser colocadas lado a lado en los resultados de la consulta como si éstos vinieran de una sola tabla.
Joins:
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL OUTER JOIN
SELF JOIN
CROSS JOIN
NATURAL JOIN
Realizan operaciones sobre un grupo o un set de datos. Comúnmente son utilizadas con la cláusula GROUP BY para generar grupos y resultados sobre esos grupos.
Algunas funciones comunes
AVG: Para promediar valores
COUNT: Para contar registros
COUNT(DISTINCT): Para contar registros únicos.
MAX: Devuelve el valor máximo.
MIN: Devuelve el valor mínimo.
SUM: Para sumar valores.
STRING_AGG: concatena una lista de strings y pone un separador entre ellos.
ARRAY_AGG: acepta un grupo de valores y los retorna en un array.
Identificar duplicados con COUNT
La función COUNT puede ser utilizada para contar duplicados.
GROUP BY
Es posible utilizar más de una función de agregación en un mismo query. Todos los campos individuales que están junto a la función de agregación en la clausula SELECT debe ir tambien en la clausula GROUP BY.
HAVING
A diferencia de la cláusula WHERE, la cláusula HAVING se refiere a grupos, no a filas individuales. Se aplica a los resultados después de haberse agrupado (en la cláusula GROUP BY). Tiene la ventaja de permitir el uso de funciones establecidas tales como AVG o SUM, que no se pueden utilizar en la cláusula WHERE a menos que se coloquen dentro de una subconsulta.
Sirven para combinar el resultado de varios queries como un solo resultado.
El número de columnas y el orden en el SELECT de ambos queries debe de ser el mismo.
Los tipos de datos deben de ser compatibles.
UNION excluye del resultado los duplicados en la combinación.
UNION ALL incluye en el resultado los duplicados den la combinación.
Sintaxis:
SELECT campo(s)
FROM nombre_tabla_A
UNION | UNION ALL | INTERSECT
SELECT campos(s)
FROM nombre_tabla_B
Proporcionan una forma de acceder a datos en múltiples tablas con una sola consulta. Puede agregarse a una instrucción SELECT, INSERT, UPDATE o DELETE para permitir a esa instrucción utilizar los resultados de la consulta arrojados por la subconsulta. La subconsulta es esencialmente una instrucción SELECT incrustada que actúa como una puerta de entrada a los datos en una segunda tabla.
Se pueden en dos categorías generales:
Las que pueden arrojar múltiples filas
Las que pueden arrojar solamente un valor
Tabla derivada
El resultado de la subconsulta tambien puede ser utilizado como que fuera una tabla asignandole un alias y seleccionar datos de ese resultado.
Una subconsulta tambien puede tener mas subconsultas, como una cadena.
Al utilizar una varias subconsultas es importante ser cuidados ya que puede llegar a afectar significativamente el rendimiento del query.
Es un conjunto de resultados con nombre temporal al que puede hacer referencia dentro de una instrucción SELECT, INSERT, UPDATE o DELETE. El CTE también se la puede usar en una vista.
Sintaxis:
WITH + alias + AS + (QUERY CTE) Query que hace referencia al CTE
WITH Actor_films AS (
SELECT actor_id, COUNT(film_id) total_films
FROM film_actor
GROUP BY actor_id
)
SELECT A.actor_id, A.first_name, A.last_name, F.total_films
FROM actor A
INNER JOIN Actor_films F ON F.actor_id = A.actor_id
WHERE F.total_films >= 40;
Es una tabla virtual que a diferencia de las tablas base persistentes, en la vista no hay datos almacenados.
Permiten seleccionar información específica de una o más tablas, basada en las instrucciones de consulta en esa definición. Una vez que se crea una vista, simplemente se invoca llamándola por su nombre en una consulta como en una tabla base. Los datos entonces se presentan como si se buscaran en una tabla base.
CREATE VIEW actors_with_A
AS
SELECT actor_id, last_name, first_name
FROM actor
WHERE last_name LIKE 'A%';
SELECT *
FROM actors_with_A;
SELECT A.first_name, A.last_name, F.title, F.description
FROM film F
INNER JOIN film_actor FA ON FA.film_id = F.film_id
INNER JOIN actors_with_A A ON A.actor_id = FA.actor_id
WHERE F.rental_duration > 5;
DCL (Data Control Language)
Lenguaje de control de datos
Un usuario en una base de datos puede ser una persona o un programa de aplicación
Permiten controlar quién o qué usuario tiene acceso a objetos específicos en la base de datos.
Las instrucciones DCL permiten controlar el tipo de acceso que cada usuario tiene a los objetos de una base de datos.
Las principales instrucciones DCL son:
GRANT y REVOKE.
Ejemplos:
GRANT para dar permiso de lectura a una tabla.
REVOKE para quitar todos los permisos a un usuario sobre una tabla.
GRANT + Privilegios + ON + nombre_objeto + TO nombre_usuario;
REVOKE + Privilegios + ON + nombre_objeto + FROM nombre_usuario;
GRANT sentencia para otorgar permisos.
SELECT para asignar permiso de lectura sobre la tabla especificada.
INSERT para asignar permiso de inserción sobre la tabla especificada.
UPDATE para asignar permiso de actualización sobre la tabla especificada.
DELETE para asignar permiso de eliminación sobre la tabla especificada.
ON luego de este texto se indica el nombre de la tabla a la cual se le quiere asignar los permisos.
TO luego de este texto se indica el nombre del usuario al cual se le quiere asignar los permisos.
ALL PRIVILEGES para asignar todos los permisos sin listarlos uno por uno.
Roles
Para evitar asignar permisos de forma individual a cada usuario, los grupos de permisos se pueden agrupar por roles y luego asignar el rol a un usuario.
Un usuario puede tener más de un rol y un rol puede tener muchos permisos y usuarios.
El contenido de este curso esta diseñado para alguien que tiene cero o poco conocimiento sobre base de datos y desea aprender desde lo mas basico hasta aprender conceptos mas avanzados de SQL.
¿Que es una Base de Datos?
Existen muchas definiciones de lo que es una base de datos, incluso la definicion ha cambiado con el tiempo pero todas esas definiciones tienen en comun en que una base de datos es: una colección de datos organizada en un formato estructurado.
Existen muchos tipos de bases de datos con muchos propositos, en este curso aprenderemos sobre las bases de datos relacionales.
RDBMS
Un sistema de gestión de base de datos relacional (RDBMS) es una referencia más específica al software de base de datos subyacente que permite a los usuarios mantenerlo.
Ejemplos:
Motores de bases de datos relacionales
Oracle
Microsoft SQL Server
PostgreSQL
MySQL
Entre los conceptos que se aprenderán estan:
Introducción a las bases de datos relacionales
Que es Postgres
Queries tipo DML
Select
Insert
Update
Delete
Queries tipo DDL
Creación de tablas
Alter Table
Eliminación de tablas y objetos
Integridad de datos o Constraints
Queries tipo DCL
Como funcionan los Joins.
Subconsultas o subqueries
Funciones de agregación
Common Table Expressions
Vistas