Breve Visión de SQL Revisión 2007

43
REVISIÓN 4ª (2007) PROFESOR : JAVIER ANDRÉS GUTIÉRREZ

Transcript of Breve Visión de SQL Revisión 2007

Page 1: Breve Visión de SQL Revisión 2007

REVISIÓN 4ª (2007) PROFESOR : JAVIER ANDRÉS GUTIÉRREZ

Page 2: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 2 de 43

INDICE

1. BREVE VISIÓN DE SQL*PLUS. .................................................................................................3

2. ORDENES E INSTRUCCIONES DE SQL*PLUS. .....................................................................3

3. CREACIÓN Y MANIPULACIÓN DE TABLAS.................. .......................................................4

4. INSTRUCCIONES SELECT ... FROM........................................................................................4

5. INSTRUCCIÓN WHERE ..............................................................................................................5

6. EJERCICIOS. .................................................................................................................................5

7. CONTINUANDO CON LAS OPERACIONES SELECT. ..........................................................6

8. PROFUNDIZANDO EN LA INTRUCCIÓN WHERE. ............. ................................................6

9. INSTRUCCIÓN ORDER BY.......................................................................................................11

10. CLAUSULA LIMIT......................................................................................................................12

11. EJERCÍCIOS. ...............................................................................................................................13

12. UTILIZACIÓN DE FUNCIONES...............................................................................................15

13. EJERCICIOS. ...............................................................................................................................23

14. SELECCIONES ANIDADAS.......................................................................................................24

15. JOINS.............................................................................................................................................25

16. OTRAS OPERACIONES CON CONJUNTOS..........................................................................26

17. EJERCÍCIOS. ...............................................................................................................................28

18. MANIPULACIÓN DE DATOS. ..................................................................................................29

19. EJERCICIOS ................................................................................................................................32

20. CREACIÓN DE TABLAS............................................................................................................33

21. VISTAS (A PARTIR DE LA VERSIÓN MYSQL 5.0.1). .............................................................35

22. EJERCÍCIOS. ...............................................................................................................................36

ANEXO I ...................................................................................................................................................37

Page 3: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 3 de 43

1. Breve visión de SQL*PLUS.

Sql*plus es un procesador interactivo que permite actuar con la Base de datos, con el se podrán hacer operaciones variadas, estas operaciones son aquellas que siempre acompañan a la base de datos:

• operaciones de inserción filas. • operaciones de borrado de filas. • operaciones de modificaciones de filas. • operaciones de consulta de tablas. • operaciones de creación, modificación, destrucción de

tablas.

Todo SGBD (sistema gestor de base de datos) que trabaje con un modelo de base de datos debe permitir hacer las operaciones antes mencionadas.

Ejemplos de estas operaciones pueden ser: SELECT CODPRO, NOMBRE, POBLACIÓN FROM PROVEEDOR WHERE ZONA=2;

CREATE TABLE CLIENTE ( CODIGO INT(3) NOT NULL, NOMBRE VARCHAR(15), POBLACION VARCHAR(15), ACTIVIDAD VARCHAR(6), ESTATUS VARCHAR(3), PRIMARY KEY(CODIGO));

INSERT INTO CLIENTE VALUES(1,’MANUEL CAMPO’, ’MADRI D’, ’MODA’, 10);

2. ORDENES E INSTRUCCIONES DE SQL*PLUS. Vamos a comenzar por el hecho que tenemos unas tablas ya en

la base de datos y que deseamos hacer consultas. SELECT CODPRO, NOMBRE, POBLACIÓN FROM PROVEEDOR WHERE ZONA=2;

Page 4: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 4 de 43

3. Creación y manipulación de tablas.

Sql*plus permite de manera interactiva, como ya hemos dicho,

crear, actualizar, ver y borrar tablas en la BD. Ejemplo : CREATE TABLE CLIENTES2 (CODIGO INT(5) NOT NULL, NOMBRE VARCHAR(15), POBLACION VARCHAR(15),

TELEFONO INT(9) NOT NULL, ACTIVIDAD VARCHAR(8), ESTATUS VARCHAR(3), PRIMARY KEY(CODIGO)); Una vez creada la tabla podemos insertar filas o valores a las

tablas: INSERT INTO CLIENTES2 VALUES(5,’JUAN DELGADO’, ‘MAD RID’,’1111’,

‘MODA’,3 );

Y también podemos eliminar la tabla de una manera completa con la sentencia siguiente: DROP TABLE CLIENTES2;

Siendo PEPE1 el nombre de una tabla.

Para conocer los campos que tiene una tabla existe un comando que es el siguiente:

DESC CLIENTES;

Con este comando nos muestra los campos y tipos de la tabla

clientes.

4. Instrucciones SELECT ... FROM

La instrucción SELECT tiene como función, el acceder a las tablas de la base de datos.

SELECT CODIGO, ZONA FROM ZONAS;

Page 5: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 5 de 43

Nos ha permitido obtener los CODIGOS Y ZONAS de la tabla ZONAS.

5. INSTRUCCIÓN WHERE

La instrucción WHERE permite enunciar las condiciones de la

selección. Ejemplo: Si deseamos seleccionar el código de proveedor, nombre del

proveedor y su población, para aquellos que estén en la zona 2. SELECT CODPRO, NOMBRE, POBLACIÓN FROM PROVEEDOR WHERE ZONA=2; Las columnas especificadas en las instrucciones SELECT y

WHERE deben pertenecer a la(s) tabla(s) indicada(s). Si en la expresión lógica se utilizan caracteres, estos deberán

estar entre los signos ‘ ‘. Los operadores lógicos son los siguientes: =, <, >, >=, <=, !=.

6. EJERCICIOS. � Crear una tabla que contengan los datos de una persona:

nombre, primer apellido, dirección, ciudad, código postal, teléfono y D.N.I. � Dar de alta a los miembros de tu grupo de trabajo. � Visualizar todos los datos de la tabla.

� Seleccionar solamente el tuplo de una persona determinada.

� Seleccionar de la tabla PERSONAL los campos NOMBRE y

CAT.

� Seleccionar en la tabla personal aquellas personas que ganen más de 601.01€/mes.

Page 6: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 6 de 43

7. CONTINUANDO CON LAS OPERACIONES SELECT. Vamos a continuar viendo ejemplos de la sentencia SELECT,

supongamos que se desea obtener el código, nombre y zona de todos los proveedores.

SELECT CODPRO, NOMBRE, ZONA FROM PROVEEDOR; También se desea saber el código, nombre, nuevo precio y el

antiguo precio de los productos que adquirimos más frecuentemente. El nuevo precio se calculará añadiendo el 10% al antiguo. Además se encabezará la nueva columna con un nuevo título.

SELECT CODART, ARTICULO, PRECIO*0.10+PRECIO NUEVO_P RECIO, PRECIO FROM ARTICULO; Para eliminar las duplicaciones de valores de un dominio

utilizaremos la función DISTINCT. Un ejemplo que refleje lo anterior seria para la obtención de

los diferentes artículos que nos han pedido. SELECT DISTINCT CODART FROM PEDIDOS;

La función DISTINCT puede ser aplicada a más de una

columna.

8. PROFUNDIZANDO EN LA INTRUCCIÓN WHERE.

Supongamos que queremos seleccionar el código, nombre y población de los clientes que residen en Madrid.

SELECT CODIGO, NOMBRE, POBLACION FROM CLIENTES WHERE POBLACION=’MADRID’; Especificaciones: - Se pueden comparar constantes numéricas con el

contenido de una columna. - Se puede comparar el contenido de una columna con una

cadena alfanumérica, esta debe de estar entre comillas.

Page 7: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 7 de 43

- Se puede comparar el valor de una columna con una expresión numérica.

- Se puede comparar el valor de una columna con otra.

Ejemplo : Listar las personas que perciben unas extras superiores al 10% de su salario.

