You are on page 1of 40

DAECG Oracleacceder mysql linux 1. 2. 3. 4. 5. 6.

Alberto Moreno Gracia

MySQL /

INDICE
MySQL..................................................................................................................................................2 Creacin de tablas (MySQL/Oracle).....................................................................................................2 Tipos de datos MySQL..........................................................................................................................3 Tipo Nmerico.......................................................................................................................................3 Tipos de datos Oracle/PLSQL...............................................................................................................5 Insercin de datos (MySQL/ Oracle).....................................................................................................7 Tipo 1 (MySQL / Oracle):...............................7 Tipo 2 (MySQL / Oracle):...............................7 Tipo 3 (MySQL):.............................................7 Tipo 4 (MySQL):.............................................7 Tipo 5 (MySQL):.............................................7 Tipo 6 (MySQL / Oracle):...............................7 Tipo 7 (MySQL):.............................................8 Tipo 8 (MySQL /Oracle):................................8 7. Alter table..............................................................................................................................................8 *Conflicto en los duplicados recursivos..........9 8. Consultas................................................................................................................................................9 9. FUNCIONES EN SQL PARA MYSQL.............................................................................................10 10. OPERADORES DE SQL PARA MySQL..........................................................................................13 11. Exportar en MySQL............................................................................................................................14 12. Funciones tras el where:......................................................................................................................14 13. Alias en los atributos...........................................................................................................................14 14. Multitablas...........................................................................................................................................15 15. LEFT/RIGHT JOIN.............................................................................................................................16 16. Consultas con UNION (MySQL/ORACLE) INTERSECT(ORACLE)...........................................17 17. Subconsultas........................................................................................................................................17 18. Oracle 10g /11g....................................................................................................................................19 19. Usuarios Oracle...................................................................................................................................20 20. Informes Oracle...................................................................................................................................21 21. Secuencias............................................................................................................................................25 22. Volcado directo....................................................................................................................................27 MySQL:.......................................................................................................................................................27 ORACLE:....................................................................................................................................................27 23. Transacciones......................................................................................................................................29 MySQL........................................................................................................................................................29 ORACLE.....................................................................................................................................................29 24. Delete...................................................................................................................................................29 25. Sinonimos (Oracle)..............................................................................................................................30 26. Vistas (MySQL / Oracle).....................................................................................................................31 27. Update..................................................................................................................................................31 28. Administracin de cuentas en MySQL................................................................................................32 29. Procedimientos y funciones (MySQL versin 5.0 en adelante)..........................................................33 30. Cursores MySQL.................................................................................................................................37 31. Disparadores / Triggers........................................................................................................................39

-1-

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Introduccin a MySQL/ Oracle


SGBD (Sistema Gestor de base de datos) MySQL y Oracle Basados en SQL (Structure Query Lenguache) y BD (Base de datos Relacional) SQL

DML Lenguaje de manipulacin de datos. Ej: Borrar. DDL Lenguaje de definicin de datos. Ej: Create DCL Lenguaje de control de datos.

MySQL = pl/sql (No tiene todas sus caractersticas) / Oracle = pl/sql Pl/sql

Se trabaja con procedimientos almacenados Funciones Cursores Disparadores/ Triggers

MySQL
1. Creacion y borrado de una base de datos: a. Create database [nombre]; b. Drop database [nombre]; c. Drop table [nombre]; d. Drop table [nombre] if exists; 2. Usar una BBDD Use [nombreBBDD]; 3. Ver BBDD Show databases; 4. Ver la BBDD en la que estamos select database(); 5. Ver BBBDD / Ver tablas(Despues del use) show databases; / show tables; 6. Borrar contenido de la tabla truncate [nombreTB]; 7. Ver codigo de creacin de una table show create table [nombreTB];

Creacin de tablas (MySQL/Oracle)


