CURSO DE MYSQL

PROGRAMAS A UTILIZAR
  1. Mysql Query Browser (My Structured Query Language->Lenguaje de Consulta) es un gestor de base de datos, lo cual nos permite almacenar y administrar información.
  2. Mysql workbench (My Structured Query Language->Lenguaje de Consulta) es un gestor de base de datos, lo cual nos permite almacenar y administrar información.
REQUISITOS BÁSICOS
CONCEPTOS BÁSICOS
¿ Qué es mysql ?
MySQL es el sistema gestor de bases de datos más popular de Internet. Es un proyecto open source que se encuentra disponible en la mayoría de los servidores y proyectos.
MYSQL sirve para almacenar y administrar datos en bases de datos relacionales. MySQL es un sistema gestor de bases de datos relacionales potente y versátil, capaz de satisfacer la mayoría de los proyectos en la web.
¿ Qué es una base de datos ?
Una base de datos es el lugar o espacio donde se almacenan un conjunto de datos y pueden ser utilizados en cualquier momento, cuando el usuario lo solicite.
Una base de datos esta conformado por tablas que estan relacionadas entre sí, y cada tabla esta conformado por filas y columnas.
TIPO DE DATOS
En mysql para poder almacenar datos en una tabla, primero debemos fijarnos en el tipo de datos que es; ya sea (NUMERO-CADENA)
Existen varios tipos de datos para almacenar un valor pero los mas principales son char varchar int tinyint float double date longblob
COMENTARIOS
Los comentarios son bloques de codigo que no son interpretados al ejecutar el programa
                
                    /*
                    comentario
                    de varios
                    bloques de linea
                    */

                    #comentario de una linea
                
            
LÍNEA DE COMANDOS
CREAR UNA NUEVA BASE DE DATOS
Para empezar a guardar datos en una BD primero necesitamos crear una base de datos.
                
                    create database blog;
                    use blog;
                
            
ELIMINAR UNA BASE DE DATOS
                
                    DROP database blog;
                
            
CREAR UNA NUEVA TABLA
Como sabemos que los datos son almacenados en una tabla y por ello también se debe crear una tabla.
                
                    create table curso(
                    codigo char(3) not null,
                    nombre varchar(100) not null,
                    cantidad int not null
                    );
                
            
CAMBIAR NOMBRE DE UNA TABLA
                
                    alter table curso rename to nuevoCurso;
                
            
ELIMINAR UNA TABLA
                
                    drop table curso;
                
            
AGREGAR LLAVE PRIMARIA(primary key)
Una llave primaria es como una identificación. En mysql, las PK(primary key) se utilizan para asignar a un campo o columna de la tabla.
Al asignar una PK(primary key) a la columna, validamos que los datos no puedan repetirse en dicha columna; esto puede ser muy importante para poder evitar duplicidad de datos.
Otras de las ventajas de asignar una PK(primary key) a un campo es que podemos relacionar nuestra tablas con otras de la misma.
                
                    alter table curso
                    add constraint pk1 primary key(codigo);
                
            
AGREGAR LLAVE FORÁNEA(foreign key)
Una llave foránea se usa para unir dos o más tablas de la misma.
Para unir dos o mas tablas debemos tener en cuenta que las columnas de cada tabla deben ser del mismo de tipo de dato.
                
                    alter table cursoDetalle
                    add constraint fk1 foreign key(curso) references curso(codigo);
                
            
CAMBIAR NOMBRE DE UNA COLUMNA
Se recomienda no cambiar el nombre de la columna que contenga una de las llaves(PRIMARIA O FORÁNEA)
                
                    alter table curso
                    change column codigo codigoNuevo char(3) not null;
                
            
CAMBIAR TIPO DE DATO DE UNA COLUMNA
Se recomienda no cambiar el tipo de dato de la columna que contenga una de las llaves(PRIMARIA O FORÁNEA)
                
                    alter table curso
                    modify nombre varchar(200)not null;
                
            
AGREGAR UNA NUEVA COLUMNA
                
                    alter table curso
                    add column nuevaColumna int not null;
                
            
ELIMINAR UNA COLUMNA
                
                    alter table curso
                    drop column nuevaColumna,drop column nuevaColumna2;
                
            
INSERTAR DATOS EN UNA TABLA
                
                    insert into curso(codigo, nombre, cantidad)values('007','redes',20);
                
            
