martes, 9 de abril de 2019

BASE DE DATOS

 MODELO RELACIONAL

 Introducción: El modelo relacional a finales de los 60. En 1970 publica el documento “A Relational Model of data for Large Shared Data Banks” (“Un modelo relacional de datos para grandes bancos de datos compartidos”). Es uno de los documentos más influyentes de toda la historia de la informática. 

 Objetivo: Codd perseguía estos objetivos con su modelo:

Independencia física: La forma de almacenar los datos, no debe influir en su manipulación lógica. Si la forma de almacenar los datos cambia, los usuarios no tienen siquiera porque percibirlo y seguirán trabajando de la misma forma con la base de datos. Esto permite que los usuarios y usuarias se concentren en qué quieren consultar en la base de datos y no en cómo está realizada la misma.

Independencia lógica: Las aplicaciones que utilizan la base de datos no deben ser modificadas porque se modifiquen elementos de la base de datos. Es decir, añadir, borrar y suprimir datos, no influye en las vistas de los usuarios. De una manera más precisa, gracias a esta independencia el esquema externo de la base de datos es realmente independiente del modelo lógico.

Flexibilidad: La base de datos ofrece fácilmente distintas vistas en función de los usuarios y aplicaciones.

Uniformidad: Las estructuras lógicas siempre tienen una única forma conceptual (las tablas).

Sencillez: Facilidad de manejo (algo cuestionable, pero ciertamente verdadero si comparamos con los sistemas gestores de bases de datos)


Historia del modelo relacional: 

1970: Codd publica las bases del modelo relacional 


1971-72: Primeros desarrollos teóricos

1973-78: Primeros prototipos de base de datos relacional. Son el SYSTEM  R de IBM. En ese sistema se desarrolla Sequel que con el tiempo cambiara su nombre a SQL 

1979: Aparece Oracle, el primer SGBD comercial relacional (ganando en unas semanas al SYSTEM/38 de IBM).
Implementa SQL y se convertirá en el sistema gestor de base de datos relacionales líder del mercado.

1981: Aparece Informix como SGBD relacional para Unix 

1983: Aparece DB2, el sistema gestor de base de datos relacionales de IBM 

1984-1988: ANSI normaliza el SQL (SQL/ANSI). SQL es ya de hecho el lenguaje principal de gestión de base de datos relacionales. 

1990-1999: Manifiesto de Darwen y Date en el que animan a reinterpretar el modelo relacional desde una perspectiva de objetos. Aparece el modelo objeto/relacional, el SGBD abierto PostgreSQL como remodelacion de la antigua Ingres, utilizando de forma nativa de el lenguaje SQL (en lugar de Quel). 

2003-2011: ISO publica el estandar SQL 2003. En el que añade SQL/PSM al estandar, Estar ISO. SQL 2006, 2008, 2011.


RELACIÓN O TABLA 

El elemento fundamental es lo que se conoce como relación, aunque mas habitualmente se le llama tabla (o tambien array o matriz). 

Atributos: Referido a cada propiedad de los datos que se almacenan en la relación (nombre, dni, ...).

Tuplas: Referido a cada elemento de la relación. Por ejemplo si una relación almacenas personas, una tupla representaría a una persona en concreto. 


TUPLA 

Cada una de las filas de la relación. Se corresponde con la idea clásica de registro. Representa por tanto cada elemento individual de esa relación. Tiene que cumplir que:

Cada tupla se debe corresponder con un elemento del mundo real.

No puede haber dos tuplas iguales (con todos los valores iguales)

DOMINIO 

La forma de indicar el contenido de un dominio se puede hacer utilizando dos posibles técnicas:
Intensión: Se define el nomino indicando la definición exacta de sus posibles valores. Por intensión se puede definir el dominio de edades de los trabajadores como: números enteros entre el 16 y el 65 (un trabajador sólo podría tener una edad entre 16 y 65 años).


Extensión: Se indican algunos valores y se sobreentiende el resto gracias a que se autodefinen con los anteriores. Por ejemplo el dominio localidad se podría definir por extensión así: Palencia, Valladolid, Villamuriel de Cerrato,...


GRADO

Indica el de una relación en base al número de columnas (atributos) de la misma. Lógicamente cuanto mayor es el grado de una relación, mayor es su complejidad al manejarla.


CARDINALIDAD 

Número de tuplas de una relación, o número de filas de una tabla.


SINÓNIMOS 

tienen distintos sinónimos según la nomenclatura utilizada. 

Termino 1                          Termino 2                         Termino 3


relación  =                          tabla =                              fichero   

tupla =                                fila =                                 registro

atributo =                            columna =                        campo

grado =                               nº de columnas =              nº de campos

cardinalidad =                    nº de filas =                      nº de registros



DEFINICIÓN FORMAL DE RELACIÓN 

Una relación está formada por estos elementos:

Nombre: Identifica la relación.
Cabecera de relación: Conjunto de todos los pares atributo-domino de la relación: donde n es el grado.


Cuerpo de la relación: Representa el conjunto de n tuplas {t1, t2,... tn} que forman la relación. Cada tupla es un conjunto de n pares atributo-valor, donde Vij es el valor j del dominio Di asociado al atributo Ai.

Esquema de la relación: Se forma con el nombre R y la cabecera.

PROPIEDADES DE LAS TABLAS (O RELACIONALES) 

*Cada tabla tiene un nombre distinto
*Cada atributo de la tabla toma un solo valor en cada tupla
*Cada atributo tiene un nombre distinto en cada tabla (aunque puede coincidiren tablas distintas)
*Cada tupla es única (no hay tuplas duplicadas)
*El orden de los atributos no importa

*El orden de las tuplas no importa

TIPOS DE TABLA 