Create table [nombreTB]( Clave primaria Atrtibutos Declaracion foraneas
El atributo no puede ser nulo

dni int (10) primary key, nombre varchar (20) not null, foreign key(nombFKaqui) referentes [nombreTB] (nombFKALLA) On delete cascade, on update cascade);
| Table | Create Table | +-----------+-------------------------------------------------------------------------------------------------+ | articulos | CREATE TABLE `articulos` ( `COD_ART` char(8) NOT NULL, `DESCRIPCION` char(20) NOT NULL, `CANTIDAD` int(4) DEFAULT NULL, `PRECIO` int(6) DEFAULT NULL, `COD_CAT` int(2) DEFAULT NULL, PRIMARY KEY (`COD_ART`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

-2-

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Creacin con 2 o + PK (MySQL /Oracle) Create table [nombreTB]( Atributos PF Atributos tabla Declaracion PK Declaracion foraneas

dni int (10), Cod_per int (10), precio int(3), primary key(dni, cod_per), foreign key (dni) references [nombTB] (dni). Foreign key (cod_per) references [nombTB] (cod_per));

Especial atencin con el orden de las forneas y sus tipos, han de coincidir.

Alternativas Declaracion FK dni int (10) references [nombTB] (dni) Opciones de creacion. 1. auto_increment La clave ser auto incremental. a. Auto_increment = 200 Comienza a auto incrementarse desde 200 (Solo MySQL) Si creamos una tabla e insertamos un numero a mano por primera vez, 200 y despus insertamos null, ira incrementando a partir de 200. Una vez insertado 200 hemos puesto valores null varias veces y metemos otro numero 10, y al siguiente null, continuara con su incremento del 200. 2. Clave alternativa a. Unique. 3. Valores por defecto (Valido para atributos y PF) a. Default 4. Restricciones (Funcional en Oracle, MySQL no, pero se pueden poner) Edad int (3) check (edad<0). fech_ini date, Fech_fin date, Constraint [nombre] check (fech_ini<fech_fin);
Valido para Oracle, puesto que si se pone en cualquiera de los atributos crea conflicto.

Orden [unique/primary key] [not null] [default/auto_increment/check]

Tipos de datos MySQL


Tipo Nmerico TinyInt: es un nmero entero con o sin signo. Con signo el rango de valores vlidos va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255

-3-

DAECG Alberto Moreno Gracia Oracleacceder mysql linux Bit Bool: un nmero entero que puede ser 0 1

MySQL /

SmallInt: nmero entero con o sin signo. Con signo el rango de valores va desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535. MediumInt: nmero entero con o sin signo. Con signo el rango de valores va desde -8.388.608 a 8.388.607. Sin signo el rango va desde 0 a16777215. Integer, Int: nmero entero con o sin signo. Con signo el rango de valores va desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295 BigInt: nmero entero con o sin signo. Con signo el rango de valores va desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a 18.446.744.073.709.551.615. Float: nmero pequeo en coma flotante de precisin simple. Los valores vlidos van desde -3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38. xReal, Double: nmero en coma flotante de precisin doble. Los valores permitidos van desde -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde 2.2250738585072014E-308 a 1.7976931348623157E+308 Decimal, Dec, Numeric: Nmero en coma flotante desempaquetado. El nmero se almacena como una cadena Tipos fecha: A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una manera estricta si una fecha es vlida o no. Simplemente comprueba que el mes esta comprendido entre 0 y 12 y que el da esta comprendido entre 0 y 31. Date: tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es de ao-mes-dia DateTime: Combinacin de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de ao-mes-dia horas:minutos:segundos TimeStamp: Combinacin de fecha y hora. El rango va desde el 1 de enero de 1970 al ao 2037. El formato de almacenamiento depende del tamao del campo: Time: almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS' Year: almacena un ao. El rango de valores permitidos va desde el ao 1901 al ao 2155. El campo puede tener tamao dos o tamao 4 dependiendo de si queremos almacenar el ao con dos o cuatro dgitos. Tipos de cadena: Char(n): almacena una cadena de longitud fija. La cadena podr contener desde 0 a 255 caracteres. VarChar(n): almacena una cadena de longitud variable. La cadena podr contener desde 0 a 255 caracteres.

-4-

DAECG Alberto Moreno Gracia MySQL / Oracleacceder mysql linux Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los tipo Test y los tipo BLOB (Binary large Object) Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros. TinyText y TinyBlob: Columna con una longitud mxima de 255 caracteres. Blob y Text: un texto con un mximo de 65535 caracteres. MediumBlob y MediumText: un texto con un mximo de 16.777.215 caracteres. LongBlob y LongText: un texto con un mximo de caracteres 4.294.967.295. Hay que tener en cuenta que debido a los protocolos de comunicacin los paquetes pueden tener un mximo de 16 Mb. Enum: campo que puede tener un nico valor de una lista que se especifica. El tipo Enum acepta hasta 65535 valores distintos Set: un campo que puede contener ninguno, uno varios valores de una lista. La lista puede tener un mximo de 64 valores.

Tipos de datos Oracle/PLSQL

-5-

Tipo de dato / Sintaxis

Oracle

Descripcin

la escala. DAECG Alberto Moreno GraciaDonde p es la precisin y e MySQL / Oracleacceder mysql linux dec(p, e) La precisin mxima es de 38 dgitos. Por ejemplo: dec(3,1) es un nmero que tiene 2 dgitos antes del decimal y un dgito despus del decimal. Donde p es la precisin y e la escala. decimal(p, e) La precisin mxima es de 38 dgitos. Por ejemplo: decimal(3,1) es un nmero que tiene 2 dgitos antes del decimal y un dgito despus del decimal.

float int integer

La precisin mxima es de 38 decimales.

Donde p es la precisin y e la escala. numeric(p, e) La precisin mxima es de 38 dgitos. Por ejemplo: numeric(7,2) es un nmero que tiene 5 dgitos antes del decimal y 2 dgitos despus del decimal. Donde p es la precisin y e la escala. number(p, e) La precisin mxima es de 38 dgitos. Por ejemplo: number(7,2) es un nmero que tiene 5 dgitos antes del decimal y 2 dgitos despus del decimal.

real smallint Hasta 32767 bytes en PLSQL. char (tamao) Hasta 2000 bytes en Oracle 8i/9i. varchar2 (tamao) long raw Hasta 2000 bytes en Oracle 8i/9i. long raw date timestamp (fractional seconds precision) timestamp (fractional seconds precision) with time zone Hasta 2 gigabytes. Una fecha entre el 1 de Enero de 4712 A.C. y el 31 de Diciembre de 9999 D.C. Incluye ao, mes da, hora, minutos y No fractional seconds precision segundos. soportado debe ser un nmero entre 0 y 9. por (El valor por defecto es 6) Oracle 8i. Por ejemplo: timestamp(6) No fractional seconds precision soportado debe ser un nmero entre 0 y 9. por (El valor por defecto es 6) Oracle 8i. Por ejemplo: timestamp(5) with time - 6 zone Incluye ao, mes da, hora, minutos y segundos; con un valor de desplazamiento de zona horaria. Son cadenas binarias de ancho variable. Hasta 32767 bytes en PLSQL. Hasta 4000 bytes en Oracle 8i/9.i Hasta 2 gigabytes. Hasta 32767 bytes en PLSQL. Son cadenas binarias de ancho variable. Donde tamao es el nmero de caracteres a almacenar. Son cadenas de ancho fijo. Se rellena con espacios. Donde tamao es el nmero de caracteres a almacenar. Son cadenas de ancho variable. Son cadenas de ancho variable.

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Insercin de datos (MySQL/ Oracle)


Tipo 1 (MySQL / Oracle): Insert into [nombreTB] (campo1, campo2) values (dato1, dato2, ); Ej: insert into tbcliente (dni, nombre, sueldo, edad, comision) Values (54553234, Evaristo, 1200, 23, 300); Tipo 2 (MySQL / Oracle): Insert into [nombreTB] (dato1, dato2, ); En funcion del orden de creacin de la tabla.

Ej: insert Inti tbcliente ( 345324522, Eva, 1600, 24, sueldo*0.20); Tipo 3 (MySQL): Insert into [nombreTB] (campo1, campo2, ) Values (dato1, dato2, ), (dato1, dato2, ), (dato1, dato2, ); Tipo 4 (MySQL): Insert into [nombreTB] (C1, C2, ) Values (d1, d2, ) on duplicate key update [operacin]; Si se inserta un campo primario que ya esta en la BBDD salta on duplicate key update, actualizando el campo insertado repetido mediante una operacin. Tipo 5 (MySQL): Insert into [nombreTB]set [campo1]=[dato1], [campo2]=[dato2]; Ej: Insert into tbcliente set nombre=Pepe, sueldo=2000, comision=200; El campo DNI, al no ponerse es 0. Tipo 6 (MySQL / Oracle): Insert into [nombreTB] select * from [nombreTB]; Cualquier operacin que se ponga en las select.

-7-

DAECG Alberto Moreno Gracia Oracleacceder mysql linux Tipo 7 (MySQL): Insert into [nombreTB] (C1, C2, ) values ( null, d2, ); Mientras no halla un not null, se puede poner valores nulos. Tipo 8 (MySQL /Oracle): Create table [nombreTB] select * from [nombreTB];

MySQL /

Creamos una tabla con la seleccin de otra tanto en estructura (tipos atributos) como en los datos que contenga segn la select.

Alter table.
Alter table [nombreTB] [Operadores]; Modifica la estructura. acceder mysql linux 1. add Aade atributos, claves primarias y restricciones (check, foreign) a. ej: alter table tbalumno add nota int(2); b. alter table tbalumno add primary key dni not null; (DNI ya esta) c. alter table tbalumno add constraint [nombre] foreign key [atrib] references (nombTB) [nombre] on delete cascade, on delete set null; d. alter table tbalumno add foreign key [atrib] references (nombTB) [nombre] on delete cascade, on delete set null; 2. modify Permite modificar el tipo de dato de los atributos a. ej : alter table tbalumno modify edad numeric(2); 3. change Permite modificar el nombre del atributo a. ej: alter table tbpersona change direccion adress char(30); 4. rename / rename as Modifica el nombre de las tablas. a. Ej: alter table tbpersona rename tbpers; 5. drop Borra atributos, claves primarias, claves forneas. a. Alter table tbalumno drop columna nota; *Problemas con las claves forneas. Alter table tbalumno drop foreign key tbalumno_ibfk_1; Para borrar una clave fornea hay que usar el nombre que le da constraint, para ello se ve con un show create table [nombreTB];

-8-

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

mysql> show create table tbcanta; | Table | Create Table| -----------------------------------------------------------------------------------------+ | tbcanta | CREATE TABLE `tbcanta` ( `cod_cor` varchar(10) NOT NULL DEFAULT '', `cod_vill` int(8) NOT NULL DEFAULT '0', PRIMARY KEY (`cod_cor`,`cod_vill`), KEY `cod_vill` (`cod_vill`), CONSTRAINT `tbcanta_ibfk_1` FOREIGN KEY (`cod_cor`) REFERENCES `tbcoro` (`cod_cor`) ON DELETE CASCADE, CONSTRAINT `tbcanta_ibfk_2` FOREIGN KEY (`cod_vill`) REFERENCES `tbvillancico` (`cod_vill`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | -----------------------------------------------------------------------------------------+ mysql> Alter table tbcanta drop foreign key tbcanta_ibfk_1; Query OK, 5 rows affected (0.34 sec) Records: 5 Duplicates: 0 Warnings: 0 mysql> show create table tbcanta; | Table | Create Table| +---------+--------------------------------------------------------------------------------------| tbcanta | CREATE TABLE `tbcanta` ( `cod_cor` varchar(10) NOT NULL DEFAULT '', `cod_vill` int(8) NOT NULL DEFAULT '0', PRIMARY KEY (`cod_cor`,`cod_vill`), KEY `cod_vill` (`cod_vill`), CONSTRAINT `tbcanta_ibfk_2` FOREIGN KEY (`cod_vill`) REFERENCES `tbvillancico` (`cod_vill`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

*Conflicto en los duplicados recursivos. Si la tabla esta creada con sus primarias y sobretodo con sus Forneas, en este ejemplo el conflicto esta en que Pepe tiene un jefe que se va crear despus de el y por lo tanto la clave no esta referenciada (Violacin de la Integridad Referencial). Dni_tra 100 101 102 nombre Pepe Juan Maria Dni_jef 101 102 100

Soluciones: 1. Crear tabla sin indicar que son foraneas, insertar los datos, aadir las foraneas(ALTER) 2. Si la tabla se ha creado con las foraneas, borrarlas e insertar.

Consultas
Select [atributo1], [atributo2], from [nombreTB1], [nombreTB2] where [condiciones]; Select: Especifica las columnas que va a devolver la consulta. From: Especifica la tabla o tablas donde se va obtener la las filas o consulta. Where: Especifica las condiciones de bsqueda para restringir el resultado obtenido en las filas.

-9-

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

FUNCIONES EN SQL PARA MYSQL


Categora Matemticas Explicaciones y Tipos ABS(x):Valor absoluta de la expresin numrica x ACOS(x):Arco coseno del real x ASIN(x): Arco seno del real x ATAN(X): Arco tangente del real x SIN(x): Seno del ngulo x en radianes COS(x): Coseno del ngulo x en radiantes TAN(x):Tangente del ngulo x en radianes DEGREES(x): Pasa x radianes a grados RADIANS(x): Pasa x grados a radianes EXP(x): Realiza el exponencial. PI():Da el nmero PI LOG(x):Logaritmo neperiano de x POWER(x;y): Da x elevado a y RAND(): Nmero aleatorio del 0 al 1 SQRT(x): Raz cuadrada de x TRUNCATE(x,d): Da x truncado a d decimales ROUND(x,L):Redondeo de x a la longitud de L. Realizan una operacin sobre un valor de entrada de fecha u hora y devuelven un valor de cadena, numrico o de fecha y hora. DAYNAME(fecha):Devuelve una cadena con el da de la semana relativo a la fecha DAYOFMONTH (fecha): Devuelve un nmero entre 1 y 31 relativo al da del mes para la fecha. DAYOFYEAR(fecha): Devuelve un nmero entre 1 y 366 relativo al da del ao para la fecha DAYOFWEEK (fecha): Devuelve un nmero entre 1 y 7 relativo al da de la semana para la fecha. HOUR (hora): Devuelve un entero entre 0 y 23 que representa la parte entera de la hora especificada. MINUTE (hora): Devuelve un entero 0 y59 que representa los minutos de la hora especificada. SECOND (hora): Devuelve un entero de 0 a 59 que representa los segundos de la hora especificada. MONTH (fecha): Devuelve un entero entre 1 y 12 que representa el mes de la fecha especificada. MONTHNAME (fecha): Devuelve una cadena con el nombre del mes de la fecha especificada. QUARTER (fecha): Devuelve un entero entre 1 y 4 que representa el trimestre de la fecha dada. WEEK (fecha): Devuelve un entero entre 0 y 52 que representa la semana de la fecha dada WEEKDAY (fecha): Devuelve un entero entre 0 y 6 que representa el da de la semana de la fecha dada. YEAR (fecha): Devuelve un entero entre 1000 y 9999 que representa el ao de la fecha dada. TO_DAYS (fecha): Devuelve un entero que da el nmero de das entre el ao cero y la fecha dada. NOW() o SYSDATE(): Da una cadena con la fecha y la hora actual en formato AAAAMMDDhhmmss. CURDATE()o CURRENT_DATE(): Da una cadena con la fecha actual en formato hhmmss. DATE_FORMAT(fecha,formato): Devuelve la fecha en formato dado. Los formatos posibles son. %S,%H,%T,%h,%i%I,%r,%p,%W, %a,%d,%D,%c, DAYNAME(2004-12-01); DAYOFMONTH(2004-12-01); DAYOFYEAR(2004-12.01); DAYOFWEE(2004-12-01); HOUR(12:31:58); MINUTE(12:31:58); SECOND(12.31:58); MONTH(2004-12-01); MONTHNAME(2004-12-01); QUARTER(2004-12-01); WEEK(2004-12-01); WEEKDAY(2004-12-01); YEAR(2004-12-01); TO_DAYS(2004-2-01); Ejemplo ABS (-1.0) ACOS(-1) ASIN(-1) ATAN(-45,01) SIN(45.01 COS(45.01) TAN(45.01) DEGREES(5,01) RADIANS(-45,01) EXP(1) PI() LOG(12) POWER(5,25) RAND() SQRT(12) TRUNCATE(1,2344,3) ROUND(45.01)

Fecha y hora

DATE_FORMAT(2004-12-01);

- 10 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /
FROM-DAYS(730454+3) DATE_ADD(2004-1201,interval 2 month)

Cadena

FROM_DAYS (n): Devuelve la fecha relativa al entero n (nmero de das desde el ao 0). DATE_ADD (fecha,INTERVAL n tiempo) o ADDDATE (fecha,INTERVAL n tiempo): Aade n unidades de tiempo a la fecha dada. Los posible svalores de tiempo son: SECOND, MINUTE, HOUR, DAY, MONTH, YEAR, MINUTE_SECOND, HOUR_SECOND DATE_SUB (fecha, INTERVAL n timepo) o SUBDATE (fecha, INTERVAL n tiempo): Resta n unidades de tiempo a la fecha dada. Llos posibles valores de tiempo son los anteriores. PERIOD_ADD (periodo,n): Aade n meses al valor periodo. PERIOD_DIFF (periodo1, periodo2): Halla la diferencia entre los dos periodos. SEC_TO_TIME (segundos): Devuelve la hora relativa al nmero de segundos dado. TIME_TO_SEC (hora): Devuelve el nmero de segundos relativo a la hora dada. TIME_FORMAT (hora, formato): Devuelve la hora en el formato dado. Los formatos posibles son los mismos que para DATE_FORMAT. ASCII (cadena): Devuelve el cdigo ASCII del carcter ms a la izquierda de la cadena CHAR(n): Devuelve el carcter cuyo cdigo SCII es n CHAR (n,m): Devuelve y concatena los caracteres de cdigos SCII n,m.. BIN (n): Devuelve n en forma Binaria. COALESCE(exp1,exp2..): Devuelve el primer elemento no nulo de la lista de expresiones. CONCAT(cadena1,cadena2..): Concatena las cadenas dadas. ELT(cadena1,cadena2..): Devuelve la cadena ensima de la lista FIELD (cad, cadena1,cadena2..): Busca la cadena cad en la lista de cadenas y devuelve la posicin de su primer elemento. CONV (n, base, base2): Convierte el nmero n de base1 a base2. FORMAT (n.d): Formatea el nmero n en una cadena de d posiciones decimales de tipo nn,nnn.nnn HEX(n): Da el nmero n en hexadecimal OCT(n): Da el nmero n en octal INSERT (cadena, posicin, l, subcadena): Se inserta en la cadena a partir de la posicin dada los primeros l caracteres de la subcadena. LCASE (cadena) o LOWER (cadena): Da la cadena en minscula. UCASE (cadena) o UPPER (cadena): Da la cadena en mayscula. LEFT (cadena, n): Da los n elementos ms a la izquierda de la cadena RIGHT (cadena, n): Da los n elementos ms a la derecha de la cadena. LOCATE (subcadena, cadena, n): Da la posicin de la primera ocurrencia de la subcadena en la cadena empezando a buscar a partir de la posicin n enla cadena. Si n no se especifica, se empieza a buscar en la primera posicin de la cadena. LENGTH (cadena): Devuelve el nmero de caracteres de la cadena. LPAD(cadena, l,cadena1): Aade cadena1 a la izquierda de la cadena las veces que sea necesario hasta que la cadena resultante tenga L caracteres. LTRIM (cadena): Devuelve la cadena despus de quitar los espacios en blanco a la izquierda. MID(cadena, posicin, n): Da la subcadena de la cadena que comienza en la posicin dada y que tiene una longitud n. POSITION (subcadena, cadena): Da la posicin de la primera ocurrencia de la subcadena en la cadena empezando a buscar a partir de la primera posicin de la cadena. Es equivalente a LOCATE( subcadena,cadena) REPEAT( cadena,n): Repite la cadena n veces

DATE_SUB(2004-12-01,interval 2 month) PERIOD_ADD(9902,-3) PERIOD_DIFF(199811,9902) SEC_TO_TIME(29834) TIME_TO_SEC(12:31:58) TIME_FORMAT(12:31:58 %H %i) ASCII(abc) CHAR(97) CHAR(89,105,107,101) BIN(97) COALESCE(NULL,1/0.2,A) CONCAT(abc,def) ELT(3,a,d,abc,de) FEILD(a,d,abc,a) CONV(11111111,2,8) FORMAT(1234,56789,3) HEX(1234561) OCT(1234561) INSERT(abcdefgh,3,4, xyztsp) LCASE(abcdefgh) UCASE(ABFGDV) LEFT(acdfbhs4) RIGHT(acdgrefrtfe,4) LOCATE(d,adbcdefgh,4)

LENGTH(abcdefgh) LPAD(xy,abcdefg,14) LTRIM( agdhgfggh) MID(abfcdfgffef2,3,4) POSITION(d,abcdgf)

REPEAT(a,10)

- 11 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /
REPLACE(abc,d,oh) REVERSE(abcdefg) RIGHT(abcdefr) RPAD(xy,abcdef,14)

REPLACE (cad1,cad2,cad3): Reemplaza por la tercera cadena todas las apariciones d ela segunda cadena en la primera cadena. REVERSE (cadena): Devuelve la cadena invertida RIGHT(cadena , n): Devuelve los n caracteres ms a la derecha de la cadena RPAD (cadena1, cadena2): Aade cadena1 a la derecha de cadena las veces que sea necesario hasta que la cadena resultante tenga l caracteres. RTRIM (cadena): Devuelve una cadena de caracteres despus de truncar todos los espacios en blanco de la derecha. SOUNDEX (cadena): Devuelve la cadena tipo SOUNDEX relativa a la cadena dada. SPACE (n): Devuelve una cadena de espacios en blanco repetidos n veces. SUBSTRING (cadena, n): Devuelve la parte de la cadena que va desde la posicin n hasta su final. Las funciones de agregado realizan un clculo sobre un conjunto de valores y devuelven un solo valor. Con la excepcin de COUNT, las funciones omiten los valores NULL. Estas funciones se suelen usar con la clusula GROUP BY de la instruccin SELECT. AVG (expresin): Devuelve la media de los valores de un grupo definido por la expresin. Los valores NULL se pasan por alto. COUNT (expresin): Devuelve el nmero de elementos del grupo definido por la expresin. Los valores NULL se pasan por alto. MAX (expresin): Devuelve el valor mximo de la expresin. Los valores NULL se pasan por alto. MIN (expresin): Devuelve el valor mnimo de la expresin. Los valores NULL se pasan por alto. SUM (expresin): Devuelve la suma de todos los valores eb la expresin especificada. SUM slo puede utilizarse con columnas numricas. Los valores NULL se pasan por alto. STDDEV (expresin): Da la desviacin tpica estadstica de todos los valores de la expresin especificada. Los valores NULL se pasan por alto. GREATEST (exp1, exp2,..): Devuelve el argumento de mayor valor de la secuencia. LEAST (exp1, exp2,..): Devuelve el argumento de menor valor de la secuencia. IF (exp1, exp2, exp3): Devuelve exp2 si exp1 es verdadero y da exp3 si exp1 es falso. IFNULL (exp1, exp2,..): Devuelve exp2 si exp1 es null y da exp1 en caso contrario. INTERVAL (n, n1, n2, ..): Da cero si n<n1, uno si n<n2 y as sucesivamente. Si devuelve un -1 es que n es NULL. ISNULL (exp): Devuelve 1 si exp es NULL y da 0 en caso contrario. STRCMP (cadena1, cadena2): Devuelve 1 si cadena1=cadena2, da 0 si son diferentes y NULL si cualquier elemento es NULL.

RTRIM(abcdef) SOUNDEX(abcdef) SPACE(6) SUBSTRING(abcdefg,4)

Funciones de Agregado

SELECT AVG(advance) SELECT COUNT(city) SELECT MAX(id_sal) SELCT MIN(id_slae) SELECT SUM (price) SELECT STDDEV(royalty)

Funciones de comparacin

GREATEST (2, 3, 1) LEAST (2, 3, 1) IF (1.3, nocero,cero)

INTERVAL (1.1, 0, 1, 2)

- 12 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

OPERADORES DE SQL PARA MySQL


Categora Operadores de comparacin Clasificacin y definicin = (igual al) <=> (igual a y adems NULL < = > NULL es verdadero > (mayor que) < ( menor que) >= (mayor o igual que) <= (menor o igual que) <> o != ( distinto) a BETWEEN b AND c (a est entre b y c) exp IN (valor1, valor2, ..) y exp NOT IN (valor1, valor 2, ..) (El primero da 1 si exp es una de los valores de la lista y 0 en caso contrario, y el segundo funciona de forma complementaria) exp IS NULL y exp IS NOT NULL ( El primero da 1 si exp es NULL y 0 en caso contrario, y el segundo funciona complementario). a LIKE b y a NOT LIKE b (El primero da verdadero si a es igual a b y el segundo da verdadero si a no es igual a b) % Resto Carateres, _ 1 Solo caracter a REGEXP B y a NOT REGEXP b ( El primero da verdadero si a coincide con b y el segundo da verdadero si a no coincide con b) ^ Palabras que empezen por $ Palabras que terminen por BETWEEN (da true si el operando est dentro de un intervalo) IN ( da True si el operando es igual a uno de la lista de expresiones) LIKE (da True si el operando coincide con un patrn) REGEXP (comparacin con un patrn para expresiones regulares extendidas) NOT o ! (invierte el valor de cualquier otro operador boleano) OR (da true si cualquiera de las dos expresiones boleanas es cierta) AND ( da true si ambas expresiones boleanas son ciertas) + - * / %( Mdulo) BINARY: Provoca la conversin de nmero a cadena + = el valor numrico es positivo - = el valor numrico es negativo. & (operador bit a bit AND con dos operandos) | (operador bit a bit OR con dos operandos) << (desplaza hacia la izquierda el operando situado a la izquierda del operador nmero de posiciones de bit indicado por el operando de la derecha) >> (desplaza hacia la derecha el operando situado a la izquierda del operador nmero de posiciones de bit indicado por el operando de la derecha)

Operadores Lgicos

Operadores aritmticos Operadores Unarios Operadores bit a bit

Solo MySQL select distinct() from [nomBD]; Muestra aquellos atributos que sean distintos entre si.

- 13 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Exportar en MySQL
1. En la carpeta bin de MySQL el archivo *.sql 2. Crear la base de datos. 3. Redireccionar en consola. a. MySQL u root [nombreBBDDcreada] < [*.sql]

Funciones tras el where:


No se pueden poner funciones de agregado. Gruop by [atributo]: Agrupa la informacin segn atributos, suele ir acompaada de alguna funcin de agregado (max, min, sum) adems de otras. Having [funcAgre(atrib)[codicion][comparacin]]: Sirve para poder filtrar los resultados de las funciones de agregado y poder poner condiciones. Order by [atrib] asc/desc: Ordena los atributos, segn sean string o numricos de manera ascendente o descendente, ordenarlos de menos a mayor, etc... .Suele ir acompaado del Group by. Otra manera de elegir un atributo es poner el numero segn la posicin en que se ponga la select. Ej: Nombre y edad de los alumnos ordenados de menor a mayor segn edad: Select nombre, edad edad from alumnos order by 2 asc;

Alias en los atributos


Los alias sirven para cambiar las cabeceras de los nombres de los atributos por otros en las select. Select [atributo] as [alias] from [tabla]; Ej: select max(edad) as Mas viejo from alumnus; De esta manera en vez de aparecer edad aparece el alias.

- 14 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Multitablas
Para realizar una consulta multitabla es necesario como minimo 2 tablas. Estructuta: Select [tabla1].[atrb1], [tabla2].[atribTB2], From [tabla1], [tabla2] Where [IGUALACION] [tabla1].[id]=[tabla2].[id] And [condiciones]; Select [tabla1].[atrb1], [tabla2].[atribTB2], From [tabla1] join [tabla2] On [IGUALACION] [tabla1].[id]=[tabla2].[id] Where [condiciones];

Importante las igualaciones, ya que no tiene ningn sentido realizar multitablas si no tienen algo en comn. Ambas realizan el producto cartesiano, filtrndolo gracias a la igualacin y las condiciones. Alias en multitablas: Sirven para ahorrarnos el tener que escribir el nombre completa de las tablas para poder saber de donde proceden los atributos. Ej: Select a.nombre, l.nombrelibro From alumno a, libro l Where a.dni=l.isbn; Se pueden declarar aqu ya que MySQL lo comprueba despus. Aqu es donde se declaran los alias a las tablas.

- 15 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

LEFT/RIGHT JOIN
Es una variante del JOIN: Left join (izquierda): El resultado de la operacin siempre contiene todos los registros de la tabla que esta colocada a la izquierda (lo mas cercano al from). Aun cuando no exista un registro en la tabla de la derecha, mysql> select * from articulos; Right from categorias; muestra los registros de la tabla de la izquierda. mysql> select * join (derecha): Inversa a la anterior+----------+----------------+----------+--------+---------+
+---------+------------+ | COD_CAT | NOMBRE | +---------+------------+ | 1 | BEBIDAS | | 2 | DULCES | | 3 | LACTEOS | | 4 | CONSERVAS | | 5 | CHARCU | | 6 | PESCADERIA | +---------+------------+ 6 rows in set (0.00 sec) | COD_ART | DESCRIPCION | CANTIDAD | PRECIO | COD_CAT | +----------+----------------+----------+--------+---------+ | B-LIC-01 | RON BACARDI | 20 | 50 | 1| | B-LIC-02 | GINEBRA LARIOS | 15 | 30 | 1| | B-LIC-03 | WHISKY | 30 | 40 | 1| | C-PES-01 | SARDINAS | 20 | 6 | NULL | | C-PES-02 | MEJILLONES | 20 | 2 | NULL | | D-GLL-01 | GALLETAS CHOC | 50 | 5 | NULL | | D-GLL-02 | GALLETAS NATAS | 30 | 4| 2| | D-GLL-03 | GALLETAS LIMON | 10 | 2| 2| | L-LEC-01 | LECHE CLOSA | 30 | 1| 3| +----------+----------------+----------+--------+---------+ mysql> select a.descripcion, c.nombre -> from articulos a left join categorias c -> on a.cod_cat=c.cod_cat; +----------------+---------+ | descripcion | nombre | +----------------+---------+ | RON BACARDI | BEBIDAS | | GINEBRA LARIOS | BEBIDAS | | WHISKY | BEBIDAS | | SARDINAS | NULL | | MEJILLONES | NULL | | GALLETAS CHOC | NULL | | GALLETAS NATAS | DULCES | | GALLETAS LIMON | DULCES | | LECHE CLOSA | LACTEOS | +----------------+---------+

mysql> select a.descripcion, c.nombre -> from articulos a right join categorias c -> on a.cod_cat=c.cod_cat; +----------------+------------+ | descripcion | nombre | +----------------+------------+ | RON BACARDI | BEBIDAS | | GINEBRA LARIOS | BEBIDAS | | WHISKY | BEBIDAS | | GALLETAS NATAS | DULCES | | GALLETAS LIMON | DULCES | | LECHE CLOSA | LACTEOS | | NULL | CONSERVAS | | NULL | CHARCU | | NULL | PESCADERIA | +----------------+------------+ mysql> select a.descripcion, c.nombre -> from articulos a left join categorias c -> on a.cod_cat=c.cod_cat -> where a.cod_cat is null; +---------------+--------+ | descripcion | nombre | +---------------+--------+ | SARDINAS | NULL | | MEJILLONES | NULL |

En este caso no podra realizarse a la inversa puesto que es un 1-n. - 16 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Consultas con UNION (MySQL/ORACLE) INTERSECT(ORACLE)


Este tipo de consultas estn destinadas para aquellas tablas que no guarden relacion alguna con sus claves primarias o forneas, y por lo tanto sirven para unir dos tablas. Por defecto UNION utiliza distinc, es decir que elimina los repetidos. Union_all no elimina los repetidos. Ej: Mostrar los empleados que son bailarines o coregrafos. Select dni_b From bailarin Union Select dni_c From coreografo;

Subconsultas
Regla Toda consulta que se pueda realizar por subconsultas, se podr realizar por multitabla, pero no a la inversa. Se pueden mezclar multitablas y subconsultas. Ventajas Son ms eficientes cuando el calculo de informacin es muy grande, ya que no realizan productos cartesianos y van anidando los resultados. Estructura (Max 4 tablas Tipo 1: o Select SUBCONSULTA. - 17 -

DAECG Alberto Moreno Gracia Oracleacceder mysql linux From Where [atributo] [operador] ( Select From Where [atributo] [operador]); Tipo 2 o Select From Having [funcionDEagregado] [operador] ( Select From Where [atributo] [operador]);

MySQL /

Uso: 1. 2. 3. 4. Operadores (=, !=, <, > ) : Cuando el resultado de la subconsultas da una sola fila in () : Cuando el resultado de la subconsultas da lugar a mas de una fila. Operadores + all : 1 o mas filas. all : Operador mas restrictivo, la condicin la deben cumplir todos los elementos obtenidos en la subconsultas. 5. any: La condicion la deben cumplir algunos elementos de la condicion, pero no necesariamente todos. Equivalente a: i. =any in() ii. =any not in() 6. exists, not exists: No se utiliza en el having. Select From [TB1] Where exists/not exists ( Select * From [TB2] Where [IGUALACION DE CAMPOS]); Normas: 1. No poner atributo en el primer where. 2. Poner el asterisco en la subconsultas. 3. Igualacin de campos en la subconsulta. Si la subconsultas devuelve una o mas filas, devuelve TRUE, si no devuelve nada FALSE.

- 18 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

2 Bloque
Oracle 10g /11g
ORACLE
Schema (usuario1) -Tablas -vistas -Indices procedimientos

NAMESPACES

Schema (usuario2) -Tablas -vistas

Schema (usuario3) -Tablas

SCHEMA: Conjunto de objetos que le pertenecen a un usuario nicamente, si cualquier otro usuario quiere tener acceso a esos objetos, el usuario dueo a de otorgar privilegios. Siempre que otro usuario haga uso de cualquier objeto de otro usuario ha de anteponer el nombre del usuario y el nombre del objeto. EJ: Si el usuario1 quiere usar la tabla gestin del usuario2 y tiene los permisos: - 19 -

DAECG Alberto Moreno Gracia Oracleacceder mysql linux Select * from usuario2.gestion;

MySQL /

NAMESPACES: Definicin del tipo de objetos (tablas, ndices, procedimientos, funciones, ) de tal forma que cada NAMESPACE es distinto para cada usuario. Cada NAMESPACE puede contener tablas con el mismo nombre que otro NAMESPACE diferente, ya que pertenece a otro usuario distinto.

Unidades bsicas de una base de datos. Tablespace: Una BBDD esta almacenada fsicamente en ficheros y la correspondencia entre ficheros y las tablas es posible gracias a las dos estructuras internas que tiene la BBDD que permite que diferentes tipos de datos estn almacenados fsicamente separados, esta divisin lgica se hace gracias a los Tablespace. Datafiles (*.dbf): Cada tablespace esta formado por uno o varios ficheros fsicos que son los datafiles, un datafile pertenece a un tablespace pero un tablespace puede optar por varios datafiles. Select tablespace_name from dba_tablespaces; Nombre de las tablespaces de la BBDD. Select file_name from dba_data_files; Ficheros en los que se encuentran los tablesname. select table_name from user_tables; = show tables; Abrir bloc de notas: ed [nombre] Ejecutar bloc de notas: @[nombre] / execute [nombre] Ubicacin de los bloc de notas: C:\oraclexe\app\oracle\product\10.2.0\server\bin DUAL: Tabla utilizada en Oracle para realizar pruebas tiene un campo llamado DUMMY en el que podemos guardar un nico valor, ya sea char, varchar, varchar2 y numerico.

Usuarios Oracle
System o sys Usuario administrador, tiene todos los privilegios. HR Usuario que sirve para aprender Oracle. Scott Contrasea tiger Desconexion en Oracle disconnect; Desconexion del usuario. Exit; Salida de Oracle.

Creacin de un usuario: Create user [nombre] identified by [pass] default tablespace users; Asignar privilegios: Grant [privilegios] to [nombreUsuario]; Grant [privilegios] on [tabla] to [usuario]; Asignar permisos de una tabla a otro usuario. Grant [privilegios] on [tabla] to [usuario] [with Grant option]; El usuario que se crea puede dar permisos. Quitar o revocar permisos: Revoke [privilegios] from [usuario]; Revoke [privilegios] on [nombreTB] from [usuario]; - 20 -

DAECG Alberto Moreno Gracia Oracleacceder mysql linux Ver Todos los usuarios: Select * from all_users; Ver usuario con el que se esta conectado: Select * from user_users;

MySQL /

*Para asignar un permiso el usuario debe de existir antes, (no como en MySQL que puedes crear y
asignar simultneamente). Privilegios: Connect: Conexion Resource: Creacion de objetos. Select: Consultas Insert: Insertar. Update: Actulalizar. Alter: Alterar. Tablas: Session_privs: Privilegios del usuario que ha iniciado sesion. User_sys_privs: Permisos del sistema que tiene asignado al usuario.

SQL> Create user prueba identified by prueba default tablespace users; Usuario creado. SQL> connect prueba Introduzca la contrasea: ERROR: ORA-01045: user PRUEBA lacks CREATE SESSION privilege; logon denied Permiso conexin Permiso de crear SQL> connect system Introduzca la contrasea: Conectado. SQL> grant connect, resource to prueba; Concesin terminada correctamente. SQL> connect prueba/prueba Conectado. SQL> connect system Introduzca la contrasea: Conectado. SQL> revoke connect from prueba; Revocacin terminada correctamente.

objetos.

Informes Oracle.
Spool Permite redireccionar el resultado de un informe a un fichero. Estos ficheros contienen extensin *.lst Spool [C: \Documents & Settings\[usuario]\*.lst] Spool off Corta la rideccion al fichero. COMANDOS BSICOS PARA GENERAR INFORMES Parmetros REM: Para hacer comentarios en el bloc de notas

SET LINESIZE: pone el nmero mximo de caracteres por lnea. Por defecto vale 80 y el mximo es 999. SET PAGESIZE: pone el nmero de filas de la salida antes de empezar una nueva pgina. Por defecto es 25. Incluye el ttulo y las lneas de pausa. - 21 -

DAECG Alberto Moreno Gracia MySQL / Oracleacceder mysql linux SET HEADING [ON | OFF]: Activa/desactiva la utilizacin de encabezados de columnas. Por defecto est activado. SET NULL texto: Indica la cadena de caracteres que hay que colocar en sustitucin de los valores NULL. Por defecto es "". SET ECHO [ON | OFF]: Activa/desactiva la visualizacin de los comandos que SQL*Plus ejecuta segn van siendo tratados. Por defecto est desactivada. SET FEEDBACK [ n | ON | OFF]: Muestra el nmero de registros recuperados en cada consulta cuando se recuperan n o ms registros. ON se pueden considerar como n=1, y OFF como n=0. SET VERIFY [ON | OFF]: Controla la salida de confirmacin para los valores de las variables de sustitucin. Por defecto est activado. Comandos 1. TTITLE/BTITLE TTITLE: formacin del encabezado de pgina. SKIP <n>: Salta n lneas antes de imprimir el texto LEFT: Texto alineado a la izquierda CENTER: Texto centrado RIGHT: Texto alineado a la derecha BTITLE: formacin del pie de pgina. SKIP <n>: Salta n lneas antes de imprimir el texto LEFT: Texto alineado a la izquierda CENTER: Texto centrado RIGHT: Texto alineado a la derecha Para desactivar el encabezado y el pie de pgina: TTITLE OFF BTITLE OFF Se puede incluir una serie de variables con informacin del sistema en las rdenes TTITLE y BTITLE. SQL.LNO: devuelve el n de lnea actual. SQL.RELEASE: devuelve la versin de Oracle. SQL.PNO: devuelve el n de pgina actual. SQL.USER: devuelve el nombre de usuario actual. 2. COLUMN COLUMN: formatear cada columna. COLUMN <columna>, FORMAT <formato>, HEADING '<cabecera>',PRINT | NOPRINT Los campos deben de ser identicos a los que hay en la tabla. Para desactivar una COLUMN ponemos: COLUMN nombre columna CLEAR. Si se desean borrar todos los formatos definidos para los campos usaremos la orden CLEAR COLUMNS. Opciones: FORMAT: Sirve para formatear columnas. Caracteres especiales: * A<n>: Variable alfanumrica de n posiciones * 9: Nmeros. No rellena con ceros a la izquierda * 0: Nmeros. Rellena con ceros a la izquierda. * $: Indica la posicion del signo del $ * . : Inserta el punto decimal * , : Inserta el separador de miles. - 22 -

DAECG Alberto Moreno Gracia MySQL / Oracleacceder mysql linux * B : Cambia los blancos a la izquierda de la columna por ceros. * MI: Usa el - para indicar que la columna tiene ns negativos * PR: Usa < y > para indicar que la columna tiene ns negativos HEADING: Cabecera de la columna. Va entre comillas simples. PRINT | NOPRINT: Especifica si la columna se imprime o no. Se utiliza cuando una columna es necesaria en una select (ej GROUP BY) pero no desea visualizarse. 3. BREAK BREAK: puntos de ruptura en los listados. BREAK ON <columna/REPORT> <accin a tomar> Acciones a tomar:SKIP: Salta una lnea, SKIP <n>: Salta n lneas,PAGE: Salto de pgina Todas las rupturas de control definidas se pueden eliminar con CLEAR BREAKS. 4. COMPUTE COMPUTE: realizar clculos con las columnas. Siempre va detrs del BREAK Formato: COMPUTE <funcin> OF <campo> ON <grupo (un grupo creado con BREAK)> COMPUTE FUNCION LABEL( ETIQUETA) OF CAMPO ON GRUPO Funciones: MAX: Mximo MIN: Mnimo AVG: Media SUM: Suma STD: Desviacin estandar VAR: Varianza COUNT: n de filas por grupo Todas los clculos se pueden eliminar con CLEAR COMPUTES.

- 23 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

TITLE CENTER 'Datos de salarios por departamento' BTITLE RIGHT SQL.PNO CENTER SQL.USER SET PAGESIZE 25 BREAK ON REPORT SKIP 2 COMPUTE MIN LABEL 'SalMin' AVG LABEL 'SalMed' MAX LABEL 'SalMax' OF salario ON REPORT select d.dnombre, e.apellido, e.salario from emple e join depart d on d.dept_no=e.dept_no order by d.dnombre; TTITLE OFF BTITLE OFF CLEAR BREAKS CLEAR COMPUTES SQL> @bdinfo Datos de salarios por departamento DNOMBRE APELLIDO SALARIO TTITLE CENTER 'Datos de salarios por departamento' -------------- ---------- ---------BTITLE RIGHT SQL.PNO CENTER 2885 SQL.USER CONTABILIDAD CEREZO SET PAGESIZE 40REY CONTABILIDAD 4100 BREAK ON dnombre CONTABILIDAD MUOZ 1690 INVESTIGACION JIMENEZ 2900 COMPUTE MIN LABEL 'Salario Minimo' AVG LABEL 'Salario Medio' MAX LABEL 'Salario Maximo' OF INVESTIGACION FERNANDEZ 3000 salario ON dnombre INVESTIGACION ALONSO 1430 INVESTIGACION SANCHEZ 1040 select d.dnombre, e.apellido, 3000 e.salario INVESTIGACION GIL from emple e SALA join depart d 1625 VENTAS on d.dept_no=e.dept_no VENTAS TOVAR 1350 order by d.dnombre; VENTAS ARROYO 1500 VENTAS JIMENO 1335 TTITLE OFF NEGRO VENTAS 3005 BTITLE OFF MARTIN VENTAS 1600 CLEAR BREAKS ---------CLEAR COMPUTES 2175,71429 SalMed SalMin 1040 Datos de salarios por departamento DNOMBRE APELLIDO SALARIO -------------- ---------- ---------CONTABILIDAD CEREZO 2885 REY 4100 MUOZ 1690 ************** ---------Salario Medio 2891,66667 Salario Minimo 1690 Salario Maximo 4100 INVESTIGACION JIMENEZ 2900 FERNANDEZ 3000 ALONSO 1430 SANCHEZ 1040 GIL 3000 ************** ---------Salario Medio 2274 Salario Minimo 1040 Salario Maximo 3000 VENTAS SALA 1625 TOVAR 1350 ARROYO 1500 JIMENO 1335 NEGRO 3005 MARTIN 1600 ************** ---------Salario Medio 1735,83333

24 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Secuencias
Sirven para generar automticamente nmeros distintos. Es una rutina interna de la BBDD, la que realiza la funcin de generar u numero distinto cada vez. Las secuencias se almacenan independientes de la tabla, por lo que la misma secuencia se puede utilizar para diversas tablas. - 25 -

DAECG Oracleacceder mysql linux Sintaxis:

Alberto Moreno Gracia

MySQL /

Create sequence [nombreSeq] [increment by [num]] Indica el valor con el que se va a ir incrementando. Por defecto 1. [star with [num]] Valor inicial de la secuencia. Por defecto 1. [maxvalue [num]] Valor max. al que puede llegar la secuencia. Por defecto 1027. [minvalue [num]] Valor min. al que puede llegar la secuencia. Por defecto -1026. [cycle/nocycle]; Secuencia en ciclo o no, quiere decir que cuando llega al maximo valor vuelve al valor inicial o no. Por defecto cuando acaba el primer ciclo, comienza con los valores por defecto del incremento y el valor inicial. Informacin de las secuencias. Listado de secuencias select * from user_sequences; Valor actual de la secuencia select [nomSeq].currval from [tablaSeq]; Siguiente valor de la secuencia select [nombreSeq].nextval from [tablaSeq]; Borrar una secuencia drop sequence [nombre]; Asignar una secuencia a una tabla. Para asignar una secuencia en el insert a de ponerse [nombreSeq].nextval en el lugar donde la queramos utilizar.
SQL> create sequence prueba 2 start with 10 3 increment by 2 4 maxvalue 100; Secuencia creada. SQL> create table pruebaSecuencia2( 2 id number (3) primary key, 3 nombre varchar (50) not null); Tabla creada. SQL> insert into pruebaSecuencia values (prueba.nextval, 'Evaristo'); 1 fila creada. SQL> insert into pruebaSecuencia values (prueba.nextval, 'Canduterio'); 1 fila creada. SQL> insert into pruebaSecuencia values (prueba.nextval, 'AgapitoVeteYa'); 1 fila creada. SQL> select * from pruebaSecuencia; SQL> create table pruebaSecuencia2( ID NOMBRE 2 id number (3) primary key, ---------- -------------------------------------------------3 nombre varchar (50) not null); 10 Evaristo Tabla12 Canduterio creada. 14 AgapitoVeteYa SQL> insert into pruebaSecuencia2 values (prueba.nextval, 'Zaragoza'); 1 fila creada. Inciso!

Si queremos*usar la misma secuencia en otra tabla distinta, la secuencia seguir su curso SQL> select from pruebaSecuencia2;
ID NOMBRE ---------- -----------------------------16 Zaragoza

SQL> insert into pruebaSecuencia values (prueba.nextval, 'PEPE'); 1 fila creada. SQL> select * from pruebaSecuencia; ID NOMBRE ---------- ------------------------------10 Evaristo 12 Canduterio 14 AgapitoVeteYa

- 26 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Volcado directo
Pasar datos de un documento *.txt a las BBDD.

MySQL:

1) My PC C: \Documents & Settings\[usuario] 2) Crear o tener creado un *.txt 3) Crear la tabla si no esta. a. Logicamente los datos a introducir deben ser acordes con la estructura de la tabla. 4) Volcado. (No hay que cerrar con ;) MySQL> load data infile [rutaDeltxt] into table [nombreTB] fields terminated by [separador] Para detector nulls! Load data local infile Ruta into table nombreTB lines terminated by \n\r;
mysql> create table proyecto2( -> cod_pro int(5) primary key, -> descripcion varchar(50), -> asignatura varchar(50), -> anio int(4)); Query OK, 0 rows affected (0.08 sec) mysql> Load data infile "C:/Users/Alberto/datos.txt" into table proyecto2 fields terminated by '*'; mysql> select * from proyecto2; +---------+-----------------------+-----------------------+------+ | cod_pro | descripcion | asignatura | anio | +---------+-----------------------+-----------------------+------+ | 1 | Las ciencias exactas | Ciencias sociales | 1998 | | 2 | Matematicas aplicadas | Matematicas discretas | 2005 | | 3 | Gestion Hotel | Base Datos | 1968 | | 4 | Construccin Puente | Industriales | 1987 | +---------+-----------------------+-----------------------+------+ 4 rows in set (0.00 sec)

1|Manolo 2|Felipe 3|Maria

ORACLE:
1) 2) 3) 4) My PC C: \Documents & Settings\[usuario] Crear o tener creado un *.txt Crear un documento con la extensin *.ctl Escribir en el documento *.ctl (No hay que cerrar con ;) - 27 -

DAECG Alberto Moreno Gracia MySQL / Oracleacceder mysql linux a. Load data infile [nombre.txt] into table [prueba] fields terminated by [separador] (campo1,campo2,)
nombres.txt 1|Manolo 2|Felipe 3|Maria Volcador.ctl Load data infile nombres.txt into table prueba fields terminated by | (id, nombre)

5) En terminal (cmd) 6) Sqlldr userid=[nombreUsu] control=[*.ctl] log=arch.logComprobar volcado.