ACTUALIZAR DATOS DE UNA TABLA
                
                    update curso set nombre='diseño web', cantidad=50 where codigo='007';
                
            
ELIMINAR DATOS DE UNA TABLA
                
                    delete from curso where codigo='007';
                
            
SELECT - DISTINCT - ORDER BY
El comando select se utiliza para hacer consultas(mostrar datos de nuestra tabla).
El comando distinct se utiliza para hacer mostrar valores unicos sin duplicados.
El comando order by se utiliza para mostrar datos de forma ascendente o descendente.
                
                    #SELECT
                    select nombre from curso;   #una columna
                    select * from curso;        #todas las columnas

                    #DISTINCT
                    select  distinct nombre from alumno;
                    select  distinct nombre,dni from alumno;

                    #ORDER BY
                    select * from alumno order by nombre asc;
                    select * from alumno order by nombre desc;
                
            
WHERE
El comando where(donde) se utiliza prácticamente para dar condiciones a nuestra consulta
                
                    select * from alumno  where nombre="juan";
                    select * from alumno  where edad>=18;
                
            
AND - OR - NOT
El comando and se utiliza para poner 2 a más condiciones. Ejecuta si se todas las condiciones son verdaderas
El comando or es similar al comando and. Con la unica diferencia de que este se ejecutará si uno de ellos cumple con la condición
El comando not se usa para negar una condición.
                
                    #AND
                    select * from alumno  where nombre="juan" and edad>18;

                    #OR
                    select * from alumno  where nombre="juan" or edad>18;

                    #NOT
                    select * from alumno  where not edad<=18;
                
            
IN
El comando in se utiliza para determinar que los datos se encuentren entre los valores indicados
                
                    select * from alumno  where edad in(18, 20, 21);
                
            
BETWEEN
El comando between se utiliza para determinar que los datos se encuentren entre un rango de valores
                
                    select * from alumno  where edad between 10 and 20;
                    select * from alumno  where carrera between "admin" and "computacion";
                
            
LIKE
El comando like se utiliza para poner comodines en una busqueda de datos
Por ejemplo necesito una consulta donde los nombres empiecen con la letra 'M'
                
                    select * from alumno  where carrera like'c%';    #comienza con 'c'
                    select * from alumno  where carrera like'%n';    #termina  con 'n'
                    select * from alumno  where carrera like'%a%';   #contiene con 'a'
                
            
INNER - LEFT - RIGHT - FULL JOIN
El comando join nos permite asociar(unir) 2 o más tablas, en base a una columna que tengan en común
INNER JOIN
Esta comando busca coincidencias entre 2 tablas, en función a una columna que tienen en común. De tal modo que sólo la intersección se mostrará en los resultados.
                    
                        SELECT
                        articulo.nombre as 'producto',
                        fabricante.nombre as 'fabricante'
                        FROM
                        articulo
                        INNER JOIN fabricante ON articulo.cod_fab = fabricante.codigo
                    
                
LEFT JOIN
A diferencia de un INNER JOIN, donde se busca una intersección respetada por ambas tablas, con LEFT JOIN damos prioridad(ventaja) a la tabla de la izquierda, y buscamos en la tabla derecha.
Si no existe ninguna coincidencia para alguna de las filas de la tabla de la izquierda, de igual forma todos los resultados de la primera(IZQUIERDA) tabla se muestran.
                    
                        SELECT
                        articulo.nombre as 'producto',
                        fabricante.nombre as 'fabricante'
                        FROM
                        articulo
                        LEFT JOIN fabricante ON articulo.cod_fab = fabricante.codigo
                    
                
RIGHT JOIN
Es similar a LEFT JOIN ,pero aquí se da prioridad a la tabla de la derecha..
                    
                        SELECT
                        articulo.nombre as 'producto',
                        fabricante.nombre as 'fabricante'
                        FROM
                        articulo
                        RIGHT JOIN fabricante ON articulo.cod_fab = fabricante.codigo
                    
                
COUNT - AVG - SUM - MAX - MIN
COUNT : El comando count se utiliza para contar la cantidad de datos existentes en la tabla.
                
                    SELECT count(*) as total from articulo
                
            
AVG : El comando avg se utiliza para calcular el promedio de los valores numéricos.
                
                    SELECT avg(precio) as total from articulo
                
            
SUM : El comando sum se utiliza para calcular la suma total de los valores numéricos.
                
                    SELECT sum(precio) as total from articulo
                
            
