SlideShare una empresa de Scribd logo
1 de 92
* 
Javier Roig Garro 
dunbit@hotmail.com 
dunbit.blogspot.com 
@Dunbit
*Bases de datos relacionares, conceptos 
*1. Creación de Tablas 
*2. Sintaxis básica de Select 
*3. Filtrar datos con Where 
*4. Funciones integradas 
*5. Agrupar y totalizar columnas 
*6. Consultas de varias tablas 
*7. Consultas de inserción, actualización y eliminación 
*8. Consultas avanzadas 
* 
2
* 
0.1. Que son las bases de datos relacionares 
0.2. Conceptos de creación de tablas 
0.3. Tipos básicos de datos 
0.4. Base de datos 
3
*SQL  Structured Query Language 
*Instrucciones que forman Sentencias 
*Sigue una estructura determinada 
*Facilita comunicación con bases de datos 
*RDBMS  Relational Database Managment System 
*Programa que gestiona la información 
*Local  Escritorio  Ejemplo MS. Access 
*Servidor Equipo independiente  Ejemplo Oracle 
* 
4
LOCAL CLIENTE 
SERVIDOR 
* 
5
*Base de datos simple  almacén de información  
Ej. Excel 
*Base de datos relacionales  almacena 
información en estructuras relacionadas 
lógicamente 
*Catalogo de datos  información de la estructura 
 Tablas de sistema 