Oracle SQL> create table proyecto2( 2 cod_pro number(5) primary key, 3 descripcion varchar(50), 4 asignatura varchar(50), 5 anio number(4)); Tabla creada. Volcado.ctl Load data infile datos.txt into table proyecto2 fields terminated by '*' (cod_pro, descripcion, asignatura, anio) Datos.txt 1*Las ciencias exactas*Ciencias sociales*1998 2*Matematicas aplicadas*Matematicas discretas*2005 3*Gestion Hotel*Base Datos*1968 4*Construccin Puente*Industriales*1987 C:\Users\Alberto>Sqlldr userid=alberto/root control=volcador.ctl log=arch.log SQL*Loader: Release 10.2.0.1.0 - Production on Mi Feb 23 10:49:29 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. Punto de confirmacin alcanzado - recuento de registros lgicos 3 Punto de confirmacin alcanzado - recuento de registros lgicos 4 SQL> select * from proyecto2; COD_PRO DESCRIPCION ---------- -------------------------------------------------ASIGNATURA ANIO -------------------------------------------------- ---------1 Las ciencias exactas Ciencias sociales 1998 2 Matematicas aplicadas Matematicas discretas 3 Gestion Hotel Base Datos 4 Construccin Puente Industriales 2005 1968 1987

- 28 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Transacciones
Si disponemos de un conjunto de operaciones en sql que deben ejecutarse en conjunto con el uso de las transacciones podemos tener la certeza de que nunca nos quedaremos a medio camino de su ejecucin. Se usan con las siguientes operaciones: Insert Delete Update Al realizar operaciones en las tablas, se puede dar lugar algun error, con las transacciones podemos asegurarnos de que las operaciones esta hechas correctamente ya que podemos comprobarlo haciendo una select

