EJEMPLOS PRACTICOS SQL

77
EJEMPLOS PRÁCTICOS SQL

Transcript of EJEMPLOS PRACTICOS SQL

  • EJEMPLOSPRCTICOSSQL

  • EJEMPLOSPRCTICOSSQL

    INTEGRIDAD REFERENCIALINTEGRIDADREFERENCIAL

  • DROP SCHEMA IF EXISTS Tablas1;CREATE SCHEMA Tablas1;USE Tablas1;

    create table Cliente(Dni VARCHAR(10),Nombre VARCHAR(10),Apellido VARCHAR(10),p ( ),

    PRIMARY KEY (Dni))ENGINE=InnoDB;

    create table Pedidos(create table Pedidos(npedido INTEGER,fecha DATE,Cantidad DOUBLE,cliente_Dni VARCHAR(10),PRIMARY KEY ( did )PRIMARY KEY (npedido),FOREIGN KEY (cliente_Dni) REFERENCES Cliente(Dni)

    )ENGINE=InnoDB;) ;

    INSERT INTO Cliente VALUES ('7211545v','Carlos','Martinez Lopez');

    INSERT INTO Pedidos VALUES ('122' '2010/01/05' 7 '7211545v');INSERT INTO Pedidos VALUES ( 122 , 2010/01/05 ,7, 7211545v );

  • TABLA: Cliente

    TABLA: Pedidos

  • Esto es un ejemplo de intento de borrado de una tupla que tiene un campo queaparece como clave fornea en otra tabla. Por omision se aplica la condicin de restrict y no se puede borrar hasta que no borre la tupla de la tabla hija.

  • Esto es un ejemplo de intento de actualizacin de una tupla que tiene un campo queaparece como clave fornea en otra tabla. Por omision se aplica la condicin de restrict y no se puede actualizar.de restrict y no se puede actualizar.

  • DROP SCHEMA IF EXISTS Tablas2;CREATE SCHEMA Tablas2;USE Tablas2;

    create table Cliente(Dni VARCHAR(10),Nombre VARCHAR(10),Apellido VARCHAR(10),

    PRIMARY KEY (Dni))ENGINE=InnoDB;

    create table Pedidos(npedido INTEGER,fecha DATE,Cantidad DOUBLE,cliente Dni VARCHAR(10)cliente_Dni VARCHAR(10),PRIMARY KEY (npedido),FOREIGN KEY (cliente_Dni) REFERENCES Cliente(Dni) ON DELETE CASCADE ON UPDATE CASCADE)ENGINE=InnoDB;

    INSERT INTO Cliente VALUES ('7211545v','Carlos','Martinez Lopez');

    INSERT INTO Pedidos VALUES ('122','2010/01/05',7,'7211545v');

  • TABLA: Cliente

    TABLA: Pedidos

  • Para probar la restriccin ON UPDATE CASCADE actualizamos el valor pde un DNI. El resultado debe de ser que se actualiza la tabla padre y la hija

  • Se observa que se han actualizado las tablas padre e hija

  • Si ahora borramos una tupla de la tabla padre se borra la tupla correspondiente de la tabla hija.

  • DROP SCHEMA IF EXISTS Tablas3;CREATE SCHEMA Tablas3;USE Tablas3;

    create table Cliente(Dni VARCHAR(10),Nombre VARCHAR(10),Apellido VARCHAR(10),

    PRIMARY KEY (Dni))ENGINE=InnoDB;

    create table Pedidos(npedido INTEGER,fecha DATE,Cantidad DOUBLE,cliente Dni VARCHAR(10)cliente_Dni VARCHAR(10),PRIMARY KEY (npedido),FOREIGN KEY (cliente_Dni) REFERENCES Cliente(Dni) ON DELETE RESTRICT ON UPDATE CASCADE

    )ENGINE I DB)ENGINE=InnoDB;

    INSERT INTO Cliente VALUES ('7211545v','Carlos','Martinez Lopez');

    INSERT INTO Pedidos VALUES ('122','2010/01/05',7,'7211545v');

  • La restriccin ms adecuada en la mayora de los casos es evitar realizar borrados en cascada y sin embargo sievitar realizar borrados en cascada y sin embargo si actualizar en cascada

  • Observamos que la actualizacin en cascada ha funcionado

  • A diferencia del ejemplo de la Tablas2 ahora no se puede borrar una tupla de la tabla padre por la restriccin ON DELETE RESTRICT.

  • Ntese una cuestin que a veces es causa de confusin.Aunque es en la tabla hija donde se escribe la restriccin de la clave forneaAunque es en la tabla hija donde se escribe la restriccin de la clave fornea,es decir, que un atributo depende de la clave de otra tabla.

    Se puede borrar sin ningn problema una tupla de una tabla que contiene una clave fornea sin afectar a la tupla correspondiente de la tabla padreEn la figura se ve el ejemplo de borrar una fila en la tabla de pedidos.

  • Como se ve en la figura la tabla de pedidos est vaca y la tabla de clientes est intactala tabla de clientes est intacta.

  • DROP SCHEMA IF EXISTS Tablas4;CREATE SCHEMA Tablas4;USE Tablas4;

    create table Cliente(Dni VARCHAR(10),Dni VARCHAR(10),Nombre VARCHAR(10),Apellido VARCHAR(10),

    PRIMARY KEY (Dni))ENGINE=InnoDB;)ENGINE=InnoDB;

    create table Pedidos(npedido INTEGER,fecha DATE,Cantidad DOUBLE,cliente_Dni VARCHAR(10),PRIMARY KEY (npedido),( p ),FOREIGN KEY (cliente_Dni) REFERENCES Cliente(Dni) ON DELETE RESTRICT ON UPDATE

    CASCADE

    )ENGINE=InnoDB;

    INSERT INTO Cliente VALUES ('7211545v','Carlos','Martinez Lopez');

    INSERT INTO P did VALUES ('122' '2010/01/0 ' ' 211 4 ')INSERT INTO Pedidos VALUES ('122','2010/01/05',7,'7211545v');

  • A t l j l d i t t i fil dAqu mostramos el ejemplo de intentar incorporar una fila nueva de pedidos de un cliente que no existe en la tabla de clientes. Las reglas de integridad referencial nos lo impiden

  • Insertamos ahora dos nuevos clientes..

  • El resultado lo observamos en la figura

  • Ahora si que podemos incorporar una tupla nueva de pedido conel cliente incorporado en la tabla de clientes

  • EJEMPLOSPRCTICOSSQL

    MODIFICACIN TABLASMODIFICACINTABLAS

  • DROP SCHEMA IF EXISTS T bl 5DROP SCHEMA IF EXISTS Tablas5;CREATE SCHEMA Tablas5;USE Tablas5;

    create table Cliente(Dni VARCHAR(10),Nombre VARCHAR(10),Apellido VARCHAR(10),

    PRIMARY KEY (Dni)PRIMARY KEY (Dni))ENGINE=InnoDB;

    create table Pedidos(npedido INTEGERnpedido INTEGER,fecha DATE,Cantidad DOUBLE,cliente_Dni VARCHAR(10),PRIMARY KEY (npedido),FOREIGN KEY (cliente_Dni) REFERENCES Cliente(Dni) ON DELETE RESTRICT ON UPDATE CASCADE

    )ENGINE=InnoDB;

    INSERT INTO Cliente VALUES ('7211545v','Carlos','Martinez Lopez');

    INSERT INTO Pedidos VALUES ('122' '2010/01/05' 7 '7211545v');INSERT INTO Pedidos VALUES ( 122 , 2010/01/05 ,7, 7211545v );

  • Agregamos una columna a la tabla con ALTER ADD

  • Cambiamos el nombre de una columna a la tabla con ALTER CHANGE

  • Modificamos el tipo de datos de una columna a la tabla con ALTER MODIFY

  • Eliminamos una columna a la tabla con ALTER DROP

  • Estamos tratando de borrar una tabla padre. Las restricciones de la BD no nos permite al tener asociada la tabla una clave ajena

  • La tabla hija pedidos se puede borrar sin problemas. Es donde se haya la clave ajenaEs donde se haya la clave ajena

  • EJEMPLOSPRCTICOSSQL

    INSERCIN DATOS EN TABLASINSERCINDATOSENTABLAS

  • DROP SCHEMA IF EXISTS Tablas6;CREATE SCHEMA Tablas6;USE Tablas6;

    create table Cliente(create table Cliente(Dni VARCHAR(10),Nombre VARCHAR(10),Apellido VARCHAR(40),PRIMARY KEY (Dni))ENGINE=InnoDB;

    create table Pedidos(npedido INTEGER,fecha DATE,ec a ,Cantidad DOUBLE,cliente_Dni VARCHAR(10),PRIMARY KEY (npedido),FOREIGN KEY (cliente_Dni) REFERENCES Cliente(Dni) ON DELETE

    RESTRICT ON UPDATE CASCADERESTRICT ON UPDATE CASCADE)ENGINE=InnoDB;

    create table Personal(Dni VARCHAR(10),Nombre VARCHAR(10),Apellido VARCHAR(40),PRIMARY KEY (Dni))ENGINE=InnoDB;

    INSERT INTO Cliente VALUES ('7211545v','Carlos','Martinez Lopez');INSERT INTO Pedidos VALUES ('122','2010/01/05',7,'7211545v');INSERT INTO Personal VALUES ('7211541v','Juan','Garzn Rodriguez');INSERT INTO Personal VALUES ('7211542v','Antonio','Marina Esquivel');INSERT INTO Personal VALUES ('7211543v' 'Cesar' 'Bernal SanJose');INSERT INTO Personal VALUES ( 7211543v , Cesar , Bernal SanJose );INSERT INTO Personal VALUES ('7211544v','Rodrigo','Alonso Vera');INSERT INTO Personal VALUES ('7211546v','Maria','Lopez Gomez');

  • TABLA: Cliente

    TABLA: Pedidos

    TABLA: Personal

  • Con este comando que es un mezcla de INSERT INTO y SELECT conseguimos meter en la tabla cliente 5 tuplas

  • EJEMPLOSPRCTICOSSQL

    ACTUALIZACIN DATOS EN TABLASACTUALIZACINDATOSENTABLAS

  • DROP SCHEMA IF EXISTS Tablas7;CREATE SCHEMA Tablas7;USE Tablas7;

    create table Cliente(create table Cliente(Dni VARCHAR(10),Nombre VARCHAR(10),Apellido VARCHAR(40),PRIMARY KEY (Dni))ENGINE=InnoDB;

    create table Pedidos(npedido INTEGER,fecha DATE,ec a ,Cantidad DOUBLE,cliente_Dni VARCHAR(10),PRIMARY KEY (npedido),FOREIGN KEY (cliente_Dni) REFERENCES Cliente(Dni) ON

    DELETE RESTRICT ON UPDATE CASCADEDELETE RESTRICT ON UPDATE CASCADE)ENGINE=InnoDB;

    create table Personal(Dni VARCHAR(10),Nombre VARCHAR(10),Apellido VARCHAR(40),PRIMARY KEY (Dni))ENGINE=InnoDB;

    INSERT INTO Cliente VALUES ('7211545v','Carlos','Martinez Lopez');INSERT INTO Pedidos VALUES ('122','2010/01/05',7,'7211545v');

    INSERT INTO Cliente VALUES ('7211541v','Juan','Garzn Rodriguez');INSERT INTO Cliente VALUES ('7211542v' 'Antonio' 'Marina Esquivel');INSERT INTO Cliente VALUES ( 7211542v , Antonio , Marina Esquivel );INSERT INTO Cliente VALUES ('7211543v','Cesar','Bernal SanJose');INSERT INTO Cliente VALUES ('7211544v','Maria','Alonso Vera');INSERT INTO Cliente VALUES ('7211546v','Maria','Lopez Gomez');

  • Vamos a probar el comando actualizar de SQL.Para ello actualizamos todas las tuplas en la que aparece Maria

  • En este ejemplo vemos como es imposible actualizar los dos registrosl b l l C i DNIen los que aparece en nombre el valor Carmen a un mismo DNI

    ya que DNI tiene la restriccin de clave primaria

  • EJEMPLOSPRCTICOSSQL

    CONSULTAS BSICAS CON SELECTCONSULTASBSICASCONSELECT

  • DROP SCHEMA IF EXISTS SELECT1;DROP SCHEMA IF EXISTS SELECT1;CREATE SCHEMA SELECT1;USE SELECT1;

    create table Informacin Ventas(create table Informacin_Ventas(Tienda VARCHAR(10),Ventas INTEGER,Fecha DATE)ENGINE=InnoDB;) ;

    create table Zona_Ventas(Regin VARCHAR(10),g ( ),Tienda VARCHAR(10))ENGINE=InnoDB;

    INSERT INTO Informacin Ventas VALUES ('Madrid',1500,'2010/01/05');_ ( , , );INSERT INTO Informacin_Ventas VALUES ('Sevilla',250,'2010/01/08');INSERT INTO Informacin_Ventas VALUES ('Madrid',300,'2010/01/07');INSERT INTO Informacin_Ventas VALUES ('Barcelona',700,'2010/01/08');

    INSERT INTO Zona_Ventas VALUES ('Centro-Sur','Madrid');INSERT INTO Zona_Ventas VALUES ('Centro-Sur','Sevilla');INSERT INTO Zona Ventas VALUES ('Noreste','Zaragoza');_ ( , g );INSERT INTO Zona_Ventas VALUES ('Noreste','Barcelona');

  • TABLA: Informacion_ventas

    TABLA:Zona_Ventas

  • Tabla: Informacin_Ventas

    Seleccin Bsica:

    Seleccionamos el nombre de todas las tiendas

  • Tabla: Informacin_Ventas

    Seleccin Bsica:

    De esta forma eliminamos los duplicados que genera la consulta SELECT

    Seleccin Bsica:

  • Tabla: Informacin_Ventas

    Seleccin Condicional Simple:Se ecc Co d c o a S p e

    Tiendas cuyas ventas son mayores de 1000

  • DROP SCHEMA IF EXISTS SELECT2;CREATE SCHEMA SELECT2;USE SELECT2;

    create table Informacin Ventas(create table Informacin_Ventas(Tienda VARCHAR(10),Ventas INTEGER,Fecha DATE)ENGINE=InnoDB;

    create table Zona_Ventas(Regin VARCHAR(10),Tienda VARCHAR(10)( ))ENGINE=InnoDB;

    INSERT INTO Informacin_Ventas VALUES ('Madrid',1500,'2010/01/05');INSERT INTO Informacin Ventas VALUES ('Sevilla' 250 '2010/01/08');INSERT INTO Informacin_Ventas VALUES ( Sevilla ,250, 2010/01/08 );INSERT INTO Informacin_Ventas VALUES ('Cuenca',300,'2010/01/07');INSERT INTO Informacin_Ventas VALUES ('Barcelona',700,'2010/01/08');

    INSERT INTO Z V t VALUES ('C t S ' 'M d id')INSERT INTO Zona_Ventas VALUES ('Centro-Sur','Madrid');INSERT INTO Zona_Ventas VALUES ('Centro-Sur','Sevilla');INSERT INTO Zona_Ventas VALUES ('Noreste','Zaragoza');INSERT INTO Zona_Ventas VALUES ('Noreste','Barcelona');

  • Tabla: Informacin_Ventas

    Seleccin Condicional Simple Compuesta:

    Tiendas cuyas ventas son mayores de 1000 las ventas estncomprendidas entre 275 y 500

  • Tabla: Informacin_Ventas

    Seleccin Tuplas en Funcin de Valores (IN):

    Informacin completa de lasTiendas de Madrid y Sevilla

  • Tabla: Informacin_Ventas

    Seleccin Bsqueda de Patrones (LIKE):

    Seleccion de tuplas que contengan un patrn

  • O SC S S S CDROP SCHEMA IF EXISTS SELECT3;CREATE SCHEMA SELECT3;USE SELECT3;

    create table Informacin_Ventas(Tienda VARCHAR(10),Ventas INTEGER,Fecha DATE)ENGINE=InnoDB;)ENGINE=InnoDB;

    create table Zona_Ventas(Regin VARCHAR(10),Ti d VARCHAR(10)Tienda VARCHAR(10))ENGINE=InnoDB;

    INSERT INTO Informacin_Ventas VALUES ('Madrid',1500,'2010/01/05');INSERT INTO Informacin_Ventas VALUES ('Sevilla',250,'2010/01/08');_ ( )INSERT INTO Informacin_Ventas VALUES ('Cuenca',300,'2010/01/07');INSERT INTO Informacin_Ventas VALUES ('Barcelona',1500,'2010/01/08');

    INSERT INTO Zona Ventas VALUES ('Centro-Sur' 'Madrid');INSERT INTO Zona_Ventas VALUES ( Centro-Sur , Madrid );INSERT INTO Zona_Ventas VALUES ('Centro-Sur','Sevilla');INSERT INTO Zona_Ventas VALUES ('Noreste','Zaragoza');INSERT INTO Zona_Ventas VALUES ('Noreste','Barcelona');

  • Tabla: Informacin_Ventas

    Seleccin Ordenacin de Resultados (ORDER BY):

    Seleccin de Tiendas ordenadas por el volumen de ventas en Orden descendente

  • Tabla: Informacin_Ventas

    Seleccin Ordenacin de Resultados (ORDER BY):En este ejemplo se clasifican las tuplas en primer lugar en orden descendente del campo Ventas y luego si hay tuplas del mismo valor por orden descentente de fecha

  • DROP SCHEMA IF EXISTS SELECT4;CREATE SCHEMA SELECT4;USE SELECT4;

    create table Informacin Ventas(_ (Tienda VARCHAR(10),Ventas INTEGER,Fecha DATE)ENGINE=InnoDB;

    create table Zona_Ventas(Regin VARCHAR(10),Tienda VARCHAR(10))ENGINE=InnoDB;

    INSERT INTO Informacin_Ventas VALUES ('Madrid',1500,'2010/01/05');INSERT INTO Informacin_Ventas VALUES ('Sevilla',250,'2010/01/08');INSERT INTO Informacin Ventas VALUES ('Madrid',300,'2010/01/07');_ ( , , );INSERT INTO Informacin_Ventas VALUES ('Barcelona',700,'2010/01/08');

    INSERT INTO Zona_Ventas VALUES ('Centro-Sur','Madrid');INSERT INTO Zona Ventas VALUES ('Centro-Sur' 'Sevilla');INSERT INTO Zona_Ventas VALUES ( Centro-Sur , Sevilla );INSERT INTO Zona_Ventas VALUES ('Noreste','Zaragoza');INSERT INTO Zona_Ventas VALUES ('Noreste','Barcelona');

  • Tabla: Informacin_Ventas

    S l i F i A it tiSeleccin Funciones Aritmticas:

    Seleccionar todas las tuplas de la tabla Informacin_Ventas( i t l l h ) bt i d l i ( t bl )(ya que no existe clausula when) , obteniendo una relacion(una tabla).Luego proyectamos por el campo Ventas y hacemos una operacin.

  • Tabla: Informacin_Ventas

    Seleccin Funciones Aritmticas:

    Nmero de Tuplas de una tabla

  • Tabla: Informacin_Ventas

    S l i F i A it ti GSeleccin Funciones Aritmticas con Grupos:

    Ventas agrupadas por tiendas

  • Tabla: Informacin_Ventas

    Seleccin Funciones Aritmticas con Grupos:

    Ventas agrupadas por tiendas de las tiendas cuyas ventas Son superiores a 1500

  • Tabla: Informacin_Ventas

    Seleccin con Grupos:

    Esta consulta no tendra mucho sentido ya en un grupo la fecha de cada tupla es diferente

  • La condicin que aplica HAVING tiene que ser un operador que abarque a todos los miembros del grupo. Si se refiere a un campo que puede ser diferente en los miembros del grupo no funcionap q p g p

  • Tiendas y suma de ventas agrupadas por iguales valores de tienda y ventas

  • Seleccin con Grupos:

    Suma de las ventas totales de las tiendas agrupadas por el nombrede Madrid

  • Seleccin con Grupos:Se ecc co G upos

    Mximo de ventas de las tiendas agrupadas por el nombre

  • EJEMPLOSPRCTICOSSQL

    JOIN NATURAL CON SELECTJOINNATURALCONSELECT

  • DROP SCHEMA IF EXISTS JOIN1;DROP SCHEMA IF EXISTS JOIN1;CREATE SCHEMA JOIN1;USE JOIN1;create table Informacin_Ventas(

    Tienda VARCHAR(10),V t INTEGERVentas INTEGER,Fecha DATE)ENGINE=InnoDB;

    create table Zona_Ventas(Regin VARCHAR(10),Tienda VARCHAR(10))ENGINE=InnoDB;

    INSERT INTO I f i V VA UES ('M d id' 1 00 '2010/01/0 ')INSERT INTO Informacin_Ventas VALUES ('Madrid',1500,'2010/01/05');INSERT INTO Informacin_Ventas VALUES ('Sevilla',250,'2010/01/08');INSERT INTO Informacin_Ventas VALUES ('Madrid',300,'2010/01/07');INSERT INTO Informacin_Ventas VALUES ('Barcelona',700,'2010/01/08');

    INSERT INTO Zona_Ventas VALUES ('Centro-Sur','Madrid');INSERT INTO Zona_Ventas VALUES ('Centro-Sur','Sevilla');INSERT INTO Zona_Ventas VALUES ('Noreste','Zaragoza');

    ');INSERT INTO Zona_Ventas VALUES ('Noreste','Barcelona');

  • TABLA: Informacion_ventasTABLA:Zona_Ventas

  • Join Natural:

    Ventas por Regiones

  • EJEMPLOSPRCTICOSSQL

    CONSULTAS ANIDADASCONSULTASANIDADAS

  • TABLA: Informacion_ventasTABLA:Zona_Ventas

    Consulta Anidada:Consulta Anidada:

    Ventas de todas las tiendas de la regin Noreste

  • Consulta join equivalente a anidada:

    Ventas de todas las tiendas de la regin Noreste

  • DROP SCHEMA IF EXISTS CASE1;CREATE SCHEMA CASE1;USE CASE1;

    create table Informacin_Ventas(Tienda VARCHAR(10),Ventas INTEGER,Fecha DATE)ENGINE=InnoDB;

    create table Zona_Ventas(Regin VARCHAR(10),Tienda VARCHAR(10))ENGINE=InnoDB;

    INSERT INTO Informacin_Ventas VALUES ('Madrid',1500,'2010/01/05');INSERT INTO Informacin_Ventas VALUES ('Sevilla',250,'2010/01/08');INSERT INTO Informacin_Ventas VALUES ('Cuenca',300,'2010/01/07');INSERT INTO Informacin_Ventas VALUES ('Barcelona',1500,'2010/01/08');

    INSERT INTO Zona_Ventas VALUES ('Centro-Sur','Madrid');INSERT INTO Zona_Ventas VALUES ('Centro-Sur','Sevilla');INSERT INTO Zona_Ventas VALUES ('Noreste','Zaragoza');INSERT INTO Z V VALUES ('N ' 'B l ')INSERT INTO Zona_Ventas VALUES ('Noreste','Barcelona');

  • Utilizacin comando case:

    Modificacin de la columna Ventas en funcin del valor

  • DROP SCHEMA IF EXISTS UNION1;CREATE SCHEMA UNION1;USE UNION1;

    create table Ventas_tienda(Tienda VARCHAR(10),Ventas INTEGER,Fecha DATE)ENGINE=InnoDB;

    create table Ventas_Internet(Fecha DATE,Ventas INTEGER)ENGINE=InnoDB;

    INSERT INTO Ventas_tienda VALUES ('Madrid',1500,'2010/01/05');INSERT INTO Ventas_tienda VALUES ('Sevilla',250,'2010/01/08');INSERT INTO Ventas_tienda VALUES ('Madrid',300,'2010/01/07');INSERT INTO V i d VA UES ('B l ' 1 00 '2010/01/08')INSERT INTO Ventas_tienda VALUES ('Barcelona',1500,'2010/01/08');

    INSERT INTO Ventas_Internet VALUES ('2010/01/07',250);INSERT INTO V t I t t VALUES ('2010/01/10' 535)INSERT INTO Ventas_Internet VALUES ('2010/01/10',535);INSERT INTO Ventas_Internet VALUES ('2010/01/11',320);INSERT INTO Ventas_Internet VALUES ('2010/01/12',750);