mysql

39
Ing. Daniel Y. Coronel C. SQL: Lenguaje de Consulta Estruturado

Upload: eduardo-perdomo

Post on 05-Jan-2016

215 views

Category:

Documents


1 download

DESCRIPTION

query

TRANSCRIPT

Slide 1

Ing. Daniel Y. Coronel C.SQL: Lenguaje de Consulta Estruturado

El SQL (Structured Query Language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones sobre las mismas.

Es un lenguaje de cuarta generacin (4GL).Lenguaje de Consulta Estruturado2Copyright 2009En 1970 E. F. Codd propone el modelo relacional y asociado a este un sublenguaje de acceso a los datos.IBM definen el lenguaje SEQUEL (Structured English QUEry Language).Oracle quien lo introdujo por primera vez en 1979.Origen3Copyright 2009Versin actual SQL:2006 que define las maneras de integrar el SQL con XML.No todos los manejadores lo implementan de la misma manera.Origen4Copyright 2009Se hace necesario que se lleve a cabo una optimizacin antes de la ejecucin de cada consulta. El uso de ndices acelera una instruccin de consulta, pero ralentiza la actualizacin de los datos. Optimizacin5Copyright 2009Copyright 20096DMLManipulacin de datosSELECTINSERTDELETEUPDATEDDLDefinicin de datosCREATE TABLEDROP TABLEALTER TABLECREATE VIEWDROP VIEWCREATE INDEXDROP INDEXDCLControl de accesoGRANTREVOKEControl de transaccionesCOMMITROLLBACK

Comandos SQLExisten 3 grupos de comandos:

Copyright 20097

Crear una base de datos

CREATE DATABASE [IF NOT EXISTS] db_name[DEFAULT CHARACTER SET charset_name][ COLLATE collation_name]

CREATE DATABASE prueba DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish2_ci;Comandos BsicosDDL: Definicin de datosCopyright 20098

Activar una base de datos

USE db_name

USE prueba;Comandos BsicosDDL: Definicin de datosCopyright 20099

Crear una tablaCREATE TABLE [IF NOT EXISTS] tbl_name[(create_definition,...)][table_options] [select_statement]

CREATE TABLE prueba.datos (id INT NOT NULL AUTO_INCREMENT, codigo VARCHAR( 8 ) NOT NULL,cantidad INT NOT NULL, precio FLOAT NOT NULL,fecha DATE NOT NULL, observacion TEXT NOT NULL,imagen BLOB NOT NULL, activo BOOL NOT NULL,PRIMARY KEY (id), INDEX (codigo)) ENGINE = InnoDBComandos BsicosDDL: Definicin de datosCopyright 200910

Modificar la estructura de una tabla

ALTER TABLE tbl_namealter_specification [, alter_specification] ...

Modificar un atributo de la tabla:ALTER TABLE datos CHANGE cantidad cantidad INT( 11 ) NOT NULLDEFAULT '0'Comandos BsicosDDL: Definicin de datosCopyright 200911

Modificar la estructura de una tabla

ALTER TABLE tbl_namealter_specification [, alter_specification] ...

Eliminar un atributo de la tabla:ALTER TABLE datos DROP imagenComandos BsicosDDL: Definicin de datosCopyright 200912

Vaciar una tabla

TRUNCATE TABLE tbl_name

TRUNCATE TABLE datos;Comandos BsicosDDL: Definicin de datosCopyright 200913

Borrar una tabla

DROP [TEMPORARY] TABLE [IF EXISTS]tbl_name [, tbl_name] ...

DROP TABLE datos;Comandos BsicosDDL: Definicin de datosCopyright 200914

Insertar tuplas (registros)INSERT INTO tbl_name [(col_name,...)]VALUES ({expr | DEFAULT},...),(...),...

INSERT INTO tbl_name [(col_name,...)] SELECT ...

INSERT INTO prueba.datos (id, codigo, cantidad, precio,fecha, observacion, activo) VALUES (NULL , '001', 10, 1500,'2008-10-22', 'Prueba de insertar un registro', '1');

INSERT INTO datos VALUES (NULL, '001', 10, 1500,'2008-10-22', 'Prueba de insertar un registro', '1');Comandos BsicosDML: Manipulacin de datosCopyright 200915

Insertar tuplas (registros)INSERT INTO tbl_name [(col_name,...)]VALUES ({expr | DEFAULT},...),(...),...

INSERT INTO tbl_name [(col_name,...)] SELECT ...

INSERT INTO datos2 (codigo, cantidad) SELECT codigo, cantidad FROM datos;

INSERT INTO ejemplo VALUES (100, 'Nombre 1', 'Value 1', 'Other 1'), (101, 'Name 2', 'Value 2', 'Other 2'), (102, 'Name 3', 'Value 3', 'Other 3'), (103, 'Name 4', 'Value 4', 'Other 4');Comandos BsicosDML: Manipulacin de datosCopyright 200916

Editar registrosUPDATE tbl_nameSET col_name1=expr1 [, col_name2=expr2 ...][WHERE where_definition][LIMIT row_count]

UPDATE datos SET cantidad = 20, precio = precio * 1.3 WHERE id = 2;

UPDATE datos SET cantidad = 0 WHERE fecha '2008-01-01' AND fecha 150;SELECT count(*) AS cantReg FROM datos WHERE precio >1000SELECT a.*, b.cantidad FROM datos a, datos2 b WHERE a.codigo = b.codigo AND b.cantidad = 0;SELECT a.*, b.cantidad FROM datos a INNER JOIN datos2 b ON a.codigo = b.codigo WHERE b.cantidad = 0;

Comandos BsicosDML: Manipulacin de datosCopyright 200921

SELECT a.*, b.cantidad FROM datos a LEFT JOIN datos2 b ON a.codigo = b.codigo WHERE b.cantidad = 0;SELECT a.*, b.cantidad FROM datos a RIGHT JOIN datos2 b ON a.codigo = b.codigo WHERE b.cantidad = 0;SELECT * FROM datos ORDER BY cantidad DESC;SELECT * FROM datos ORDER BY cantidad LIMIT 0, 150;SELECT grado, nombre FROM militares ORDER BY IF (grado = "General en Jefe", 1, IF(grado = "Coronel", 2, IF(grado = "Teniente Coronel", 3, IF(grado = "Teniente", 4, 5 ))))

Comandos BsicosDML: Manipulacin de datosCopyright 200922

FechasSELECT * FROM encpedid WHERE emision between '20130701' and '20130731'SELECT * FROM encpedid WHERE month(emision)=7SELECT cliente, numped, date_format(emision,'%d/%m/%Y') as emision FROM encpedid WHERE month(emision)=7 and year(emision)>=2010

Comandos BsicosDML: Manipulacin de datosCopyright 200923

CadenasSELECT * FROM clientes WHERE cliente like 'A%'SELECT * FROM clientes WHERE length(trim(cliente)) > 5SELECT concat(trim(codigo), "-", medida, descrip) as articulo FROM artculosSELECT SUBSTRING('Shakira', 2, 3); -> hak

Comandos BsicosDML: Manipulacin de datosCopyright 200924

FuncionesSELECT count(*) FROM encpedid WHERE cliente like 'A%'SELECT count(*) as cantidad FROM encpedid WHERE cliente = vendedorSELECT count(distinct cliente) as cantidad FROM encpedid WHERE cliente = vendedorSELECT sum(total) as monto FROM encpedidSELECT cliente, sum(total) as monto FROM encpedid GROUP BY cliente

Comandos BsicosDML: Manipulacin de datosCopyright 200925

JoinsSELECT a.descrip, sum(b.cantidad) FROM articulos a, renpedid b WHERE a.codigo=b.codigo AND a.descrip LIKE '%175/70%' GROUP BY a.descrip

SELECT a.descrip, sum(b.cantidad) FROM articulos a INNER JOIN renpedid b ON a.codigo=b.codigo GROUP BY a.descrip

Comandos BsicosDML: Manipulacin de datosCopyright 200926

JoinsSELECT a.descrip, sum(b.cantidad) FROM articulos a LEFT JOIN renpedid b ON a.codigo=b.codigo WHERE a.descrip LIKE '%175/70%' GROUP BY a.descrip

SELECT a.descrip, sum(b.cantidad) FROM articulos a RIGHT JOIN renpedid b ON a.codigo=b.codigo WHERE a.descrip LIKE '%175/70%' GROUP BY a.descrip

Comandos BsicosDML: Manipulacin de datosCopyright 200927

Uniones y SubconsultasSELECT count(*) as cantidad FROM encpedid WHERE cliente = vendedor UNION SELECT count(*) as cantidad FROM encpedid WHERE cliente vendedor

SELECT cliente, nomcli FROM clientes WHERE cliente IN (SELECT cliente from encpedid)

Comandos BsicosDML: Manipulacin de datosCopyright 200928

Uniones y SubconsultasSELECT codven, nomven FROM vendedores WHERE codven NOT IN (SELECT DISTINCT vendedor from encpedid)

INSERT INTO usuarios SELECT cliente, cliente, nomcli, 2 FROM clientes

Comandos BsicosDML: Manipulacin de datosCopyright 200929

Son programas que ejecutan sentencias o instrucciones SQL directamente en la base de datos, lo que hace que estas se ejecuten de forma mucho ms rpida y permiten al administrador de la base de datos agilizar procesos y en gran medida darle mayor seguridad e integridad a los datos.

Procedimientos AlmacenadosCopyright 200930

delimiter // CREATE procedure introducePersona(IN edad int,IN nombre varchar(50))begin IF edad < 18 then INSERT INTO ninos VALUES(edad,nombre); else INSERT INTO adultos VALUES(edad,nombre); end IF;end;//delimiter ;

Procedimientos AlmacenadosCopyright 200931

DELIMITER //CREATE PROCEDURE borrarCliente (IN xcodcli CHAR(8))BEGIN DECLARE cant INT; IF xcodcli " " THEN SELECT count(*) INTO cant FROM encpedid WHERE cliente = xcodcli; IF cant > 0 THEN DELETE FROM renpedid WHERE cliente = xcodcli; DELETE FROM encpedid WHERE cliente = xcodcli; END IF; SELECT count(*) INTO cant FROM encrcl WHERE codcli = xcodcli; IF cant > 0 THEN DELETE FROM renrcl WHERE cliente = xcodcli; DELETE FROM encrcl WHERE codcli = xcodcli; END IF; DELETE FROM clientes WHERE cliente = xcodcli; END IF;END //DELIMITER ;call borrarCliente("E-016")

Procedimientos AlmacenadosCopyright 200932

DELIMITER $$CREATE FUNCTION `botellas`(existencia DECIMAL(17,2), factor INT) RETURNS int(11) DETERMINISTIC RETURN existencia - factor * TRUNCATE (existencia/factor, 0)$$DELIMITER ;

Funciones AlmacenadasCopyright 200933

DELIMITER $$CREATE FUNCTION `cajas`(existencia DECIMAL(17,2), factor INT) RETURNS int(11) DETERMINISTICRETURN TRUNCATE(existencia/factor,0)$$DELIMITER ;

Funciones AlmacenadasCopyright 200934

DELIMITER $$CREATE FUNCTION volumen(radio FLOAT) RETURNS FLOAT DETERMINISTICBEGIN DECLARE volume FLOAT; SET volume = (4/5)*PI()*POW(radius,2); RETURN volume;END $$

DELIMITER ;

Funciones AlmacenadasCopyright 200935

Un disparador es un objeto con nombre dentro de una base de datos el cual se asocia con una tabla y se activa cuando ocurre en sta un evento en particular.

Triggers / DisparadoresCopyright 200936

DELIMITER | CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END |

DELIMITER ;

Triggers / DisparadoresCopyright 200937

DELIMITER //CREATE TRIGGER agregarUsuario AFTER INSERT ON clientesFOR EACH ROW BEGIN INSERT INTO usuarios SET usuarios.usuario=NEW.cliente, usuarios.clave=NEW.cliente, usuarios.nombre=NEW.nomcli, usuarios.nivel=2 ON DUPLICATE KEY UPDATE usuarios.clave=NEW.cliente, usuarios.nombre=NEW.nomcli, usuarios.nivel=2 ;END;//

DELIMITER ;

Triggers / DisparadoresCopyright 200938

cuentas (num INT, monto DECIMAL(10,2));

CREATE TRIGGER ins_sum BEFORE INSERT ON cuentas FOR EACH ROW SET @sum = @sum + NEW.monto;

SET @sum = 0; INSERT INTO cuentas VALUES (137, 14.98), (141, 1937.50), (97, -100.00); SELECT @sum AS 'Total montos insertados';

Triggers / Disparadores

[email protected]

0416 354.49.6139Copyright 2009Preguntas?