*Componentes básicos 
*Tablas, filas, columnas 
*Relaciones, identificadores, índices 
* 
6
* 
©Manual Imprescindible SQL 
7
* 
* Tablas formadas por 
* Filas (tuplas) y Columnas (campos) 
* Contiene información coherente 
* Todas las filas tienen la misma estructura pero distinta información 
* Relaciones 
* Sólo entre campos comunes de las tablas 
* Identificadores 
* Cada campo se tiene que poder identificar de forma única 
* Tabla + clave primaria + campo 
* Clave primaria (PK, Primary Key) identifica una fila 
* Clave Externa (FK, Foreing Key)  identifica una fila de otra tabla 
8
* Reglas para unificar estructura base de datos 
* Reducir redundancia de datos 
* Simplificar dependencias 
*Primera forma normal 
* Cada campo contiene información indivisible 
* No tiene que haber grupos de valores repetidos 
*Segunda forma normal 
* Tiene que tener una clave primaria única que identifique a 
toda la fila 
*Tercera forma normal 
* No tiene que haber dependencias transitivas entre tablas 
* 
9
* 
Cada campo contiene 
información indivisible 
©Manual Imprescindible SQL 
10
* 
No tiene que haber grupos 
de valores repetidos 
©Manual Imprescindible SQL 
11
*Integridad de la información 
* Definir tipo, longitud, campo obligatorio, rango de 
valores… 
*Tipos básicos 
* Boolean (TinyInt): si o no 
* Char: texto de longitud fija 
* Varchar: texto de longitud variable 
* Int: número entero 
* Float: número con decimales 
* Date: fecha 
* Binary: números binarios 
* 
12
Tenemos clientes que disponen de varios 
almacenes y necesitamos guardar los datos 
generales, la dirección principal, la dirección 
de facturación si es distinta y la dirección de los 
diferentes almacenes. 
*Crear en papel la estructura básica de las 
tablas con sus campos y relaciones. 
*Identificar los tipos básicos de los datos 
* 
13
*Configuración en modo desarrollador 
*Recursos instalación 
*Instalador de la Base de datos 
* http://dev.mysql.com/downloads/windows/installer/ 
*Entorno de trabajo mySQL WorkBench 
* http://dev.mysql.com/downloads/workbench 
*Prerrequisitos 
* Microsoft .NET Framework 4 Client Profile 
* Visual C++ Redistributable for Visual Studio 2013 
* 
14
*Funciones 
*Administración del servidor 
*Editor SQL 
*Editor de diagramas de base de datos 
*Análisis de rendimiento 
*Entorno 
*Dividido en paneles y fichas 
*Archivo, Edición, Vista, Consulta, base de 
* 
datos, servidor, herramientas, código 
15
* 
1.1. Sintaxis básica 
1.2. Tipos de datos MySQL 
1.3. Crear tablas en WorkBench 
17
*CREATE [ TEMPORARY ] TABLE [ IF NOT EXISTS ] 
nombre_tbl (definición_campos,...) 
*Temporary  crea tabla temporal 
*If not exist  evita el error si existe la tabla 
*Constraint  clave primaria 
CREATE TABLE libros ( codigo INTEGER NOT NULL, 
signatura CHAR(10) NOT NULL, titulo VARCHAR(40), 
autor VARCHAR(40), disponible CHAR(1), 
CONSTRAINT PK_libros PRIMARY KEY (codigo)); 
* 
18
*Sintaxis definición campo 
Nombre_campo Tipo_Datos [ NOT NULL | 
NULL ] [ DEFAULT default_value] [ AUTO _ 
INCREMENT ] [ UNIQUE [ KEY ] | [ PRIMARY ] 
KEY ] [ COMMENT 'string'] 
*Not Null, Null: acepta nulos 
*Default: valor por defecto 
*Auto_increment: autonuméricos 
*Unique: valor único, clave primaria 
*Comment: comentarios 
* 
19
Documentación on line: 
http://dev.mysql.com/doc/refman/5.7/en/data-types.html 
* 
* Tipos Numéricos Enteros 
* BIT 
* TINYINT 
* SMALLINT 
* MEDIUMINT 
* INT 
* INTEGER 
* BIGINT 
* Tipos Numéricos Decimales 
* DECIMAL 
* NUMERIC 
* Tipos Numéricos Coma flotante 
* REAL 
* DOUBLE 
* FLOAT 
* Tipos Fecha y Hora 
* DATE 
* TIME 
* TIMESTAMP 
* DATETIME 
* YEAR 
* Tipos de datos de Texto 
* CHAR 
* VARCHAR 
* BINARY 
* VARBINARY 
* TINYBLOB 
* BLOB 
* MEDIUMBLOB 
* LONGBLOB 
* TINYTEXT 
* TEXT 
* MEDIUMTEXT 
* LONGTEXT 
20
Documentación sobre el editor 
http://dev.mysql.com/doc/workbench/en/wb-table-editor.html 
* 
21
* 
2.0 Sintaxis básica 
2.1. Alias y campos calculados 
2.2. Ordenación de los datos 
22
*Instrucción básica 
*SELECT expr_select FROM tabla 
* Expr_select: información que se pueden seleccionar 
* From tabla: tabla de dónde mostrar los datos 
*Expresiones 
** :Todos los campos de la tabla 
*Nom_col1, nom_col2: sólo las columnas 
especificadas y en la posición que se indiquen 
*Distinct, sólo valores distintos 
* 
23
*select * from libros 
*select autor, titulo from libros 
*select distinct autor from libros 
* 
24
*Alias permite identificar mejor una columna 
*Cada columna puede tener un alias 
*No se puede utilizar con el * 
*Si el alias tiene espacios en blanco tiene que ir 
entre comillas simples ‘alias con blancos’ 
*Sintaxis 
*SELECT nom_col AS alias FROM tabla 
* 
25
*Campos calculados son los que no están en la 
tabla 
*Añadir columnas 
*Con valor fijo 
*Con una función independiente 
*Con operaciones aritméticas de otros campos 
*Con operaciones de texto de otros campos 
*Cálculos de fechas 
* 
26
* SELECT prestamo as 'F. Prestamo' FROM test.prestamos; 
* SELECT titulo, autor , 'Consultar Disponibilidad' as Disponible from libros 
* SELECT *, current_date() as 'fecha actual' FROM test.prestamos; 
* SELECT codigo, codigo + 100, codigo / 2, codigo *3 FROM test.prestamos; 
* SELECT substring(titulo,1,3) as Comienzo , titulo from libros; 
* SELECT alta, current_date(), (to_days(current_date())-to_days(alta))/365 
* 
as Antiguedad FROM test.socios; 
27
* 
* Sintaxis 
* SELECT expr_selec FROM tabla ORDER BY expr_orden 
[ASC|DESC] 
* Expr_orden: uno o más campos por los que queremos ordenar el 
resultado. 
* ASC o DESC: orden ascendente o descendente. Por defecto es 
ascendente 
* Los campos de ordenación pueden no estar presentes en la 
selección 
* Si hay varias columnas, se organiza la información en función 
de la posición de los campos de izquierda a derecha 
* Si tenemos columnas calculadas en el select también 
podemos usarlas en el 
28
* select * from libros order by autor 
* select * from libros order by autor, titulo 
* select * from libros order by disponible desc, autor, titulo 
* select substring(signatura,1,1),signatura,titulo from libros 
order by 1 
* select substring(signatura,1,1) as indice,signatura,titulo 
from libros order by indice 
* 
29
* 
3.1. Filtros simples 
3.2. Otros filtros con el operador LIKE 
3.3. Filtrar datos NULL 
3.4. Usar operadores AND y OR 
3.5 Almacenar consultas en Vistas 
30
* 
*Sintáxis 
*select expr_select from tabla where expr_filtro 
* Expr_filtro: condición que se tiene que cumplir para 
seleccionar la fila (TRUE) 
* Esta expresión puede devolver TRUE/FALSE/NULL 
*Operadores 
*=, <>, >, <, >=, =< 
*Tener en cuenta los tipos de datos 
*Los textos van entre comillas simples ‘’ 
*IN se utiliza para listas 
31
*select * from libros where disponible='S‘ 
*SELECT * FROM socios WHERE cp IN 
(23001,23021) 
*SELECT * FROM socios WHERE cp >'23008' 
* 
32
*Buscar por patrones y no por coincidencias exactas 
*Sintaxis 
*SELECT expr_select FROM tabla where campo like 
patrón 
* Patrón, contiene la información que se busca junto con 
caracteres comodín ‘%’ o ‘_’ 
* % identifica a un número indeterminado de caracteres 
* _ identifica a un único caracter. 
* MS Access utiliza ‘*’ y ‘?’ 
* Se pueden usar con NOT 
* 
33
*SELECT * FROM test.libros WHERE titulo LIKE 'El%'; 
*SELECT * FROM test.libros WHERE titulo LIKE '%del%‘ 
*SELECT * FROM test.libros WHERE titulo LIKE '%s‘ 
*SELECT * FROM test.socios WHERE cp LIKE '230_1'; 
*SELECT * FROM test.socios WHERE cp NOT LIKE '230_1'; 
* 
34
*Libros que el título empiecen por ‘El’ 
*SELECT * FROM libros WHERE titulo LIKE 'El%'; 
*Libros que el título contenga ‘del’ 
*SELECT * FROM libros WHERE titulo LIKE '%del%‘ 
*Libros que el título acaba en ‘s’ 
*SELECT * FROM libros WHERE titulo LIKE '%s‘ 
*Socios con el código postal que empiece por 230 y acabe 
en 1 
*SELECT * FROM socios WHERE cp LIKE '230_1'; 
*Socios con el código postal que no empiece por 230 ni 
acabe por 1 
*SELECT * FROM socios WHERE cp NOT LIKE '230_1'; 
* 
35
*Null no tiene ningún valor 
*Sintaxis 
*SELECT expr_selec FROM tabla WHERE campo IS 
NULL 
* IS NULL, cuando el campo no tiene valor asignado 
* IS NOT NULL, cuando el campo tiene algún valor 
asignado 
* 
36
*SELECT * FROM libros WHERE disponible IS null 
*SELECT * FROM libros WHERE disponible IS NOT 
null 
* 
37
*Utilizan para filtros compuestos por varias 
expresiones 
*Sintaxis 
*SELECT expr_select FROM tabla WHERE expr_filtro 
AND | OR expr_filtro 
* 
* AND: se tienen que cumplir las dos expresiones 
* OR: se tiene que cumplir una de las dos 
*Operador NOT 
*Invierte el resultado de la expresión 
*Uso de paréntesis 
*Agrupa expresiones a evaluar 
38
* select * from libros where disponible='S' and autor='Charte, Francisco’ 
* 
vs 
* select * from libros where disponible='S' or autor='Charte, Francisco’ 
* select * from libros where disponible='S' and not(autor='Charte, 
Francisco') 
* select * from libros where disponible='N' and autor='Charte, Francisco' 
or autor='Li‘ 
vs 
* select * from libros where disponible='N' and (autor='Charte, 
Francisco' or autor='Li') 
39
*Consulta SQL almacenada que se puede 
llamara desde otra consulta. 
*No almacena datos, sólo la consulta 
*Se puede tratar como una tabla para otras 
consultas 
*Se crea el objeto en el schema seleccionado 
*Sintaxis 
*CREATE OR REPLACE VIEW nombre AS 
sentencia sql 
* Nombre: es el nombre de la vista 
* Sentencia sql: consulta sql que queremos 
* 
almacenar 
40
*Utilización 
*Se pueden utilizar en cualquier SELECT 
*Devuelve la información en formato tabla 
*La información está actualizada 
*Modificar una vista 
*ALTER VIEW nombre AS consulta 
*Desde WorkBench  llave inglesa 
*Eliminar vista 
*DROP VIEW nombre 
*Desde WorkBench  botón derecho 
* 
41
* 
42 
* Opciones avanzadas: 
* Algoritmo: Como procesa MySQL la vista 
* Merge (sustituye los campos), Temptable (tabla temporal), 
undefined(automático) 
http://dev.mysql.com/doc/refman/5.7/en/view-algorithms.html 
* Definer, SQL Security: Cuenta que se va a utilizar para crear y para 
consultar. 
* Recomendable utilizar INVOKER (solo los usuarios con permisos) 
http://dev.mysql.com/doc/refman/5.0/en/stored-programs-security.html 
CREATE 
ALGORITHM = UNDEFINED 
DEFINER = `root`@`localhost` 
SQL SECURITY invoker 
VIEW `listasocios` AS 
SELECT `socios`.`apellidos` AS `apellidos`, 
`socios`.`nombre` AS `nombre`, 
`socios`.`alta` AS `alta` 
FROM `socios`
* 
4.1 Que son las funciones 
4.2 Principales funciones de texto 
4.3 Principales funciones de fecha 
4.4 Funciones numéricas 
4.5 Funciones de conversión 
4.6 Funciones de flujo 
43
*Expresiones integradas en el SQL 
*Pueden utilizar parámetros 
*Devuelven un resultado 
*Se pueden utilizar en el Select, Where, Order By… 
*Pueden variar en función del RDBMS 
*Anidar funciones unas como parámetros de otras 
*Ejemplo 
*Select * from socios where YEAR(ALTA)<2005 
*Siendo alta un campo que almacena una fecha, 
Year(alta), devuelve el año de esa fecha 
* 
44
*Dentro de las funciones, las de sistema son las que dan 
información del entorno 
*No suelen tener parámetros 
* Current_date, Current_time, Current_timestamp 
* MS Access: Date, Time, Now 
45 
* Fecha y hora actual 
* Información usuario 
* Current_user, user 
*Ejemplos 
* select current_date(); 
* select current_timestamp; 
* select user(); 
*
*Utilizan un texto o un campo texto cómo 
parámetro de la función 
* Número de caracteres de un texto 
* Char_length (‘texto’) 
* Quitar espacios en blanco de un texto 
* Trim (‘ texto ’)  delante y detrás 
* Trim (leading from ‘ texto ’)  delante 
* Trim (trainling from ‘ texto ‘)  detrás 
* Trim (‘*’ from ‘ **texto**’)  quita el carácter indicado 
* Posición de una cadena en otra 
* Instr(‘texto’, ‘subcadena’)  devuelve cero si no está 
46 
* 
http://dev.mysql.com/doc/refman/5.6/en/string-functions.html
*Extraer parte de un texto 
* Substring(texto, posición inicio, nº carac)  a partir 
de una posición, devuelve el número de caracteres 
que se indique 
* Left (texto, nº)  devuelve el número de 
caracteres de la parte izquierda del texto 
* Right (texto, nº)  devuelve el número de 
caracteres de la parte derecha del texto 
* Mid (texto, pos, nº) hace lo mismo que substring 
47 
*
*SELECT TRIM(RIGHT('1 - casa', LENGTH('1 - casa')- 
INSTR('1 - casa','-'))); 
* quitamos los espacios delante y detrás del texto 
que se devuelve al extraer la parte derecha del 
texto que hay a partir del “-” 
* Para saber cuantos caracteres hay que extraer 
buscamos la posición del “-” 
*¿Cómo sería para extraer lo que haya a la 
izquierda del “-”? 
48 
* Resultado =“casa” 
*
*Permiten obtener y trabajar con partes de una 
fecha 
*Current_date, current_time, current_timestamp 
*Day(fecha), month(fecha), year(fecha), 
hour(fecha), minute(fecha)  devuelven el día, el 
mes y el año de una fecha 
*Date_add(date,INTERVAL expr unit), 
Date_sub(date,INTERVAL expr unit)  suman o 
restan a una fecha días, horas, años …. 
*Datediff(fecha1, fecha2)  número de días que han 
pasado desde las dos fechas 
* SELECT DATEDIFF(CURRENT_DATE(), '2001-09-11')/365 
49 
* 
http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html
*Complementan a los operadores de cálculo 
* Power(número, potencia)  eleva un número a una potencia 
* Sqrt(número)  raíz cuadrada del número 
* Mod(dividendo,divisor)  resto de una división 
* Floor(número)  quita la parte decimal del número 
* Ceil(número) obtiene el número entero superior 
* Truncate(número,pos) quita el número de decimales 
* Round(número)  redondea a partir de 5 en el decimal al 
número superior y sino al inferior 
* SELECT FLOOR(DATEDIFF(CURRENT_DATE(), '2001-09- 
11')/365) as Edad 
50 
* Operaciones 
* Redondeo 
* 
http://dev.mysql.com/doc/refman/5.6/en/numeric-functions.html
*Permiten tratar un valor con un tipo de datos 
distinto 
*En muchos casos la conversión es implícita 
*Cast ( valor AS tipo)  convierte tipos de datos 
* SELECT SUBSTRING('120 cajas de melon',1,3)*10 As 
precio 
*Funciones de formato, no modifican el valor 
*Lower (texto) ,Upper (texto)  Muestra el texto en 
minúsculas o mayúsculas 
*Concat( texto1, texto2,…)  crea una cadena de 
texto con todos los textos 
51 
* 
http://dev.mysql.com/doc/refman/5.6/en/type-conversion.html
*En función del valor de un campo permite 
variar la información que muestra 
*Case when condicion then expresion end 
WHEN floor(datediff(current_date(), fnac)/365) >65 then 'jubilado' 
WHEN floor(datediff(current_date(), fnac)/365) >18 then ' mayor de 
edad' 
ELSE 'menor de edad' end as Situación 
FROM Socios 
* SELECT titulo, CASE disponible 
when 'S' then 'Disponible' 
when 'N' then 'No disponible' 
else 'Consultar' end as disponibilidad 
FROM test.libros; 
52 
* SELECT CASE 
* 
http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html
*Para casos más simples se puede utilizar IF 
* IF(expresion, si se cumple, si no se cumple) 
* IFNULL(expresión, valor si es nulo) 
* SELECT IF( disponible IS NULL, 'NS', disponible) AS 
Disponibilidad FROM test.libros; 
53 
* 
equivalente 
* SELECT IFNULL(DISPONIBLE, 'NS') AS Disponibilidad 
FROM test.libros;
* 
5.1Consultas con GROUP BY 
5.2Funciones de agrupación 
5.3Filtrar datos con WHERE y HAVING 
54
*Agrupar filas de una tabla por uno o varios 
campos 
*Se utiliza para obtener datos cuantitativos de 
los datos 
*Puede ser equivalente a “distinct” 
*Sintaxis 
*SELECT campos FROM tabla GROUP BY campos 
*Ejemplo equivalente 
SELECT autor FROM libros GROUP BY autor 
SELECT DISTINCT autor FROM libros 
55 
* 
http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html
*Realizan operaciones con las filas agrupadas 
56 
* 
*COUNT (campo): cuenta el número de filas que 
tienen valor en el campo especificado dentro del 
grupo (los nulos no los cuenta) 
* Si utilizamos COUNT * , cuenta el número de filas que 
devuelve cada grupo 
*AVG (campo): devuelve la media aritmética para el 
campo de las filas agrupadas 
*MAX (campo),MIN (campo): devuelve el valor 
máximo y mínimo del campo indicado para el grupo 
de filas 
* SUM (campo): devuelve la suma del campo 
indicado en el grupo de filas 
*Se pueden utilizar sin Group By para calcular sobre 
toda la tabla
*SELECT autor, COUNT(titulo) AS ntitulos 
FROM libros 
GROUP BY autor; 
*SELECT disponible, COUNT(disponible), MIN(codigo), 
MAX(codigo) 
FROM libros 
GROUP BY disponible; 
57 
* 
(¿qué pasa si utilizamos COUNT (*)?) 
*SELECT MIN(alta) as ‘socio más antigüo’ 
FROM socios
*Utilizamos WHERE para filtrar las filas antes de 
que se agrupen 
*Ejemplo: 
*Quita primero las filas que no tienen valor en el 
campo disponible y después las agrupa 
SELECT disponible, COUNT(disponible), MIN(codigo), 
MAX(codigo) 
FROM libros 
WHERE disponible IS NOT null 
GROUP BY disponible; 
58 
*
*Utilizar HAVING para filtrar según el resultado 
de la agrupación 
*Ejemplo 
*Mostrar los autores de los que tenemos más de 
un libro en la biblioteca 
*SELECT autor, COUNT(titulo) AS ntitulos 
FROM libros 
GROUP BY autor 
HAVING COUNT(titulo)>1; 
59 
*
* 
6.1Utilización de JOIN 
6.2Diferentes tipos de relaciones 
60
*Es la base del modelo relacional 
*Las tablas tienen que tener uno o más campos con 
datos comunes 
*Los nombres de los campos pueden ser distintos 
*La clave primaria de una tabla (Primary Key) se 
convierte en clave ajena (Foreign Key) en la tabla 
relacionada 
*Se crean índices en la FK para agilizar las consultas. 
*Permiten mantener la integridad referencial de dos 
tablas 
*Se definen en la clausula FROM los campos de unión 
61 
*
*SELECT * FROM tabla1 JOIN|LEFTJOIN |RIGHT 
JOIN tabla2 ON tabla1.campo=tabla2.campo; 
*JOIN, tipo de unión entre tablas 
*ON, los campos que están vinculados 
*Con alias para las tablas favorece la redacción del 
join 
*SELECT * FROM tabla1 alias1 JOIN|LEFTJOIN 
|RIGHT JOIN tabla2 alias2 ON 
alias1.campo=alias2.campo; 
62 
* 
http://dev.mysql.com/doc/refman/5.6/en/join.html
*SELECT * 
FROM test.libros li JOIN test.prestamos pr ON 
li.codigo=pr.codigo; 
*SELECT * 
FROM test.libros li JOIN test.prestamos pr ON 
li.codigo=pr.codigo 
WHERE left(signatura,1)='T' 
ORDER BY titulo; 
* 
63
*Es el tipo de relación por defecto 
*Muestra sólo los registros que estén 
relacionados en las dos tablas 
*Sintaxis. Se puede especificar con la palabra 
INNER JOIN o se puede dejar por defecto sólo 
con JOIN 
SELECT * 
From socios so INNER JOIN prestamos pr ON 
(so.nif=pr.nif); 
64 
*
*Muestra todos los registros de la tabla primera y 
sólo los relacionados de la segunda 
*Los campos que no tengan valor los rellena con 
nulos 
*Sintaxis. Utilizamos la palabra LEFT JOIN 
*Ejemplo. 
*Muestra todos los socios y los prestamos que 
tengan. 
SELECT * 
FROM socios so LEFT JOIN prestamos pr ON 
(so.nif=pr.nif); 
65 
*
*Muestra todos los registros de la segunda tabla 
del Join 
*Los campos que vengan de la primera tabla y 
que no tengan valor los rellena con nulos 
*Sintaxis. Utiliza la palabra RIGHT JOIN 
*Ejemplo. Muestra los prestamos y todos los 
libros, aunque no tengan prestamos 
SELECT * 
FROM prestamos pr RIGHT JOIN libros li ON 
(pr.codigo=li.codigo); 
66
*Una fila de una tabla coincide con una fila de la 
tabla relacionada. 
*Se utiliza para desdoblar tablas con muchos campos 
en dos 
67 
*Relaciones 1:1 
Ejemplo: Cada socio 
tiene sólo una 
dirección 
*
*Relaciones 1:N 
*Una fila de una tabla coincide con varias de la 
tabla relacionada. 
*Es la relación más común 
68 
Ejemplo: un socio 
puede tener varios 
prestamos 
*
* Varias filas de una tabla se relacionan con varias filas de 
la tabla relacionada 
* Hay que crear una tamba intermedia para conseguir 
relaciones 1:N 
Ejemplo: un actor participa en varias películas y en una 
película intervienen varios actores 
69 
*Relaciones M:N 
*
*Crea un diagrama EER básico con las tablas, claves 
primarias, claves ajenas y sus relaciones 
* Vamos a crear una pequeña base de datos para guardar 
las películas que nos gustan. 
* Tenemos la películas almacenadas en diferentes soportes, 
por ejemplo DVD, CD pero quiero tener la posibilidad de 
crear nuevos tipos de soportes 
* Por otro lado quiero tener catalogadas las películas por 
género. 
* Los actores tienen su propia ficha y en una película 
participan varios actores y un mismo actor interviene en 
varias películas 
* Las películas también pueden tener varios directores y 
por supuesto, los directores pueden dirigir varias películas 
70 
*
* 
7.1Añadir nuevos registros 
7.2Modificar datos de registros existentes 
7.3Eliminar registros 
7.4 Integrar consultas en procedimientos 
71
*Introducir nuevos datos en una tabla 
*Sintaxis 
*INSERT INTO tabla [(lista campos)] VALUES (lista de 
valores) 
* Tabla, es el nombre de la tabla a la que queremos 
añadir valores 
* Lista de campos, entre paréntesis y separados por 
comas, los nombres de los campos donde queremos 
insertar información. Si queremos insertar información 
en todos los campos no hace falta especificarlos 
* Lista de valores, entre paréntesis y separados por 
comas, los valores que queremos insertar en el mismo 
orden que la lista de campos. 
72 
*
*Crear un registro sin especificar los campos 
* INSERT INTO libros VALUES( 12, ‘G SHA inc', ‘La incógnita de 
Newton', ‘Shaw, Catherine', 'S'); 
*Crear un registro especificando todos los campos 
* INSERT INTO libros (codigo,signatura, titulo, autor, 
disponible)VALUES( 12, 'G SHA inc', 'La incógnita de Newton', 
'Shaw, Catherine', 'S'); 
*Crear un registro introduciendo parte de los campso  los 
no especificados asigna Null 
* INSERT INTO libros (codigo,signatura, titulo, autor)VALUES( 12, 
'G SHA inc', 'La incógnita de Newton', 'Shaw, Catherine'); 
73 
*
*Hay que tener en cuenta las claves primarias y 
las claves ajenas. 
*Se genera error si intentamos introducir un 
registro con la misma clave 
*También se genera si intentamos introducir un 
registro con un valor en la clave ajena que no 
existe 
*INSERT INTO prestamos VALUES(5,'62877137F' 
(suponemos que el libro de código 33 no existe) 
74 
,33,current_date); 
*
*Podemos insertar en una tabla valores resultantes 
de una consulta siempre que sean del tipo de datos 
adecuado 
*Para hacer una copia de datos 
INSERT INTO disponibles 
SELECT codigo, signatura FROM libros WHERE 
disponible='S'; 
*Para introducir un cálculo 
INSERT INTO libros 
SELECT max(codigo) +1, 'T CHA exec', 'Excel 2013', 
'Charte, Francisco','S‘ FROM libros; 
75 
*
*Para actualizar datos existentes de una tabla 
utilizamos la clausula UPDATE 
*Sintaxis 
*UPDATE tabla 
SET campo=valor, campo=valor 
[WHERE condición] 
*Update Tabla, es de la que queremos cambiar 
información 
*Campo=valor, hay que especificar para cada campo 
que valor queremos actualizar. Si no se especifica 
el campo, este queda sin modificar 
*Where Condición, si no se especifica condición se 
actualiza toda la tabla 
76 
*
*Actualizar todos los apellidos a mayúsculas 
update socios 
set apellidos=upper(apellidos); 
update socios 
set apellidos=upper(apellidos) 
where nif='23727319S'; 
update socios 
set apellidos=upper(apellidos) 
where cp like '2302%'; 
(pueden dar aviso del motor de bases de datos por ser muy insegura una 
actualización múltiple) 
77 
*Actualiza sólo un registro 
*Actualizar varios registros 
*
*Permite especificar una o más instrucciones dentro 
de una transacción 
*Una transacción se puede deshacer después de 
realizarse 
*Comandos 
*Start Transaction, comienzan las instrucciones de la 
transacción 
*Commit, almacena permanentemente los cambios 
*Rollback, vuelve los datos a como estaban en la 
base antes de la instrucción Start Transaction 
*Set, establece el comportamiento por defecto 
78 
* 
http://dev.mysql.com/doc/refman/5.7/en/commit.html
*Ejecuta las instrucciones hasta el rollback o commit 
* START TRANSACTION; Inicia la transacción 
* UPDATE socios  Actualiza los datos 
SET apellidos=Upper(apellidos) 
WHERE cp LIKE '2302%‘; 
* SELECT * FROM socios;  Muestra los nuevos datos 
* ROLLBACK;  Deshace los cambios 
* SELECT * FROM socios;  Muestra los datos anteriores 
79 
*
*Borramos todos los datos de una fila, no sólo unos 
campos. 
*Si eliminamos todas las filas de una tabla, sigue 
quedando la estructura para insertar nuevos registros 
*Para borrar una tabla y sus datos tenemos que utilizar 
DROP Table 
*Sintaxis 
*DELETE FROM tabla WHERE condición 
* Tabla, es de la que se quiera eliminar el registro 
* Where, todas las filas que cumplan la condición son 
eliminadas 
* Si no se utiliza Where elimina todos los datos de la tabla 
80 
*
*Eliminar los socios que se han dado de alta en 
un mes 
DELETE FROM socios 
WHERE MONTH(alta)=7; 
*Eliminar todos los prestamos 
DELETE FROM prestamos; 
81 
*
*Encapsula varias sentencias SQL 
*Podemos utilizar parámetros 
*Se ejecuta con CALL 
*Sintaxis Creación procedimiento 
*CREATE PROCEDURE nombre (parámetros) 
82 
*Procedimiento Almacenado 
BEGIN 
* 
Instrucciones SQL 
END 
* Nombre: como se va a guardar en la base de datos 
* Parámetros: lista de campos con tipo, ejemplo (p_id int) 
* Instrucciones: código SQL válido 
http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html
*Utilizar CALL para ejecutar un procedimiento 
almacenado creado con CREATE PROCEDURE 
*Sintaxis 
*CALL nombre-proc (valores); 
* Nombre-proc, es el nombre con el que se creó el 
procedimiento 
* Valores, si el procedimiento tiene parámetros hay 
que indicar entre paréntesis los valores 
83 
* 
http://dev.mysql.com/doc/refman/5.6/en/call.html
*Inserta una nueva reserva y actualiza la 
disponibilidad 
CREATE PROCEDURE `AltaPrestamo`(p_id int , p_nif 
char(9), p_codigo int) 
BEGIN 
INSERT INTO prestamos 
values (p_id,p_nif,p_codigo, current_date); 
UPDATE libros 
SET disponible = 'N' 
WHERE codigo = p_codigo; 
84 
* 
END
*Llama al procedimiento ‘AltaPrestamo’ 
*CALL test.AltaPrestamo(17, '62877137F', 13); 
*Llama al procedimiento, utilizando variables 
*SET @p_id = 17; 
SET @p_nif = '62877137F'; 
SET @p_codigo = 13; 
CALL test.AltaPrestamo(@p_id, @p_nif, 
@p_codigo); 
85 
*
86 
* 
*Insertar con transacciones 
* Utilizar función integrada Row_count() para saber cuantas 
filas se han actualizado 
* Utilizar IF… Then.. End para decidir el ROLLBACK 
…. 
START TRANSACTION; 
INSERT INTO prestamos 
VALUES (p_id,p_nif,p_codigo, current_date); 
UPDATE libros SET disponible = 'N' WHERE codigo 
= p_codigo AND disponible='S'; 
IF (select row_count() ) =0 THEN ROLLBACK; 
end if; 
COMMIT; 
…. 
http://dev.mysql.com/doc/refman/5.6/en/if.html 
http://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_row-count
* 
8.1 Subconsultas 
8.2 Consultas con tablas derivadas 
8.3 Consultas de Unión 
87
*Ejecutamos un Select dentro de otro Select 
*Suelen ejecutarse para seleccionar o para filtrar 
información 
*Múltiples operadores 
* = si la subconsulta devuelve un valor 
* IN si la subconsulta devuelve varias filas 
*Ejemplo “=“ 
*Muestra los datos del último socio que se ha dado 
de alta 
*SELECT Nif, nombre, apellidos 
FROM socios 
WHERE alta = (SELECT max(alta) FROM socios); 
* 
http://dev.mysql.com/doc/refman/5.6/en/subqueries.html 
88
*Si la subconsulta puede devolver varios 
resultados 
*Muestra el nombre de los socios que tienen 
prestamos o que vivan cerca de los que tienen 
prestamos (tienen el mismo CP). 
*SELECT Nombre, apellidos 
FROM socios 
WHERE cp IN (SELECT cp FROM prestamos pr JOIN 
socios so ON pr.nif=so.nif); 
89 
*
*Son tablas virtuales que se utilizan en consultas 
con tablas reales 
*No se definen en la estructura de la base de 
datos. 
*Se crean de forma automática a partir de un 
Select 
*Se utilizan para cruzar datos agrupados con 
datos sin agrupar. 
*Se definen en el FROM 
*Utilizar un alias para el JOIN 
90 
*
*Importante el alias de la subconsulta (maxpr) para 
definir el JOIN. 
*Si no se define en el ON, hace un producto 
cartesiano de las dos tablas 
*Mostrar la fecha del último préstamo de cada socio 
*SELECT nombre,apellidos,Ultprestamo 
FROM socios so JOIN (SELECT MAX(prestamo) as 
Ultprestamo, nif FROM prestamos GROUP BY nif) 
maxpr ON so.nif=maxpr.nif; 
91 
*
*Muestra “select” de datos independientes con la 
palabra UNION en medio. 
*Tienen que tener el mismo número y tipo de 
columnas 
*Se pueden unir varios “select” 
*Sintaxis 
*SELECT campos FROM tabla 
UNION [ALL] 
SELECT campos FROM tabla 
* UNION muestra sólo las filas que no se repitan 
* UNION ALL muestra todos los datos de las dos consultas 
92 
*
*Muestra los NIF de los socios actuales que tienen 
prestamos ahora y el NIF de los que ya están de baja. 
* Si un socio tiene más de un préstamo sólo aparece una vez 
* SELECT nif FROM prestamos 
UNION 
SELECT nif FROM prestamosexsocios; 
* Si un socio tiene más de un préstamo aparece repetido más 
de una vez 
* SELECT nif FROM prestamos 
UNION ALL 
SELECT nif FROM prestamosexsocios; 
93 
*

Más contenido relacionado

La actualidad más candente

Consultas Basicas En Sql Server 2005
Consultas Basicas En Sql Server 2005Consultas Basicas En Sql Server 2005
Consultas Basicas En Sql Server 2005shavila
 
Introducción a sql consultas y criterios de selección
Introducción a sql consultas y criterios de selecciónIntroducción a sql consultas y criterios de selección
Introducción a sql consultas y criterios de selecciónM.c. Omar Jasso
 
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datosNathaly Arias
 
Juan iza TRABAJO
Juan iza TRABAJOJuan iza TRABAJO
Juan iza TRABAJOJUANIZA1991
 
Puntos de funcion
Puntos de funcionPuntos de funcion
Puntos de funcionoscarin2013
 
CONSULTA SQL ROMERO
CONSULTA SQL ROMEROCONSULTA SQL ROMERO
CONSULTA SQL ROMERONANCY ROMERO
 
Apuntes.13
Apuntes.13Apuntes.13
Apuntes.13plufitos
 
Sql Consultas MáS Complejas
Sql Consultas MáS ComplejasSql Consultas MáS Complejas
Sql Consultas MáS Complejasalexmerono
 
Cuadro de sentencias con descripcion y ejemplo
Cuadro de sentencias con descripcion y ejemploCuadro de sentencias con descripcion y ejemplo
Cuadro de sentencias con descripcion y ejemploWilliam Sánchez
 

La actualidad más candente (19)

Consultas Basicas En Sql Server 2005
Consultas Basicas En Sql Server 2005Consultas Basicas En Sql Server 2005
Consultas Basicas En Sql Server 2005
 
Introducción a sql consultas y criterios de selección
Introducción a sql consultas y criterios de selecciónIntroducción a sql consultas y criterios de selección
Introducción a sql consultas y criterios de selección
 
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos
 
Sentencia select
Sentencia selectSentencia select
Sentencia select
 
Juan iza TRABAJO
Juan iza TRABAJOJuan iza TRABAJO
Juan iza TRABAJO
 
Puntos de funcion
Puntos de funcionPuntos de funcion
Puntos de funcion
 
CONSULTA SQL ROMERO
CONSULTA SQL ROMEROCONSULTA SQL ROMERO
CONSULTA SQL ROMERO
 
Base de datos.
Base de datos.Base de datos.
Base de datos.
 
Consultas SQL
Consultas SQLConsultas SQL
Consultas SQL
 
Unidad IV SQL
Unidad IV SQLUnidad IV SQL
Unidad IV SQL
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
Ejemplo ddl dml
Ejemplo ddl dmlEjemplo ddl dml
Ejemplo ddl dml
 
Introducción a sql server
Introducción a sql serverIntroducción a sql server
Introducción a sql server
 
Apuntes.13
Apuntes.13Apuntes.13
Apuntes.13
 
Manipulacion de Bases de Datos
Manipulacion de Bases de DatosManipulacion de Bases de Datos
Manipulacion de Bases de Datos
 
Sql Consultas MáS Complejas
Sql Consultas MáS ComplejasSql Consultas MáS Complejas
Sql Consultas MáS Complejas
 
SENTENCIAS DE SQL SERVER
SENTENCIAS DE SQL SERVERSENTENCIAS DE SQL SERVER
SENTENCIAS DE SQL SERVER
 
Cuadro de sentencias con descripcion y ejemplo
Cuadro de sentencias con descripcion y ejemploCuadro de sentencias con descripcion y ejemplo
Cuadro de sentencias con descripcion y ejemplo
 
Funcion buscarv
Funcion buscarvFuncion buscarv
Funcion buscarv
 

Destacado

Aprende a usar tu SmartPhone
Aprende a usar tu SmartPhoneAprende a usar tu SmartPhone
Aprende a usar tu SmartPhoneJavier Roig
 
Herramientas en Internet para tu negocio
Herramientas en Internet para tu negocioHerramientas en Internet para tu negocio
Herramientas en Internet para tu negocioJavier Roig
 
Smartphone y geoposicionamiento GPS
Smartphone y geoposicionamiento GPSSmartphone y geoposicionamiento GPS
Smartphone y geoposicionamiento GPSJavier Roig
 
Taller de competencia digital para el empleo
Taller de competencia digital para el empleoTaller de competencia digital para el empleo
Taller de competencia digital para el empleoJavier Roig
 
Competencia digital participación social
Competencia digital participación socialCompetencia digital participación social
Competencia digital participación socialJavier Roig
 
Redes domésticas seguras
Redes domésticas segurasRedes domésticas seguras
Redes domésticas segurasJavier Roig
 
Funcionamiento basico de las redes locales
Funcionamiento basico de las redes localesFuncionamiento basico de las redes locales
Funcionamiento basico de las redes localesCristian Neira
 

Destacado (7)

Aprende a usar tu SmartPhone
Aprende a usar tu SmartPhoneAprende a usar tu SmartPhone
Aprende a usar tu SmartPhone
 
Herramientas en Internet para tu negocio
Herramientas en Internet para tu negocioHerramientas en Internet para tu negocio
Herramientas en Internet para tu negocio
 
Smartphone y geoposicionamiento GPS
Smartphone y geoposicionamiento GPSSmartphone y geoposicionamiento GPS
Smartphone y geoposicionamiento GPS
 
Taller de competencia digital para el empleo
Taller de competencia digital para el empleoTaller de competencia digital para el empleo
Taller de competencia digital para el empleo
 
Competencia digital participación social
Competencia digital participación socialCompetencia digital participación social
Competencia digital participación social
 
Redes domésticas seguras
Redes domésticas segurasRedes domésticas seguras
Redes domésticas seguras
 
Funcionamiento basico de las redes locales
Funcionamiento basico de las redes localesFuncionamiento basico de las redes locales
Funcionamiento basico de las redes locales
 

Similar a Saca partido a tus bases de datos (20)

Ejemploddl dml-ok
Ejemploddl dml-okEjemploddl dml-ok
Ejemploddl dml-ok
 
Set de instrucciones my sql
Set de instrucciones my sqlSet de instrucciones my sql
Set de instrucciones my sql
 
Fundamentos de BD - Unidad 6 lenguaje sql
Fundamentos de BD - Unidad 6 lenguaje sqlFundamentos de BD - Unidad 6 lenguaje sql
Fundamentos de BD - Unidad 6 lenguaje sql
 
SQL(DQL).pdf
SQL(DQL).pdfSQL(DQL).pdf
SQL(DQL).pdf
 
Sql presentacion
Sql presentacionSql presentacion
Sql presentacion
 
unidad-4
 unidad-4 unidad-4
unidad-4
 
95795044 unidad-4
95795044 unidad-495795044 unidad-4
95795044 unidad-4
 
95795044 unidad-4
95795044 unidad-495795044 unidad-4
95795044 unidad-4
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
95795044 unidad-4
95795044 unidad-495795044 unidad-4
95795044 unidad-4
 
95795044 unidad-4
95795044 unidad-495795044 unidad-4
95795044 unidad-4
 
Sentencias Sql
Sentencias SqlSentencias Sql
Sentencias Sql
 
MYSQL DDL DML.pdf
MYSQL DDL DML.pdfMYSQL DDL DML.pdf
MYSQL DDL DML.pdf
 
BD cap 5 SQL.pdf
BD cap 5  SQL.pdfBD cap 5  SQL.pdf
BD cap 5 SQL.pdf
 
Guia referencia mc
Guia referencia mcGuia referencia mc
Guia referencia mc
 
95795044 unidad-4
95795044 unidad-495795044 unidad-4
95795044 unidad-4
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
Precentacion
PrecentacionPrecentacion
Precentacion
 

Más de Javier Roig

Herramientas web
Herramientas webHerramientas web
Herramientas webJavier Roig
 
Gestión de las redes sociales y de las nuevas tecnolgías
Gestión de las redes sociales y de las nuevas tecnolgíasGestión de las redes sociales y de las nuevas tecnolgías
Gestión de las redes sociales y de las nuevas tecnolgíasJavier Roig
 
Saca Partido A Tu Ordenador
Saca Partido A Tu OrdenadorSaca Partido A Tu Ordenador
Saca Partido A Tu OrdenadorJavier Roig
 
Programacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NETProgramacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NETJavier Roig
 
Introducción a la programación
Introducción a la programaciónIntroducción a la programación
Introducción a la programaciónJavier Roig
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETJavier Roig
 

Más de Javier Roig (6)

Herramientas web
Herramientas webHerramientas web
Herramientas web
 
Gestión de las redes sociales y de las nuevas tecnolgías
Gestión de las redes sociales y de las nuevas tecnolgíasGestión de las redes sociales y de las nuevas tecnolgías
Gestión de las redes sociales y de las nuevas tecnolgías
 
Saca Partido A Tu Ordenador
Saca Partido A Tu OrdenadorSaca Partido A Tu Ordenador
Saca Partido A Tu Ordenador
 
Programacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NETProgramacion de aplicaciones Web con ASP.NET
Programacion de aplicaciones Web con ASP.NET
 
Introducción a la programación
Introducción a la programaciónIntroducción a la programación
Introducción a la programación
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NET
 

Último

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 

Último (12)

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 

Saca partido a tus bases de datos

  • 1. * Javier Roig Garro dunbit@hotmail.com dunbit.blogspot.com @Dunbit
  • 2. *Bases de datos relacionares, conceptos *1. Creación de Tablas *2. Sintaxis básica de Select *3. Filtrar datos con Where *4. Funciones integradas *5. Agrupar y totalizar columnas *6. Consultas de varias tablas *7. Consultas de inserción, actualización y eliminación *8. Consultas avanzadas * 2
  • 3. * 0.1. Que son las bases de datos relacionares 0.2. Conceptos de creación de tablas 0.3. Tipos básicos de datos 0.4. Base de datos 3
  • 4. *SQL  Structured Query Language *Instrucciones que forman Sentencias *Sigue una estructura determinada *Facilita comunicación con bases de datos *RDBMS  Relational Database Managment System *Programa que gestiona la información *Local  Escritorio  Ejemplo MS. Access *Servidor Equipo independiente  Ejemplo Oracle * 4
  • 6. *Base de datos simple  almacén de información  Ej. Excel *Base de datos relacionales  almacena información en estructuras relacionadas lógicamente *Catalogo de datos  información de la estructura  Tablas de sistema *Componentes básicos *Tablas, filas, columnas *Relaciones, identificadores, índices * 6
  • 8. * * Tablas formadas por * Filas (tuplas) y Columnas (campos) * Contiene información coherente * Todas las filas tienen la misma estructura pero distinta información * Relaciones * Sólo entre campos comunes de las tablas * Identificadores * Cada campo se tiene que poder identificar de forma única * Tabla + clave primaria + campo * Clave primaria (PK, Primary Key) identifica una fila * Clave Externa (FK, Foreing Key)  identifica una fila de otra tabla 8
  • 9. * Reglas para unificar estructura base de datos * Reducir redundancia de datos * Simplificar dependencias *Primera forma normal * Cada campo contiene información indivisible * No tiene que haber grupos de valores repetidos *Segunda forma normal * Tiene que tener una clave primaria única que identifique a toda la fila *Tercera forma normal * No tiene que haber dependencias transitivas entre tablas * 9
  • 10. * Cada campo contiene información indivisible ©Manual Imprescindible SQL 10
  • 11. * No tiene que haber grupos de valores repetidos ©Manual Imprescindible SQL 11
  • 12. *Integridad de la información * Definir tipo, longitud, campo obligatorio, rango de valores… *Tipos básicos * Boolean (TinyInt): si o no * Char: texto de longitud fija * Varchar: texto de longitud variable * Int: número entero * Float: número con decimales * Date: fecha * Binary: números binarios * 12
  • 13. Tenemos clientes que disponen de varios almacenes y necesitamos guardar los datos generales, la dirección principal, la dirección de facturación si es distinta y la dirección de los diferentes almacenes. *Crear en papel la estructura básica de las tablas con sus campos y relaciones. *Identificar los tipos básicos de los datos * 13
  • 14. *Configuración en modo desarrollador *Recursos instalación *Instalador de la Base de datos * http://dev.mysql.com/downloads/windows/installer/ *Entorno de trabajo mySQL WorkBench * http://dev.mysql.com/downloads/workbench *Prerrequisitos * Microsoft .NET Framework 4 Client Profile * Visual C++ Redistributable for Visual Studio 2013 * 14
  • 15. *Funciones *Administración del servidor *Editor SQL *Editor de diagramas de base de datos *Análisis de rendimiento *Entorno *Dividido en paneles y fichas *Archivo, Edición, Vista, Consulta, base de * datos, servidor, herramientas, código 15
  • 16. * 1.1. Sintaxis básica 1.2. Tipos de datos MySQL 1.3. Crear tablas en WorkBench 17
  • 17. *CREATE [ TEMPORARY ] TABLE [ IF NOT EXISTS ] nombre_tbl (definición_campos,...) *Temporary  crea tabla temporal *If not exist  evita el error si existe la tabla *Constraint  clave primaria CREATE TABLE libros ( codigo INTEGER NOT NULL, signatura CHAR(10) NOT NULL, titulo VARCHAR(40), autor VARCHAR(40), disponible CHAR(1), CONSTRAINT PK_libros PRIMARY KEY (codigo)); * 18
  • 18. *Sintaxis definición campo Nombre_campo Tipo_Datos [ NOT NULL | NULL ] [ DEFAULT default_value] [ AUTO _ INCREMENT ] [ UNIQUE [ KEY ] | [ PRIMARY ] KEY ] [ COMMENT 'string'] *Not Null, Null: acepta nulos *Default: valor por defecto *Auto_increment: autonuméricos *Unique: valor único, clave primaria *Comment: comentarios * 19
  • 19. Documentación on line: http://dev.mysql.com/doc/refman/5.7/en/data-types.html * * Tipos Numéricos Enteros * BIT * TINYINT * SMALLINT * MEDIUMINT * INT * INTEGER * BIGINT * Tipos Numéricos Decimales * DECIMAL * NUMERIC * Tipos Numéricos Coma flotante * REAL * DOUBLE * FLOAT * Tipos Fecha y Hora * DATE * TIME * TIMESTAMP * DATETIME * YEAR * Tipos de datos de Texto * CHAR * VARCHAR * BINARY * VARBINARY * TINYBLOB * BLOB * MEDIUMBLOB * LONGBLOB * TINYTEXT * TEXT * MEDIUMTEXT * LONGTEXT 20
  • 20. Documentación sobre el editor http://dev.mysql.com/doc/workbench/en/wb-table-editor.html * 21
  • 21. * 2.0 Sintaxis básica 2.1. Alias y campos calculados 2.2. Ordenación de los datos 22
  • 22. *Instrucción básica *SELECT expr_select FROM tabla * Expr_select: información que se pueden seleccionar * From tabla: tabla de dónde mostrar los datos *Expresiones ** :Todos los campos de la tabla *Nom_col1, nom_col2: sólo las columnas especificadas y en la posición que se indiquen *Distinct, sólo valores distintos * 23
  • 23. *select * from libros *select autor, titulo from libros *select distinct autor from libros * 24
  • 24. *Alias permite identificar mejor una columna *Cada columna puede tener un alias *No se puede utilizar con el * *Si el alias tiene espacios en blanco tiene que ir entre comillas simples ‘alias con blancos’ *Sintaxis *SELECT nom_col AS alias FROM tabla * 25
  • 25. *Campos calculados son los que no están en la tabla *Añadir columnas *Con valor fijo *Con una función independiente *Con operaciones aritméticas de otros campos *Con operaciones de texto de otros campos *Cálculos de fechas * 26
  • 26. * SELECT prestamo as 'F. Prestamo' FROM test.prestamos; * SELECT titulo, autor , 'Consultar Disponibilidad' as Disponible from libros * SELECT *, current_date() as 'fecha actual' FROM test.prestamos; * SELECT codigo, codigo + 100, codigo / 2, codigo *3 FROM test.prestamos; * SELECT substring(titulo,1,3) as Comienzo , titulo from libros; * SELECT alta, current_date(), (to_days(current_date())-to_days(alta))/365 * as Antiguedad FROM test.socios; 27
  • 27. * * Sintaxis * SELECT expr_selec FROM tabla ORDER BY expr_orden [ASC|DESC] * Expr_orden: uno o más campos por los que queremos ordenar el resultado. * ASC o DESC: orden ascendente o descendente. Por defecto es ascendente * Los campos de ordenación pueden no estar presentes en la selección * Si hay varias columnas, se organiza la información en función de la posición de los campos de izquierda a derecha * Si tenemos columnas calculadas en el select también podemos usarlas en el 28
  • 28. * select * from libros order by autor * select * from libros order by autor, titulo * select * from libros order by disponible desc, autor, titulo * select substring(signatura,1,1),signatura,titulo from libros order by 1 * select substring(signatura,1,1) as indice,signatura,titulo from libros order by indice * 29
  • 29. * 3.1. Filtros simples 3.2. Otros filtros con el operador LIKE 3.3. Filtrar datos NULL 3.4. Usar operadores AND y OR 3.5 Almacenar consultas en Vistas 30
  • 30. * *Sintáxis *select expr_select from tabla where expr_filtro * Expr_filtro: condición que se tiene que cumplir para seleccionar la fila (TRUE) * Esta expresión puede devolver TRUE/FALSE/NULL *Operadores *=, <>, >, <, >=, =< *Tener en cuenta los tipos de datos *Los textos van entre comillas simples ‘’ *IN se utiliza para listas 31
  • 31. *select * from libros where disponible='S‘ *SELECT * FROM socios WHERE cp IN (23001,23021) *SELECT * FROM socios WHERE cp >'23008' * 32
  • 32. *Buscar por patrones y no por coincidencias exactas *Sintaxis *SELECT expr_select FROM tabla where campo like patrón * Patrón, contiene la información que se busca junto con caracteres comodín ‘%’ o ‘_’ * % identifica a un número indeterminado de caracteres * _ identifica a un único caracter. * MS Access utiliza ‘*’ y ‘?’ * Se pueden usar con NOT * 33
  • 33. *SELECT * FROM test.libros WHERE titulo LIKE 'El%'; *SELECT * FROM test.libros WHERE titulo LIKE '%del%‘ *SELECT * FROM test.libros WHERE titulo LIKE '%s‘ *SELECT * FROM test.socios WHERE cp LIKE '230_1'; *SELECT * FROM test.socios WHERE cp NOT LIKE '230_1'; * 34
  • 34. *Libros que el título empiecen por ‘El’ *SELECT * FROM libros WHERE titulo LIKE 'El%'; *Libros que el título contenga ‘del’ *SELECT * FROM libros WHERE titulo LIKE '%del%‘ *Libros que el título acaba en ‘s’ *SELECT * FROM libros WHERE titulo LIKE '%s‘ *Socios con el código postal que empiece por 230 y acabe en 1 *SELECT * FROM socios WHERE cp LIKE '230_1'; *Socios con el código postal que no empiece por 230 ni acabe por 1 *SELECT * FROM socios WHERE cp NOT LIKE '230_1'; * 35
  • 35. *Null no tiene ningún valor *Sintaxis *SELECT expr_selec FROM tabla WHERE campo IS NULL * IS NULL, cuando el campo no tiene valor asignado * IS NOT NULL, cuando el campo tiene algún valor asignado * 36
  • 36. *SELECT * FROM libros WHERE disponible IS null *SELECT * FROM libros WHERE disponible IS NOT null * 37
  • 37. *Utilizan para filtros compuestos por varias expresiones *Sintaxis *SELECT expr_select FROM tabla WHERE expr_filtro AND | OR expr_filtro * * AND: se tienen que cumplir las dos expresiones * OR: se tiene que cumplir una de las dos *Operador NOT *Invierte el resultado de la expresión *Uso de paréntesis *Agrupa expresiones a evaluar 38
  • 38. * select * from libros where disponible='S' and autor='Charte, Francisco’ * vs * select * from libros where disponible='S' or autor='Charte, Francisco’ * select * from libros where disponible='S' and not(autor='Charte, Francisco') * select * from libros where disponible='N' and autor='Charte, Francisco' or autor='Li‘ vs * select * from libros where disponible='N' and (autor='Charte, Francisco' or autor='Li') 39
  • 39. *Consulta SQL almacenada que se puede llamara desde otra consulta. *No almacena datos, sólo la consulta *Se puede tratar como una tabla para otras consultas *Se crea el objeto en el schema seleccionado *Sintaxis *CREATE OR REPLACE VIEW nombre AS sentencia sql * Nombre: es el nombre de la vista * Sentencia sql: consulta sql que queremos * almacenar 40
  • 40. *Utilización *Se pueden utilizar en cualquier SELECT *Devuelve la información en formato tabla *La información está actualizada *Modificar una vista *ALTER VIEW nombre AS consulta *Desde WorkBench  llave inglesa *Eliminar vista *DROP VIEW nombre *Desde WorkBench  botón derecho * 41
  • 41. * 42 * Opciones avanzadas: * Algoritmo: Como procesa MySQL la vista * Merge (sustituye los campos), Temptable (tabla temporal), undefined(automático) http://dev.mysql.com/doc/refman/5.7/en/view-algorithms.html * Definer, SQL Security: Cuenta que se va a utilizar para crear y para consultar. * Recomendable utilizar INVOKER (solo los usuarios con permisos) http://dev.mysql.com/doc/refman/5.0/en/stored-programs-security.html CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY invoker VIEW `listasocios` AS SELECT `socios`.`apellidos` AS `apellidos`, `socios`.`nombre` AS `nombre`, `socios`.`alta` AS `alta` FROM `socios`
  • 42. * 4.1 Que son las funciones 4.2 Principales funciones de texto 4.3 Principales funciones de fecha 4.4 Funciones numéricas 4.5 Funciones de conversión 4.6 Funciones de flujo 43
  • 43. *Expresiones integradas en el SQL *Pueden utilizar parámetros *Devuelven un resultado *Se pueden utilizar en el Select, Where, Order By… *Pueden variar en función del RDBMS *Anidar funciones unas como parámetros de otras *Ejemplo *Select * from socios where YEAR(ALTA)<2005 *Siendo alta un campo que almacena una fecha, Year(alta), devuelve el año de esa fecha * 44
  • 44. *Dentro de las funciones, las de sistema son las que dan información del entorno *No suelen tener parámetros * Current_date, Current_time, Current_timestamp * MS Access: Date, Time, Now 45 * Fecha y hora actual * Información usuario * Current_user, user *Ejemplos * select current_date(); * select current_timestamp; * select user(); *
  • 45. *Utilizan un texto o un campo texto cómo parámetro de la función * Número de caracteres de un texto * Char_length (‘texto’) * Quitar espacios en blanco de un texto * Trim (‘ texto ’)  delante y detrás * Trim (leading from ‘ texto ’)  delante * Trim (trainling from ‘ texto ‘)  detrás * Trim (‘*’ from ‘ **texto**’)  quita el carácter indicado * Posición de una cadena en otra * Instr(‘texto’, ‘subcadena’)  devuelve cero si no está 46 * http://dev.mysql.com/doc/refman/5.6/en/string-functions.html
  • 46. *Extraer parte de un texto * Substring(texto, posición inicio, nº carac)  a partir de una posición, devuelve el número de caracteres que se indique * Left (texto, nº)  devuelve el número de caracteres de la parte izquierda del texto * Right (texto, nº)  devuelve el número de caracteres de la parte derecha del texto * Mid (texto, pos, nº) hace lo mismo que substring 47 *
  • 47. *SELECT TRIM(RIGHT('1 - casa', LENGTH('1 - casa')- INSTR('1 - casa','-'))); * quitamos los espacios delante y detrás del texto que se devuelve al extraer la parte derecha del texto que hay a partir del “-” * Para saber cuantos caracteres hay que extraer buscamos la posición del “-” *¿Cómo sería para extraer lo que haya a la izquierda del “-”? 48 * Resultado =“casa” *
  • 48. *Permiten obtener y trabajar con partes de una fecha *Current_date, current_time, current_timestamp *Day(fecha), month(fecha), year(fecha), hour(fecha), minute(fecha)  devuelven el día, el mes y el año de una fecha *Date_add(date,INTERVAL expr unit), Date_sub(date,INTERVAL expr unit)  suman o restan a una fecha días, horas, años …. *Datediff(fecha1, fecha2)  número de días que han pasado desde las dos fechas * SELECT DATEDIFF(CURRENT_DATE(), '2001-09-11')/365 49 * http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html
  • 49. *Complementan a los operadores de cálculo * Power(número, potencia)  eleva un número a una potencia * Sqrt(número)  raíz cuadrada del número * Mod(dividendo,divisor)  resto de una división * Floor(número)  quita la parte decimal del número * Ceil(número) obtiene el número entero superior * Truncate(número,pos) quita el número de decimales * Round(número)  redondea a partir de 5 en el decimal al número superior y sino al inferior * SELECT FLOOR(DATEDIFF(CURRENT_DATE(), '2001-09- 11')/365) as Edad 50 * Operaciones * Redondeo * http://dev.mysql.com/doc/refman/5.6/en/numeric-functions.html
  • 50. *Permiten tratar un valor con un tipo de datos distinto *En muchos casos la conversión es implícita *Cast ( valor AS tipo)  convierte tipos de datos * SELECT SUBSTRING('120 cajas de melon',1,3)*10 As precio *Funciones de formato, no modifican el valor *Lower (texto) ,Upper (texto)  Muestra el texto en minúsculas o mayúsculas *Concat( texto1, texto2,…)  crea una cadena de texto con todos los textos 51 * http://dev.mysql.com/doc/refman/5.6/en/type-conversion.html
  • 51. *En función del valor de un campo permite variar la información que muestra *Case when condicion then expresion end WHEN floor(datediff(current_date(), fnac)/365) >65 then 'jubilado' WHEN floor(datediff(current_date(), fnac)/365) >18 then ' mayor de edad' ELSE 'menor de edad' end as Situación FROM Socios * SELECT titulo, CASE disponible when 'S' then 'Disponible' when 'N' then 'No disponible' else 'Consultar' end as disponibilidad FROM test.libros; 52 * SELECT CASE * http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html
  • 52. *Para casos más simples se puede utilizar IF * IF(expresion, si se cumple, si no se cumple) * IFNULL(expresión, valor si es nulo) * SELECT IF( disponible IS NULL, 'NS', disponible) AS Disponibilidad FROM test.libros; 53 * equivalente * SELECT IFNULL(DISPONIBLE, 'NS') AS Disponibilidad FROM test.libros;
  • 53. * 5.1Consultas con GROUP BY 5.2Funciones de agrupación 5.3Filtrar datos con WHERE y HAVING 54
  • 54. *Agrupar filas de una tabla por uno o varios campos *Se utiliza para obtener datos cuantitativos de los datos *Puede ser equivalente a “distinct” *Sintaxis *SELECT campos FROM tabla GROUP BY campos *Ejemplo equivalente SELECT autor FROM libros GROUP BY autor SELECT DISTINCT autor FROM libros 55 * http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html
  • 55. *Realizan operaciones con las filas agrupadas 56 * *COUNT (campo): cuenta el número de filas que tienen valor en el campo especificado dentro del grupo (los nulos no los cuenta) * Si utilizamos COUNT * , cuenta el número de filas que devuelve cada grupo *AVG (campo): devuelve la media aritmética para el campo de las filas agrupadas *MAX (campo),MIN (campo): devuelve el valor máximo y mínimo del campo indicado para el grupo de filas * SUM (campo): devuelve la suma del campo indicado en el grupo de filas *Se pueden utilizar sin Group By para calcular sobre toda la tabla
  • 56. *SELECT autor, COUNT(titulo) AS ntitulos FROM libros GROUP BY autor; *SELECT disponible, COUNT(disponible), MIN(codigo), MAX(codigo) FROM libros GROUP BY disponible; 57 * (¿qué pasa si utilizamos COUNT (*)?) *SELECT MIN(alta) as ‘socio más antigüo’ FROM socios
  • 57. *Utilizamos WHERE para filtrar las filas antes de que se agrupen *Ejemplo: *Quita primero las filas que no tienen valor en el campo disponible y después las agrupa SELECT disponible, COUNT(disponible), MIN(codigo), MAX(codigo) FROM libros WHERE disponible IS NOT null GROUP BY disponible; 58 *
  • 58. *Utilizar HAVING para filtrar según el resultado de la agrupación *Ejemplo *Mostrar los autores de los que tenemos más de un libro en la biblioteca *SELECT autor, COUNT(titulo) AS ntitulos FROM libros GROUP BY autor HAVING COUNT(titulo)>1; 59 *
  • 59. * 6.1Utilización de JOIN 6.2Diferentes tipos de relaciones 60
  • 60. *Es la base del modelo relacional *Las tablas tienen que tener uno o más campos con datos comunes *Los nombres de los campos pueden ser distintos *La clave primaria de una tabla (Primary Key) se convierte en clave ajena (Foreign Key) en la tabla relacionada *Se crean índices en la FK para agilizar las consultas. *Permiten mantener la integridad referencial de dos tablas *Se definen en la clausula FROM los campos de unión 61 *
  • 61. *SELECT * FROM tabla1 JOIN|LEFTJOIN |RIGHT JOIN tabla2 ON tabla1.campo=tabla2.campo; *JOIN, tipo de unión entre tablas *ON, los campos que están vinculados *Con alias para las tablas favorece la redacción del join *SELECT * FROM tabla1 alias1 JOIN|LEFTJOIN |RIGHT JOIN tabla2 alias2 ON alias1.campo=alias2.campo; 62 * http://dev.mysql.com/doc/refman/5.6/en/join.html
  • 62. *SELECT * FROM test.libros li JOIN test.prestamos pr ON li.codigo=pr.codigo; *SELECT * FROM test.libros li JOIN test.prestamos pr ON li.codigo=pr.codigo WHERE left(signatura,1)='T' ORDER BY titulo; * 63
  • 63. *Es el tipo de relación por defecto *Muestra sólo los registros que estén relacionados en las dos tablas *Sintaxis. Se puede especificar con la palabra INNER JOIN o se puede dejar por defecto sólo con JOIN SELECT * From socios so INNER JOIN prestamos pr ON (so.nif=pr.nif); 64 *
  • 64. *Muestra todos los registros de la tabla primera y sólo los relacionados de la segunda *Los campos que no tengan valor los rellena con nulos *Sintaxis. Utilizamos la palabra LEFT JOIN *Ejemplo. *Muestra todos los socios y los prestamos que tengan. SELECT * FROM socios so LEFT JOIN prestamos pr ON (so.nif=pr.nif); 65 *
  • 65. *Muestra todos los registros de la segunda tabla del Join *Los campos que vengan de la primera tabla y que no tengan valor los rellena con nulos *Sintaxis. Utiliza la palabra RIGHT JOIN *Ejemplo. Muestra los prestamos y todos los libros, aunque no tengan prestamos SELECT * FROM prestamos pr RIGHT JOIN libros li ON (pr.codigo=li.codigo); 66
  • 66. *Una fila de una tabla coincide con una fila de la tabla relacionada. *Se utiliza para desdoblar tablas con muchos campos en dos 67 *Relaciones 1:1 Ejemplo: Cada socio tiene sólo una dirección *
  • 67. *Relaciones 1:N *Una fila de una tabla coincide con varias de la tabla relacionada. *Es la relación más común 68 Ejemplo: un socio puede tener varios prestamos *
  • 68. * Varias filas de una tabla se relacionan con varias filas de la tabla relacionada * Hay que crear una tamba intermedia para conseguir relaciones 1:N Ejemplo: un actor participa en varias películas y en una película intervienen varios actores 69 *Relaciones M:N *
  • 69. *Crea un diagrama EER básico con las tablas, claves primarias, claves ajenas y sus relaciones * Vamos a crear una pequeña base de datos para guardar las películas que nos gustan. * Tenemos la películas almacenadas en diferentes soportes, por ejemplo DVD, CD pero quiero tener la posibilidad de crear nuevos tipos de soportes * Por otro lado quiero tener catalogadas las películas por género. * Los actores tienen su propia ficha y en una película participan varios actores y un mismo actor interviene en varias películas * Las películas también pueden tener varios directores y por supuesto, los directores pueden dirigir varias películas 70 *
  • 70. * 7.1Añadir nuevos registros 7.2Modificar datos de registros existentes 7.3Eliminar registros 7.4 Integrar consultas en procedimientos 71
  • 71. *Introducir nuevos datos en una tabla *Sintaxis *INSERT INTO tabla [(lista campos)] VALUES (lista de valores) * Tabla, es el nombre de la tabla a la que queremos añadir valores * Lista de campos, entre paréntesis y separados por comas, los nombres de los campos donde queremos insertar información. Si queremos insertar información en todos los campos no hace falta especificarlos * Lista de valores, entre paréntesis y separados por comas, los valores que queremos insertar en el mismo orden que la lista de campos. 72 *
  • 72. *Crear un registro sin especificar los campos * INSERT INTO libros VALUES( 12, ‘G SHA inc', ‘La incógnita de Newton', ‘Shaw, Catherine', 'S'); *Crear un registro especificando todos los campos * INSERT INTO libros (codigo,signatura, titulo, autor, disponible)VALUES( 12, 'G SHA inc', 'La incógnita de Newton', 'Shaw, Catherine', 'S'); *Crear un registro introduciendo parte de los campso  los no especificados asigna Null * INSERT INTO libros (codigo,signatura, titulo, autor)VALUES( 12, 'G SHA inc', 'La incógnita de Newton', 'Shaw, Catherine'); 73 *
  • 73. *Hay que tener en cuenta las claves primarias y las claves ajenas. *Se genera error si intentamos introducir un registro con la misma clave *También se genera si intentamos introducir un registro con un valor en la clave ajena que no existe *INSERT INTO prestamos VALUES(5,'62877137F' (suponemos que el libro de código 33 no existe) 74 ,33,current_date); *
  • 74. *Podemos insertar en una tabla valores resultantes de una consulta siempre que sean del tipo de datos adecuado *Para hacer una copia de datos INSERT INTO disponibles SELECT codigo, signatura FROM libros WHERE disponible='S'; *Para introducir un cálculo INSERT INTO libros SELECT max(codigo) +1, 'T CHA exec', 'Excel 2013', 'Charte, Francisco','S‘ FROM libros; 75 *
  • 75. *Para actualizar datos existentes de una tabla utilizamos la clausula UPDATE *Sintaxis *UPDATE tabla SET campo=valor, campo=valor [WHERE condición] *Update Tabla, es de la que queremos cambiar información *Campo=valor, hay que especificar para cada campo que valor queremos actualizar. Si no se especifica el campo, este queda sin modificar *Where Condición, si no se especifica condición se actualiza toda la tabla 76 *
  • 76. *Actualizar todos los apellidos a mayúsculas update socios set apellidos=upper(apellidos); update socios set apellidos=upper(apellidos) where nif='23727319S'; update socios set apellidos=upper(apellidos) where cp like '2302%'; (pueden dar aviso del motor de bases de datos por ser muy insegura una actualización múltiple) 77 *Actualiza sólo un registro *Actualizar varios registros *
  • 77. *Permite especificar una o más instrucciones dentro de una transacción *Una transacción se puede deshacer después de realizarse *Comandos *Start Transaction, comienzan las instrucciones de la transacción *Commit, almacena permanentemente los cambios *Rollback, vuelve los datos a como estaban en la base antes de la instrucción Start Transaction *Set, establece el comportamiento por defecto 78 * http://dev.mysql.com/doc/refman/5.7/en/commit.html
  • 78. *Ejecuta las instrucciones hasta el rollback o commit * START TRANSACTION; Inicia la transacción * UPDATE socios  Actualiza los datos SET apellidos=Upper(apellidos) WHERE cp LIKE '2302%‘; * SELECT * FROM socios;  Muestra los nuevos datos * ROLLBACK;  Deshace los cambios * SELECT * FROM socios;  Muestra los datos anteriores 79 *
  • 79. *Borramos todos los datos de una fila, no sólo unos campos. *Si eliminamos todas las filas de una tabla, sigue quedando la estructura para insertar nuevos registros *Para borrar una tabla y sus datos tenemos que utilizar DROP Table *Sintaxis *DELETE FROM tabla WHERE condición * Tabla, es de la que se quiera eliminar el registro * Where, todas las filas que cumplan la condición son eliminadas * Si no se utiliza Where elimina todos los datos de la tabla 80 *
  • 80. *Eliminar los socios que se han dado de alta en un mes DELETE FROM socios WHERE MONTH(alta)=7; *Eliminar todos los prestamos DELETE FROM prestamos; 81 *
  • 81. *Encapsula varias sentencias SQL *Podemos utilizar parámetros *Se ejecuta con CALL *Sintaxis Creación procedimiento *CREATE PROCEDURE nombre (parámetros) 82 *Procedimiento Almacenado BEGIN * Instrucciones SQL END * Nombre: como se va a guardar en la base de datos * Parámetros: lista de campos con tipo, ejemplo (p_id int) * Instrucciones: código SQL válido http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html
  • 82. *Utilizar CALL para ejecutar un procedimiento almacenado creado con CREATE PROCEDURE *Sintaxis *CALL nombre-proc (valores); * Nombre-proc, es el nombre con el que se creó el procedimiento * Valores, si el procedimiento tiene parámetros hay que indicar entre paréntesis los valores 83 * http://dev.mysql.com/doc/refman/5.6/en/call.html
  • 83. *Inserta una nueva reserva y actualiza la disponibilidad CREATE PROCEDURE `AltaPrestamo`(p_id int , p_nif char(9), p_codigo int) BEGIN INSERT INTO prestamos values (p_id,p_nif,p_codigo, current_date); UPDATE libros SET disponible = 'N' WHERE codigo = p_codigo; 84 * END
  • 84. *Llama al procedimiento ‘AltaPrestamo’ *CALL test.AltaPrestamo(17, '62877137F', 13); *Llama al procedimiento, utilizando variables *SET @p_id = 17; SET @p_nif = '62877137F'; SET @p_codigo = 13; CALL test.AltaPrestamo(@p_id, @p_nif, @p_codigo); 85 *
  • 85. 86 * *Insertar con transacciones * Utilizar función integrada Row_count() para saber cuantas filas se han actualizado * Utilizar IF… Then.. End para decidir el ROLLBACK …. START TRANSACTION; INSERT INTO prestamos VALUES (p_id,p_nif,p_codigo, current_date); UPDATE libros SET disponible = 'N' WHERE codigo = p_codigo AND disponible='S'; IF (select row_count() ) =0 THEN ROLLBACK; end if; COMMIT; …. http://dev.mysql.com/doc/refman/5.6/en/if.html http://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_row-count
  • 86. * 8.1 Subconsultas 8.2 Consultas con tablas derivadas 8.3 Consultas de Unión 87
  • 87. *Ejecutamos un Select dentro de otro Select *Suelen ejecutarse para seleccionar o para filtrar información *Múltiples operadores * = si la subconsulta devuelve un valor * IN si la subconsulta devuelve varias filas *Ejemplo “=“ *Muestra los datos del último socio que se ha dado de alta *SELECT Nif, nombre, apellidos FROM socios WHERE alta = (SELECT max(alta) FROM socios); * http://dev.mysql.com/doc/refman/5.6/en/subqueries.html 88
  • 88. *Si la subconsulta puede devolver varios resultados *Muestra el nombre de los socios que tienen prestamos o que vivan cerca de los que tienen prestamos (tienen el mismo CP). *SELECT Nombre, apellidos FROM socios WHERE cp IN (SELECT cp FROM prestamos pr JOIN socios so ON pr.nif=so.nif); 89 *
  • 89. *Son tablas virtuales que se utilizan en consultas con tablas reales *No se definen en la estructura de la base de datos. *Se crean de forma automática a partir de un Select *Se utilizan para cruzar datos agrupados con datos sin agrupar. *Se definen en el FROM *Utilizar un alias para el JOIN 90 *
  • 90. *Importante el alias de la subconsulta (maxpr) para definir el JOIN. *Si no se define en el ON, hace un producto cartesiano de las dos tablas *Mostrar la fecha del último préstamo de cada socio *SELECT nombre,apellidos,Ultprestamo FROM socios so JOIN (SELECT MAX(prestamo) as Ultprestamo, nif FROM prestamos GROUP BY nif) maxpr ON so.nif=maxpr.nif; 91 *
  • 91. *Muestra “select” de datos independientes con la palabra UNION en medio. *Tienen que tener el mismo número y tipo de columnas *Se pueden unir varios “select” *Sintaxis *SELECT campos FROM tabla UNION [ALL] SELECT campos FROM tabla * UNION muestra sólo las filas que no se repitan * UNION ALL muestra todos los datos de las dos consultas 92 *
  • 92. *Muestra los NIF de los socios actuales que tienen prestamos ahora y el NIF de los que ya están de baja. * Si un socio tiene más de un préstamo sólo aparece una vez * SELECT nif FROM prestamos UNION SELECT nif FROM prestamosexsocios; * Si un socio tiene más de un préstamo aparece repetido más de una vez * SELECT nif FROM prestamos UNION ALL SELECT nif FROM prestamosexsocios; 93 *