Vous êtes sur la page 1sur 12

Resumen de sentencias Mysql

Creado por Jorge Villanueva Radiux, UES-2011.Herramienta recomendada para administrar Mysql: EMS MySQL Manager 2008 o superior

Sentencia SELECT para seleccionar atributos especficos Select NombrePersona as Nombres from Persona; Concatenacin de Cadenas usando CONCAT select concat(Nombrepersona,' ',apellidospersona) as NombreCompleto from Persona; Renombrado de Columnas: Renombrado con espacio necesita doble comilla select concat(Nombrepersona,' ',apellidospersona) as NombreCompleto, correoe as "Correo Electronico" from Persona order by correoe asc; Asegurando valores distintos usando DISTINCT select distinct correoe from persona; Operadores de comparacin (Igualdad = || Diferente != || Menor < || Mayor > || Menor o igual <= || Mayor o igual >= ) select * from Persona where nombrepersona!='Jorge'; ANY: Compara un valor scalar con un conjunto de valores de una subconsulta, la condicion debe ser verdadera para al menos uno de los elementos de la subconsulta select concat(first_name,' ',last_name) as Nombre, department_id from employees WHERE department_id=any(select department_id from employees where department_id=10 or department_id=60); ALL: Compara un valor con un conjunto de valores de una subconsulta, la condicion debe ser verdadera para todos los elementos de la subconsulta select concat(first_name,' ',last_name) as Nombre, department_id from employees WHERE department_id>all(select department_id from employees where department_id=10 or department_id=60); Operador Logico NOT select first_name,last_name,department_id from employees where not employees.department_id>=30; Operadores logicos AND/OR select first_name,last_name,salary from employees where last_name='Smith' and salary>7000; select first_name,last_name,salary from employees where last_name='Smith' or salary>7000; IN/NOT IN devuelve las tuplas cuyo valor de atributo usado en la comparacion esta contenido o no en el conjunto select first_name,last_name,salary,department_id from employees where department_id IN(10,60);

BETWEEN: Devuelve verdadero y selecciona la fila si el valor de comparacin cae dentro de dos valores select first_name,last_name,salary from employees where salary between 8000 and 12000; EXISTS: Se usa para comprobar si el resultado de una consulta anidada correlacionada esta vacio o no, el resultado de exists es un valor booleano, TRUE or FALSE, si en el resultado de la consulta anidada existe al menos una tupla, se selecciona la tupla de la consulta principal select e.first_name,e.last_name,e.department_id from employees e where exists (select 1 from departments d where d.DEPARTMENT_ID=e.department_id and d.department_name='Administration'); IS NULL/IS NOT NULL: para indicar si se desean tuplas con valor de atributo de filtrado nulo o no select * from employees where department_id is null; LIKE/NOT LIKE: Para comparar strings select * from employees where first_name like 'Su%'; CASE: Valor Fijo select country_name,region_id, case region_id when 1 then 'Europa' when 2 then 'America' when 3 then 'Asia' else 'Otro' end as Continente from countries; CASE: Condicional select country_name,region_id, case when region_id=1 then 'Europa' when region_id=2 then 'America' when region_id=3 then 'Asia' else 'Otro' end as Continente from countries; IFNULL: reemplazar un posible valor nulo de la base de datos por otro predefinido select first_name,salary,IfNULL(commission_pct,'N/A') as Comision from employees; FUNCIONES PARA CADENAS LOWER: Convertir cadenas a minusculas select lower(first_name) from employees; UPPER: Convertir cadenas a mayusculas select upper(first_name) from employees;

