Programación MySQL
Programación MySQL
FUNCIONES MySQL
CONCAT(cad1, cad2, cad3, , cadn): Concatena cadenas dadas en los
argumentos.
CONCAT_WS(separador, cad1, cad2, cad3, ): Concatena cadenas con
separador.
CONV(n, from_base,to_base): Convierte un nmero n de base.
ELT(n, cad1, cad2, cad3,,cadn): Devuelve la cadena de posicin n.
LAST_INSERT_ID( ): Devuelve el ltimo nmero de secuencia generado.
LCASE(cadena) o LOWER(cadena): Devuelve la cadena en minscula.
UCASE(cadena) o UPPER(cadena): Devuelve 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 primera posicin de la subcadena a partir
de posicin n.
LENGTH(cadena): Devuelve el nmero de caracteres de la cadena.
LPAD(cadena,n,cadena1): aade cadena1 a cadena a la izquierda hasta que la
cadena tenga n caracteres.
RPAD(cadena,n,cadena1): aade cadena1 a cadena a la derecha hasta que la
cadena tenga n caracteres.
LTRIM(cadena): Devuelva la cadena despus de truncar los espacios en blanco
a la izquierda.
RTRIM(cadena): Devuelva la cadena despus de truncar los espacios en blanco
a la derecha.
MID(cadena, posicin, n): Da subcadena de longitud n a partir de posicin.
POSITION(subcadena, cadena): Da la primera posicin de la subcadena en la
cadena.
REPEAT(cadena, n): Repite la cadena n veces.
REPLACE(cad1 ,cad2, cad3): Reemplaza cad2 por cad3 en cad1.
REVERSE(cadena): Devuelve la cadena invertida.
SOUNDEX(cadena): Devuelve cadena soundex parecida a cadena dada.
SPACE(n): Devuelve cadena de espacios en blanco repetidos n veces.
SUBSTRING(cadena, n): Devuelve subcadena de cadena desde n hasta el final.
SUBSTRING(cadena, n, m): Devuelve subcadena de cadena de tamao m a
partir de n.
CONECTAR Y CREAR USUARIO DNDOLE PRIVILEGIOS
MariaDB [none]> mysql -u root -h localhost;
MariaDB [none]> update user set password= 26012010 where user=root;
MariaDB [none]> select now(), user(), versin();
MariaDB [none]> create user manuel@localhost identified by 18061962;
MariaDB [none]> grant all privileges on sampdb.* to manuel identified by
18061962;
DATABASE books
MariaDB [none]> create database books;
MariaDB [none]> use books;
END WHILE;
END
//
DELIMITER ;
control_structures_cursors.sql
# Procedure to find the orderid with the largest amount
# could be done with max, but just to illustrate stored procedure principles
delimiter //
create procedure largest_order(out largest_id int)
begin
declare this_id int;
declare this_amount float;
declare l_amount float default 0.0;
declare l_id int;
declare done int default 0;
declare continue handler for sqlstate '02000' set done = 1;
declare c1 cursor for select orderid, amount from orders;
open c1;
repeat
fetch c1 into this_id, this_amount;
if not done then
if this_amount > l_amount then
set l_amount=this_amount;
set l_id=this_id;
end if;
end if;
until done end repeat;
close c1;
set largest_id=l_id;
end
//
delimiter;
MariaDB [books]> SHOW columns FROM information_schema.routines;
MariaDB [books]> SELECT * FROM INFORMATION_SCHEMA.ROUTINES;
Estas dos sentencias SELECT devuelven lo mismo:
MariaDB [books]> SELECT routine_definition FROM
information_schema.routines WHERE routine_name = add_tax2;
MariaDB [books]> SELECT routine_definition FROM
information_schema.routines WHERE specific_name = add_tax2;
DATABASE sampdb
MariaDB [none]> create database sampdb;
MariaDB [none]> use sampdb;
MariaDB [sampdb]>
source C:/Users/Manuel Montiel/Documents/MySQL/sampdb/crear_tablas.sql;
crear_tablas.sql
CREATE TABLE president ( last_name VARCHAR(15) NOT NULL,
first_name VARCHAR(15) NOT NULL, suffix VARCHAR(5) NULL, city
VARCHAR(20) NOT NULL,
state VARCHAR(2) NOT NULL, birth DATE NOT NULL, death DATE NULL );
CREATE TABLE member ( member_id INT UNSIGNED NOT NULL
AUTO_INCREMENT,
PRIMARY KEY (member_id), last_name VARCHAR(20) NOT NULL, first_name
VARCHAR(20) NOT
NULL, suffix VARCHAR(5) NULL, expiration DATE NULL DEFAULT '0000-00-00',
email VARCHAR(100) NULL, street VARCHAR(50) NULL, city VARCHAR(50)
NULL,
state VARCHAR(2) NULL, zip VARCHAR(10) NULL, phone VARCHAR(20) NULL,
interests VARCHAR(255) NULL );
MariaDB [sampdb]>
SOURCE C:/Users/Manuel
Montiel/Documents/MySQL/sampdb/crear_tabla_student.sql;
MariaDB [sampdb]> LOAD DATA INFILE
C:/Users/Manuel Montiel/Documents/MySQL/sampdb/students.txt INTO TABLE
student;
MariaDB [sampdb]> UPDATE student SET sex=M WHERE student_id=2;
MariaDB [sampdb]> INSERT INTO grade_event (date, category) VALUES (200409-03,Q);
LOAD DATA INFILE
C:/Users/Manuel Montiel/Documents/MySQL/sampdb/presidentes.txt INTO
TABLE president;
DATABASE educa
MariaDB [none]> CREATE DATABASE educa;
MariaDB [none]> USE educa;
MariaDB [educa]>
SOURCE C:/Users/Manuel
Montiel/Documents/MySQL/educa/crear_tablas_educa.sql;
MariaDB [educa]> SHOW CREATE TABLE estudiante; // para ver estructura
tabla
MariaDB [educa]> ALTER TABLE estudiante DROP FOREIGN KEY
estudiante_ibfk_1;
MariaDB [educa]> ALTER TABLE estudiante CHANGE esp esp CHAR(4);
MariaDB [educa]> ALTER TABLE estudiante ADD FOREIGN KEY (esp)
REFERENCES departamento (dept);
MariaDB [educa]> LOAD DATA INFILE
C:/Users/Manuel Montiel/Documents/MySQL/ramadb/insert_departamento.txt
INTO TABLE departamento;
LOAD DATA INFILE C:/Users/Manuel
Montiel/Documents/MySQL/ramadb/insert_estudiante.txt INTO TABLE
estudiante;
LOAD DATA INFILE C:/Users/Manuel
Montiel/Documents/MySQL/ramadb/insert_matricula.txt INTO TABLE matricula;
LOAD DATA INFILE C:/Users/Manuel
Montiel/Documents/MySQL/ramadb/insert_curso.txt INTO TABLE curso;
LOAD DATA INFILE C:/Users/Manuel
Montiel/Documents/MySQL/ramadb/insert_claustro.txt INTO TABLE claustro;
MariaDB [educa]> UPDATE departamento SET dept=CISS WHERE dept= CIS;
MariaDB [educa]> UPDATE estudiante SET esp=CISS WHERE esp= CIS;
MariaDB [educa]> SELECT * FROM curso WHERE tarifa<150;
MariaDB [educa]> SELECT * FROM curso WHERE nombre >=ESTRUCTURA;
MariaDB [educa]> SELECT num, nombre, descripcion FROM curso WHERE
nombre BETWEEN ES AND FUND;
MariaDB [educa]> SELECT num, tarifa FROM curso WHERE tarifa BETWEEN 50
AND 400;
MariaDB [educa]> SELECT * FROM curso WHERE tarifa NOT IN (12, 15, 50, 75,
90, 100, 500);
MariaDB [educa]> SELECT * FROM curso WHERE descripcion LIKE PARA %;
MariaDB [educa]> SELECT nombre, numdept, fdept FROM claustro WHERE
numdept IS NOT NULL;
MariaDB [educa]> SELECT * FROM curso WHERE red=3 AND cdept=PHIL;
MariaDB [educa]> SELECT * FROM curso WHERE (tarifa>=100) AND
(tarifa<=500);
MariaDB [educa]> SELECT nombre, cuota, ventas FROM repventas WHERE
ventas < cuota AND ventas < 300000;
MariaDB [educa]> SELECT nombre, cuota, ventas FROM repventas WHERE
ventas < cuota OR ventas < 300000;
MariaDB [educa]> SELECT sueldo FROM personal UNION SELECT sueldo FROM
claustro;
MariaDB [educa]> SELECT sueldo FROM personal UNION ALL SELECT sueldo
FROM claustro;
MariaDB [educa]> SELECT idfab, idproducto FROM productos WHERE precio >
2000 UNION SELECT fab, producto FROM pedidos WHERE importe > 3000;
MariaDB [educa]> SELECT idfab, idproducto FROM productos WHERE precio >
2000 UNION ALL SELECT fab, producto FROM pedidos WHERE importe > 3000;
MariaDB [educa]> SELECT idfab, idproducto FROM productos WHERE precio >
2000 UNION ALL SELECT DISTINCT fab, producto FROM pedidos WHERE importe
> 3000;
MariaDB [educa]> SELECT idfab, idproducto FROM productos WHERE precio >
2000 UNION ALL SELECT DISTINCT fab, producto FROM pedidos WHERE importe
> 3000 ORDER BY 1,2;
MariaDB [educa]> SELECT cdept, nombre FROM curso ORDER BY cdept,
nombre;
MariaDB [educa]> SELECT * FROM curso WHERE NOT cdept=CISS OR
(tarifa=0 AND red=3);
MariaDB [educa]> SELECT * FROM curso WHERE cdept IN(CISS,THEO) AND
tarifa BETWEEN 50 AND 300 AND RED=3 ORDER BY cdept, nombre;
MariaDB [educa]> SELECT * FROM curso WHERE nombre NOT LIKE _A% OR
nombre NOT LIKE _E% OR _I% OR _O% OR _U%;
MariaDB [educa]> SELECT nombre, tarifa tarifa/red AS TARIFA_POR_CREDITO,
(tarifa+25)/red AS TARIFA_MEDIA_POR_HORA FROM curso WHERE cdept=CISS;
MariaDB [educa]> SELECT tarifa, SUM(red) AS CREDITOS_TOTALES FROM curso
GROUP BY tarifa ORDER BY tarifa DESC;
MariaDB [educa]> SELECT cdept, AVG(tarifa) FROM curso GROUP BY curso
HAVING AVG(tarifa)>100 AND COUNT(*)<6;
MariaDB [educa]> SELECT DISTINCT cdept, red FROM curso WHERE tarifa<100;
MariaDB [educa]> SELECT num, nombre CURSO CARO FROM curso WHERE
tarifa >100;
MariaDB [educa]> SELECT num, nombre, red FROM curso WHERE cdept=CISS
ORDER BY num DESC;
MariaDB [educa]> SELECT cdept, nombre FROM curso ORDER BY cdept,
nombre;
MariaDB [educa]> SELECT * FROM curso WHERE tarifa=0 AND cdept=CISS;
MariaDB [educa]> SELECT * FROM curso WHERE tarifa=0 AND tarifa<100;
MariaDB [educa]> SELECT * FROM curso BETWEEN 0 AND 100 AND
cdept=PHIL AND red=3;
MariaDB [educa]> SELECT * FROM curso WHERE cdept=CISS OR
cdept=PHIL;
MariaDB [educa]> SELECT * FROM curso WHERE cdept=CISS OR tarifa=0;
MariaDB [educa]> SELECT * FROM curso WHERE tarifa=50 OR tarifa=100 OR
tarifa=150;
MariaDB [educa]> SELECT cdept, nombre FROM curso WHERE NOT
(cdept=CISS) AND NOT (cdept=PHIL);
MariaDB [educa]> SELECT * FROM curso WHERE cdept=THEO AND tarifa=0
OR red=6;
MariaDB [educa]> SELECT * FROM curso WHERE cdept=THEO AND (tarifa=0
OR red=6);
MariaDB [educa]> SELECT * FROM curso WHERE NOT (cdept=CISS) OR
tarifa=0 AND red=3;
MariaDB [educa]> SELECT * FROM curso WHERE NOT (cdept=CISS AND
tarifa=0);
MariaDB [educa]> SELECT * FROM curso WHERE red IN (2,6,9);
MariaDB [educa]> SELECT * FROM curso WHERE cdept NOT IN (THEO,CISS);
MariaDB [educa]> SELECT * FROM curso WHERE tarifa BETWEEN 100 AND 200;
MariaDB [educa]> SELECT * FROM curso WHERE tarifa NOT BETWEEN 100 AND
200;
MariaDB [educa]> SELECT * FROM curso WHERE nombre BETWEEN C AND
CZZ;
MariaDB [educa]> SELECT * FROM curso WHERE cdept IN (CISS, THEO, DIR)
AND tarifa BETWEEN 50 AND 300 AND red=3 ORDER BY cdept, nombre;
MariaDB [educa]> SELECT * FROM curso WHERE nombre LIKE INTRODUD%;
MariaDB [educa]> SELECT * FROM curso WHERE nombre LIKE %SC%;
MariaDB [educa]> SELECT DISTINCT cdept FROM curso WHERE cdept LIKE %S
OR cdept LIKE %S OR cdept LIKE %S OR cdept LIKE %S ;
MariaDB [educa]> SELECT * FROM curso WHERE cdept LIKE _H%;
MariaDB [educa]> SELECT * FROM curso WHERE nombre LIKE _A% OR nombre
LIKE _E% OR nombre LIKE _I% OR nombre LIKE _O% OR nombre LIKE _U%;
MariaDB [educa]> SELECT * FROM curso WHERE nombre NOT LIKE _A% OR
nombre NOT LIKE _E% OR nombre NOT LIKE _I% OR nombre NOT LIKE _O%
OR nombre NOT LIKE _U%;
MariaDB [educa]> SELECT nombre, tarifa, tarifa+25 AS NUEVA TARIFA FROM
curso WHERE cdept=CISS;
MariaDB [educa]> SELECT nombre, tarifa, tarifa+25 AS NUEVA TARIFA FROM
curso WHERE cdept=CISS ORDER BY 3;
MariaDB [educa]> SELECT nombre, tarifa, tarifa/red AS TARIFA POR CREDITO
FROM curso WHERE cdept=CISS AND tarifa/red<30;
MariaDB [educa]> SELECT * FROM curso, departamento WHERE cdept= dept;
MariaDB [educa]> SELECT nombre, tarifa chfno FROM curso, departamento
WHERE cdept=dept AND tarifa>100;
MariaDB [educa]> SELECT nombre, sueldo, tarifa, tarifa-sueldo AS DIFERENCIA
FROM personal, curso WHERE dept=cdept AND (tarifa-sueldo)>=52;
MariaDB [educa]> SELECT clase.num, curso.nombre, claustro.num,
matricula.num FROM curso, clase, claustro, matricula WHERE curso.num=
clase.num AND clase.num= matricula.num AND matricula.sec= clase.sec and
matricula.sec=02 ;
MariaDB [educa]> SELECT AVG(tarifa) AS MEDIA, MAX(tarifa) AS MAXIMO,
MIN(tarifa) AS MINIMO FROM curso WHERE cdept=CISS AND tarifa<>0;
MariaDB [educa]> SELECT MIN(nombre) PRIMER CURSO FROM curso;
MariaDB [educa]> SELECT COUNT(*) AS CURSOS, SUM(tarifa) AS TARIFA
TOTAL FROM curso WHERE cdept=PHIL;
MariaDB [educa]> SELECT dept AS NOMBRE, COUNT(*) AS MIEMBROS FROM
personal GROUP BY dept;
MariaDB [educa]> SELECT cdept AS DEPARTAMENTO, SUM(red) AS CREDITOS
FROM curso GROUP BY cdept;
MariaDB [educa]> SELECT cdept AS DEPARTAMENTO, SUM(tarifa) AS TARIFA
FROM curso WHERE red<>6 GROUP BY cdept;
MariaDB [educa]> SELECT * FROM personal, departamento WHERE
personal.dept= departamento.dept;
MariaDB [educa]> SELECT nombre, sueldo, personal.dept, edif, despacho FROM
personal, departamento WHERE personal.dept=departamento.dept AND sueldo
>100;
MariaDB [educa]> SELECT nombre, tarifa, chfno FROM curso WHERE
cdept=dept AND tarifa>175 ORDER BY nombre;
MariaDB [educa]> SELECT nombre, cargo FROM personal, departamento
WHERE personal.dept = departamento.dept AND edif=HU;
DATABASE empresa
MariaDB [none]> USE empresa;
SOURCE C:/Users/Manuel
Montiel/Documents/MySQL/empresa/crear_tablas_empresa.sql;
LOAD DATA INFILE C:/Users/Manuel
Montiel/Documents/MySQL/empresa/insert_clientes.txt INTO TABLE clientes;
LOAD DATA INFILE C:/Users/Manuel
Montiel/Documents/MySQL/empresa/insert_repventas.txt INTO TABLE
repventas;
LOAD DATA INFILE C:/Users/Manuel
Montiel/Documents/MySQL/empresa/insert_oficinas.txt INTO TABLE oficinas;
LOAD DATA INFILE C:/Users/Manuel
Montiel/Documents/MySQL/empresa/insert_productos.txt INTO TABLE
productos;
LOAD DATA INFILE C:/Users/Manuel
Montiel/Documents/MySQL/empresa/insert_pedidos.txt INTO TABLE pedidos;
MariaDB [empresa]> SHOW TABLE STATUS FROM empresa;
MariaDB [empresa]> SHOW VARIABLES LIKE version%;
MariaDB [empresa]> EXPLAIN repventas;
MariaDB [empresa]> SHOW COLUMNS FROM repventas; // equivale a la
anterior