Este documento presenta información sobre bases de datos y SQL. Explica cómo crear y eliminar bases de datos y usuarios. También describe cómo crear tablas, añadir y eliminar atributos, y agregar restricciones. Además, cubre cómo insertar, actualizar, eliminar y seleccionar datos de las tablas. Finalmente, introduce conceptos como expresiones, operadores relacionales, predicados simples y compuestos para filtrar datos.
1. BASE DE DATOS
10/01/2023
System clear → para limpiar la pantalla
show databases;
muestra las bases de datos que hay
Muestra las tablas de la base de datos
*Hay más bases de datos porque el profesor eliminó todas las bases de datos en clases. YO
no.
describe base de datos
Creamos una base de datos
2. DDL
1.-Creacion de la base datados
CREATE DATABASE nombre-db;
Drop database nombre_db;
2.-Usuarios:
CREATE USER nombre_usuario[@nombre.host o ip] IDENTIFIED BY
‘contraseña’;
*si no se pone lo resaltado el usuario se puede conectar de cualquier IP
Se puede poner diversas opciones a la contraseña:
CREATE USER nombre_usuario[@nombre.host o ip] IDENTIFIED BY
‘contraseña’[OPCIONES];
opciones:
CREATE USER nombre_usuario[@nombre.host o ip] IDENTIFIED BY
‘contraseña’PASSWORD EXPIRE;
CREATE USER nombre_usuario[@nombre.host o ip] IDENTIFIED BY
‘contraseña’PASSWORD EXPIRE INTERVAL 60 DAY;
MYSQL es sensible a mayusculas:
*las palabras de las palabras no son key sensitive pero lo demas si.
*no se puede usar tilde ni ñ
CREATE USER us1 IDENTIFIED BY ‘Us#1’
Tablas o relaciones
CREATE TABLE npmbre_tabla;
(nombre_columna1 tipo.dato [RESTRICCIONES],
nombre_columna2 tipo.dato [RESTRICCIONES],
nombre_columna3 tipo.dato [RESTRICCIONES],
nombre_columna4 tipo.dato [RESTRICCIONES],
nombre_columna5 tipo.dato [RESTRICCIONES],
);
Tipos de datos:
carecteres
char
varchar
enum(lista valores)
números enteros
integer
Smallint
boolean
0=falso
1=veradero
decimal(p,s)
float
TIME
date
time
timestamp
estudiante
pk matrícula Integer AI(auto Incremental)
UNI,NOT NULL dni varchart(9)
not null nombre varchart(9)
not null nombre varchart(20)
not null nombre varchart(30)
not null fecna date
cuando introducimos enl codigo en
3. podemos introducir el codigo automáticamente lo cual
ver donde esta el directorio
pwd
para importar un script .sql :
source nombre_script.sql
SI el script está en una ruta especifica:
source rutaUbicacionScript
añadir un atributo a una tabla ya existente:
ALTER TABLE nombre.tabla ADD nombre.columna tipo.dato [restricción];
ejemplo:
ALTER TABLE estudiante ADD direccion varchar(30) NOT NULL;
Modificar un atributo existente:
ALTER TABLE nombre.tabla MODIFY nombre.columna tipo.dato [restricción];
Ejemplo:
ALTER TABLE estudiante MODIFY direccion varchar(40) NOT NULL;
alter table estudiante add edad integer not null;
añadimos el atributo edad en la tabla estudiante
4. Eliminar un atributo de la tabla:
ALTER TABLE nombre.tabla DROP nombre.columna;
ejemplo:
ALTER TABLE estudiante DROP edad;
*En la imagen se puede ver que se eliminó la columna edad.
CONSTRAINTS
Tienen la misma estructura. No puede haber dos constraint que se llamen de la misma
forma.
Es una restricción se usa en determinadas restricciones en debidas situaciones no se
puede declarar las restricciones en la misma línea que definición del atributo.
Situaciones en las que se puede usar:
chequeo
clave primaria formada por más de un atributo
indicar clave foránea
Estructura
CONSTRAINT nombre.constraint
5. campo.constraint
CASO 1: clave primaria formada por más de un atributo
CONSTRAINT pk_nombreTablaActual
PRIMARY KEY ( at1, at2, [...]) //no se cierra con ‘ ; ’ si hay atributos despues se pone ‘,’
CASO 2: Chequeo
CONSTRAINT ck_nombreAtributo
CHECK(condición o predicado que se debe cumplir para ese atributo)
CASO 3: Indicar Clave foranea
CONSTRAINT fk_tablaActual.TablaReferenciada //Referenciada = a la que apunta
FOREIGN KEY (at1,[at2,...atN])
REFERENCES tabla.referenciado (at1,[at2,...atN]) // a donde apunta
[ ON UPDATE NO ACTION | ON CASCADE | SET NULL | SET DEFAULT]
[ ON DELETE NO ACTION | ON CASCADE | SET NULL | SET DEFAULT]
Creamos la tabla examen:
*Próxima clase
MySQL 12/01/2023
Creacion de usuarios
CREATE USER usuario@host IDENTIFIED BY ‘contraseña’[EXPIRE PASSWORD
EXPIRE NEVER
EXPIRE DEFAULT//(60 day)
EXPIRE INTERVAL n INTERVALO(day/month/year)
];
Cambiar la contraseña:
ALTER USER usuario IDENTIFIED BY ‘nuevaContraseña’[opciones];
Cambiar el nombre:
RENAME USER nombre.viejo nombre.nuevo;
Podemos usar una cláusula ,cada vez que se crea un objeto, para que se obvie
las tablas que ya están bien hechas.
CREATE objeto IF NOT EXIST nombre.objeto;
CREATE DATABASE IF NOT EXIST db;
CREATE USER IF NOT EXIST usuario IDENTIFIED BY ‘ contraseña’[opciones];
PRÁCTICA
estudiante
examen
pk,fk matricula int
pk modulo varchar(10)
pk fecha date
NN,(0-10) nota decimal(4.2)
n
estudiante
pk matricula int(AI)
INI,NN dni varchar(9)
NN nombre date
6. NN apellidos varchar(35)
NN fecna date
1
Nota: los constraints pueden incluirse en la definición de la tabla como si fuera una tabla
más o bien una vez creada la tabla pueden añadirse mediante el comando alter table.
EJEMPLO:
ALTER TABLE nombre.tabla
ADD CONSTRAINT nombre.constrain
cuerpo.constrain;
MySQL tiene :
[NOT]BETWEEN lim.inferior AND lim.superior
Ejemplo:
x BETWEEN 0 AND 10
x NOT BETWEEN 0 AND 10
7. PAra crear la tabla se debe tener en cuenta un orden de creacion
toda tabla tiene que primero la tabla que tenga su pk si tiene un fk.
Practica 2
8. Tarea → Banco Relacional
16/01/2023
Control de datos:
DCL: Lenguaje de Control de Datos
Encargado de controlar la seguridad de los datos. Determinar las acciones que un determinado
usuario puede hacer un determinado usuario sobre la totalidad o parte de los datos. Cuando
hablamos de las operaciones que un determinado usuario puede realizar tenemos que
distinguir el concepto de privilegio y el concepto de rol.
privilegio → permiso concreto .
rol → perfil que se compone de varios privilegios.
Cuando creamos un usuario este el único privilegio que tiene es el de conexión (se conoce como
USAGE). Por tanto una práctica habitual a la hora de crear base de datos, es crear un usuario
asociado a esa base de datos y asignarle todos los privilegios.
Algunos de los privilegios que disponen en MySQL Son:
INSET →
DELETE →
UPDATE →
SELECT →
9. CREATE →
DROP → Eliminación objetos
ALTER → Modificación de objetos
INDEX → Permite gestión de índices
FILE →
PROCESS → Permite programar en SQL
ALL o ALL PRIVILEGES → Da todos los privilegios
ROLES
Engloba varios privilegios. Existen una serie de roles predefinidos.
ROL:
DBA : tiene todos los privilegios del sistema.
USERADMIN: Gestion de usuarios
PROCESSADMIN: Contiene los privilegios para procesar procesos dentro del servidor.
Podemos definir nuestros propios roles.
a)Asignar privilegios
GRANT
Sintaxis:
GRANT privilegio o privilegios ON object TO usuario [with grant option];//se separan por
comas los privilegios
Para determinar los objetos
*.* = todos los objetos de todas las bases de datos
nombre.db.* = sobre toda una base datos
nombre.bd.nombre.tabla = sobre toda una tabla de datos de una base
de datos
Usuario es el usuario que recibe esos privilegios
La cláusula with grant option si se aplica permite que a su vez pueda aplicarlos a otros usuarios.
Ejemplo
1. Asignar privilegios:
Otorgar todos los privilegios a toda la base y pueda dar los privilegios
GRANT ALL[PRIVILEGES] ON db.* TO us1 WITH GRANT OPTION;
GRANT SELECT ON db.* TO us1;
GRANT ALL ON db.estudiante TO us1;
GRANT SELECT ON db.examen TO us1;
GRANT SELECT,UPDATE ON db.estudiante TO us1;//permitir más de un privilegio a una
tabla de base de datos
FLUSH PRIVILEGES
Si no se usa este comando no se aplican los privilegios hasta que se reinicie la base de datos.
b)denegar privilegios
REVOKE privilegios ON objects FROM usuario;
Ejemplo:
REVOKE GRANT OPTION ON db.* FROM us1;
REVOKE ALL ON db.* FROM us1;
REVOKE SELECT ON db.* FROM us1;
REMOVE ALL ON db.estudiante FROM us1;
ROLES
1.- Crear el rol
2.- Asignarle los permisos al rol
3.- Otorgar el rol al usuario o a los usuarios
4.- Activar el rol
Crear el rol
CREATE ROLE [IF NOT EXISTS] nombre_rol;
*asignamos todos permisos asociados al mismo.
10. Asignar
ejemplo:
En labase de datos mysql
rol administrador → todos los privilegios sobre toda la BD ’db’
rol operador → Solo podra consultar datos de la ‘db’
privilegios + de 1 usuario está permitido y es así ↓ :
DML→ Lenguaje de Manipulación de datos
las fechass admas de ir entre comillas y van en formato americano:
- Los numeros se introducen tal cual sin comillas.
- Los decimales se separan con punto prefereiblemente del teclado
numerico.
- signo mantisa E signo exponencial
Ejemplo:
-0'2E^-4
INSERT →
Sintaxis:
INSERT INTO nombre.tabla VALUES(lista.valores);
PRACTICA:
creamos una tabla:
11. create table
INSERT INTO nombre.tabla (atr1,atri2,[...])VALUES
(lista valores),(lista valores 2)
(lista valores3);
tarea en la tabla estudiante nos metemos
y en exámenes las notas que tenemos
Creación BD Proceso:
1. Crear la Base de Datos.
CREATE DATABASE IF NOT EXISTS empleados;
2. Crear un usuario para la base de datos.
CREATE USER IF NOT EXISTS emple IDENTIFIED BY ‘emple’;
3. Hacer al usuario administrador de la BD
GRANT ALL ON empleados.* TO emple;
FLUSH PRIVILEGES;
4. Ejecutar el script de la creación e inserción.
DELETE.
Para el borrado es :
DELETE FROM nombre_tabla [WHERE condicion]; si se indican se borran las tablas cuales
ponemos la condición entre corchetes, si no ponemos los corchetes se borra.
DELETE FROM TEMPLE
UPDATE.
Verbo para la modificación de filas existentes.
UPDATE nombre_tabla SET atr1=val1 [WHERE condición];
SELECT.
1. SELECT [DISTINCT] -> * Para eliminar filas repetidas (podemos renombrar los nombres d
ellos atributos de las columnas mientras select [distinct] at1 as alias, at2 as alias
-> at1[at2,…,atn] (proyección)
2. FROM nombre_tabla
3. [WHERE condición] <- seleccion
4. [ORDER BY at [DESC] desc es para cuando lo queremos descendiente, si no no se pone nada.
Primero se ordena por el primer criterio. Da preferencia al primero
La operación proyección indica las columnas que queremos obtener de las tablas en cuestión
de manera que con el * indicamos todas las columnas y si quisiéramos unas, pondremos su
nombre.
12. Obtener la comisión, el numero de departamento y el nombre de los empleados cuyo salario
es inferior a 1800 euros clasificándolos por departamentos en orden creciente y por comisión
en orden decreciente en cada departamento
Obtener por orden alfabético los nombres de los departamentos cuyo presupuesto es superior
a los 20000 euros
Obtener por orden alfabético los nombres de los departamentos cuyo director lo es en
funciones. F(Funciones) P(Propiedad)
Para cambiar los nombres utilizaremos el cambio de alias:
13. Una expresión es una combinación de atributos, operadores matemáticos, constantes o
valores cuyo resultado es un valor de cualquier tipo de dato que no sea lógico ya que sería una
condición.
Puedo usar expresiones tanto en la proyección como en la selección.
En el primer caso, vamos a usar siempre un alias (SELECT):
*Obtener los datos de los empleados cuya comisión es superior a su 50% de su salario
La empresa ha decidido dar una ayuda a los empreados que tienen hijos. Consiste en un 2,5 de
su salario por hijos. Obtener el nombre del empledo, num hijos, el salario que tiene y la ayuda
familiar que corresponde a los empleados que tienen ordenado por numero de hijos.
OPERACIONES RELACIONALES.
> MAYOR QUE
< MENOR QUE
>= MAYOR O IGUAL
<= MENOR O IGUAL
= IGUAL
<> DISTINTO
PREDICADOS SIMPLES:
PREDICADO NULL:
expresión is [NOT] NULL. Me permite evaluar el valor especial null. Null no es 0 se utiliza para
que ese valor es inaplicable, inexistente…
Obtener los empleados que tienen comisión
TAREA: HACER TALLER EN SQL.
PREDICADO BETWEEN:
Expresión1 [NOT] BETWEEN expresión2 AND empresión3
Evalúa la pertenencia o no
14. Obtener todos los datos de los empleados que ganan entre 2.500 y 3.000 euros
Obtener orenado por numero de hijos todos los datos de los empleados que tenen menos de 2
hijos o más de 4.
PREDICADO IN:
Expresión [NOT] IN (lista valores)
Coincide o no con algunos valores que hay en la lista.
PREDICADO LIKE:
Expresión_alfanumérica [NOT] LIKE cte_alfanumérica
% Equivale a 0 o n caracteres
_ Equivale a 1 caracter
Se utiliza para comparar datos alfanuméricos. Permite el uso de meta caracteres: Tanto por
ciento que equivale a 0 o n caracteres y el subrayado bajo _ que equivale a un carácter.
Obtener todos los datos de los empleados cuyo dato de pila empieza por A
15. Apellido termine en EZ y su nombre termine en O y tenga al menos tres o más letras
PREDICADOS COMPUESTOS:
Compuestos por predicados simples:
AND: Dos verdadera
OR: Con cumplir una es verdadero
NOT: es verdadero cuando es falso el
Obtener empleados que obtienen más de 1500 euros y tienen hijos. (AND)
Que no tienen comisión o que no tienen hijos. (OR)
Nacieron antes del año 1960 y no tienen hijos o bien nacidos bien nacidos después 1960.
16. LOS PREDICADOS Y LAS SUBCONSULTAS
Obtener por orden alfabético los nombres de los empleados que trabajan en el mismo depto
que Gálvez, Pilar o Fol, Dorotea.
Obtener por orden alfabético los nombres y salarios de los empleados que o bien no tienen
hijos y ganan más de 1200 euros o bien tienen hijos y ganan menos de 1800 euros.
Select nomem, salar from temple where ( numhi = 0 and salar >1200) or (numhi < 0 and salar
<1800) order by 1;
Obtener por orden de número de empleados el nombre, el salario total (salario más comision)
supera al salario mínimo de todos los empleados en 1800 euros.
Escribir en distintas líneas
Workbench nos proporciona una herrmaienta de diseño asistido que nos permite :
- Obtener el modelo logico a partir del modelo fisico (ingenería inversa y me permite a partir
de un fichero o script de creacion DDL obtener el modelo lógico relacional correspondiente)
- Obtener el modelo fisico a partir del modelo logico.
EJ. Obtener el modelo lógico a partir del modelo físico
17. FUNCIONES
FUNCIONES
Es una expresión predefinida que realiza algún tipo de cálculo, debemos tener en cuenta que
existen funciones en el estándar de sql y por lo tanto en todos los sistemas gestores, y otras
que son de mysql específicamente.
PROTOTIPO DE UNA FUNCIÓN:
Es el resumen de la forma de operar que tiene una determinada función y cómo podemos
usarla. Incluye normalmente un pequeño resumen de lo que hace.
nombre_funcion (lista parametros y argumentos)
Tiene que coincidir con orden numero y tipo de dato con la lista de parámetros de la función.
Cada una de estas expresiones puede ser:
- Un valor constante del mismo tipo de dato del parámetro
-Expresión del mismo tipo de dato del parámetro
- Atributo del mismo tipo de dato del parámetro
- Función del mismo tipo de dato del parámetro
Aunque existen distintos criterios para clasificar a las funciones (funciones de tiempo,
Funciones escalares: en las que sus parámetros se sustituyen por un único valos.
a) Son funciones que operan con cadenas de caracteres
LENGTH (cadena)
SUBSTR (cadena, inicio, longitud)
- cadena obligatoria
- inicio num entero posición carácter dentro de la cadena desde donde
partimos
- longitud opcional número indica long subcadena
18. LOCATE (subdadena, cadena)
- subcadena
- cadena
Dado que el nomem de todos mis empleados, utilizando vamos a separar el apellido del
nombre
b) Numéricas
POW(base,exponente)
SQRT(n)
MOD(x,y) resto de x entre y
c) Datos de tipo tiempo
DATE_FORMAT(fecha,formato)
%d/%m/%Y
19. Mostrar las fechas de nacimiento y la fecha de ingreso de todos los
trabajadores
Funciones de agregacion o columna. Agrupamientos.
Conjunto de filas de una tabla sobre el que se aplica la función. A partir de un select con todas
las filas que devuelva el select devuelve un solo grupo.
Consideraciones:
• Antes de aplicar cualquiera de las funciones a los valores,
• Las funciones MIN, MAX y SUM devuelven el mismo tipo de dato que sus valores
• Las funciones AVG
Cuanto se gasta la empresa al mes en salarios y comisiones. Hay que hacerlo separado porque
tiene null comis.
Cuantos empleados han nacido el mismo año:
Nombre y edad ordenado por edad.
20. Se va a jubilar a los empleados que tienen 65 o más a los cuales le corresponde un finiquito de
33 días por año trabajado. Para ello, se supone que su salario sin comisión corresponde a 30
dias. Calcular finiquito.
SALAR / 30 lo que gana en un día
(SALAR/30) * 33 lo que le corresponde de finiquito
(SALAR/30) * 33 * antigüedad
1. Crea yna BD llamada videoclub y dos usuarios, video, con la contraseña video y
operador MySQL BD
Los chekeos hay que meterlos manualmente