SELECT NOMBRE, CAT, SALARIO FROM PERSONAL WHERE EXTRAS > 0.10*SALARIO;

Los operadores que se pueden utilizar en la instrucción

WHERE son los siguientes:

SIGNO SIGNIFICADO = Igual. != Diferente. > Superior. < Inferior.

>= Superior o Igual <= Inferior o Igual

Las condiciones pueden ser complejas indicando a cada

lado de los operadores una expresión aritmética. También esto se consigue a través de los operadores BOOLEANOS AND y OR.

Ejemplo : Selección de los pedidos realizados por el

cliente de código 14 y que son menores de 14 unidades, la fecha y el artículo.

SELECT FECHA, CODART, CODCLI FROM PEDIDOS WHERE CODCLI=14 AND UNIDADES < 14;

Ejemplo : Selección del código cliente, fecha del pedido,

código de artículo y las unidades pedidas por los clientes de código 10 y 14 en la tabla de pedidos.

SELECT CODCLI, FECHA, CODART, UNIDADES FROM PEDIDOS WHERE CODCLI=14 OR CODCLI=10;

Page 8: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 8 de 43

Además podemos también encontrar los operadores

booleanos AND y OR pudiendo combinarse en una instrucción WHERE. Cuando aparece más de un operador distinto se puede usar o no usar el paréntesis para indicar el orden de preferencia de evaluación de la condición.

En el caso de no utilizar los paréntesis, el orden de

evaluación de la condición es el siguiente: primero se evalúa las condiciones AND y el resultado con las condiciones OR.

Ejemplo : la expresión WHERE GRUPO=20 OR GRUPO=10 AND CAT=”CHOFER”

Tiene el mismo sentido que: WHERE GRUPO=20 OR (GRUPO=10 AND CAT=”CHOFER”)

Pero totalmente diferente a: WHERE (GRUPO=20 OR GRUPO=10) AND CAT=”CHOFER”

En la primera y segunda expresión la selección se hará

con todo el personal de grupo 20 o grupo 10, este último además con categoría de chofer. Mientras por otro lado la tercera expresión se refiere a todas las personas del grupo 10 y grupo 20 con categoría de chofer ambas.

Continuando con los operadores, también existen

operadores que permiten especificar el valor de una columna dentro de un rango de valores.

Ejemplo : Selecciona código de artículo, nombre y precio

de los artículos de valor comprendido entre 18.03 € y 48.08 € SELECT CODART, ARTICULO, PRECIO FROM ARTICULO WHERE PRECIO BETWEEN 18.03 AND 48.08; Los intervalos indicados con incluidos en la selección o

sea la selección anterior se podía haber sustituido por esta:

Page 9: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 9 de 43

WHERE PRECIO >=18.03 AND PRECIO<=48.08

También la condición NOT BETWEEN está permitida. Otra forma de selección es a través de la enumeración

de un conjunto de valores. Ejemplo : Seleccione del nombre, numero de personal,

categoría y grupo de las personas cuyo grupo sea 20 o 40. SELECT NOMBRE, NPER, CAT, GRUPO FROM PERSONAL WHERE GRUPO IN (20,40); Los valores de esta lista pueden ser literales o

numéricos, El operador IN es equivalente a una serie de OR. Ejemplo : WHERE GRUPO=20 OR GRUPO=40

También de forma contraria a la anterior se puede

especificar los valores que no deseamos seleccionar. Ejemplo : Selecciona el nombre, número personal,

categoría, y grupo de las personas que no tienen como número de grupo ni el 20 ni el 40.

SELECT NOMBRE, NPER, CAT, GRUPO FROM PERSONAL WHERE GRUPO NOT IN (20,40);

El operador NOT IN es equivalente a una serie de !=

asociados a AND. Ejemplo : WHERE GRUPO !=20 AND GRUPO != 40

Otras veces la selección la podemos hacer realizando la

comparación con parte del literal.

Page 10: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 10 de 43

Ejemplo : Selecciona el código del artículo, nombre, número de proveedor de todos los productos que comienza su nombre por C.

SELECT CODART, ARTICULO, PROVEEDOR FROM ARTICULO WHERE ARTICULO LIKE ‘C%’; El carácter ‘%’ en el modelo indica cualquier literal,

varios o ningún carácter. Además este carácter puede ser situado en cualquier lugar del literal expresado en el modelo.

Ejemplo : Seleccionar aquellos artículos que su nombre

comience por C, termine por S y tenga una I en cualquier lugar intermedio.

SELECT CODART, ARTICULO, PROVEEDOR FROM ARTICULO WHERE ARTICULO LIKE ‘C%I%S’; Se puede también realizar la selección comparando

literales, fijando longitudes y valores en lugares determinados. Para ello se utiliza _ (underscore ).

Ejemplo : Listar todos los artículos que tengan un código

de artículo de cinco caracteres y el último sea una N. SELECT CODART, ARTICULO FROM ARTICULO WHERE CODART LIKE ‘____N’;

NOTA: Recuerda que debes poner 4 underscores . Como es de suponer estas formas de crear expresiones

de selección se pueden combinar. Ejemplo : Listar los artículos cuyo nombre contiene una

M en la tercera posición. SELECT CODART, ARTICULO FROM ARTICULO WHERE ARTICULO LIKE ‘__M%’; NOTA: Se deben poner 2 underscores .

Page 11: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 11 de 43

La selección se puede realizar, también, por el criterio de ausencia de valor.

Ejemplo : Seleccionar aquellos empleados que no tienen

ninguna remuneración extra. SELECT NOMBRE, CAT, SALARIO, EXTRAS FROM PERSONAL WHERE EXTRAS IS NULL; El sentido de NULL es el de ausencia de datos, no

significa esto ni ceros ni espacios. Dos valores NULL no son iguales.

Como es lógico, la negación de NULL es realizable. Ejemplo : Seleccionar aquellos empleados que tengan

renumeración extra. SELECT NOMBRE, CAT, SALARIO, EXTRAS FROM PERSONAL WHERE EXTRAS IS NOT NULL;

9. INSTRUCCIÓN ORDER BY.

Esta instrucción permite ordenar los datos

seleccionados, ya que los datos en la tabla están en un orden indeterminado o carecen de él.

Ejemplo : Seleccionar los proveedores y ordenarlos por

el número de zona. SELECT CODPRO, NOMBRE, POBLACION, ZONA FROM PROVEEDOR ORDER BY ZONA

Por defecto la ordenación es ascendente, si se desea el

orden descendente hay que indicarlo. La columna o columnas que sirven para la ordenación,

no tienen que ser mencionadas, obligatoriamente, en la instrucción SELECT pero si en la instrucción ORDER BY.

Page 12: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 12 de 43

La instrucción puede servirse de varias columnas para la ordenación.

Ejemplo : Listar los proveedores ordenados por zonas y

códigos de productos en orden descendente. SELECT NOMBRE, POBLACION, ZONA, CODPRO FROM PROVEEDOR ORDER BY ZONA, CODPRO DESC; En este caso la secuencia de ordenación la determina el

orden de enumeración de las columnas a ordenar. Otra forma de designar el orden de clasificación es

indicando el orden de posición de las columnas en las instrucción SELECT. Basándose en el mismo ejemplo anterior.

SELECT CODPRO, NOMBRE, POBLACION, ZONA FROM PROVEEDOR ORDER BY 4, 1 DESC;

10. CLAUSULA LIMIT.

La preparación de un query complicado implica

normalmente un proceso de prueba y error. Aunque no se cometan errores, siempre se empieza escribiendo queries que sólo realizan una parte de lo que se desea alcanzar. Luego, se van mejorando gradualmente hasta llegar al objetivo buscado. Cuando se trabaja con tablas auténticas con muchos miles de filas, puede ser demasiado engorroso ir obteniendo repetidas salidas con cientos de filas. Es obvio que no se pueden observar en la pantalla del cliente de texto de mysql.