REPLACE: Reemplazar partes de un string por otras select replace('xxx.mysql.com','x','w'); TRIM: Eliminar espacios de la cadena select trim(' Hola '); Resultado: Hola LENGTH: Longitud de la cadena, toma en cuenta espacios en blanco select length('Hola'); Resultado 4 LOCATE: Identifica donde esta una subcadena dentro de una cadena select locate('le','hola como le va'); resultado 11 SUBSTRING: Para extraer una seccion de una cadena especificando inicio y longitud select substring('123456789',3,5); Resultado 34567 FUNCIONES NUMERICAS ROUND:Redondear numeros especificando cantidad de decimales SELECT ROUND(1.2944, 2); FUNCIONES DE FECHA CURDATE() Fecha del sistema SELECT CURDATE(); CURTIME() Hora del sistema select curtime(); DATEDIFF() Para obtener la diferencia en dias entre dos fechas SELECT DATEDIFF('2007-12-1','2007-12-30'); EXTRACT() Para extraer el da,mes o ao de una fecha) SELECT EXTRACT(DAY FROM '2009-07-02'); FUNCIONES DE GRUPO AVG: Obtener el promedio de los valores de un grupo select round(avg(salary),2) from employees; COUNT: devuelve el numero de elementos de un grupo select count(department_id) from employees; Resultado 106 select COUNT(distinct department_id) from employees; Resultado 11 MAX: Devuelve el valor mximo de la expresion select max(salary) from employees; MIN: Devuelve el valor minimo de la expresion select min(salary) from employees;

SUM: Devuelve la suma de todos los valores, se puede usar DISTINCT select sum(salary) from employees; GROUP BY: Agrupa un contenido de filas seleccionado en un conjunto de filas resumen de acuerdo con los valores de una o mas expresiones --Salario Promedio de empleados agrupado por departamento, redondeado a dos decimales select employees.department_id, round(avg(employees.salary),2) as SalarioPromedio from employees group by employees.department_id; --Numero de empleados en los departamentos 10,50,60 select department_id,count(*) from employees where department_id in (10,50,60) group by department_id; HAVING: Especifica una condicion de busqueda de grupo o agregado select department_id,count(*) from employees where department_id in (10,50,60) group by department_id having COUNT(*)>1; select employees.department_id, round(avg(employees.salary),2) as SalarioPromedio from employees group by employees.department_id having round(avg(employees.salary),2)>5000 JOIN SIMPLE: Mostrar paises y su region select countries.COUNTRY_NAME,regions.region_name from countries,regions where countries.region_id=regions.region_id; JOIN Con mas de dos tablas select departments.department_name,locations.city,locations.street_address,countries.country_name,regions .region_name from departments,locations,countries,regions where departments.location_id=locations.location_id and locations.country_id=countries.country_id and countries.region_id=regions.region_id order by departments.department_name asc; Renombrado de tablas para facilitar y reducir el tamano de las consultas select c.country_name,r.region_name from countries c,regions r where c.region_id=r.region_id;

LEFT OUTER JOIN/RIGHT OUTER JOIN: Desplegar los paises y las ciudades de cada pais, mostrar el pais aunque no tenga ciudades definidas select c.country_name,l.city from countries c left outer join locations l on c.country_id=l.country_id; select c.country_name,l.city from locations l right outer join countries c on l.country_id=c.country_id; FULL OUTER JOIN: No esta soportado en MySql

Operadores de conjuntos
Operador UNION UNION ALL Descripcin Retorna todas la filas nicas seleccionas por las consultas. Retorna todas las filas (incluidas las duplicadas) seleccionadas por las consultas.

select first_name,last_name from employees where first_name like 'A%' UNION select first_name,last_name from employees where last_name like 'A%'; SUBCONSULTAS Obtener a los empleados que ganan el salario maximo select first_name,last_name,salary from employees where salary=(select max(salary) from employees); Obtener a los empleados que trabajan en departamentos donde trabaje alguien que se llama John select e.first_name,e.last_name,e.department_id from employees e where e.department_id in (select e1.department_id from employees e1 where e1.first_name='John'); SUBCONSULTAS CORRELACIONADAS select e.first_name,e.last_name,e.department_id,e.salary from employees e where e.salary= (select max(e1.salary) from employees e1 where e1.department_id=e.department_id); INSERT: INSERTANDO DATOS Insertando Filas, metodo implicito: se omiten las columnas que aceptan valores nulos insert into departments(department_id,department_name) values(301,'Departamento 301'); Insertando Filas, metodo explicito: Se escribe la palabra NULL donde queremos insertar un valor nulo insert into departments(department_id,location_id,department_name,manager_id) values(302,NULL,'Departamento 302',NULL); Insertando Filas con valores especiales como fechas insert into employees(employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary, commission_pct,manager_id,department_id) VALUES(250,'Gustavo','Coronel','gcoronel@gmail.com', '551.481.1070',curdate(),'FI_MGR',14000,NULL,102,100); insert into employees(employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary, commission_pct,manager_id,department_id) VALUES(251,'Juan','Loco','eldirecto@gmail.com', '551.481.1460','12-13-2000','FI_MGR',4000,NULL,102,100);