Persistentes. Sólo pueden ser borradas por los usuarios:
 Bases. Independientes, se crean indicando su estructura y sus ejemplares. Contienen tanto datos como metadatos.


 Vistas. Son tablas que sólo almacenan una definición de consulta, resultado de la cual se produce una tabla cuyos datos proceden de las bases o de otras vistas e instantáneas.

 Instantáneas. Son vistas (creadas de la misma forma) que sí que almacenan los datos que muestra, además de la consulta que dio lugar a esa vista. Sólo modifican su resultado (actualizan los datos) siendo refrescadas por el sistema cada cierto tiempo (con lo que tienen el riesgo de que muestren algunos datos obsoletos.


Temporales. Son tablas que se eliminan automáticamente por el sistema. Pueden ser de cualquiera de los tipos anteriores.

CLAVES 

Clave candidata


Conjunto de atributos que identifican unívocamente cada tupla de la relación. Es decir columnas cuyos valores no se repiten en ninguna otra tupla de esa tabla.

Clave primaria


Clave candidata que se escoge como identificador de las tuplas. Se elige como primaria la candidata que identifique mejor a cada tupla en el contexto de la base de datos.

Clave alternativa


Cualquier clave candidata que no sea primaria.

Clave externa, ajena o secundaria


Son los datos de atributos de una tabla cuyos valores están relacionados con atributos de otra tabla.

NULOS 

Las bases de datos relacionales permiten más posibilidades para el valor nulo (null), aunque su significado no cambia: valor vacío. No obstante en las bases de datos se utiliza para diversos fines.

En claves secundarias indican que el registro actual no está relacionado con ninguno. En otros atributos indica que la tupla en cuestión carece de dicho atributo: por ejemplo en una tabla de personas un valor nulo en el atributo teléfono indicaría que dicha persona no tiene teléfono.

Es importante indicar que el texto vacío ‘ ’, no significa lo mismo en un texto que el nulo; como tampoco el valor cero significa nulo.

RESTRICCIONES 


Inherentes 

Son aquellas que no son determinadas por los usuarios, sino que son definidas por el hecho de que la base de datos sea relacional. Las más importantes son:

*No puede haber dos tuplas iguales
*El orden de las tuplas no es significativo
*El orden de los atributos no es significativo
*Cada atributo sólo puede tomar un valor en el dominio en el que está inscrito 

Semánticas 

Clave principal (primary key)


También llamada clave primaria. Marca uno o más atributos como identificadores de la tabla. De esa forma en esos atributos las filas de la tabla no podrán repetir valores ni tampoco dejarlos vacíos.

Unicidad (unique)


Impide que los valores de los atributos marcados de esa forma, puedan repetirse. Esta restricción debe indicarse en todas las claves alternativas.


Obligatoriedad (not null)


Prohíbe que el atributo marcado de esta forma quede vacío (es decir impide que pueda contener el valor nulo, null).

Integridad referencial (foreign key)


Sirve para indicar una clave externa (también llamada secundaria y foránea) sobre uno o más atributos. Los atributos marcados de esta forma sólo podrán contener valores que estén relacionados con la clave principal de la tabla que relacionan (llamada tabla principal).

Regla de validación (check)


Condición lógica que debe de cumplir un dato concreto para darlo por válido. Por ejemplo restringir el campo sueldo para que siempre sea mayor de 1000, sería una regla de validación. También por ejemplo que la fecha de inicio sea mayor que la fecha final.

Disparadores o triggers


Se trata de pequeños programas grabados en la base de datos que se ejecutan automáticamente cuando se cumple una determinada condición. Sirven para realizar una serie de acciones cuando ocurre un determinado evento (cuando se añade una tupla, cuando se borra un dato, cuando un usuario abre una conexión…)

LAS 12 REGLAS DE CODD 

Estas reglas en la práctica las cumplen pocos sistemas relacionales. Las reglas son:

(1) Información. Toda la información de la base de datos (metadatos) debe estar representada explícitamente en el esquema lógico. Es decir, todos los datos están en las tablas.

(2) Acceso garantizado. Todo dato es accesible sabiendo el valor de su clave y el nombre de la columna o atributo que contiene el dato.

(3) Tratamiento sistemático de los valores nulos. El DBMS debe permitir el tratamiento adecuado de estos valores. De ese modo el valor nulo se utiliza para representar la ausencia de información de un determinado registro en un atributo concreto.

(4) Catálogo en línea basado en el modelo relacional. Los metadatos deben de ser accesibles usando un esquema relacional. Es decir la forma de acceder a los metadatos es la misma que la de acceder a los datos.

(5) Sublenguaje de datos completo. Al menos debe de existir un lenguaje que permita el manejo completo de la base de datos. Este lenguaje, por lo tanto, debe permitir realizar cualquier operación sobre la misma.

(6) Actualización de vistas. El SGBD debe encargarse de que las vistas muestren la última información. No son válidas vistas que muestren datos que no están al día.

(7) Inserciones, modificaciones y eliminaciones de dato nivel. Cualquier operación de modificación debe actuar sobre conjuntos de filas o registros, nunca deben actuar registro a registro.

(8) Independencia física. Los datos deben de ser accesibles desde la lógica de la base de datos, aun cuando se modifique el almacenamiento. La forma de acceder a los datos no varía porque el esquema físico de la base de datos, cambie.

(9) Independencia lógica. Los programas no deben verse afectados por cambios en las tablas. Que las tablas cambien no implica que cambien los programas.


(10) Independencia de integridad. Las reglas de integridad deben almacenarse en la base de datos (en el diccionario de datos), no en los programas de aplicación.

(11) Independencia de la distribución. El sublenguaje de datos debe permitir que sus instrucciones funciones igualmente en una base de datos distribuida que en una que no lo es.


(12) No subversión. Si el SGBD posee un lenguaje procedimental que permita crear bucles de recorrido fila a fila, éste no puede utilizarse para incumplir o evitar las reglas relacionales anteriores. Especialmente la regla 7 no puede ser incumplida por ningún lenguaje del SGBD.

PASO DE ENTIDAD/RELACIÓN DE CHEN AL MODELO RELACIONAL 

Transformación de las entidades fuertes 

En principio las entidades fuertes del modelo Entidad Relación son transformados al modelo relacional siguiendo estas instrucciones:

Entidades. Las entidades pasan a ser tablas

Atributos. Los atributos pasan a ser columnas o atributos de la tabla.

Identificadores principales. Pasan a ser claves primarias


Identificadores candidatos. Pasan a ser claves candidatas.


TRANSFORMACIÓN DE RELACIONES

Relaciones varios a varios

En las relaciones varios a varios (n a n en la cardinalidad mayor, la cardinalidad menor no cuenta para esta situación), la relación se transforma en una tabla cuyos atributos son: los atributos de la relación y las claves de las entidades relacionadas (que pasarán a ser claves externas). 

Relaciones de orden n


Las relaciones ternarias, cuaternarias y n-arias que unen más de dos relaciones se transforman en una tabla que contiene los atributos de la relación más los identificadores de las entidades relacionadas.

Relaciones uno a varios


Las relaciones binarios de tipo uno a varios no requieren ser transformadas en una tabla en el modelo relacional. En su lugar la tabla del lado varios (tabla relacionada) incluye como clave externa1 el identificador de la entidad del lado uno (tabla principal).

Relaciones uno a uno

*Colocar la clave de una de las entidades como clave externa de la otra tabla (da igual cuál), teniendo en cuenta que dicha clave será clave alternativa además de ser clave secundaria.


*Generar una única tabla con todos los atributos de ambas entidades colocando como clave principal cualquiera de las claves de las dos entidades. La otra clave será marcada como clave alternativa.

Relaciones cero a uno

Se trata de relaciones entre dos entidades con cardinalidad máxima de 1 en ambas direcciones, pero en una de ellas la cardinalidad mínima es 0. En este caso la solución difiere respecto a la anterior solución.

Relaciones cero a cero


En el caso de que en ambos extremos nos encontremos con relaciones 0 a 1, entonces la solución es la misma, pero la clave que se copia en la tabla para ser clave secundaria, debe de ser tomada de la entidad que se relacione más con la otra (la que esté más cerca de tener la cardinalidad 1 a 1 en el otro extremo).

Relaciones recursivas


Las relaciones recursivas se tratan de la misma forma que las otras, sólo que hay que imaginar que la tabla se divide en dos, una por cada rol. Teniendo en cuenta eso, la solución es idéntica a lo ya resuelto en los casos anteriores.

ENTIDADES DÉBILES

Toda entidad débil incorpora una relación implícita con una entidad fuerte. Esta relación no necesita incorporarse como tabla en el modelo relacional (al tratarse de una relación n a 1), bastará con añadir como atributo y clave foránea en la entidad débil, el identificador de la entidad fuerte.


RELACIONES ISA 

(1) Tanto las superentidades como las subentidades generarán tablas en el modelo relacional (en el caso de que la ISA sea de tipo total, se podría incluso no hacer la superentidad y pasar todos sus atributos a las subentidades, pero no es recomendable porque puede complicar enormemente el esquema interno).

(2) Los atributos se colocan en la tabla a la que se refiere a la entidad correspondiente


(3) En el caso de que las subentidades no hereden el identificador con la superentidad, se colocará en las subentidades el identificador de la superentidad como clave secundaria, además será clave alternativa.

(4) Si la ISA es exclusiva o no, no cambia el esquema relacional, pero sí habrá que tenerlo en cuenta para las restricciones futuras en el esquema interno (casi siempre se realizan mediante triggers), ya que en las exclusivas no puede haber repetición de la clave de la superentidad en ninguna subentidad.


(5) No varía el resultado por ser total o parcial la relación ISA, el modelo relacional no puede marcar esa posibilidad.

NOTAS FINALES 

El modelo conceptual entidad/relación es el verdadero mapa de la base de datos. Hay aspectos que no se reflejan al instante, por ejemplo el hecho de si la cardinalidad mínima es 0 o uno, o la obligatoriedad en una relación,.... Especial cuidado hay que tener con las relaciones ISA. Son aspectos a tener en cuenta en el siguiente modelo (en el interno) al crear por ejemplo índices y restricciones.


MOTORES DE BASE DE DATOS 

Representación de esquemas de bases de datos relacionales 

Ya ha se ha comentado como son los esquemas de datos relacionales. La manera formal es:

PIEZA(Tipo, Modelo, Nombre, Apellido1, Apellido2)
EMPRESA(CIF, Cod_Empresa, Nombre, Dirección)

SUMINISTROS(Tipo,Modelo, Cod_Empresa, Precio)
EXISTENCIAS(Tipo, Modelo, N_Almacen, Cantidad)

En ese tipo de esquemas es difícil ver las relaciones en los datos, algo que sí se ve muy bien en los esquemas entidad relación.


Grafos relacionales 

Es un esquema relacional en el que hay líneas que enlazan las claves principales con las claves secundarias para representar mejor las relaciones.

Ejemplo: 



ESQUEMAS RELACIONALES DERIVADOS DEL MODELO ENTIDAD/RELACIÓN

Hay quien los llama esquemas entidad/relación relacionales, pero en general se consideran variantes del modelo entidad/relación. 

Modelo de patas de gallo

Quizá el modelo más famoso sea el llamado modelo de pata de gallo (crow’s foot en inglés) utilizado en la metodología Information Engineering (Ingeniería de la Información) que tiene bastante popularidad; de hecho es el tipo de notación habitual en la mayoría de herramientas CASE.



Estilo Access

Se ha hecho muy popular la forma de presentar esquemas relacionales del programa Microsoft Access.

Ejemplo:




Completando esquemas


Sin duda los esquemas más completos son los que reflejan no sólo las cardinalidades sino también todas las restricciones (e incluso los tipos de datos, aunque esto ya es una competencia del esquema interno).

SIMBOLO            EJEMPLO               SIGNIFICADO 

Subrayado             DNI                         Clave principal 

Subrayado             Clave 2                    Clave alternativa
discontinuo 

°                            Nombre°                   No admite valores nulos                                                                     (restricción NOT NULL) 

°                            Nombre°                   No admite duplicados                                                                         (restricción UNIQUE)


PROBLEMAS DEL ESQUEMA RELACIONAL

Una vez obtenido el esquema relacional resultante del esquema entidad/relación que representa la base de datos, normalmente tendremos una buena base de datos.

Redundancia. Se llama así a los datos que se repiten continua e innecesariamente por las tablas de las bases de datos. Cuando es excesiva es evidente que el diseño hay que revisarlo, es el primer síntoma de problemas y se detecta fácilmente.


Ambigüedades. Datos que no clarifican suficientemente el registro al que representan. Los datos de cada registro podrían referirse a más de un registro o incluso puede ser imposible saber a qué ejemplar exactamente se están refiriendo. 

Pérdida de restricciones de integridad. Normalmente debido a dependencias funcionales. Más adelante se explica este problema. Se arreglan fácilmente siguiendo una serie de pasos concretos.


Anomalías en operaciones de modificación de datos. El hecho de que al insertar un solo elemento haya que repetir tuplas en una tabla para variar unos pocos datos.


FORMAS NORMALES 

Las formas normales se corresponde a una teoría de normalización iniciada por el propio Codd y continuada por otros autores (entre los que destacan Boyce y Fagin). Codd definió en 1970 la primera forma normal, desde ese momento aparecieron la segunda, tercera, la Boyce-Codd, la cuarta y la quinta forma normal.

La teoría de formas normales es una teoría absolutamente matemática, pero en el presente manual se describen de forma más intuitiva.

PRIMERA FORMA NORMAL (1FN) 

Es una forma normal inherente al esquema relacional. Es decir toda tabla realmente relacional la cumple.

Se dice que una tabla se encuentra en primera forma normal si impide que un atributo de una tupla pueda tomar más de un valor.




DEPENDENCIAS FUNCIONALES 

Dependencia funcional


Se dice que un conjunto de atributos (Y) depende funcionalmente de otro conjunto de atributos (X) si para cada valor de X hay un único valor posible para Y. Simbólicamente se denota por X-Y.

Por ejemplo el nombre de una persona depende funcionalmente del DNI; es decir para un DNI concreto sólo hay un nombre posible. En la tabla del ejemplo anterior, el departamento no tiene dependencia funcional, ya que para un mismo DNI puede haber más de un departamento posible. 

Dependencia funcional completa


Un conjunto de atributos (Y) tiene una dependencia funcional completa sobre otro conjunto de atributos (X) si Y tiene dependencia funcional de X y además no se puede obtener de X un conjunto de atributos más pequeño que consiga una dependencia funcional de Y (es decir, no hay en X un determinante formado por atributos más pequeños).

Dependencia funcional elemental


Se produce cuando X e Y forman una dependencia funcional completa y además Y es un único atributo.

Dependencia funcional transitiva


Es más compleja de explicar, pero tiene también utilidad. Se produce cuando tenemos tres conjuntos de atributos X, Y y Z. Y depende funcionalmente de X (X-Y), Z depende funcionalmente de Y (Y-Z). Además X no depende funcionalmente de Y (Y-X). Entonces ocurre que X produce una dependencia funcional transitiva sobre Z.

SEGUNDA FORMA NORMAL (2FN) 

Ocurre si una tabla está en primera forma normal y además cada atributo que no sea clave, depende de forma funcional completa respecto de cualquiera de las claves. Toda la clave principal debe hacer dependientes al resto de atributos, si hay atributos que depende sólo de parte de la clave, entonces esa parte de la clave y esos atributos formarán otra tabla.





TERCERA FORMA NORMAL (3FN) 

Ocurre cuando una tabla está en 2FN y además ningún atributo que no sea clave depende transitivamente de las claves de la tabla. Es decir no ocurre cuando algún atributo depende funcionalmente de atributos que no son clave.

Ejemplo:




FORMAL NORMAL DE BOYCE-CODD 
(FNBC o BCFN)

Ocurre si una tabla está en tercera forma normal y además todo determinante es una clave candidata. Ejemplo:




La cuestión es que un tutor o tutora puede trabajar en varias materias. En dichas materias hay varios responsables, pero cada tutor sólo tiene asignado uno. El detalle importante que no se ha tenido en cuenta, es que el o la responsable sólo puede ser responsable de una materia.


CUARTA FORMA NORMAL (4FN) DEPENDENCIAS MULTIVALUADAS 

Dependencia multivaluada

Para el resto de formas normales (las diseñadas por Fagin, mucho más complejas), es importante definir este tipo de dependencia, que es distinta de las funcionales. Si las funcionales eran la base de la segunda y tercera forma normal (y de la de Boyce-Codd), éstas son la base de la cuarta forma normal.
 
Una dependencia multivaluada de X sobre Y (es decir X->>Y), siendo X e Y atributos de la misma tabla, ocurre cuando Y tiene un conjunto de valores bien definidos sobre cualquier valor de X. Es decir, dado X sabremos los posibles valores que puede tomar Y.




Cuarta forma normal


Ocurre esta forma normal cuando una tabla está en forma normal de Boyce Codd y toda dependencia multivaluada no trivial es una dependencia funcional. Son triviales aquellas dependencias multivaluadas en las que el conjunto formado por el determinante y el implicado no forman la clave primaria de la tabla y además el implicado no forma parte del determinante: es decir si X->>Y y además Y - X y X,Y no es la clave de la tabla, tenemos una dependencia multivaluada no trivial (como ocurre en el ejemplo anterior).

QUINTA FORMA NORMAL (5FN) 

Dependencias de JOIN o de reunión


Una proyección de una tabla es la tabla resultante de tomar un subconjunto de los atributos de una tabla (se trata de la operación proyección, 2, del álgebra relacional). Es decir una tabla formada por unas cuantas columnas de la tabla original.

Quinta forma normal o forma normal de proyección-unión


Ocurre cuando una tabla está en 4FN y cada dependencia de unión (JOIN) en ella es implicada por las claves candidatas.

Es la más compleja y polémica de todas. Polémica pues no está claro en muchas ocasiones está muy claro que el paso a 5FN mejore la base de datos. Fue definida también por Fagin.

FORMA NORMAL DE DOMINIO CLAVE (FNDC)

En este caso no se basó en dependencias entre los datos, sino que se basó en restricciones de dominio y restricciones de clave.

Restricciones de dominio. Se trata de la restricción que hace que un determinado atributo obtenga sólo ciertos valores, los que estén de acuerdo a la definición de un determinado dominio.

Restricción de clave. Es la restricción que permite que un atributo o un conjunto de atributos forme una clave candidata.


MOTORES DE BASE DE DATOS 2

SQL

SQL (por sus siglas en inglés Structured Query Language; en español lenguaje de consulta estructurada) es un lenguaje específico del dominio utilizado en programación, diseñado para administrar, y recuperar información de sistemas de gestión de bases de datos relacionales​. Una de sus principales características es el manejo del álgebra y el cálculo relacional para efectuar consultas con el fin de recuperar, de forma sencilla, información de bases de datos, así como realizar cambios en ellas. 

DDL

Permite crear y modificar la estructura de una base de datos
  • CREATE: Utilizado para crear nuevas tablas, campos e índices.
  • ALTER: Utilizado para modificar las tablas agregando campos o cambiando la definición de los campos.
  • DROP: Empleado para eliminar tablas e índices.
  • TRUNCATE: Empleado para eliminar todos los registros de una tabla.
  • COMMENT: Utilizado para agregar comentarios al diccionario de datos.
  • RENAME: Tal como su nombre lo indica es utilizado para renombrar objetos.
DML 

Permite recuperar, almacenar, modificar, eliminar, insertar y actualizar datos de una base de datos.
  • SELECT: Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado.
  • INSERT: Utilizado para cargar de datos en la base de datos en una única operación.
  • UPDATE: Utilizado para modificar los valores de los campos y registros especificados
  • DELETE: Utilizado para eliminar registros de una tabla de una base de datos.

VERSIÓN DE SQL 

Aunque estos apuntes sirven como guía de uso de SQL estándar, la base de datos que se utiliza como referencia fundamental es la base de datos Oracle. Normalmente se indican siempre las instrucciones para Oracle y para el SQL estándar. En las partes donde no se indique explícitamente diferencia, significará que Oracle coincide con el estándar.


Sin embargo hay que avisar que todos los ejemplos han sido probados para Oracle, mientras que no se puede decir lo mismo para SQL estándar. En el caso de SQL estándar, el software PostgreSQL se ha tenido muy en cuenta ya que parece el más respetuoso actualmente con el estándar.

FORMATO DE LAS INSTRUCCIONES EN LOS APUNTES 


En este manual en muchos apartados se indica sintaxis de comandos. Esta sintaxis sirve para aprender a utilizar el comando, e indica la forma de escribir dicho comando en el programa utilizado para escribir SQL.

SELECT * | {[DISTINCT] columna | expresión [alias], ...} 
FROM tabla;

Otras veces se describen códigos de ejemplo de un comando. Los ejemplos se escriben también con fondo naranja claro, pero sin el reborde. Ejemplo:

SELECT columna FROM tabla;

El texto columna hay que cambiarlo por un nombre concreto de columna (nombre, apellidos,...), al igual que tabla se refiere a un nombre de tabla concreto.

texto en negrita. Sirve para indicar texto o símbolos que hay que escribir de forma literal, pero que no son palabras reservadas del lenguaje.

[ ] (corchetes). Los corchetes sirven para encerrar texto que no es obligatorio en el comando, es decir para indicar una parte opcional.


| (barra vertical). Este símbolo (|), la barra vertical, indica opción. Las palabras separadas con este signo indican que se debe elegir una de entre todas las palabras.



HISTORIA DEL LENGUAJE SQL 

El nacimiento del lenguaje SQL data de 1970 cuando E. F. Codd publica su libro: "Un modelo de datos relacional para grandes bancos de datos compartidos". Ese libro dictaría las direcrices de las bases de datos relacionales. Apenas dos años después IBM (para quien trabajaba Codd) utiliza las directrices de Codd para crear el Standard English Query Language (Lenguaje Estándar Inglés para Consultas) al que se le llamó SEQUEL. Más adelante se le asignaron las siglas SQL (Standard Query Language, lenguaje estándar de consulta) aunque en inglés se siguen pronunciando secuel. En español se pronuncia esecuele.

En 1979 Oracle presenta la primera implementación comercial del lenguaje. Poco después se convertía en un estándar en el mundo de las bases de datos avalado por los organismos ISO y ANSI. En el año 1986 se toma como lenguaje estándar por ANSI de los SGBD relacionales. Un año después lo adopta ISO, lo que convierte a SQL en estándar mundial como lenguaje de bases de datos relacionales.

FUNCIONAMIENTO 

componentes de un entorno de ejecución SQL

Según la normativa ANSI/ISO cuando se ejecuta SQL, existen los siguientes elementos a tener en cuenta en todo el entorno involucrado en la ejecución de instrucciones SQL:

° Un cliente SQL. Software conectado al agente que funciona como interfaz entre el agente SQL y el servidor SQL. Sirve para establecer conexiones entre sí mismo y el servidor SQL.


° Un servidor SQL (puede haber varios). El software encargado de manejar los datos a los que la instrucción SQL lanzada por el agente hace referencia. Es el software que realmente realiza la instrucción, los datos los devuelve al cliente.

posibles agentes SQL. posibles modos de ejecución SQL

ejecución directa. SQL interactivo


Las instrucciones SQL se introducen a través de un cliente que está directamente conectado al servidor SQL; por lo que las instrucciones se traducen sin intermediarios y los resultados se muestran en el cliente.

Ejecución incrustada o embebida

Las instrucciones SQL se colocan como parte del código de otro lenguaje que se considera anfitrión (C, Java, Pascal, Visual Basic,...). Al compilar el código se utiliza un precompilador de la propia base de datos para traducir el SQL y conectar la aplicación resultado con la base de datos a través de un software adaptador (driver) como JDBC u ODBC por ejemplo.

Ejecución a través de clientes gráficos


Se trata de software que permite conectar a la base de datos a través de un cliente. El software permite manejar de forma gráfica la base de datos y las acciones realizadas son traducidas a SQL y enviadas al servidor. 

Ejecución dinámica

Se trata de SQL incrustado en módulos especiales que pueden ser invocados una y otra vez desde distintas aplicaciones.


PROCESO DE LAS INSTRUCCIONES SQL

El proceso de una instrucción SQL es el siguiente:

(1) Se analiza la instrucción. Para comprobar la sintaxis de la misma

(2) Si es correcta se valora si los metadatos de la misma son correctos. Se comprueba esto en el diccionario de datos.

(3) Si es correcta, se optimiza, a fin de consumir los mínimos recursos posibles.


(4) Se ejecuta la sentencia y se muestra el resultado al emisor de la misma.

ELEMENTOS DEL LENGUAJE SQL 

CODIGO SQL 

Comandos. Las distintas instrucciones que se pueden realizar desde SQL
 SELECT. Se trata del comando que permite realizar consultas sobre los datos de la base de datos. Obtiene datos de la base de datos. A ésta parte del lenguaje se la conoce como DQL (Data Query Language, Lenguaje de consulta de datos); pero es parte del DML del lenguaje.
 DML. Data Manipulation Language (Lenguaje de manipulación de datos). Modifica filas (registros) de la base de datos. Lo forman las instrucciones INSERT, UPDATE, MERGE y DELETE.
 DDL. Data Definition Language (Lenguaje de definición de datos). Permiten modificar la estructura de las tablas de la base de datos. Lo forman las instrucciones CREATE, ALTER, DROP, RENAME y TRUNCATE.
 DCL. Data Control Language (Lenguaje de control de datos). Administran los derechos y restricciones de los usuarios. Lo forman las instrucciones GRANT y REVOKE.
 Instrucciones de control de transacciones (DTL). Administran las modificaciones creadas por las instrucciones DML. Lo forman las instrucciones ROLLBACK y COMMIT. Se las considera parte del DML.

NORMAS DE ESCRITURA 

*En SQL no se distingue entre mayúsculas y minúsculas.
*Las instrucciones finalizan con el signo de punto y coma
*Cualquier comando SQL (SELECT, INSERT,...) puede ser partidos por espacios o saltos de línea antes de finalizar la instrucción
*Se pueden tabular líneas para facilitar la lectura si fuera necesario
*Los comentarios en el código SQL comienzan por /* y terminan por */ (excepto en algunos SGBD)

DDL 

El DDL es la parte del lenguaje SQL que realiza la función de definición de datos del SGBD. Fundamentalmente se encarga de la creación, modificación y eliminación de los objetos de la base de datos (es decir de los metadatos). Por supuesto es el encargado de la creación de las tablas.
Cada usuario de una base de datos posee un esquema. El esquema suele tener el mismo nombre que el usuario y sirve para almacenar los objetos de esquema, es decir los objetos que posee el usuario.


CREACIÓN DE BASE DE DATOS 

Esta es una tarea administrativa que se comentará más profundamente en otros temas. Por ahora sólo se comenta de forma simple. Crear la base de datos implica indicar los archivos y ubicaciones que se utilizarán para la misma, además de otras indicaciones técnicas y administrativas que no se comentarán en este tema.
Lógicamente sólo es posible crear una base de datos si se tienen privilegios DBA (DataBase Administrator) (SYSDBA en el caso de Oracle).
El comando SQL de creación de una base de datos es CREATE DATABASE. Este comando crea una base de datos con el nombre que se indique.



OBJETOS DE BASE DE DATOS 

Según los estándares actuales, una base de datos es un conjunto de objetos pensados para gestionar datos. Estos objetos están contenidos en esquemas, los esquemas suelen estar asociados al perfil de un usuario en particular.
En el estándar SQL existe el concepto de catálogo que sirve para almacenar esquemas. Así el nombre completo de un objeto vendría dado por: catálogo.esquema.objeto

Si no se indica el catálogo se toma el catálogo por defecto. Si no se indica el esquema se entiende que el objeto está en el esquema actual. En Oracle, cuando se crea un usuario, se crea un esquema cuyo nombre es el del usuario.

CREACION DE TABLAS 

Deben cumplir las siguientes reglas (reglas de Oracle, en otros SGBD podrían cambiar):

*Deben comenzar con una letra

*No deben tener más de 30 caracteres

*Sólo se permiten utilizar letras del alfabeto (inglés), números o el signo de subrayado (también el signo $ y #, pero esos se utilizan de manera especial por lo que no son recomendados)

*No puede haber dos tablas con el mismo nombre para el mismo esquema (pueden coincidir los nombres si están en distintos esquemas)

*No puede coincidir con el nombre de una palabra reservada SQL (por ejemplo no se puede llamar SELECT a una tabla)

TIPOS DE DATOS 

A la hora de crear tablas, hay que indicar el tipo de datos de cada campo. Necesitamos pues conocer los distintos tipos de datos. Estos son: 

DESCRIPCIÓN     TIPOS DE ESTANDAR SQL     ORACLE SQL

Texto de anchura     CHARACTER(n)                       CHAR(N) 
fija                           CHAR(n)


Texto de anchura    CHARACTER VARYING (N)   VARCHAR                                                                                              2(N)
variable                   VARCHAR (N)


Texto de anchura 
fija para caracteres  NATIONAL CHARACTER(n)  NCHAR(N)
 nacionales


DOMINIOS 

En Oracle se echa de menos una instrucción que forma parte del estándar SQL y que permite crear dominios. Sin embargo en SQL estándar sí hay esa posibilidad y de hecho es muy interesante. Se trata de 
CREATE DOMAIN: CREATE DOMAIN name [AS] data_type [ DEFAULT expression ] [ restricciones [ ... ] ]

CONSULTAR LAS TABLAS DEL USUARIO 

Todas las bases de datos disponen de posibilidades para consultar el diccionario de datos. Siguiendo las reglas de Codd, la forma de consultar los metadatos es la misma que en el resto de tablas. Es decir existen tablas (en realidad vistas) que en lugar de contener datos, contienen los metadatos. En el caso de SQL estándar, el diccionario de datos es accesible mediante el esquema de información (INFORMATION_SCHEMA), un esquema especial que contiene el conjunto de vistas con el que se pueden consultar los metadatos de la base de datos. En concreto la vista INFORMATION_SCHEMA.TABLES obtiene una vista de las tablas creadas. Es decir:

 SELECT * FROM INFORMATION_SCHEMA.TABLES

BORRAR TABLAS 

La orden DROP TABLE seguida del nombre de una tabla, permite eliminar la tabla en cuestión.
Al borrar una tabla:

*Desaparecen todos los datos

*Cualquier vista y sinónimo referente a la tabla seguirá existiendo, pero ya no funcionará (conviene eliminarlos)

*Las transacciones pendientes son aceptadas (COMMIT), en aquellas bases de datos que tengan la posibilidad de utilizar transacciones.


*Lógicamente, sólo se pueden eliminar las tablas sobre las que tenemos permiso de borrado.
                 
MODIFICAR TABLAS 

De forma estándar (SQL estándar) se hace:
 ALTER TABLE nombreViejo RENAME TO nombreNuevo;

En Oracle se realiza mediante la orden RENAME (que permite el cambio de nombre de cualquier objeto). Sintaxis: RENAME nombreViejo TO nombreNuevo;

Borrar contenido de tablas


Oracle dispone de una orden no estándar para eliminar definitivamente los datos de una tabla; es la orden TRUNCATE TABLE seguida del nombre de la tabla a borrar. Hace que se elimine el contenido de la tabla, pero no la estructura de la tabla en sí. Incluso borra del archivo de datos el espacio ocupado por la tabla.

RESTRICCIONES 

Una restricción es una condición de obligado cumplimiento para una o más columnas de la tabla. A cada restricción se le pone un nombre, en el caso de no poner un nombre (algo poco recomendable) entonces el propio Oracle le coloca el nombre que es un mnemotécnico con el nombre de tabla, columna y tipo de restricción.
Su sintaxis general es:

 {CREATE TABLE nombreTabla | ALTER TABLE nombreTabla {ADD | MODIFY}} (campo tipoDeDatos [propiedades] [[CONSTRAINT nombreRestricción ]] tipoRestricción (columnas) [,siguienteCampo…] [,CONSTRAINT nombreRestricción tipoRestricción (columnas) ...)


Las restricciones tienen un nombre, se puede hacer que sea la base de datos la que les ponga nombre, pero entonces sería críptico. Por eso es mejor ponerle un nombre nosotros para que sea más fácil de recordar.

COMMIT 


Consolidar, confirmar​ o hacer un commit se refiere, en el contexto de la ciencia de la computación y la gestión de datos, a la idea de confirmar un conjunto de cambios provisionales de forma permanente. Un uso popular es al final de una transacción de base de datos.
Una sentencia COMMIT en SQL finaliza una transacción de base de datos dentro de un sistema gestor de base de datos relacional (RDBMS) y hace visibles todos los cambios a otros usuarios. El formato general es emitir una sentencia BEGIN WORK o BEGIN TRANSACTION (o la que sea para el lenguaje SQL en cuestión), una o más sentencias SQL, y entonces la sentencia COMMIT.​

ROLLBACK 

En SQLROLLBACK es un comando que causa que todos los cambios de datos desde la última sentencia BEGIN WORK, o STAR TRANSACTION sean descartados por el sistema de gestión de base de datos relacional (RDBMS), para que el estado de los datos sea revertida a la forma en que estaba antes de que aquellos cambios tuvieran lugar.
Una sentencia ROLLBACK también publicará cualquier punto de recuperación existente que pudiera estar en uso.

ESTADO DE LOS DATOS DURANTE LA TRANSACCIÓN 

Si se inicia una transacción usando comandos DML hay que tener en cuenta que:
*Se puede volver a la instrucción anterior a la transacción cuando se desee
*Las instrucciones de consulta SELECT realizadas por el usuario que inició la transacción muestran los datos ya modificados por las instrucciones DML
*El resto de usuarios ven los datos tal cual estaban antes de la transacción, de hecho los registros afectados por la transacción aparecen bloqueados hasta que la transacción finalice. Esos usuarios no podrán modificar los valores de dichos registros.
*Tras la transacción todos los usuarios ven los datos tal cual quedan tras el fin de transacción. Los bloqueos son liberados y los puntos de ruptura borrados.

INSTRUCCIONES DDL 

Los índices son objetos que forman parte del esquema que hacen que las bases de datos aceleren las operaciones de consulta y ordenación sobre los campos a los que el índice hace referencia.

Se almacenan aparte de la tabla a la que hace referencia, lo que permite crearles y borrarles en cualquier momento.

Lo que realizan es una lista ordenada por la que Oracle puede acceder para facilitar la búsqueda de los datos. cada vez que se añade un nuevo registro, los índices involucrados se actualizan a fin de que su información esté al día. De ahí que cuantos más índices haya, más le cuesta a Oracle añadir registros, pero más rápidas se realizan las instrucciones de consulta.

SECUENCIAS 

Una secuencia sirve para generar automáticamente números distintos. Se utilizan para generar valores para campos que se utilizan como clave forzada (claves cuyo valor no interesa, sólo sirven para identificar los registros de una tabla). Es decir se utilizan en los identificadores de las tablas (campos que comienzan con la palabra id), siempre y cuando no importe qué número se asigna a cada fila.

Es una rutina interna de la base de datos la que realiza la función de generar un número distinto cada vez. Las secuencias se almacenan independientemente de la tabla, por lo que la misma secuencia se puede utilizar para diversas tablas.

SINÓNIMOS 

En Oracle, un sinónimo es un nombre que se asigna a un objeto cualquiera. Normalmente es un nombre menos descriptivo que el original a fin de facilitar la escritura del nombre del objeto en diversas expresiones.

creación

Sintaxis: CREATE [PUBLIC] SYNONYM nombre FOR objeto;
objeto es el objeto al que se referirá el sinónimo. La cláusula PUBLIC hace que el sinónimo esté disponible para cualquier usuario (sólo se permite utilizar si disponemos de privilegios administrativos).

borrado 

DROP SYNONYM nombre

CONSULTAS 

Consultas de datos con SQL, DQL

DQL es la abreviatura del Data Query Language (lenguaje de consulta de datos) de SQL. El único comando que pertenece a este lenguaje es el versátil comando SELECT 
Este comando permite:

*Obtener datos de ciertas columnas de una tabla (proyección)

*Obtener registros (filas) de una tabla de acuerdo con ciertos criterios (selección)

*Mezclar datos de tablas diferentes (asociación, join)

*Realizar cálculos sobre los datos

*Agrupar datos

SINTAXIS SENCILLA DEL COMANDO SELECT

SELECT * | {[DISTINCT] columna | expresión [[AS] alias], ...} FROM tabla;

Donde:

*El asterisco significa que se seleccionan todas las columnas

*DISTINCT. Hace que no se muestren los valores duplicados.

*COLUMNA. Es el nombre de una columna de la tabla que se desea mostrar

*EXPRESION. Una expresión válida SQL

*ALIAS. Es un nombre que se le da a la cabecera de la columna en el resultado de esta instrucción.

CÁLCULOS 

Aritméticos 

Los operadores + (suma), - (resta), * (multiplicación) y / (división), se pueden utilizar para hacer cálculos en las consultas. Cuando se utilizan como expresión en una consulta SELECT, no modifican los datos originales sino que como resultado de la vista generada por SELECT, aparece un nueva columna. Ejemplo:

 SELECT nombre, precio,precio*1.16 FROM articulos;

Esa consulta obtiene tres columnas. La tercera tendrá como nombre la expresión utilizada, para poner un alias basta utilizar dicho alias tras la expresión: 

SELECT nombre, precio, precio*1.16 AS precio_con_iva FROM articulos;

CONCATENACIÓN DE TEXTOS 

Todas las bases de datos incluyen algún operador para encadenar textos. En SQLSERVER es el signo + en Oracle son los signos ||. Ejemplo (Oracle):

 SELECT tipo, modelo, tipo || '-' || modelo "Clave Pieza" FROM piezas;

CONDICIONES 

Se pueden realizar consultas que restrinjan los datos de salida de las tablas. Para ello se utiliza la cláusula WHERE. Esta cláusula permite colocar una condición que han de cumplir todos los registros, los que no la cumplan no aparecen en el resultado.

Ejemplo: SELECT Tipo, Modelo FROM Pieza WHERE Precio>3;


OPERADORES DE COMPARACIÓN 

OPERADOR                                   SIGNIFICADO

>                                                      mayor que

<                                                      menor que 

>=                                                    mayor o igual que 

<=                                                    menor o igual que 

=                                                      igual 

<>                                                    distinto 

!=                                                     distinto 


VALORES LÓGICOS 

OPERADOR                                SIGNIFICADO 

AND                                             Devuelve verdadero si las                                                                    expresiones a su izquierda 
                                                      y derecha son ambas verdades 

OR                                                Devuelve verdadero si cualquiera
                                                      de las dos expresiones a izquierda
                                                      y derecha del OR, son verdaderas

NOT                                              Invierte la lógica de la expresión 
                                                      que esta a su derecha.

BETWEEN 

El operador BETWEEN nos permite obtener datos que se encuentren en un rango. Uso: 

SELECT tipo,modelo,precio FROM piezas WHERE precio BETWEEN 3 AND 8;

Saca piezas cuyos precios estén entre 3 y 8 (ambos incluidos).

IN

Permite obtener registros cuyos valores estén en una lista de valores: 

SELECT tipo,modelo,precio FROM piezas WHERE precio IN (3,5, 8);

Obtiene piezas cuyos precios sean 3, 5 u 8 (no valen ni el precio 4 ni el 6, por ejemplo).

LIKE 

Se usa sobre todo con textos, permite obtener registros cuyo valor en un campo cumpla una condición textual. LIKE utiliza una cadena que puede contener estos símbolos:

SÍMBOLO                                  SIGNIFICADO 
%                                                 Una serie cualquiera de carecteres

_                                                  Un carácter cualquiera 


IS NULL 

Devuelve verdadero si el valor que examina es nulo: 

SELECT nombre,apellidos FROM personas WHERE telefono IS NULL

Esa instrucción selecciona a la gente que no tiene teléfono. Se puede usar la expresión IS NOT NULL que devuelve verdadero en el caso contrario, cuando la expresión no es nula.

PRECEDENCIA DE OPERADORAS 

A veces las expresiones que se producen en los SELECT son muy extensas y es difícil saber que parte de la expresión se evalúa primero, por ello se indica la siguiente tabla de precedencia (tomada de Oracle):

ORDEN DE LA PRECEDENCIA                  OPERADOR 

1                                                           *(Multiplicar) / (dividir)

2                                                           + (Suma) - (Resta)

3                                                           || (Concatenación)

4                                                           Comparaciones (>, <, !=, ...)

5                                                 IS [NOT] NULL, [NOT ]LIKE, IN

6                                                          NOT

7                                                          AND

8                                                          OR


DISEÑO DE BASE DE DATOS

El orden inicial de los registros obtenidos por un SELECT no guarda más que 
una relación respecto al orden en el que fueron introducidos.

ORDER BY
 En esa cláusula se coloca una lista de campos que indica la forma de ordenar. Se ordena primero por el primer campo de la lista, si hay coincidencias por el segundo, si ahí también las hay por el tercero, y así sucesivamente. Se puede colocar las palabras ASC O DESC (por defecto se toma ASC). Esas palabras significan en ascendente (de la A a la Z, de los números pequeños a los grandes) o en descendente (de la Z a la a, de los números grandes a los pequeños) respectivamente.

FUNCIONES

Todos los SGBD implementan funciones para facilitar la creación de consultas complejas. Esas funciones dependen del SGBD que utilicemos.
Todas las funciones devuelven un resultado que procede de un determinado cálculo. La mayoría de funciones precisan que se les envíe datos de entrada (parámetros o argumentos) que son necesarios para realizar el cálculo de la función. Este resultado, lógicamente depende de los parámetros enviados. Dichos parámetros se pasan entre paréntesis. De tal manera que la forma de invocar a una función es:
              nombreFunción[(parámetro1[, parámetro2,...])]


FUNCIONES NUMÉRICAS



ROUND(n,decimales): Redondea el número al siguiente número con el número de decimales indicado más cercano. ROUND(8.239,2) devuelve 8.24  

TRUNC(n,decimales): Los decimales del número se cortan para que sólo aparezca el número de decimales indicado




MATEMATICOS:


MOD(n1,n2) Devuelve el resto resultado de dividir n1 entre 

POWER(valor,exponente) Eleva el valor al exponente indicado 

SQRT(n) Calcula la raíz cuadrada de n

SIGN(n) Devuelve 1 si n es positivo, cero si vale cero y -1 si es negativo 

ABS(n) Calcula el valor absoluto de n 

EXP(n) Calcula e n , es decir el exponente en base e del número n 

LN(n) Logaritmo neperiano de n 

LOG(n) Logaritmo en base 10 de n

SIN(n) Calcula el seno de n (n tiene que estar en radianes)

COS(n) Calcula el coseno de n (n tiene que estar en radianes) 

TAN(n) Calcula la tangente de n (n tiene que estar en radianes)

ACOS(n) Devuelve en radianes el arco coseno de n 

ASIN(n) Devuelve en radianes el arco seno de n 

ATAN(n) Devuelve en radianes el arco tangente de n 

SINH(n) Devuelve el seno hiperbólico de n 

COSH(n) Devuelve el coseno hiperbólico de n 

TANH(n) Devuelve la tangente hiperbólica de n


FUNCIONES DE TRABAJO CON NULOS

NVL(valor,sustituto): Si el valor es NULL, devuelve el valor sustituto; de otro modo, devuelve valor

NVL2(valor,sustituto1, sustituto2): Variante de la anterior, devuelve el valor sustituto1 si valor no es nulo. Si valor es nulo devuelve el sustituto2

COALESCE(listaExpresiones): Devuelve la primera de las expresiones que no es nula.


NULLIF(valor1,valor2): Devuelve nulo si valor1 es igual a valor2. De otro modo devuelve valor1



FUNCIONES DE FECHA Y MANEJO DE FECHA E INTERVALOS

Las fechas se utilizan muchísimo en todas las bases de datos. Oracle proporciona dos tipos de datos para manejar fechas, los tipos DATE y TIMESTAMP.


INTERVALOS
Los intervalos son datos relacionados con las fechas en sí, pero que no son fechas. Hay dos tipos de intervalos el INTERVAL DAY TO SECOND que sirve para representar días, horas, minutos y segundos; y el INTERVAL YEAR TO MONTH que representa años y meses. 




SUBCONSULTAS EN LA INSTRUCCION UPDATE


 La instrucción UPDATE permite modificar filas. Es muy habitual el uso de la cláusula WHERE para indicar las filas que se modificarán. Esta cláusula se puede utilizar con las mismas posibilidades que en el caso del SELECT, por lo que es posible utilizar subconsultas. Por ejemplo: 

UPDATE empleados
SET sueldo=sueldo*1.10
WHERE id_seccion =(SELECT id_seccion FROM secciones 
WHERE nom_seccion='Producción');


Esta instrucción coloca a todos los empleados de la sección 23 el mismo puesto de trabajo que el empleado número 12. Este tipo de actualizaciones sólo son válidas si el subselect devuelve un único valor, que además debe de ser compatible con la columna que se actualiza. 

SUBCONSULTAS EN LA INSTRUCCION DELETE


Al igual que en el caso de las instrucciones INSERT o SELECT, DELETE dispone de cláusula WHERE y en dicha cláusulas podemos utilizar subconsultas. Por ejemplo: 

DELETE empleados 
WHERE id_empleado IN 
(SELECT id_empleado FROM errores_graves);



VISTA


Una vista no es más que una consulta almacenada a fin de utilizarla tantas veces como se desee. Una vista no contiene datos sino la instrucción SELECT necesaria para crear la vista, eso asegura que los datos sean coherentes al utilizar los datos almacenados en las tablas. Por todo ello, las vistas gastan muy poco espacio de disco.
Las vistas se emplean para:



*Realizar consultas complejas más fácilmente, ya que permiten dividir la

Consulta en varias partes

Proporcionar tablas con datos completos

Utiliz1ar visiones especiales de los datos

Ser utilizadas como tablas que resumen todos los datos

*Ser utilizadas como cursores de datos en los lenguajes procedimentales (como

PL/SQL)


CREACION DE VISTA



*OR REPLACE. Si la vista ya existía, la cambia por la actual }

*FORCE. Crea la vista aunque los datos de la consulta SELECT no existan 

*vista. Nombre que se le da a la vista 

*alias. Lista de alias que se establecen para las columnas devueltas por la  consulta SELECT en la que se basa esta vista. El número de alias debe coincidir con el número de columnas devueltas por SELECT. 

*WITH CHECK OPTION. Hace que sólo las filas que se muestran en la vista puedan ser añadidas (INSERT) o modificadas (UPDATE). La restricción que sigue a esta sección es el nombre que se le da a esta restricción de tipo CHECK OPTION. 

*WITH READ ONLY. Hace que la vista sea de sólo lectura. Permite grabar un nombre para esta restricción creada la vista, se le pueden hacer consultas como si se tratara de una tabla normal. Incluso se puede utilizar el comando DESCRIBE sobre la vista para mostrar la estructura de los campos que forman la vista o utilizarse como subconsulta en los comando UPDATE o DELET



MOSTRAR LA LISTA DE VISTA


La vista del diccionario de datos de Oracle USER_VIEWS permite mostrar una lista de todas las vistas que posee el usuario actual. Es decir, para saber qué vistas hay disponibles se usa: 

SELECT * FROM USER_VIEWS



BORRAR VISTA


Se utiliza el comando DROP VIEW:
DROP VIEW nombreDeVista;