La cláusula limit tiene dos parámetros, si sólo se indica

un parámetro éste significa el número de filas a mostrar. En el caso que se indiquen los dos, entonces, el primero indica dónde se comienza la muestra de datos y el segundo el número de filas a mostrar. La primera fila de una tabla cualquiera comienza en la posición cero.

Page 13: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 13 de 43

Ejemplo : Mostrar los campos CAT, NOMBRE y SALARIO de la tabla de PERSONAL. Muestra sólo las tres primeras filas.

SELECT CAT, NOMBRE, SALARIO FROM PERSONAL LIMIT 3;

Las cláusulas mencionadas, SELECT...FROM.. ,

WHERE, ORDER BY, y LIMIT deben escribirse, si aparecen, en ese orden. SELECT siempre aparece y va en primer lugar. Las otras 3 son optativas.

11. EJERCÍCIOS.

� Expresiones aritméticas.

Seleccionar el NOMBRE, SALARIO , EXTRAS y calcular

una cuarta columna PAGA-EXTRA que sea el resultado de aplicar un 20% al salario.

Crear una columna suplementaria TOTAL_EXTRA que

sea el resultado de sumar el SALARIO más la PAGA_EXTRA.

� Selecciones.

Seleccionar el personal cuyas EXTRAS sean inferiores al 10% de su salario (tabla PERSONAL ).

Seleccionar los proveedores cuya ZONA sea inferior o

igual a 5 (tabla PROVEEDOR). Seleccionar aquellos proveedores cuyo NOMBRE

comience por ‘LA’.

� Ordenación de las selecciones.

Seleccionar todos los proveedores y ordenarlos por el número de ZONA (tabla PROVEEDOR).

Page 14: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 14 de 43

� Otros.

Seleccionar el artículo, proveedor y precio de todos los

productos cuyo precio sea inferior a 6.01€ o que el nombre del producto comience por la letra C.

Seleccionar el nombre, categoría y salario de las

personas que tengan un salario entre 300.51€ y 540.91 € Incluidos los límites. Presentar las cabeceras de las columnas NOMBRE y CATEGORÍA EN EL CENTRO. El orden de los datos será el del salario en orden decreciente.

Seleccionar el artículo, proveedor y precio de los

artículos cuyo precio sea de 1.80, 2.40, 3.01, 7.21, 12.02, 48.08. Ordenar los datos a través de la columna 1 en orden alfabético.

Page 15: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 15 de 43

12. UTILIZACIÓN DE FUNCIONES

Las funciones se pueden utilizar sobre campos y valores numéricos y literales en las instrucciones: SELECT, WHERE y ORDER BY.

Ejemplo : Visualizar el código, zona y la abreviación de la

zona de la tabla Zonas. Ordenando los datos seleccionados por la abreviación de la zona.

SELECT CODIGO, ZONA, SUBSTR(ZONA,1,4) INICIALES FROM ZONAS ORDER BY SUBSTR(ZONA,1,4); FUNCIONES DE CADENAS: ASCII(CADENA) � Devuelve el valor ASCII del primer carácter literal (Mysql). Ejemplo: SELECT ASCII(‘JUA’);

Devuelve 74 SELECT ASCII(‘A’);

Devuelve 65 CHAR(NUMERO) �Convierte un valor numérico en un carácter correspondiente en la codificación ascii . Ejemplo: SELECT CHAR(65);

Devuelve A LENGTH(CADENA ) � Devuelve la longitud de un literal . Ejemplo: SELECT LENGTH(‘SQLPLUS’);

Devuelve 7

Page 16: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 16 de 43

LOWER(CADENA) � Convierte los caracteres del literal de mayúsculas a minúsculas. LPAD (CADENA , NUMERO, CADENA2 ) � Rellena por la izquierda con tantas CADENA2 hasta que se alcance la longitud igual al NUMERO. Ejemplo: SELECT LPAD(‘ORACLE’,10,’O’);

Devuelve OOOOORACLE LTRIM(CADENA) � Realiza la función de eliminar los blancos de la izquierda. RTRIM(CADENA) � Realiza la función de eliminar los blancos por la derecha. RPAD(CADENA , NUMERO, CADENA2 ) � Realiza la misma función que LPAD, pero solamente que ahora se realiza por la derecha . SUBSTR(CADENA , NUMERO1, NUMERO2) � Devuelve los caracteres de la CADENA desde la posición indicada en el NUMERO1 y como longitud de la cadena el NUMERO2. Además tenemos otras funciones (SUBSTRING(str,pos,len), LEFT(str,len),RIGHT(str,len),MID(str,pos,len),INSTR (str,substr), REPLACE(str,from_str,to_str), REVERSE(str), REPEAT(str,count) ). UPPER(CADENA) � Transforma las letras de la CADENA de minúsculas a mayúsculas. CONCAT(CADENA1,CADENA2..) � Concatena dos o más literales. CAST (CADENA AS TIPO ) � Convierte una secuencia de números entre comillas al tipo especificado (SIGNED, UNSIGNED, DATE ….). Ejemplo: SELECT CAST(‘12345’ AS SIGNED);

Page 17: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 17 de 43

Ejemplo : Seleccionar el código de proveedor, nombre y población de los proveedores, que residan en ciudades que comiencen sus nombres por las letras PA. SELECT CODPRO, NOMBRE, POBLACION FROM PROVEEDOR WHERE SUBSTR(POBLACION,1,2)=’PA’; FUNCIONES NUMÉRICAS: ABS (NUMERO) � Devuelve el valor absoluto del número indicado. Ejemplo : SELECT ABS(-7); // Devuelve 7 MOD(NUMERO1, NUMERO2) � Devuelve el resto de dividir el NUMERO1 entre el NUMERO2. Ejemplo : SELECT MOD(12,7); // Devuelve 5 POWER(NUMERO1, NUMERO2)� Eleva a la potencia indicada por el NUMERO2 la base indicada por el NUMERO1. Ejemplo : SELECT POWER(2,4); // Devuelve 16 SIGN(NUMERO) � Devuelve el signo del numero indicado, la convención es –1 para números negativos, 0 para el cero, 1 para los positivos. SQRT(NUMERO) � Extrae la raíz cuadrada de un NUMERO. Si el valor es menor a cero devuelve NULL. ROUND(NUMERO1,NUMERO2) �Redondea el NUMERO1 tantas posiciones como indica el NUMERO2 en la parte decimal del primero, usa la regla del cinco en el redondeo.

Page 18: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 18 de 43

GREATEST (NUMERO1, NUMERO2 .....) � Devuelve el mayor valor de la lista. Ejemplo : SELECT GREATEST (1, 2, 3, 4, 5); // Devuelve 5 LEAST (NUMERO1, NUMERO2 ....)� Devuelve el valor inferior de la lista de valores indicados. En todas las funciones numéricas pueden ser sustituidos por nombres de columnas de la BD, con la condición que éstas sean numéricas. Ejemplo : Seleccione el código de cliente, fecha, código del artículo y unidades de la tabla de Pedidos, donde las unidades módulo 4 den resultado 2. SELECT CODCLI, FECHA, CODART, UNIDADES FROM PEDIDOS WHERE MOD(UNIDADES,4) = 2; Ejemplo : Seleccionar nombre, salario, extras de aquellos empleados que tengan no nulos. Indicando para cada uno de los seleccionados la cantidad superior entre el salario o los extras. SELECT NOMBRE, SALARIO, EXTRAS, GREATEST (SALARIO,E XTRAS) FROM PERSONAL WHERE EXTRAS IS NOT NULL; FUNCIONES CON FECHAS:

CURDATE()� Esta función da la fecha del día.

Ejemplo :

SELECT CURDATE();