MySQL
Begin; [OPERACIN] [COMPROBACION (select)] Commit; Indicar que todo esta correcto y que se esta de acuerdo con los cambios. Rollback; No se esta de acuerdo con los cambios por lo que no surgen efecto.

ORACLE
Para hacer transaciones en Oracle necesitamos los bloques anonimos (No necesitan nombre, solo inicion y fin) Begin [OPERACIN] End; /

Delete
Borra contenido de estructura. Tipos: Basico: delete [nombreTB] from [nombreTB]; = truncate. Media: delete [nombreTB] from [nombreTB] where [[CONDICION] HAVING Y GROUP BY]; Multitabla: o delete [nombreTB] from [nombreTB1],[nombreTB2] where [IGUALACION] and [CONDICION] on delete cascade/on delete set null; Delete [nombreTB] From [nombreTB] Where [campo1] [OPERADOR] ( Select [campo1] From [nombreTB]); - 29 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

*Caso especial. En el caso de las subconsultas si la tabla que queremos borrar coincide con la tabla de la subconsultas MySQL falla (Oracle NO). Delete tabla1 From tabla1 Where [campo1] [OPERADOR] ( Select campo From tabla1);

Solucin: Crear tabla temporal que contenga la misma informacion de la tabla en la que pongo la select o queremos copiar Nombre de las tabla temporales temp[n]. Create table temp1 select * from [tabla]; Delete tabla1 From tabla1 Where [campo1] [OPERADOR] ( Select campo From temp1);