NULLIF Para insertar filas, Reemplazando cadenas vacias por NULL antes de insertar en la base de datos, util cuando se reciben cadenas vacias desde la aplicacin y desea evitarse que ingresen a la base de datos DELIMITER // CREATE PROCEDURE INSERTARDEPARTAMENTO(IN IDDEP DECIMAL(4,0),IN LOCID DECIMAL(4,0),IN DEPTNAME VARCHAR(30),IN MANID DECIMAL(6,0)) BEGIN INSERT INTO DEPARTMENTS(DEPARTMENT_ID,LOCATION_ID,DEPARTMENT_NAME,MANAGER_ID) VALUES(IDDEP,NULLIF(LOCID,''),DEPTNAME,NULLIF(MANID,'')); END // IFNULL Para recuperar filas de la base de datos, reemplazando valores NULL por otro valor que nosotros queramos, util cuando el lenguaje de programacion no acepta atributos con valor NULL; select first_name,salary,IFNULL(commission_pct,'N/A') as Comision from employees; DELETE: Borrado de filas delete from test; Borrar todas las filas de la tabla test delete from employees where employee_id=251; borrar al empleado con id 251 delete from test where testchar=null; borra todas las filas cuyo atributo testchar sea NULL ADD para agregar nuevas columnas a una tabla existente alter table test add testcolumn char(4) not null; DROP para borrar columnas alter table test drop column testcolumn; CHANGE Para editar una columna Por medio de change podemos redifinir el tipo de dato de la columna y ademas podemos cambiar el nombre de la columna si asi lo deseamos, por ejemplo alter table test change testchar testnum integer null; Podemos conservar el nombre pero cambiar el tipo alter table test change testchar testchar decimal(2,0) not null; DROP para borrar una tabla drop table test; UPDATE: Para actualizar una o varias filas update employees set salary=salary*1.10; Actualizacion Multiple update employees set department_id=80,salary=8000 where employee_id=250; Una fila

CREACIN DE TABLAS DENTRO DE UNA BASE DE DATOS Se utiliza el comando create table seguido del nombre de la tabla a crear, y entre parentesis las columnas de la tabla especificando sus nombres, tipos de datos y restricciones (constraints) Tipos de datos mas utilizados Decimal(N,D): Donde N representa el numero total de digitos y D el numero de decimales despues del punto, ejemplo: mi_numero Decimal(4,2) soporta como mximo 99.99 o -99.99 Integer: Su nombre es autoexplicativo Char(N): Donde N representa el numero de caracteres fijo de la cadena Varchar(N): Donde N representa el numero mximo de caracteres que puede alojar la cadena
create table CURSO ( IDCURSO CHAR(4) NOT NULL, NOMCURSO VARCHAR(40) NOT NULL, VACANTES DECIMAL(2) NOT NULL, MATRICULADOS DECIMAL(2) NOT NULL, PROFESOR VARCHAR(40) NULL, PRECURSO DECIMAL(8,2) NOT NULL, CONSTRAINT PK_CURSO PRIMARY KEY(IDCURSO), CONSTRAINT CHK_PRECURSO CHECK (PRECURSO>0) ); CREATE TABLE MATRICULA ( IDCURSO CHAR(4) NOT NULL, IDALUMNO DECIMAL(5) NOT NULL, FECHA DATE NOT NULL, PRECIO DECIMAL(8,2) NOT NULL, CUOTAS DECIMAL(2) NOT NULL, NOTA DECIMAL(4,2) NULL, CONSTRAINT PK_MATRICULA PRIMARY KEY(IDCURSO,IDALUMNO) ); CREATE TABLE ALUMNO ( IDALUMNO DECIMAL(5) PRIMARY KEY, NOMALUMNO VARCHAR(40) NOT NULL, DIRECCION VARCHAR(40) NOT NULL, TELEFONO VARCHAR(15) NOT NULL ); CREATE TABLE PAGO ( IDCURSO CHAR(4) NOT NULL, IDALUMNO DECIMAL(5) NOT NULL, CUOTA DECIMAL(2) NOT NULL, FECHA DATE NOT NULL, IMPORTE DECIMAL(8,2) NOT NULL, CONSTRAINT PK_PAGO PRIMARY KEY(IDCURSO,IDALUMNO,CUOTA) );