Obtenemos la fecha en el formato de fecha ‘Año-Mes-Día’ propio de MySQL.

DAYNAME()�Dada una fecha, esta función da el nombe ( en inglés) del día de la semana correspondiente.

Page 19: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 19 de 43

Ejemplo:

SELECT DAYNAME(CURDATE());

DAYOFWEEK()� Es complementaria de la anterior. En vez de darnos el nombre del día de la semana nos da un código numérico de 1 a 7. El código 1 representa el Domingo, el 2 el Lunes, y así hasta el 7 que representa el Sábado.

Ejemplo:

SELECT DAYOFWEEK(CURDATE());

DATE_FORMAT()� Nos permite presentar las fechas en otros formatos. Los formatos que usaremos son '%d/%m/%y' y '%d/%m/%Y'.

Ejemplo:

SELECT DATE_FORMAT(CURDATE(),’%d/%m/%Y');

DATE_ADD()�Esta función nos permite agregar a una fecha cierto número de días ( o meses y años)

Ejemplo: ¿Cuál es la fecha de dentro de 15 días?

SELECT DATE_ADD(CURDATE(), INTERVAL 15 DAY);

o mejor :

SELECT DATE_FORMAT(DATE_ADD(CURDATE(),INTERVAL 15 DAY) ,’%d/ %m/%Y');

DATE_SUB()�Esta función le quita cierto número de días (o meses y años) a una fecha.

Ejemplo : ¿Cuál es la fecha de hace 15 días?

SELECT DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 15 DAY),’%d/%m /%Y');

DATEDIFF()� Esta función obtiene la diferencia, en días, entre dos fechas.

Ejemplo :

SELECT DATEDIFF(‘2005-4-1’,’2004-5-30’);

Este query produce 306, lo que significa que del 30/5/2004 al 1/4/2005 van 306 días.

Page 20: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 20 de 43

YEAR(), MONTH() ,DAY()�extraen de una fecha el año, el mes y día correspondientes.

Ejemplo :

SELECT MONTH(‘2005-4-1’); produce 4, el número del mes.

Ejemplo : Obtener el día de la semana en español.

SELECT

CASE DAYOFWEEK(CURDATE()) WHEN 1 THEN 'Domingo' WHEN 2 THEN 'Lunes' WHEN 3 THEN 'Martes' WHEN 4 THEN 'Miércoles' WHEN 5 THEN 'Jueves' WHEN 6 THEN 'Viernes' WHEN 7 THEN 'Sábado' END AS “Día de la Semana”;

FUNCIÓN CON VALORES NULOS : Existe una función llamada IFNULL que se utiliza fundamentalmente para sustituir el valor NULL por un valor. Su sintaxis es IFNULL(columna, valor_nuevo) , devuelve el valor de la columna si no es nulo, y en caso contrario, devuelve el valor_nuevo . Ejemplo : SELECT SALARIO+IFNULL(EXTRAS,0) FROM PERSONAL; Ejemplo : Seleccione el nombre, salario, las extras y substituya el valor nulo por un cero en la tabla de empleados. SELECT NOMBRE, SALARIO, IFNULL(EXTRAS,0) FROM PERSONAL; Ejemplo : En el siguiente ejemplo vamos a ver lo que ocurre cuando se suma un valor NULL a un número, de ahí la importancia de controlar los valores NULL. SELECT NOMBRE, EXTRAS+SALARIO, IFNULL(EXTRAS,0)+ SA LARIO FROM PERSONAL;

Page 21: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 21 de 43

FUNCIONES DE GRUPOS DE DATOS: SQL nos permite formar grupos lógicos de datos que tengan características comunes en sus valores o contenido. Sobre estos conjuntos lógicos de dominios se pueden realizar distintos tipos de estadísticas. Las funciones que se usan más son:

FUNCIÓN RESULTADO AVG Media aritmética del grupo.

COUNT Cuenta el número de valores del grupo.

MAX Máximo valor del grupo. MIN Mínimo valor del grupo. SUM Suma de los valores del

grupo. Todas ellas también funcionan en Mysql. Las funciones MAX, MIN, COUNT pueden aplicarse a valores tanto alfanuméricos como a valores de fecha. Ejemplo : Calcula la suma de los salarios y pagos extras de los empleados de la tabla personal. SELECT SUM(SALARIO), SUM(EXTRAS) FROM PERSONAL; Ejemplo : Contar el número de personas que trabajan en la empresa. SELECT COUNT(NOMBRE) FROM PERSONAL;

Ejemplo : Contar las distintas categorías que existen en la empresa.

SELECT COUNT(DISTINCT CAT) FROM PERSONAL;

Ejemplo : Contar el número de personas que pertenecen al grupo 50.

Page 22: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 22 de 43

SELECT COUNT(*) FROM PERSONAL WHERE GRUPO=50; El * permite contar el número de filas que cumplen las condiciones. Ejemplo : Calcular la suma de salarios de las personas que pertenecen al grupo 50. SELECT SUM(SALARIO), SUM(EXTRAS) FROM PERSONAL WHERE GRUPO=50; Existe una instrucción que puede acompañar al SELECT que es el GROUP BY, se utiliza para definir grupos. Ejemplo : Sumar el total de salarios y pagos extras por grupos de trabajadores. SELECT GRUPO, SUM(SALARIO), SUM(EXTRAS) FROM PERSONAL GROUP BY GRUPO; También las funciones se pueden anidar. Ejemplo : SELECT AVG(SUM(SALARIO)), SUM(AVG(SALARIO)) FROM PERSONAL GROUP BY GRUPO; Ejemplo : Listar y contar las personas que trabajan en cada categoría y ordenarlas por orden creciente de grupo. Añadir una línea de totales (usar WITH ROLLUP en el GROUP BY) SELECT GRUPO, CAT, COUNT(*) FROM PERSONAL GROUP BY GRUPO,CAT WITH ROLLUP; También existe otra instrucción que es HAVING, esta instrucción permite especificar los grupos de información que se desea extraer.

Page 23: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 23 de 43

Ejemplo : Seleccionar la tabla personal las categorías donde hay más de dos personas con la misma categoría. SELECT GRUPO, CAT, COUNT(*) FROM PERSONAL GROUP BY GRUPO, CAT HAVING COUNT(*)>2; Como indica la sintaxis de la instrucción HAVING, permite expresar las condiciones que deben de cumplir el grupo de datos tratados. Las condiciones expresadas en la instrucción deben afectar solamente a aquellas especificadas en la instrucción GROUP BY. La instrucción WHERE puede utilizarse en combinación con la instrucción HAVING.

13. EJERCICIOS.

1. Seleccionar los artículos que han sido pedidos dos o más

veces (Tabla de pedidos).

2. Calcular el total de los salarios anuales por grupo en otra columna adicional incluyendo los extras anuales por grupo (Tabla de PERSONAL).

3. Determinar cuantos productos distintos hay en la tabla de

pedidos (TABLA PEDIDOS).

4. Calcular el total del valor de los productos cuto nombre comienza por C, P o E (TABLA ARTICULO)

Page 24: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 24 de 43

14. Selecciones anidadas.

El anidamiento de selecciones permite ir delimitando el grupo de datos sobre el que se va a trabajar. El anidamiento ofrece la posibilidad de especificar condiciones que al seleccionar se filtrarán tantas veces como anidamientos tengamos. Funciona en Mysql desde la versión 4.1.

Ejemplo : Seleccionar los proveedores cuya zona sea Cataluña. SELECT NOMBRE, POBLACION, ZONA FROM PROVEEDOR WHERE ZONA= ( SELECT CODIGO FROM ZONAS WHERE ZONA=’CATALUNYA’); Ejemplo : Seleccionar las personas que tienen un salario superior al superior de los salarios de los trabajadores del grupo 20. SELECT NOMBRE, CAT, GRUPO FROM PERSONAL WHERE SALARIO >

(SELECT MAX(SALARIO) FROM PERSONAL WHERE GRUPO=20);

Los anidamientos de selecciones se pueden utilizar los

operadores booleanos. Ejemplo : Seleccionar las personas cuya categoría sea igual a la de PABLO OLIAS, o aquellas que tengan un salario superior a la de FERNANDO TAPIAS. SELECT NOMBRE, CAT, SALARIO, FECINC FROM PERSONAL WHERE CAT= (SELECT CAT

FROM PERSONAL WHERE NOMBRE=’PABLO OLIAS’) OR SALARIO >= (SELECT SALARIO FROM PERSONAL WHERE NOMBRE=’FERNANDO TAPIAS’);

Page 25: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 25 de 43

Ejemplo : Seleccionar los proveedores que residen en las zonas de: CATALUNYA, ARAGON o AL ANDALUS. SELECT NOMBRE, POBLACIÓN, CODPRO, ZONA FROM PROVEEDOR WHERE ZONA IN ( SELECT CODIGO FROM ZONAS WHERE ZONA IN (‘CATALUNYA’, ‘ARAGON’, ‘AL ANDALUS ’)) ORDER BY NOMBRE; Ejemplo : Seleccionar las personas que tengan el mismo salario y grupo de JOSE BERMEJO. SELECT NOMBRE, CAT, SALARIO FROM PERSONAL WHERE (GRUPO, SALARIO) IN (SELECT GRUPO, SALARIO FROM PERSONAL WHERE NOMBRE=’JOSE BERMEJO’); Ejemplo : Seleccionar aquellos proveedores de productos que superen algunos de sus productos el precio de 12.02 €. SELECT NOMBRE, POBLACION, CODPRO FROM PROVEEDOR WHERE EXISTS (SELECT PROVEEDOR FROM ARTICULO

WHERE PROVEEDOR.CODPRO=ARTICULO.PROVEEDOR AND ARTICULO.PRECIO > 12.02);

15. JOINS

La selección de datos de varias tablas pueden realizarse desde una sola secuencia SELECT.

En el caso de existir columnas con el mismo nombre, en la

instrucción WHERE hay que prefijar la columna con el nombre de la tabla a la que pertenece, “tabla.columna ”.

Ejemplo : Se desea presentar cada proveedor, con su zona de

ubicación. SELECT NOMBRE, POBLACION, PROVEEDOR.ZONA, ZONAS.ZON A FROM PROVEEDOR, ZONAS WHERE PROVEEDOR.ZONA= ZONAS.CODIGO;

Page 26: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 26 de 43

Se pueden unir tantas tablas como se deseen en una secuencia SQL. Esto se realiza a través de columnas comunes a las tablas unidas, a estos se les denomina criterios de join.

La instrucción WHERE es la que nos permite indicar los

criterios del join. De la observación de la instrucción se deduce que, si se

desea fusionar n tablas es necesario tener n-1 expresiones de join.

A este tipo de join se denomina Equi-join. Dicho de otra

forma: es Equi-join el join de las tablas R y S sobre los atributos Ai y Bj según las calificación Ai = Bj .

El caso más general de la join es el producto cartesiano

de las tablas con las que se opera. Esto se produce cuando en la instrucción WHERE no se específica condición alguna de join.

Ejemplo : Selección de los clientes cuyo nombre comience por una T y fusión con la tabla de estatus. SELECT NOMBRE, POBLACION, DENOMINACION FROM CLIENTES, ESTATUS WHERE NOMBRE LIKE ‘T%’; Existe la posibilidad de extraer, en la secuencia join, aquellas filas que no se han podido fusionar con otras de la tabla, además de las filas para las cuales la condición del join se ha verificado. Ejemplo : Seleccionar los proveedores y las zonas de residencia así como aquellas zonas en las que no se tienen proveedores. SELECT NOMBRE, POBLACION, ZONAS.ZONA FROM PROVEEDOR LEFT JOIN ZONAS ON PROVEEDOR.ZONA = CODIGO;

16. OTRAS OPERACIONES CON CONJUNTOS.

Existen Otras operaciones para realizar JOIN de tablas. Estas

operaciones son la UNION, UNION ALL, ALL, ANY .

Page 27: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 27 de 43

La UNION añade N filas del resultado de la primera selección a las M filas resultantes de otra selección obteniendo como resultado una tabla de N+M filas menos las filas que fueran duplicadas.

La UNION ALL hace lo mismo que UNION sólo que no elimina

duplicados y coloca una tabla detrás de la otra. El ALL se utiliza para seleccionar filas que cumplen una

condición con todas las filas de una subquery. El ANY se utiliza para seleccionar filas que cumplen una

condición con algunas las filas de una subquery. Ejemplo : En esta selección se va a tomar el número de

personal, nombre y grupo de las personas que pertenecen al grupo 40 y todos los miembros de personal cuyo nombre comienza por J.

SELECT NPER, NOMBRE, GRUPO FROM PERSONAL WHERE GRUPO=40 UNION SELECT NPER, NOMBRE, GRUPO FROM PERSONAL WHERE NOMBRE LIKE ‘J%’;

Ejemplo : Muéstrame el nombre, salario del empleado que cobra más en la empresa. SELECT NOMBRE, SALARIO FROM PERSONAL WHERE SALARIO >=ALL(SELECT SALARIO FROM PERSONAL);

Page 28: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 28 de 43

17. EJERCÍCIOS.

1. Seleccionar los proveedores de aquellos productos que han

sido pedidos dos o más veces. Editar el Nombre del proveedor, el artículo y la cantidad pedida.

2. Seleccionar y sumar los productos pedidos por un cliente más

de una vez.

3. Seleccionar los productos pedidos por cada cliente indicando el nombre del cliente, el producto así como el total de cada pedido por producto.

4. Determinar en que localidad habitan aquellas personas que

tienen un salario mensual situado entre 180.30 € y 534.90 €. Indicar sus nombres, categorías, nombre del servicio así como la localidad.

5. Seleccionar aquellas personas que tengan un salario superior

al de PABLO OLIAS.

6. Seleccionar aquellas personas que tengan un salario que se encuentre entre el máximo y el mínimo del salario relativo al nivel 4.

Page 29: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 29 de 43

18. MANIPULACIÓN DE DATOS.

Entre las instrucciones de manipulación de datos tenemos la instrucciones de inserción que como su nombre indica sirve para insertar filas en las tablas.

Ejemplo : Insertar en la tabla actividades la nueva actividad materiales de construcción con el código 00. INSERT INTO ACTIVIDADES VALUES (00,’MATERIALES DE C ONS.’);

Si después queremos visualizarlo, y de esta manera

asegurarnos de que se ha insertado correctamente haremos lo siguiente: SELECT * FROM ACTIVIDADES WHERE CODIGO=0;

Antes de insertar o dar de alta datos en una tabla, esta debe haber sido creada. La asignación de valores a cada fila se debe hacer en la misma secuencia en las que figuran en la tabla. Si por el contrario se desea asignar el valor solamente a algunas columnas, estas deberán ser mencionadas con sus nombres. Ejemplo : Copiar de la tabla personal los datos de las personas que cobran un salario inferior a 601.01 € a la tabla perso1 . CREATE TABLE PERSO1 (NOM1 CHAR(20), CAT1 CHAR(10), SAL1 NUMBER(6)); INSERT INTO PERSO1(NOM1, CAT1, SAL1) SELECT NOMBRE, CAT, SALARIO FROM PERSONAL WHERE SALARIO <601.01; SELECT * FROM PERSO1; Las columnas que figuran en la instrucción INSERT son aquellas que figuran en la tabla receptora. De la misma forma el orden de las columnas también debe ser el mismo en la instrucción INSERT que en la instrucción SELECT y el mismo que existe en la tabla.

Page 30: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 30 de 43

Como ya se ha dicho, en el caso en el que sólo se desee asignar valores a algunas columnas, hay que nombrarlas explícitamente e indicar los valores de forma posicional. Ejemplo : INSERT INTO PERSONAL(NPER, NOMBRE, CAT, SALARIO, GR UPO) VALUES (1111,‘PEPE GOMEZ’, ‘COBRADOR’,1202.02,40); SELECT * FROM PERSONAL WHERE NOMBRE =’PEPE GOMEZ’;

Otra instrucción de manipulación de datos son las instrucciones de modificación UPDATE. Ejemplo : UPDATE PERSONAL SET NOMBRE=’JOSE PEREZ’ WHERE NOMBRE=’PEPE GOMEZ’; SELECT * FROM PERSONAL WHERE NOMBRE =’JOSE PEREZ’; La instrucción UPDATE actúa sobre todos los valores de la tabla que verifiquen la condición expresada en la instrucción WHERE. En el caso de que la instrucción WHERE no se utilice, la modificación será realizada en todas las filas en la columna designada. Existe la posibilidad de asignar un valor nulo NULL a una columna, siempre y cuando la definición de la tabla permita asignar valores nulos a esa columna. A través de una sola secuencia UPDATE se pueden realizar distintas modificaciones en cada fila. Ejemplo : Realizar un aumento del 10% en el salario y asignar una paga extra de un 15% del salario, a todos los empleados del grupo 40. SELECT * FROM PERSONAL WHERE GRUPO=40; UPDATE PERSONAL SET SALARIO =SALARIO*1.1, EXTRAS=SALARIO*0.15 WHERE GRUPO=40; SELECT * FROM PERSONAL WHERE GRUPO=40;

Page 31: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 31 de 43

Ejemplo : Incrementar el salario en un 15% aquellas personas que no tengan pagas extras.(Funciona en Mysql desde la 4.1) UPDATE PERSONAL SET SALARIO =SALARIO*1.15 WHERE EXTRAS IS NULL También la instrucción UPDATE puede tener unas sintaxis como sigue: UPDATE <tabla> SET <columna> =(SELECT <columna> FROM …) WHERE <condición> Otra de las instrucciones de modificación de datos es la de borrado de datos (DELETE). Para comprobar el uso de las transacciones en la base de datos debemos pasar las tablas al tipo INNODB. Usaremos también un cliente mysql de tipo texto( mysql –h dir –uusuario -pclave). Si queremos usar las transacciones en modo manual en todas debemos usar desde el cliente mysql de tipo texto del siguiente comando: SET AUTOCOMMIT=0; Si por el contrario queremos usarlo sólo en alguna, debemos usar START TRANSACTION . Ejemplo : Borrar de la tabla personal todas las personas cuyo salario sea superior a 601.01 € mensuales. START TRANSACTION; DELETE FROM PERSONAL WHERE SALARIO > 601.01;

ROLLBACK ; Por último existen instrucciones de manipulación de datos que sirven para rechazar o aceptar los cambios, ya que todas las operaciones hechas se modifican en memoria SGA y no se vuelcan

Page 32: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 32 de 43

hasta que se salga de la herramienta o se ejecute una sentencia COMMIT o ROLLBACK . El COMMIT es la operación que acepta todas las operaciones hechas desde el último COMMIT. El ROLLBACK deshace todas las operaciones hechas desde el último COMMIT que se ha consolidado.

19. EJERCICIOS

1. Crear una tabla a partir de la tabla PERSONAL donde no aparezcan las columnas GRUPO y EXTRAS.

2. Actualice el salario en la tabla personal con el 10% de las

extras de cada empleado.

Page 33: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 33 de 43

20. CREACIÓN DE TABLAS

La orden de CREATE TABLE permite la creación y definición

de la estructura de tablas.

Ejemplo : Creación de una tabla, ARTICULO, con seis campos por registro. CREATE TABLE ARTICULO (CODART VARCHAR(6), DENOMINACION VARCHAR(15), PROVEEDOR VARCHAR(15), CODPRO INT(4) NOT NULL, PRECIO INT(4) NOT NULL, PRIMARY KEY(CODART)); Las características de la instrucción CREATE TABLE son las siguientes: La tabla creada por un usuario es particular al usuario. O sea un nombre de tabla es único para uniusuario dado. Lo mismo sucede con el nombre de las columnas de una tabla. Estas son particulares a la tabla. La definición de un dominio con la palabra clave NOT NULL , garantiza, a través del diccionario, la existencia de un valor en las acciones de ACTUALIZACIÓN e INSERCIÓN. Como se puede observar, existe la posibilidad de copiar parte de la tabla. Esta copia afecta a la estructura de la tabla así como los datos que se copian. CREATE TABLE EXTRAS AS SELECT NOMBRE, CAT, SALARIO, ESTRAS FROM PERSONAL WHERE GRUPO=40; SELECT * FROM EXTRAS; A la hora de definir el tipo de los datos, tendremos los siguientes:

Page 34: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 34 de 43

• CHAR(n) o VARCHAR (n) o VARCHAR2 (n) � Permite definir una cadena de caracteres alfanuméricos de una longitud n.

• DECIMAL (n,d) � Define una variable de tipo numérico. EL número total de dígitos es definido por n y el número de decimales que tiene lo define d.

• INT(n) � Define una variable de tipo numérico. EL número total de dígitos es definido por n.

• DATE � Especifica el tipo de dato en formato fecha.

Existen muchos más y dependiendo de la versión aparecen algunos nuevos. Pero, estos son los más básicos y que reflejan los datos más frecuentes que se almacena en la base de datos.

Existen operaciones básicas sobre las tablas, como son la modificación de tipos de datos de una columna de la misma, o el añadir una nueva columna a la tabla. Ejemplo : Agregar a la tabla personal un campo que permita indicar la edad de cada trabajador. ALTER TABLE PERSONAL ADD EDAD NUMBER(2);

Ejemplo : Modificar la longitud de la columna CAT (CATEGORIA) de la tabla DEPT, ampliándola a 15 caracteres. ALTER TABLE PERSONAL MODIFY CAT CHAR(15);

Ejemplo : Eliminar de la tabla personal el campo edad. ALTER TABLE PERSONAL DROP COLUMN EDAD;

Otras operaciones que hay son las de borrar o eliminar la estructura de la tabla. DROP TABLE PERSO1;

Si se realiza el borrado de una tabla con esta sentencia, produce el borrado de los datos así como la eliminación de la estructura sin previo aviso por parte del sistema. El borrado de un atabla solamente lo puede hacer su propietario.

Además no existe la posibilidad de activar ROLLBACK una vez ejecutado un DROP TABLE.

Page 35: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 35 de 43

Otra operación es la de modificar el nombre de una tabla, esta operación se realizaría de la forma siguiente:

RENAME ESTATUS TO TIPOCLIENTE

Este cambio también solo puede ser llevado a cabo por el propietario de la tabla.

21. Vistas ( A partir de la versión mysql 5.0.1 ).

La utilización de vistas permiten añadir a los datos las características de seguridad en los datos.

La vista se puede considerar como una tabla virtual derivada

dela selección de una tabla real de la Base de datos. Y siempre se crea o define a través de selecciones de una o más tablas. Ejemplo : Se dispone de la tabla personal de la que se quiere realizar una vista. En esta vista sólo nos interesa las columna NOMBRE, SALARIO, FECINC, CAT y que cumpla que el salario debe ser mayor de 420.71 €. (No hay funciona en Mysql) Para ver el contenido de la tabla hacemos: SELECT * FROM PERSONAL; Y para crear la vista se hará CREATE VIEW PERSONAL1 AS SELECT NOMBRE, SALARIO, FECINC, CAT FROM PERSONAL WHERE SALARIO >420.71;

SELECT * FROM PERSONAL1 ; Los nombre de las comunas, de la vista, son las misma que los de la tabla original, por defecto. Estas pueden, si se desea, ser diferentes de las columnas primitivas. Esto puede ser necesario, cuando se necesita una vista resultado de la tabla primitiva. EJEMPLO : Crear una vista que resulte de la suma de los salarios de la tabla personal. CREATE VIEW SUMAS (TOTAL_SAL) AS SELECT SUM(SALARIO) FROM PERSONAL;

Page 36: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 36 de 43

SELECT * FROM SUMAS; Para eliminar una vista se debe realizar a través de la siguiente instrucción: DROP VIEW <nombre de vista> EJEMPLO : Eliminación de la vista EXTRAS. DROP VIEW EXTRAS;

22. Ejercícios. � Crear una visión a partir de la tabla PERSONAL eliminando los

campo EXTRAS y GRUPO. � Crear una nueva vista a partir de personal donde estén todos

los empleados con un salario superior a 3.01 €. � Crear una vista a partir de la ya creada anteriormente que

contengan solamente los empleados con salario superior a 420.71 €.

� Borrar, en la ultima visión creada, los empleados que tengan un

ingreso inferior a 601.01 €. No realizar el COMMIT de esta última acción.

� Realizar el ROLLBACK del ejercicio anterior.

� Realizar un incremento salaria del 10% a quellos empleados

que tengan unos ingresos mensuales situados entre 601.01 € y 721.21€. Esto a través de la visión creada anteriormente. Y comprobar si se han realizado la actualizaciones salariales de los datos a traves de la tabla de PERSONAL.

Page 37: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 37 de 43

ANEXO I

Para la realización de ejemplos y ejercicios del manual se han creado una pequeña base, formada por las tablas siguientes:

b. PERSONAL c. ACTIVIDADES d. PROVEEDOR e. ARTICULO f. CLIENTES g. PEDIDOS h. ESTATUS i. ZONAS j. SALARIOS k. SERVICIOS

Las cuales se comienzan a detallar seguidamente: SQL> DESC PERSONAL Nombre ¿Nulo? Tipo ------------------------------- -------- ----- NPER NOT NULL NUMBER(6) NOMBRE VARCHAR2( 20) CAT VARCHAR2( 10) FECINC DATE SALARIO NUMBER(7, 2) EXTRAS NUMBER(7, 2) GRUPO NUMBER(3) SQL> DESC ACTIVIDADES Nombre ¿Nulo? Tipo ------------------------------- -------- ----- CODIGO NOT NULL NUMBER(2) ACTIVIDAD VARCHAR2( 20) SQL> DESC PROVEEDOR Nombre ¿Nulo? Tipo ------------------------------- -------- ----- CODPRO NOT NULL NUMBER(3) NOMBRE VARCHAR2( 15) POBLACION VARCHAR2( 15) ZONA NUMBER(2) MAYOR NUMBER(3) SQL> DESC ARTICULO Nombre ¿Nulo? Tipo ------------------------------- -------- ----- CODART NOT NULL VARCHAR2( 5) ARTICULO VARCHAR2( 20) PROVEEDOR NUMBER(3) PRECIO NUMBER(6, 2)

Page 38: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 38 de 43

SQL> DESC CLIENTES Nombre ¿Nulo? Tipo ------------------------------- -------- ----- CODIGO NOT NULL NUMBER(2) NOMBRE VARCHAR2( 16) POBLACION VARCHAR2( 15) ACTIVITI NUMBER(2) ESTADO NUMBER(2) SQL> DESC PEDIDOS Nombre ¿Nulo? Tipo ------------------------------- -------- ----- CODCLI NUMBER(2) FECHA DATE CODART VARCHAR2( 5) UNIDADES NUMBER(3) NUMPEDIDO NOT NULL NUMBER(2) SQL> DESC ESTATUS Nombre ¿Nulo? Tipo ------------------------------- -------- ----- CODIGO NOT NULL NUMBER(2) DENOMINACION VARCHAR2( 20) SQL> DESC ZONAS Nombre ¿Nulo? Tipo ------------------------------- -------- ----- CODIGO NOT NULL NUMBER(2) ZONA VARCHAR2( 20) SQL> DESC SALARIOS Nombre ¿Nulo? Tipo ------------------------------- -------- ----- NIVEL NOT NULL NUMBER(2) INF NUMBER(7, 2) SUP NUMBER(7, 2) SQL> DESC SERVICIOS Nombre ¿Nulo? Tipo ------------------------------- -------- ----- GRUPO NOT NULL NUMBER(3) NOMBRE VARCHAR2( 15) LOCALIDAD VARCHAR2( 15)

Y el contenido de las tablas seria el siguiente:

SQL> SELECT * FROM PERSONAL; NPER NOMBRE CAT FECINC SALARIO EXTRAS GRUPO --------- -------------------- ---------- -------- --------- --------- --------- 700111 PEDRO MOLINA CHOFER 01/01/87 420.71 10 750123 ANTONIO BREA PORTERO 20/01/87 300.51 12.02 10

Page 39: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 39 de 43

750987 BENITO ORTIZ CAJERO 15/06/79 450.76 20 1 FRANCISCO PEREZ DIRECTOR 20/03/75 1803.04 100 770200 ELEUTERIO ALFARO CONTABLE 08/09/77 721.21 50 200250 MARISOL GONZALES SECRETARIA 25/10/78 480.81 50 200270 JOSEFINA CUESTA SECRETARIA 17/02/79 420.71 50 700540 FERNANDO TAPIAS AGENTE 20/01/80 601.01 120.20 40 700570 JOSE BERMEJO AGENTE 15/07/80 601.01 90.15 40 700610 PABLO OLIAS AGENTE 23/08/81 540.91 120.20 40 700620 EMILIO TORO CHOFER 10/10/81 450.76 60.10 10 770700 JUAN ORTIZ JEFE-ALMAC 24/10/82 721.21 30 700111 PEDRO MACHACA CONTABLE 15/02/83 691.15 50 1770 RAFAEL GUTIERREZ ADMINISTRA 23/04/83 1202.02 50 750800 RAMON ROMERALES CAJERO 25/11/84 420.71 20 15 filas seleccionadas. SQL> SELECT * FROM ACTIVIDADES; CODIGO ACTIVIDAD --------- -------------------- 2 CO SMETICOS Y PERFUME 6 ULTRAMARINOS 8 CARNICERIA 10 PRODUCTOS LACTEOS 12 BRICOLAGE 14 BEBIDAS Y ALCOHOLES 16 CARPINTERIA 18 PINTURA 20 PRET A PORTER 22 MODA INFANTIL 24 ROPA INTERIOR FE M. 26 AUTOMOVIL 28 PAPELERIA 30 LIBRERIA Y PAPELERIA 14 filas seleccionadas. SQL> SELECT * FROM PROVEEDOR; CODPRO NOMBRE POBLACION ZONA MAYOR --------- --------------- --------------- --------- --------- 12 FLOR SALVAJE SA BARCELONA 2 82 14 BRILLANTE S.A. BARC ELONA 2 74 26 LAS ISLAS S.A. LUGO 3 66 28 LA CHAROLESA SA ORENSE 3 58 310 LA LECHERA S.A SANTANDER 4 410 312 EL PUNTERO S.L REINOSA 4 416 414 LA BOTA S.L BILBAO 1 414

Page 40: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 40 de 43

416 FORMON S.A VITORIA 1 312 518 LA BROCHA S.L. BILBAO 1 414 520 ETIQUETA L.T.D CAIN 5 10 622 DIABOLO S.A. TOLOSA 6 520 624 PLAISIR S.A. PAMPLONA 6 10 726 RECAMBIO S.L. LOGROÑO 7 726 728 CUADERNOS S.A HARO 7 830 830 EL TIEMPO S.A. PALMA 8 728 82 SENTEURS S.A IBIZA 8 12 74 LA ABEJA S.A. ZARAGOZA 9 14 66 EL NAVEGANTE SA HUESCA 9 26 58 LA CHULETA S.A LEON 10 28 410 CABARALES S.L. PALENCIA 10 310 20 filas seleccionadas. SQL> SELECT * FROM ARTICULO; CODAR ARTICULO PROVEEDOR PRECIO ----- -------------------- --------- --------- 02COL FLEUR SAUVAGE 12 7.21 02JAB ROGER ET GALET 82 2.40 04DET ARIELES 14 4.51 04LIM LIMPIATODO 74 2.58 06CON ESPARRAGOS NAVARROS 26 2.22 06ESP PIMIENTA 66 0.90 08CAR ENTRECOTE 28 6.61 08EMB CHORIZO IBERICO 58 10.22 10QUE MANCHEGO CURADO 310 7.21 10LEC LECHE DESNATADA 410 0.30 12HER MARTILLO 312 4.33 12TOR PUNTAS MADERA 312 1.80 14REF GASEOSA CASERA 414 0.24 14ALC CAVA CODORNIU 414 3.19 16MAD AGLOMERADO 416 2.58 16UTI FORMON MEDIANO 416 3.07 18BRO BROCHA SINTETICA 518 1.38 18PIN ESMALTE BRILLANTE 518 3.31 20MAS TRAJES ENTRETIEMPO 520 54.09 20FEM CONJUNTOS SPORT 520 54.09 22NTA UNIFORME ESCOLAR 622 48.08 22NIO CONJUNTOS DEPORTIVOS 622 36.06 24ALT SUJETADOR SEDA 624 30.05 24BAJ COMBINACION SINTETIC 624 12.02 26ACE RETROVISOR TM 726 5.23 26MOT CARBURADOR IBIZA 726 57.10 28OFI PAPEL DINA4 728 6.01 28ESC CUADERNOS ESPIRAL 728 6.01 30GPU NOVELAS SERIE NEGRA 830 2.10 30ESP BIOLOGIA GENERAL 830 27.05 30INF COMICS INFANTILES 830 1.20 31 filas seleccionadas. SQL> SELECT * FROM CLIENTES; CODIGO NOMBRE POBLACION ACTIVITI ESTA DO --------- ---------------- --------------- -------- - --------- 1 GERMAN MARTINEZ MADRID 2 1 4 EUGENIO NARRILO PALENCIA 6 4 2 EMILIO OLIAS BURGOS 8 5

Page 41: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 41 de 43

3 FRANCI SCO ROMER VALLADOLID 4 2 5 PABLO CUESTA LEON 2 0 3 6 BENITO CANTARE SORIA 1 4 10 7 VICENTE BERMEJO SEGOVIA 1 2 7 8 SINESIO TORIBIO MADRID 1 8 9 9 JESUS ALFARO BURGOS 16 6 10 TORCUATO PEREZ VALLADOLID 1 0 8 11 ANTONIO CAMACHO PALENCIA 1 2 10 12 JACINTO TORRES LEON 2 0 8 13 FERNANDO ARIAS SORIA 1 8 9 14 ANSELMO LOPEZ SEG OVIA 16 7 15 ANGEL CAMACHO AVILA 1 4 6 16 JUAN PINTO SALAMANCA 1 2 5 17 FRANCISCO RAMOS MADRID 1 0 4 18 MANUEL CASTRO BURGOS 8 3 19 BERNARDO ORTIZ VALLADOLID 6 2 20 VICENTE PEREZO PALENCIA 4 1 21 LUIS MORCILLO LEON 2 10 22 FERNANDO LARIOS SORIA 2 0 8 23 LUIS GUILLEN SEGOVIA 1 6 6 24 RAFAEL MASIA AVILA 12 4 25 LUIS HERENCIA SALAMANCA 8 2 26 MANUEL MENA BARCELONA 4 1 27 RAMON MARAJUDO TARRASA 2 3 28 EMILIO VILLA MADRID 6 5 29 FRANCISCO BREA BARCELONA 1 0 7 30 EUGENIO MOLINA TARRASA 1 4 9 30 filas seleccionadas. SQL> SELECT * FROM PEDIDOS; CODCLI FECHA CODAR UNIDADES NUMPEDIDO --------- -------- ----- --------- --------- 1 01/01/87 02COL 2 1 2 02/01/87 02JAB 9 2 5 05/01/87 04DET 7 3 7 12/01/87 06CON 15 4 9 20/01/87 08CAR 6 5 11 02/02/87 10QUE 4 6 2 05/02/87 12HER 20 7 4 06/02/87 14REF 50 8 6 07/02/87 16MAD 30 9 8 07/02/87 18PIN 25 10 10 07/02/87 20FEM 70 11 1 09/02/8 7 26ACE 55 12 2 09/02/87 28ESC 20 13 4 10/02/87 30ESP 22 14 10 14/03/87 08EMB 13 17 6 10/02/87 18BRO 30 15 8 14/03/87 14ALC 45 16 12 15/03/87 14ALC 8 18 14 15/03/87 20MAS 15 19 16 16/03/87 12HER 21 20 18 17/03/87 06ESP 50 21 20 17/03/87 10LEC 70 22 3 17/03/87 16MAD 60 23 7 18/04/87 28OFI 40 24 9 18/04/87 20MAS 20 25 25 20/04/87 26ACE 10 26 30 20/04/87 08EMB 80 27

Page 42: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 42 de 43

3 21/05/87 02COL 75 28 12 21/05/87 08CAR 65 29 8 25/05/87 14REF 15 30 25 25/05/87 20MAS 25 31 18 26/05/87 20MAS 25 31 14 26/05/87 08CAR 95 33 9 28/05/87 04LIM 100 34 17 28/05/87 16MAD 33 35 21 30/05/87 04LIM 43 36 8 30/05/87 24BAJ 55 37 14 01/06/87 28OFI 25 38 16 01/06/87 12HER 85 39 21 02/06/87 16UTI 10 40 19 02/06/87 06CON 15 41 41 filas seleccionadas. SQL> SELECT * FROM ESTATUS; C ODIGO DENOMINACION --------- -------------------- 1 MOROSO 2 BUEN PAGADOR 3 PAGADOR IRREGULAR 4 B UENO 5 CLIENTE ESPORADICO 6 EXCELENTE 7 MAYORISTA 8 PROBLEMATICO 9 SITUACIO N DIFICIL 10 MUY MAL(CUIDADO) 11 FIEL 11 filas seleccionadas. SQL> SELECT * FROM ZONAS; CODIGO ZONA --------- -------------------- 1 EUSKAL HERRIA 2 CATALUNYA 3 GALICIA 4 CANTABRIA 5 ASTURIAS 6 NAVARRA 7 RIOJA 8 BALEARES 9 ARAGON 10 CASTILLA- LEON 11 MADRID 12 COMU. VALENCIA 13 CASTILLA LA MANCHA 14 EXTREMADURA 15 AL ANDALUS 16 MURCIA 17 CANARIAS 17 filas seleccionadas. SQL> SELECT * FROM SALARIOS;

Page 43: Breve Visión de SQL Revisión 2007

Breve visión de SQL*PLUS

PÁGINA 43 de 43

NIVEL INF SUP --------- --------- --------- 1 180.30 294.50 2 300.51 414.70 3 420.71 534.90 4 540.91 775.31 5 781.32 3005.06 SQL> SELECT * FROM SERVICIOS; GRUPO NOMBRE LOCALIDAD --------- --------------- --------------- 10 MANTEN Y SERV. MADRID 20 CAJA Y CONTA. BURGOS 30 SERVICIOS GEN. ALCORCON 40 SERV. COMERCIAL LEGANES 50 ADMIN. Y CONTA. BARCELONA 100 DIRECCION GEN. LAS ROZAS 6 filas seleccionadas.