Sinonimos (Oracle).
Son nombres que se asignan a una tabla para poder usar otro nombre alternativo. Creacion
SQL> select * from clientes; COD_CLI LOCAL NOMBRE ---------- ------------------------- -----------------------DOMICILIO LOCALIDAD ------------------------------ -----------------------------1 BAR SARCUS SEVERINO SEMOS RITMO MUSICAL 23 PELAYOS DE LA PRESA 2 BODEGA POZO MANUEL CABEZON DIONISIO PINILLO 3 PELAYOS DE LA PRESA 3 CLUB FAROLES ENRIQUETA PON VEREDA DEL RIO NAVAS DEL REY 4 BAR PACO PACO OKUPA COOPERATIVA 2 VILLA DEL PRADO 5 PUB STUDIO JUAN SUPER LOPEZ LAS CASAS 3 PANTANO DE SAN JUAN SQL> create synonym cli for clientes; Sinnimo creado. SQL> select * from cli; COD_CLI LOCAL NOMBRE ---------- ------------------------- -----------------------DOMICILIO LOCALIDAD ------------------------------ -----------------------------1 BAR SARCUS SEVERINO SEMOS RITMO MUSICAL 23 PELAYOS DE LA PRESA 2 BODEGA POZO MANUEL CABEZON DIONISIO PINILLO 3 PELAYOS DE LA PRESA 3 CLUB FAROLES ENRIQUETA PON VEREDA DEL RIO NAVAS DEL REY 4 BAR PACO PACO OKUPA COOPERATIVA 2 VILLA DEL PRADO 5 PUB STUDIO JUAN SUPER LOPEZ LAS CASAS 3 PANTANO DE SAN JUAN SQL> drop synonym cli; Sinnimo borrado.