MAX : El comando max se utiliza para calcular el valor máximo de los valores numéricos.
                
                    SELECT max(precio) as total from articulo
                
            
MIN : El comando min se utiliza para calcular el valor mínimo de los valores numéricos.
                
                    SELECT min(precio) as total from articulo
                
            
GROUP BY
El comando group by se utiliza para agrupar las filas que tienen los mismos valores.
También son llamados consultas agrupadas
                
                    SELECT * from articulo GROUP BY nombre
                
            
HAVING
El comando havingse puede/suele usar junto con GROUP BY cuando necesitamos que los resultados agrupados deban cumplir ciertas condiciones que veremos en los ejemplos posteriores.
No se puede usar la cláusula WHERE con la columna agrupada por GROUP BY, se tiene que hacer con HAVING
                
                    SELECT * from articulo GROUP BY precio HAVING precio>100
                
            
DIFERENCIA ENTRE WHERE Y HAVING
La clausula WHERE permite una condición para usar cualquier columna de una tabla pero no permite usar alias o funciones agregadas. La clausula HAVING permite hacer condiciones para usar una columna, alias o una funcion agregada.
Esto se debe a que la clausula WHERE filtra la data antes de ejecutar el select pero HAVING filtra los resultados despues de hacer el select
CONSULTAS SQL
Consultas de una tabla
                
                    select nombre from curso;   #una columna
                    select * from curso;        #todas las columnas
                
            
Consultas de muchas tabla(consulta MULTITABLA)
Consulta donde necesito ver el nombre y precio del curso
                
                    select nombre, precio from curso
                    inner join cursoDetalle ON
                    curso.codigo=cursoDetalle.curso;
                
            
Consulta dentro de una consulta(SUBCONSULTAS)
Consulta donde necesito ver el nombre y precio del curso, pero donde el precio > min(precio)
                
                    select nombre, precio from curso
                    inner join cursoDetalle ON
                    curso.codigo=cursoDetalle.curso
                    where precio>(select min(precio)from cursoDetalle );
                
            
PROCEDIMIENTOS ALMACENADOS
Los procedimientos alcenados son como las funciones; Son bloques de comandos que ejecutan una acción y pueden ser reutilizados infinitas veces.
Para ejecutar un procedimiento alcenado primero debe ser invocado(LLAMADO). Para llamar un PA se utiliza la palabra reservada call()
Registrar curso
                
                    delimiter $$
                    create procedure reCurso(in cod char(3),in nom varchar(200), in cant int )
                    begin
                    insert into curso(codigo, nombre, cantidad)values(cod,nom,cant);
                    end $$

                    call reCurso('003','programacion',150);

                    # eliminar un procedimiento
                    drop procedure reCurso;
                
            
Actualizar curso
                
                    delimiter $$
                    create procedure acCurso(in cod char(3),in nom varchar(200), in cant int )
                    begin
                    update curso set nombre=nom, cantidad=cant where codigo=cod;
                    end $$

                    call acCurso('003','ofimatica',150);
                
            
Eliminar curso
                
                    delimiter $$
                    create procedure elCurso(in cod char(3))
                    begin
                    delete from curso where codigo=cod;
                    end $$

                    call elCurso('003');
                
            
Listar cursos
                
                    delimiter $$
                    create procedure coCurso()
                    begin
                    select * from curso;
                    end $$

                    call coCurso;
                
            
Listar cursos segun el codigo
Procedimiento almacenado con parametros
                                
                                    delimiter $$
                                    create procedure coCliente2(in cod char(3))
                                    begin
                                    select * from curso where codigo=cod;
                                    end $$

                                    call coCliente2('004');

                                
                            
IMPORTAR Y EXPORTAR SQL
Importar desde Mysql Workbench
Exportar desde Navicat
OTROS COMANDOS
Suma solo las horas de un campo tipo DATETIME
                                
                                    #ejemplo 1
                                    select SEC_TO_TIME(SUM(TIME_TO_SEC(asistencia.salida))) as 'horas'
                                    FROM asistencia

                                    #ejemplo 2
                                    select SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(asistencia.salida,asistencia.entrada)))) as 'horas'
                                    FROM asistencia
                                
                            
Calcula la diferencia entre fechas(datetime) y devuelve el total de Horas
                                
                                    #ejemplo 1
                                    select TIMEDIFF(asistencia.salida,asistencia.entrada) as 'horas'
                                    FROM asistencia