Ejemplos sql

2,705 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,705
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
162
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Ejemplos sql

  1. 1. EJEMPLOS PRÁCTICOS SQL
  2. 2. EJEMPLOS PRÁCTICOS SQL INTEGRIDAD REFERENCIAL INTEGRIDAD REFERENCIAL
  3. 3. 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( npedido INTEGER, fecha DATE, Cantidad DOUBLE, cliente_Dni VARCHAR(10), PRIMARY KEY (npedido), ( did ) 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); ( 122 2010/01/05 7 7211545v );
  4. 4. TABLA: Cliente TABLA: Pedidos
  5. 5. Esto es un ejemplo de intento de borrado de una tupla que tiene un campo queaparece como clave foránea en otra tabla. Por omision se aplica la condiciónde restrict y no se puede borrar hasta que no borre la tupla de la tabla hija.
  6. 6. Esto es un ejemplo de intento de actualización de una tupla que tiene un campo queaparece como clave foránea en otra tabla. Por omision se aplica la condiciónde restrict y no se puede actualizar.
  7. 7. 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);
  8. 8. TABLA: Cliente TABLA: Pedidos
  9. 9. Para probar la restricción ON UPDATE CASCADE … actualizamos el valor pde un DNI. El resultado debe de ser que se actualiza la tabla padre y la hija
  10. 10. Se observa que se han actualizado las tablas padre e hija
  11. 11. Si ahora borramos una tupla de la tabla padre se borra la tuplacorrespondiente de la tabla hija.
  12. 12. 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=InnoDB; )ENGINE I DBINSERT INTO Cliente VALUES (7211545v,Carlos,Martinez Lopez);INSERT INTO Pedidos VALUES (122,2010/01/05,7,7211545v);
  13. 13. La restricción más adecuada en la mayoría de los casos esevitar realizar borrados en cascada y sin embargo siactualizar en cascada
  14. 14. Observamos que la actualización en cascada ha funcionado
  15. 15. A diferencia del ejemplo de la Tablas2 ahora no se puedeborrar una tupla de la tabla padre por la restricción ON DELETE RESTRICT.
  16. 16. Nótese una cuestión que a veces es causa de confusión.Aunque es en la tabla hija donde se escribe la restricción de la clave foránea foránea,es decir, que un atributo depende de la clave de otra tabla….Se puede borrar sin ningún problema una tupla de una tabla que contieneuna clave foránea sin afectar a la tupla correspondiente de la tabla padre…En la figura se ve el ejemplo de borrar una fila en la tabla de pedidos.
  17. 17. Como se ve en la figura la tabla de pedidos está vacía yla tabla de clientes está intacta. intacta
  18. 18. DROP SCHEMA IF EXISTS Tablas4;CREATE SCHEMA Tablas4;USE Tablas4;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), PRIMARY KEY (npedido), ( p ), FOREIGN KEY (cliente_Dni) REFERENCES Cliente(Dni) ON DELETE RESTRICT ON UPDATECASCADE )ENGINE=InnoDB;INSERT INTO Cliente VALUES (7211545v,Carlos,Martinez Lopez);INSERT INTO P did VALUES (122 2010/01/0 211 4 ) Pedidos (122,2010/01/05,7,7211545v);
  19. 19. AquíA í mostramos el ejemplo de intentar incorporar una fila nueva de t l j l d i t t i fil dpedidos de un cliente que no existe en la tabla de clientes. Lasreglas de integridad referencial nos lo impiden
  20. 20. Insertamos ahora dos nuevos clientes……..
  21. 21. El resultado lo observamos en la figura ……
  22. 22. Ahora si que podemos incorporar una tupla nueva de pedido conel cliente incorporado en la tabla de clientes
  23. 23. EJEMPLOS PRÁCTICOS SQL MODIFICACIÓN TABLAS MODIFICACIÓN TABLAS
  24. 24. DROP SCHEMA IF EXISTS Tablas5; T bl 5CREATE SCHEMA Tablas5;USE Tablas5;create table Cliente( Dni VARCHAR(10), Nombre VARCHAR(10), Apellido VARCHAR(10), PRIMARY KEY (Dni) )ENGINE=InnoDB;create table Pedidos( npedido INTEGER, 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); ( 122 2010/01/05 7 7211545v );
  25. 25. Agregamos una columna a la tabla con ALTER …ADD
  26. 26. Cambiamos el nombre de una columna a la tabla con ALTER …CHANGE
  27. 27. Modificamos el tipo de datos de una columna a la tabla con ALTER …MODIFY
  28. 28. Eliminamos una columna a la tabla con ALTER …DROP
  29. 29. Estamos tratando de borrar una tabla padre. Las restricciones de la BDno nos permite al tener asociada la tabla una clave ajena
  30. 30. La tabla hija “pedidos” se puede borrar sin problemas.Es donde se haya la clave ajena
  31. 31. EJEMPLOS PRÁCTICOS SQL INSERCIÓN DATOS EN TABLAS INSERCIÓN DATOS EN TABLAS
  32. 32. DROP SCHEMA IF EXISTS Tablas6;CREATE SCHEMA Tablas6;USE Tablas6;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 DELETERESTRICT 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,Garzón Rodriguez);INSERT INTO Personal VALUES (7211542v,Antonio,Marina Esquivel);INSERT INTO Personal VALUES (7211543v,Cesar,Bernal SanJose ); ( 7211543v Cesar Bernal SanJose);INSERT INTO Personal VALUES (7211544v,Rodrigo,Alonso Vera);INSERT INTO Personal VALUES (7211546v,Maria,Lopez Gomez);
  33. 33. TABLA: Cliente TABLA: PedidosTABLA: Personal
  34. 34. Con este comando que es un mezcla de INSERT INTO y SELECT conseguimosmeter en la tabla cliente 5 tuplas
  35. 35. EJEMPLOS PRÁCTICOS SQLACTUALIZACIÓN DATOS EN TABLASACTUALIZACIÓN DATOS EN TABLAS
  36. 36. DROP SCHEMA IF EXISTS Tablas7;CREATE SCHEMA Tablas7;USE Tablas7;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) ONDELETE 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,Garzón Rodriguez);INSERT INTO Cliente VALUES (7211542v,Antonio,Marina Esquivel); ( 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);
  37. 37. Vamos a probar el comando actualizar de SQL.Para ello actualizamos todas las tuplas en la que aparece Maria
  38. 38. En este ejemplo vemos como es imposible actualizar los dos registrosen l que aparece en nombre el valor Carmen a un mismo DNI los b l l C iya que DNI tiene la restricción de clave primaria
  39. 39. EJEMPLOS PRÁCTICOS SQLCONSULTAS BÁSICAS CON SELECTCONSULTAS BÁSICAS CON SELECT
  40. 40. DROP SCHEMA IF EXISTS SELECT1;CREATE SCHEMA SELECT1;USE SELECT1;create table Información Ventas( Información_Ventas( Tienda VARCHAR(10), Ventas INTEGER, Fecha DATE ) )ENGINE=InnoDB; ;create table Zona_Ventas( Región VARCHAR(10), g ( ), Tienda VARCHAR(10) )ENGINE=InnoDB;INSERT INTO Información_Ventas VALUES (Madrid,1500,2010/01/05); ( , , );INSERT INTO Información_Ventas VALUES (Sevilla,250,2010/01/08);INSERT INTO Información_Ventas VALUES (Madrid,300,2010/01/07);INSERT INTO Información_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);
  41. 41. TABLA: Informacion_ventas TABLA:Zona_Ventas
  42. 42. Tabla: Información_Ventas Selección Básica:Seleccionamos el nombre de todas las tiendas
  43. 43. Tabla: Información_Ventas Selección Básica:De esta forma eliminamos los duplicados que genera la consulta SELECT
  44. 44. Tabla: Información_Ventas Se ecc ó Condicional Simple: Selección Co d c o a S p eTiendas cuyas ventas son mayores de 1000
  45. 45. DROP SCHEMA IF EXISTS SELECT2;CREATE SCHEMA SELECT2;USE SELECT2;create table Información_Ventas( Información Ventas( Tienda VARCHAR(10), Ventas INTEGER, Fecha DATE )ENGINE=InnoDB;create table Zona_Ventas( Región VARCHAR(10), Tienda VARCHAR(10) ( ) )ENGINE=InnoDB;INSERT INTO Información_Ventas VALUES (Madrid,1500,2010/01/05);INSERT INTO Información_Ventas VALUES (Sevilla,250,2010/01/08); Información Ventas ( Sevilla 250 2010/01/08 );INSERT INTO Información_Ventas VALUES (Cuenca,300,2010/01/07);INSERT INTO Información_Ventas VALUES (Barcelona,700,2010/01/08);INSERT INTO Zona_Ventas VALUES (Centro-Sur,Madrid); Z V t (C t S M d id)INSERT INTO Zona_Ventas VALUES (Centro-Sur,Sevilla);INSERT INTO Zona_Ventas VALUES (Noreste,Zaragoza);INSERT INTO Zona_Ventas VALUES (Noreste,Barcelona);
  46. 46. Tabla: Información_Ventas Selección Condicional Simple Compuesta:Tiendas cuyas ventas son mayores de 1000 ó las ventas estáncomprendidas entre 275 y 500
  47. 47. Tabla: Información_Ventas Selección Tuplas en Función de Valores (IN):Información completa de lasTiendas de “Madrid” y “Sevilla”
  48. 48. Tabla: Información_Ventas Selección Búsqueda de Patrones (LIKE):Seleccion de tuplas que contengan un patrón
  49. 49. DROP SCHEMA IF EXISTS SELECT3; O SC S SS CCREATE SCHEMA SELECT3;USE SELECT3;create table Información_Ventas( Tienda VARCHAR(10), Ventas INTEGER, Fecha DATE )ENGINE=InnoDB;create table Zona_Ventas( Región VARCHAR(10), Tienda Ti d VARCHAR(10) )ENGINE=InnoDB;INSERT INTO Información_Ventas VALUES (Madrid,1500,2010/01/05);INSERT INTO Información_Ventas VALUES ( _ (Sevilla,250,2010/01/08); )INSERT INTO Información_Ventas VALUES (Cuenca,300,2010/01/07);INSERT INTO Información_Ventas VALUES (Barcelona,1500,2010/01/08);INSERT INTO Zona_Ventas VALUES (Centro-Sur,Madrid); Zona Ventas ( 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);
  50. 50. Tabla: Información_Ventas Selección Ordenación de Resultados (ORDER BY):Selección de Tiendas ordenadas por el volumen de ventas enOrden descendente
  51. 51. Tabla: Información_Ventas Selección Ordenación de Resultados (ORDER BY):En este ejemplo se clasifican las tuplas en primer lugar en ordendescendente del campo Ventas y luego si hay tuplas del mismo valor pororden descentente de fecha
  52. 52. DROP SCHEMA IF EXISTS SELECT4;CREATE SCHEMA SELECT4;USE SELECT4;create table Información_Ventas( ( Tienda VARCHAR(10), Ventas INTEGER, Fecha DATE )ENGINE=InnoDB;create table Zona_Ventas( Región VARCHAR(10), Tienda VARCHAR(10) )ENGINE=InnoDB;INSERT INTO Información_Ventas VALUES (Madrid,1500,2010/01/05);INSERT INTO Información_Ventas VALUES (Sevilla,250,2010/01/08);INSERT INTO Información_Ventas VALUES (Madrid,300,2010/01/07); ( , , );INSERT INTO Información_Ventas VALUES (Barcelona,700,2010/01/08);INSERT INTO Zona_Ventas VALUES (Centro-Sur,Madrid);INSERT INTO Zona_Ventas VALUES (Centro-Sur,Sevilla); Zona Ventas ( Centro-Sur Sevilla );INSERT INTO Zona_Ventas VALUES (Noreste,Zaragoza);INSERT INTO Zona_Ventas VALUES (Noreste,Barcelona);
  53. 53. Tabla: Información_Ventas Selección Funciones Aritméticas: S l ió F i A it étiSeleccionar todas las tuplas de la tabla “Información_Ventas’(ya( que no existe clausula when) , obteniendo una relacion(una tabla). i t l l h ) bt i d l i ( t bl ) Luego proyectamos por el campo Ventas y hacemos una operación.
  54. 54. Tabla: Información_VentasSelección Funciones Aritméticas:Número de Tuplas de una tabla
  55. 55. Tabla: Información_VentasSelección Funciones Aritméticas con Grupos:S l ió F i A it éti GVentas agrupadas por tiendas
  56. 56. Tabla: Información_VentasSelección Funciones Aritméticas con Grupos:Ventas agrupadas por tiendas de las tiendas cuyas ventasSon superiores a 1500
  57. 57. Tabla: Información_Ventas Selección con Grupos:Esta consulta no tendría mucho sentido ya en un grupo la fecha decada tupla es diferente
  58. 58. La condición que aplica HAVING tiene que ser un operadorque abarque a todos los miembros del grupo. Si se refiere a uncampo que puede ser diferente en los miembros del grupo no funciona p q p g p
  59. 59. Tiendas y suma de ventas agrupadas por iguales valores de tienda y ventas
  60. 60. Selección con Grupos:Suma de las ventas totales de las tiendas agrupadas por el nombrede Madrid
  61. 61. Se ecc ó con Grupos: Selección co G uposMáximo de ventas de las tiendas agrupadas por el nombre
  62. 62. EJEMPLOS PRÁCTICOS SQL JOIN NATURAL CON SELECT JOIN NATURAL CON SELECT
  63. 63. DROP SCHEMA IF EXISTS JOIN1;CREATE SCHEMA JOIN1;USE JOIN1;create table Información_Ventas( Tienda VARCHAR(10), Ventas INTEGER, V t INTEGER Fecha DATE )ENGINE=InnoDB;create table Zona_Ventas( Región VARCHAR(10), Tienda VARCHAR(10) )ENGINE=InnoDB;INSERT INTO Información_Ventas VALUES (Madrid,1500,2010/01/05); I f ió V VA UES (M d id 1 00 2010/01/0 )INSERT INTO Información_Ventas VALUES (Sevilla,250,2010/01/08);INSERT INTO Información_Ventas VALUES (Madrid,300,2010/01/07);INSERT INTO Información_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);
  64. 64. TABLA:Zona_VentasTABLA: Informacion_ventas
  65. 65. Join Natural:Ventas por Regiones
  66. 66. EJEMPLOS PRÁCTICOS SQL CONSULTAS ANIDADAS CONSULTAS ANIDADAS
  67. 67. TABLA:Zona_Ventas TABLA: Informacion_ventas Consulta Anidada:Ventas de todas las tiendas de la región Noreste
  68. 68. Consulta join equivalente a anidada:Ventas de todas las tiendas de la región Noreste
  69. 69. DROP SCHEMA IF EXISTS CASE1;CREATE SCHEMA CASE1;USE CASE1;create table Información_Ventas( Tienda VARCHAR(10), Ventas INTEGER, Fecha DATE )ENGINE=InnoDB;create table Zona_Ventas( Región VARCHAR(10), Tienda VARCHAR(10) )ENGINE=InnoDB;INSERT INTO Información_Ventas VALUES (Madrid,1500,2010/01/05);INSERT INTO Información_Ventas VALUES (Sevilla,250,2010/01/08);INSERT INTO Información_Ventas VALUES (Cuenca,300,2010/01/07);INSERT INTO Información_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 Zona_Ventas VALUES (N Z V (Noreste,Barcelona); B l )
  70. 70. Utilización comando case:Modificación de la columna Ventas en función del valor
  71. 71. 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 Ventas_tienda VALUES (B V i d VA UES (Barcelona,1500,2010/01/08); l 1 00 2010/01/08)INSERT INTO Ventas_Internet VALUES (2010/01/07,250);INSERT INTO Ventas_Internet VALUES (2010/01/10,535); V t I t t (2010/01/10 535)INSERT INTO Ventas_Internet VALUES (2010/01/11,320);INSERT INTO Ventas_Internet VALUES (2010/01/12,750);

×