Create [public] synonym [nombreSinonimo] for [nombreTB]; Public Inica que el sinonimo puede ser usado por todos los usuarios. No es obligatorio ponerlo. Borrado

Drop synonnym [nombreSino]; Ver que tiene el usuario.

select synonym_name from user_synonyms;

- 30 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Vistas (MySQL / Oracle)


Son tablas virtuales o lgicas. Las vistas van actualizndose en funcin de las tablas sobre las que estn hechas, es decir, si en una tabla esta el dni, nombre, apellidos, nacionalidad y en la vista decidimos mostrar el dni y el nombre, si un nombre se modificara, se aadieran ms personas o incluso se borraran la vista se actualizara. Creacin Visualizar vista Borrado de vistas Create view [nombreVista] as select (simples, multitablas, join, left/right, subconsultas Select * from [nombreVista]; Drop view [nombre];

Visualizar vistas. Mysql Show tables; Aparece como tabla, al crear indicar que es vista en nombre Oracle select view_name from user_views; Oracle
SQL> create view art_sinAsignar as 2 select a.descripcion, c.nombre 3 from articulos a left join categorias c 4 on a.cod_cat=c.cod_cat 5 where a.cod_cat is null; Vista creada. SQL> select * from art_sinAsignar; DESCRIPCION NOMBRE -------------------- --------------GALLETAS CHOC SARDINAS MEJILLONES SQL> select view_name from user_views; VIEW_NAME -----------------------------PUNTO5 ART_SINASIGNAR

MySQL
mysql> create view art_sinAsignar as -> select a.descripcion, c.nombre -> from articulos a left join categorias c -> on a.cod_cat=c.cod_cat -> where a.cod_cat is null; Query OK, 0 rows affected (0.13 sec) mysql> select * from art_sinAsignar; +---------------+--------+ | descripcion | nombre | +---------------+--------+ | SARDINAS | NULL | | MEJILLONES | NULL | | GALLETAS CHOC | NULL | +---------------+--------+ 3 rows in set (0.05 sec) mysql> show tableS; +---------------------+ | Tables_in_dbgestion | +---------------------+ | art_sinasignar | | articulos | | categorias | | clientes | | empleados | | reparto | +---------------------+ 6 rows in set (0.00 sec)

Update
Usar siempre transacciones: Tipos: Update [tb1], [tb2] set t1.campo=t2.campo, t1.campo=t2.campo where [IGUALACION][condicion]; - 31 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Update [tb1] join [tb2]on [igualacin] set t1.campo=t2.campo, t1.campo=valor, t1.campo=operacin Where [operacin]; Update [tb1], [tb2] set t1.campo=t2.campo, t1.campo=t2.campo where t1.campo [operador] (select);

Restricciones
Oracle: Fech_ini date, Fech_fin date, Constraint [nombreConst] check (fech_ini<fech_fin); MySQL: Fech_ini date, Fech_fin date check (fech_ini<fech_fin);

Administracin de cuentas en MySQL


Dentro de la BBDD en information_schema se encuentran las tablas de administracion. o User_privileges: Privilegios de cada uno de los usuarios. o Tables_privileges: Privilegios a nivel de tablas. o Column_privileges: Contiene privilegios a nivel de campo o columna. o Schema_privileges: Privilegios a nivel de BBDD. Crear y asignar privilegios a un usuario. 1. create user [nombre] identified by [pass]; Creacion 2. grant [privilegios] on [*.*|nombreBD.*|nombreBD.tabla] to [nombreUsu] identified by [pass]; Asignacion permisos. All Alter Select Insert Drop Create Delete Update [table|view|index|procedure] 3. grant [privilegio] (columna) on [nombreBD.tabla] to [nombreUsu] identified by [pass]; Asignamos permisos sobre una columna. Revocar permisos, borrar usuarios. 1. revoke [privilegio] on [*.*|nombreBD.*|nombreBD.tabla] from [nombreUsu]; Quitar permisos a un usuario. 2. delete from user_privileges where grantee=[nombreUsu]; Borrar usuario. 3. flush privileges; Actualiza los privilegios.

Privilegios

- 32 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

mysql> create user adolfo identified by 'root'; Query OK, 0 rows affected (0.04 sec)

Usuario ya creado

mysql> create user alberto identified by '123'; ERROR 1396 (HY000): Operation CREATE USER failed for 'alberto'@'%' mysql> grant all on *.* to adolfo identified by 'root'; Query OK, 0 rows affected (0.05 sec) Damos todos los permisos y vemos que tiene todos.

mysql> select * from user_privileges; +--------------------+---------------+-------------------------+-------------| GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE +--------------------+---------------+-------------------------+-------------| 'adolfo'@'%' | NULL | SELECT | NO | 'adolfo'@'%' | NULL | INSERT | NO | 'adolfo'@'%' | NULL | UPDATE | NO | 'adolfo'@'%' | NULL | DELETE | NO | 'adolfo'@'%' | NULL | CREATE | NO | 'adolfo'@'%' | NULL | DROP | NO mysql> grant all on *.* to pepe identified by 'root'; Cuando asignamos Query OK, 0 rows affected (0.00 sec)

permisos, si el usuario no existe, lo crea.

mysql> revoke all on *.* from adolfo; Query OK, 0 rows affected (0.00 sec)

Procedimientos y funciones (MySQL versin 5.0 en adelante)


Importante poner un delimitador nuevo, (suele ser ;) ya que si no se cambia coge el punto y coma como delimitador, es decir que seria el final del procedimiento o funcin. delimiter /; Condiciones Los procedimientos y las funciones se asocian a una BBDD y por lo tanto es importante tener una BBDD seleccionada, si la BBDD se borra, los procedimientos, funciones, tablas datos desaparecen. Importante tener en cuenta que hay que asegurarse de que independientemente de las tablas sobre las que acten, deben de devolver una UNICA tupla. Ver procedimientos / funciones - 33 -

DAECG Oracleacceder mysql linux Show procedure status; Show function status;

Alberto Moreno Gracia

MySQL /

Borrado de procedimientos / funciones Drop procedure [nombre]; Drop function [nombre];

Creacin de procedimientos (no devuelven nada). Create procedure [nombre] ( ) Vacio o con parmetros pueden ser: Begin [ACCIONES] End/ Creacin de funciones (devuelven). Create function [nombre] () returns [tipo] Parmetros: Begin [ACCIONES] end/ Invocacin de procedimientos o funciones. Procedimientos Call [nombre] (parmetros); Funciones Select [nombre](parmetros);
E/ [nombre] [tipo] (Lo da por hecho) /S out [nombre] [tipo] E/S inout [nombre] [tipo]

E/ in [nombre] [tipo] /S out [nombre] [tipo] E/S inout [nombre]

Si una funcin es llamada dentro de un procedimientos (al reves no se puede hacer ya que no devuelve nada). [nombre](); calculoEdad(); [variable]= [nombre](); edad=calculoEdad(); Utilizar select en procedimientos y funciones. Se usan para obtener datos de una tabla segn una seleccin. 1) Tener declarada una variable 2) En la select tener select campo into variable from tabla; Sentencias If [condicion] then Accion; Else if [condicion] then Accion; Else Accion; Case [valor/variable] When [valor] then Accion; When [valor] then Accion; Else - 34 -

