Feeds RSS
Feeds RSS

CAPÍTULO 3 : Estructuras del lenguaje

nSENTENCIAS DDL
qCREATE. Crea una base de datos o un objeto.
qALTER. Modifica la estructura de una base de datos o de un objeto.
qDROP. Elimina una base de datos o un objeto.

nSENTENCIAS DML
qSELECT: Recupera información de la base de datos y permite la selección de una o más filas y columnas de una o muchas tablas.
qINSERT: La sentencias INSERT para agregar registros a una tabla.
qUPDATE: Esta sentencia nos permite modificar la información de las tablas.
qDELETE: Las instrucciones DELETE permite eliminar una o más filas de una tabla.



nSENTENCIA de selección – SELECT
         SELECT  
FROM     
[WHERE  ]
[GROUP BY ]
[HAVING ]
[ORDER BY ], columna2 [DESC]…>]

nSUBSELECT
         SELECT  
         FROM        
         WHERE  (= / IN) (SELECT  
                                         FROM 
                                         WHERE  )

nUNION

SELECT  
FROM        
WHERE  <condición>
UNION [ALL]
SELECT   
FROM        
WHERE  


nINSERT



        INSERT INTO  
        VALUES ()



nUPDATE

UPDATE 
SET  = valor1
       [, = valor2 ...]
[WHERE ]

nDELETE



DELETE FROM

[WHERE ]



nCREATE TABLE


CREATE TABLE nombre Tabla
      (nombre_campo1 
Tipo_de_variable  [(tamaño)] [Null/Not Null] [Primay Key] [Check (condición)],  nombre_campo2 Tipo_de_variable  [(tamaño)] [Null/Not Null] [Primay Key],
       [FOREIGN KEY(Clave Secundaria) REFERENCES 
Tabla_Primaria(Clave_Primaria_Tabla_Primaria1, [Clave_Primaria_Tabla_Primaria2)]
       [CONSTRAINT 
pk_NombreRestriccion PRIMARY KEY (clave1, clave2)]
       [CONSTRAINT 
fk_NombreRestriccion FOREIGN KEY (clave secundaria) REFERENCES TablaPrimaria(ClavePrimaria)]
      etc... );






Control Condicional: Sentencia IF



IF – THEN
Ejemplo:
IF condición THEN
            secuencia_de_sentencias
END IF;

IF – THEN – ELSE
IF condición THEN
            secuencia_de_sentencias_1
ELSE
            secuencia_de_sentencias_2
END IF;

 IF – THEN – ELSIF

IF condición_1 THEN
            secuencia_de_sentencias_1
ELSIF condición_2 THEN
            secuencia_de_sentencias_2
ELSE
            secuencia_de_sentencias_3
END IF;


Controles de Iteración: Las sentencias LOOP y EXIT


LOOP

El modo básico (o infinito) de LOOP encierra una serie de acciones entre las palabras clave LOOP y END LOOP, como en el siguiente ejemplo:

LOOP
            secuencia_de_instrucciones
END LOOP;

EXIT

La cláusula EXIT obliga al loop a concluir incondicionalmente. Cuando se encuentra un EXIT en el código, el loop es completado inmediatamente y pasa el control a la próxima sentencia.
LOOP
            IF ranking_credito < 3 THEN
                        …
                        EXIT;   --Termina el loop inmediatamente
            END IF;
END LOOP;

EXIT – WHEN

Esta sentencia permite terminar el loop de manera condicional. Cuando se encuentra un EXIT la condición de la cláusula WHEN es evaluada. Si la condición es verdadera el loop es terminado y el control es pasado a la próxima sentencia.
Ejemplo:
LOOP
            FECTH c1 INTO …
            EXIT WHEN c1%NOTFOUND; -- termina el loop si la condición es verdadera
            …
END LOOP;
CLOSE c1;


WHILE - LOOP

Esta sentencia se asocia a una condición con una secuencia de sentencias encerradas por las palabras clave LOOP y END LOOP, como sigue:

WHILE condición LOOP
   secuencia_de_sentencias
END LOOP;

FOR - LOOP

En las instrucciones anteriores el número de iteraciones es desconocido, mientras no se evalúa la condición del ciclo. Con una instrucción del tipo FOR-LOOP, la iteración se efectúa un número finito (y conocido) de veces. La sintaxis de esta instrucción es la siguiente:
FOR contador IN [REVERSE] valor_minimo..valor_maximo LOOP
   secuencia_de_sentencias
END LOOP;

NULL

La sentencia NULL especifica explícitamente inacción. No hace nada más que pasar el control del programa a la siguiente sentencia. También sirve como un comodín para hacer el código más entendible, advirtiendo que la alternativa señalada no requiere codificación.

Ejemplo:
EXCEPTION
  WHEN zero_divide THEN
            Rollback;
   WHEN value_error THEN
            INSERT INTO errores VALUES…
            Commit;
  WHEN others THEN
            NULL;
END;









EJERCICIOS


1. Insertar los datos en las tablas que se contienen en el archivo de datos.


Descargar





Ejemplos de consultas simples con operadores aritméticos y relacionales.




1. Selecionar los apellidos de los empleados con salario superior a 2000.


2. Seleccionar los nombres de los alumnos que su nota2 es mayor a 5 y su nombre contiene una 'a'.

3. Selecionar todos los empleados (nº empleado,apellido, nºdepartamento) del departamento nº 20 y ademas debe de estar ordenado por el apellido de forma ascendente.

4. Seleccionar los empleados cuyo apellido tenga una A en la 2ª posición.

5. Seleccionar los empleados cuyo nº de departamento no sea ni 20 ni 40.


6. Seleccionar los empleados cuya fecha de alta este entre entre el 08/09/1961 y el 27/02/1982.

7. Seleccionar el apellido de los empleados que trabajen en madrid o barcelona.


8. Seleccionar el apellido y el oficio de todos los empleados del departamento 30 cuyo oficio sea identico al de los empleados del departamento ventas.


9. Obtener el apellido y salario de los empleados con el mismo oficio y el salario de 'JIMÉNEZ'.


10. A partir de la tabla emple, visualizar cuantos apellidos de los empleados empiezan por la letra ‘A’

11. Visualizar el número de oficios diferentes que hay en la tabla emple.

12. A partir de la tabla alumnos , realizar una sentecia select que visualice los apellidos ordenados por su numero de caracteres.

13. Convertir la cadena '01051998' a fecha y visualizar su nombre de mes en mayúsculas.

14. A partir de la tabla emple, obtener el apellido de los empleados que lleven mas de 19 años trabajando.

15. Visualizar el apellido, el salario y el número de departamento de aquellos empleados de la tabla emple cuyo salario supere a la media en su departamento.

16. Obtener de la tabla emple el ultimo dia del mes para cada uno de las fechas de alta.

17. Obtener el nombre del mes a partir de la cadena '01012001'. Antes hay que convertir la cadena a tipo fecha.