ALTER TABLE MATRICULA ADD CONSTRAINT FK_MATRICULA_CURSO FOREIGN KEY(IDCURSO) REFERENCES CURSO(IDCURSO); ALTER TABLE MATRICULA ADD CONSTRAINT FK_MATRICULA_ALUMNO FOREIGN KEY(IDALUMNO) REFERENCES ALUMNO(IDALUMNO); ALTER TABLE PAGO ADD CONSTRAINT FK_PAGO_CURSO FOREIGN KEY (IDCURSO) REFERENCES CURSO(IDCURSO); ALTER TABLE PAGO ADD CONSTRAINT FK_PAGO_ALUMNO FOREIGN KEY(IDALUMNO) REFERENCES ALUMNO(IDALUMNO); ALTER TABLE CURSO ADD CONSTRAINT CHK_CURSO_MATRICULADOS CHECK (MATRICULADOS>0);

Como puede observarse, a cada atributo pueden asignrsele constraints, ya sea justo despus de definirlo o bien al final de la definicin de la tabla por medio de la palabra CONSTRAINT, seguido de un nombre para la restriccin y la definicin de la restriccin. En resumen, existen tres formas de definir una restriccin Justo despus de definir un atributo, ejemplo:
NOMCURSO VARCHAR(40) UNIQUE NOT NULL

Al final de la tabla
CONSTRAINT PK_CURSO PRIMARY KEY(IDCURSO), CONSTRAINT CHK_PRECURSO CHECK (PRECURSO>0)

Por medio del comando ALTER TABLE


ALTER TABLE PAGO ADD CONSTRAINT FK_PAGO_ALUMNO FOREIGN KEY(IDALUMNO) REFERENCES ALUMNO(IDALUMNO);

Tipos de restricciones mas comunes NOT NULL: Define que una columna no acepte valores nulos PRIMARY KEY: Define la columna o columnas que sern identificadores de la tabla FOREIGN KEY: Define una relacin entre dos tablas DEFAULT: Define un valor por defecto para una columna que acepta valores nulos UNIQUE: Especifica que dos tuplas no pueden tener el mismo contenido en una columna, ejemplo: dos personas no deberan tener el mismo numero de NIT CHECK: Para establecer condiciones a los valores de una columna AUTO_INCREMENT: Establece que el atributo (que deber ser INTEGER) crecer automticamente en una unidad con cada nueva insercin, su utilidad reside en que el atributo con AUTO_INCREMENT puede utilizarse como primary key automatico. Otra tabla de ejemplo de restricciones
CREATE TABLE TEST ( IDTEST INTEGER AUTO_INCREMENT PRIMARY KEY, TESTSTRING VARCHAR(10) DEFAULT 'VACIA', TESTSTRING2 VARCHAR(10) UNIQUE NOT NULL );

PROGRAMACION EN MYSQL Antes de comenzar a programar, debemos conocer las estructuras de control bsicas de este lenguaje de programacion: Estructuras de control Definen el flujo de ejecucion del codigo de la funcion, procedimiento o trigger Sentencia IF IF Condicin then Instrucciones; else instrucciones; end IF; Sentencia CASE SET var = algunvalor ; case var when 2 then instrucciones; when 3 then instrucciones; else instrucciones; end case; Sentencia WHILE set v = 0; while v < 5 do instrucciones; set v = v +1 ; end while;

Programacin de Procedimientos La estructura bsica de un procedimiento es como sigue DELIMITER // CREATE PROCEDURE NombreProcedimiento(IN variablex tipovariable, OUT variabley tipovariable) BEGIN DECLARE variablez tipovariable; Instrucciones; END // DELIMITER ; La instruccion DELIMITER // Indica a Mysql que utilizaremos los caracteres // para representar el final de nuestro conjunto de instrucciones, de lo contrario, nuestro procedimiento resultaria cortado por el primer punto y coma dentro del mismo, al final del procedimiento se configura Mysql para que vuelva a utilizar el punto y coma como delimitador Un procedimiento puede no utilizar ningun tipo de variable de entrada o salida, o bien puede usar cuantas variables de entrada y salida requiera, siempre especificando su categoria (IN, OUT), nombre y tipo de variable. Un procedimiento puede tener ninguna o varias variables internas, se declaran usando DECLARE y especificando su nombre y tipo.