DAECG Oracleacceder mysql linux End if; Repeat Acciones; Until [condicion] end repeat;

Alberto Moreno Gracia Accion; End case; While [condicion] do Acciones End While;

MySQL /

Ejemplo:

- 35 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Escribe una funcin que reciba dos nmeros y visualice su suma create function tres(var1 int,var2 int)returns int(4) begin declare resultado int(3); set resultado=var1+var2; return resultado; end / Crear un a funcin que realice el cubo de un nmero pasado por parmetro create function once ( var int(4))returns int(4) begin set var=power(var,3); return var; end / Crear una funcin que compruebe la existencia de un empleado (le pasamos el cdigo del empleado y tiene que deolver 1 si est o 0 sino). La base de datos es GESTION. create function comprobar(vcodigo int(3)) returns int(1) begin declare existe int(1); select count(*) into existe from empleados where cod_emp=vcodigo; return existe; end/ create procedure comprobars(vcodigo int(3)) begin if comprobar(vcodigo) then select "El empleado existe"; else select "El empleado no existe"; end if; end/ Crear un bloque que seleccione los artculos de mayor y menor precio de la tabla artculos (BBDD.gestion), los almacene en dos variables y nos las muestre por pantalla create procedure tres() begin declare mayor int(4); declare menor int(4); select max(precio) into mayor from articulos; select min(precio) into menor from articulos; select mayor; select menor; end / Construya un bloque , que pase por parmetro el dni de la persona y que Posteriormente se muestre el nombre y la edad de la persona correspondiente. Previamente debemos haber creado, fuera de nuestro bloque la siguiente informacin: Create procedure ocho(var int(10)) Begin If comprobar(var) then Select nombre,edad from persona where dni=var; Else

- 36 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Cursores MySQL
Un cursor genera internamente un registro de la informacin obtenida. Una vez obtenido el registro en MySQL avanza fila a fila, en Oracle puede avanzar y retroceder en el registro. Los cursores va tratanto los registros fila por fila. Dos tipos: Explicitos (MySQL) +1 fila. Asociados a una BBDD, asi como los procedimientos y las funciones. Las Llamadas son como los procedimientos y las funciones. Explicitos e implicitos (Oracle).

Estructura:
Create procedure/function [nombre]([Parametros]) [retorno] Begin Declare done int (1) default 0; Variable de continuacion. [variables] Declare [NombreCursor] cursor for [SELECT] Nombre del cursor y asociacin de consulta. Declare continue handler for sqlstate 02000 set done=1; sqlstate (Excepcion indica su llegada al final del registro.) Open [NombreCursor] Repeat Fetch [NombreCursor] into [variable], [variable]; If not done then [Acciones]; End if; Until done end repeat; Close [NombreCursor]; End/

- 37 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

CURSORES
create table alumnos( nomMatricula int (3) primary key, nombre char (20), titulacion char (20))engine=innodb; insert into alumnos (nomMatricula, nombre, titulacion) values (1, "Juan", "Informatica"), (2, "Jose", "Empresariales"), (3, "Maria", "Informatica"), (4, "Sara", "Informatica"); create table alumnosInfo( nomMatricula int (3) primary key, nombre char (20), titulacion char (20))engine=innodb; create table alumnosOtrod( nomMatricula int (3) primary key, nombre char (20), titulacion char (20))engine=innodb; create procedure eje1() begin declare done int (1) default 0; declare Vmatricula int (3); declare Vnombre, Vtitulacion char (20); declare cur1 cursor for select * from alumnos; declare continue handler for sqlstate '02000' set done=1; open cur1; repeat fetch cur1 into Vmatricula, Vnombre, Vtitulacion; if not done then if Vtitulacion='Informatica' then insert into alumnosInfo values (Vmatricula, Vnombre, Vtitulacion); else insert into alumnosOtrod values(Vmatricula, Vnombre, Vtitulacion); end if; end if; until done end repeat; close cur1;

- 38 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

Disparadores / Triggers
Es un objeto con nombre dentro de la BBDD, se asocia a una tabla y se activa cuando ocurre un evento en particular. Eventos, pueden ser lanzados antes/despus after/befote. Insert new (Al insertar el campo siempre va ser nuevo) Delete old (Al borrar podemos utilizar los campos anteriores, por ejemplo una backup) Update new/old (Podemos jugar con los ya sean nuevos o viejos.) Valores (Se asocia con el valor de los campos): Old.campo Guarda el valor del campo antes de que suceda el evento. New.campo Guarda el valor despus del evento. Disparador por fila (for each row) El disparador se ejecuta N veces si se llama N veces desde la tabla. Disparador por secuencia (for each statment) No importa la cantidad de veces que se cumplen las condiciones, solo se ejecuta 1 vez.
Sintaxis: Create trigger [nombre] [alter/befote] [insert/delete/update] on [nombreTB] For each row Begin Sentencia; End/

*No se puede tener mas de un trigger con el mismo evento en una tabla.
Borrado triggers drop trigger [nombre]; Ver disparadores use information_schema; Select * from triggers.

*Para llamar a procedimientos o funciones.


1. Deben de estar creados 2. No deben mostrar ningn mensaje

*Otra manera de llamar a los Triggers.


1. 2. 3. 4. 5. use information_schema; Tabla Triggers; select * from triggers where trigger_name=[nombre]; Usar BBDD donde se encuentra la tabla del trigger Realizar evento.

- 39 -

DAECG Oracleacceder mysql linux

Alberto Moreno Gracia

MySQL /

insert into emple values (1, "Pepe", 45, 2000, 0); insert into emple values (2, "Claudia", 23, 1800, 20); insert into emple values (3, "Marta", 25, 2200, 0); delimiter \ create trigger ej2 before delete on emple for each row begin if old.comision=0 then insert into copia_emple values (old.cod_emp, old.nombre, old.edad, old.salario, old.comision); end if; end/ delimiter ; delete from emple where cod_emp=1; mysql> select * from copia_emple; +---------+--------+------+---------+----------+ | cod_emp | nombre | edad | salario | comision | +---------+--------+------+---------+----------+ Ptipo enum("jefe","noJefe")) create procedure esJefe(in Pcod int (3), in | 1 0| begin | Pepe | 45 | 2000 | +---------+--------+------+---------+----------+ declare jef varchar (10) default 'jefe'; 1 row in set (0.00 sec) if Ptipo=jef then insert into jefe values (Pcod, null); mysql> select * from emple; else +---------+---------+------+---------+----------+ insert into noJefe values (Pcod, null, null); | cod_emp |if; end nombre | edad | salario | comision | +---------+---------+------+---------+----------+ end/ | 2 | Claudia | 23 | 1800 | 20 | | 3 | Marta | after 2200 on 0| create trigger Gen 25 | insert | empleados +---------+---------+------+---------+----------+ for each row 2 rows in set (0.00 sec) begin call esJefe(new.cod_emp, new.tipo); end/ insert into empleados values (1, "Juano", "c/ Cuba n53", 1234567, "jefe"); insert into empleados values (2, "Alberto", "C/ pepe n12", 12345664, "noJefe"); mysql> select * from empleados; +---------+---------+--------------+----------+--------+ | cod_emp | nombre | direccion | telefono | tipo | +---------+---------+--------------+----------+--------+ | 1 | Juano | c/ Cuba n53 | 1234567 | jefe | | 2 | Alberto | C/ pepe n12 | 12345664 | noJefe | +---------+---------+--------------+----------+--------+ 2 rows in set (0.08 sec) mysql> select * from jefe; +---------+--------+ | cod_jef | sueldo | +---------+--------+ | 1 | NULL | +---------+--------+ 1 row in set (0.08 sec) mysql> select * from nojefe; +---------+---------+-----------+ | cod_noJ | horario | fecha_ini | +---------+---------+-----------+ | 2 | NULL | NULL |

- 40 -

You might also like