Ejemplos: Ver Nombre de un empleado en especfico


DELIMITER // CREATE PROCEDURE VerNombreEmpleado(IN Idemp decimal(6)) BEGIN DECLARE Nombre varchar(20); DECLARE Apellidos VARCHAR(25); DECLARE Salida varchar (50); set Nombre=(select first_name from employees where employee_id=Idemp); set Apellidos=(select last_name from employees where employee_id=Idemp); set Salida=concat(Nombre,' ',Apellidos); SELECT Salida; END // DELIMITER ;

Los procedimientos se ejecutan por medio de la sentencia CALL call vernombreempleado(250) ; Buscar Personas por su nombre
DELIMITER // CREATE PROCEDURE BuscarEmpleadosporNombre(IN Nombre varchar(20)) BEGIN select * from employees where first_name like concat('%',Nombre,'%'); END // DELIMITER ; select * from employees; call buscarempleadospornombre('Irene');

Contar Personas cuyo nombre comienza con una letra Especifica, usando variables de entrada y salida
DELIMITER // create PROCEDURE Cantidadpersonasporletra(IN letra VARCHAR(1),OUT cantidad INT) BEGIN set cantidad=(select count(*) from persona where persona.nombrepersona like concat(letra,'%')); END //

DELIMITER ; call cantidadpersonasporletra('J',@cantidad); select @cantidad;

Programacin de Vistas La estructura bsica de programacin de una vista es como sigue Create View NombredelaVista as Sentencia de seleccin SQL; Ejemplo: Crear una Vista para seleccionar los datos basicos de una persona
create view VistaPersonas as select Persona.CodigoPersona as Id,Persona.NombrePersona as Nombres, persona.apellidospersona as Apellido, persona.correoe as Mail from Persona order by persona.nombrepersona; select * from vistapersonas;

Ver todos los datos de los empleados del departamento 50


create view VerEmpleadosDepto80 AS select * from employees where department_id=80; select * from verempleadosdepto80;

Programacin de funciones Estructura Basica Create Function Nombrefuncion (Parametros de entrada separados por coma) returns tipovalor DETERMINISTIC BEGIN Instrucciones END Ejemplo: Funcion que cuenta la cantidad de empleados cuyo primer nombre comienza con una letra en especifico DELIMITER // CREATE FUNCTION CantidadPersonasporletra (letra varchar(1)) returns int DETERMINISTIC begin return (select count(*) from employees where employees.first_name like concat(letra,'%')); end // delimiter ; select CantidadPersonasporletra('J');

Programacin de Triggers Los triggers son bloques de cdigo que se ejecutan al realizar un determinado evento en un campo de una tabla. Los triggers tienen dos palabras clave, OLD y NEW que se refieren a los valores que tienen las columnas antes y despus de la modificacin. Los INSERT permiten NEW, los DELETE slo OLD y los UPDATE ambas. Estructura Basica:
CREATE TRIGGER nombre_trigger momento evento ON nombre_tabla FOR EACH ROW BEGIN SENTENCIAS END
Momento: puede ser AFTER o BEFORE el evento (Solo uno) Evento: puede ser INSERT, UPDATE o DELETE. (Solo uno)

Ejemplo: Creacin de un trigger que funciona como bitcora de cambios de otra tabla, primero crearemos la tabla que usaremos como bitcora. create table BitacoraEmployees ( Idtransaccion int auto_increment primary key, IdEmpleado decimal(6) not null, DBUsuario varchar(100) not null, Accion varchar(20) not null, Fecha date not null ); Create Trigger Employees_Update_Bitacora after update on Employees FOR each row begin insert into bitacoraemployees(Idempleado,dbusuario,accion,fecha) values (OLD.employee_id,user(),'Update',curdate()); end

Vous aimerez peut-être aussi