Está en la página 1de 24

c  

 
  

Son un sistema de reglas propuestas por Edgar F. Codd, del modelo relacional para las
bases de datos, diseñado para definir qué requiere un sistema de administración de
base de datos.

 a á  



    , base de datos y administrador de sistema. Ese
sistema debe utilizar sus facilidades relacionales (exclusivamente) para manejar la base
de datos.

   m
     
  , Toda la información en un RDBMS está
explícitamente representada de una sola manera por valores en una tabla.

 
m
       
  , Cada ítem de datos debe ser lógicamente
accesible al ejecutar una búsqueda que combine el nombre de la tabla, su clave
primaria, y el nombre de la columna.

 0
   
  , La información inaplicable o faltante
puede ser representada a través de valores nulos.

              


    , La descripción de
la base de datos es almacenada de la misma manera que los datos ordinarios, esto es,
en tablas y columnas, y debe ser accesible a los usuarios autorizados.

  m
  
          , Debe haber al menos un
lenguaje que sea integral para soportar la definición de datos, manipulación de datos,
definición de vistas, restricciones de integridad, y control de autorizaciones y
transacciones.

   r       ,Todas las vistas que son teóricamente actualizables,
deben ser actualizables por el sistema mismo.

 -     


 , actualización, y cancelación— La capacidad de manejar
una base de datos con operandos simples aplica no solo para la recuperación o
consulta de datos, sino también para la inserción, actualización y borrado de datos.

          ,El acceso de usuarios a la base de datos a
través de terminales o programas de aplicación, debe permanecer consistente
lógicamente cuando quiera que haya cambios en los datos almacenados, o sean
cambiados los métodos de acceso a los datos.

       — Los programas de aplicación y las actividades


de acceso por terminal deben permanecer lógicamente inalteradas cuando quiera que
se hagan cambios (según los permisos asignados) en las tablas de la base de datos.

        


, Todas las restricciones de integridad deben
ser definibles en los datos, y almacenables en el catálogo, no en el programa de
aplicación.

         


   — El sistema debe poseer un lenguaje de
datos que pueda soportar que la base de datos esté distribuida físicamente en distintos
lugares sin que esto afecte o altere a los programas de aplicación.

 
m
     
 , Si el sistema tiene lenguajes de bajo nivel,
estos lenguajes de ninguna manera pueden ser usados para violar la integridad de las
reglas y restricciones expresadas en un lenguaje de alto nivel (como SQL).

á      !     

La normalización de bases de datos relacionales toma un esquema relacional y le


aplica un conjunto de técnicas para producir un nuevo esquema que representa la
misma información pero contiene menos redundancias y evita posibles anomalías en
las inserciones, actualizaciones y borrados.

Breve recordatorio del modelo (formal) relacional


El modelo relacional de bases de datos se basa en un modelo formal especificado de
acuerdo a la teoría de conjuntos. Una base de datos relacional puede considerarse
como un conjunto de relaciones o tablas de la forma R(A1, ..., An), donde R es el
nombre de la relación, que se define por una serie de atributos Ai.

Sobre las tablas relacionales se pueden definir diferentes restricciones. La integridad de


entidad es una restricción que nos indica que cada entidad representada por una tupla
tiene que ser diferente de las demás en su relación, es decir, debe haber algunos
atributos cuyos valores identifiquen unívocamente las tuplas. La integridad referencial
indica que una clave ajena solo debe contener valores que o bien sean nulos, o bien
existan en la relación referenciada por la clave ajena.
El proceso de normalización
Consiste en comprobar en secuencia si el esquema original está en 1FN, 2FN y 3FN,
analizando las dependencias funcionales en cada paso.

·"  


Tenemos una empresa pública donde los puestos de trabajo están regulados por el
Estado, de modo que las condiciones salariales están determinadas por el puesto. Se
ha creado el siguiente esquema relacional.

EMPLEADOS(ID, nombre, puesto, salario, correos) con ID como clave primaria.

# $!  %& '  


111 Juan Perez Jefe de Area 3000 juanp@ecn.es; jefe2@ecn.es
222 JoseSanchez Administrativo 1500 jsanchez@ecn.es
333 Ana Diaz Administrativo 1500 Adiaz@ecn.es; ana32@gmail.com

%  (    ) *$+


Una tabla está en 1FN si sus atributos contienen valores atómicos. En el ejemplo,
podemos ver que el atributo correos puede contener más de un valor, por lo que viola
1FN.

En general, tenemos una relación R con clave primaria K. Si un atributo M viola la


condición de 1FN, tenemos dos opciones. Solución 1: duplicar los registros con valores
repetidos

En general, esta solución pasa por sustituir R por una nueva relación modificada R', en
la cual:
 El atributo M que violaba 1FN se elimina.
 Se incluye un nuevo atributo M' que solo puede contener valores simples, de
modo que si R'[M'] es uno de los valores que teníamos en R[M], entonces R'[K] =
R[K]. En otras palabras, para una tupla con n valores duplicados en M, en la
nueva relación habrá n tuplas, que sólo varían en que cada una de ellas guarda
uno de los valores que había en M.
 La clave primaria de R' es (K, M'), dado que podrá haber valores de K repetidos,
para los valores multivaluados en M.

Siguiendo el ejemplo, tendríamos el siguiente esquema para la nueva tabla


EMPLEADOS' (a) con clave primaria (ID, correo):

# $!  %& '  


111 Juan Perez Jefe de Area 3000 juanp@ecn.es
111 Juan Perez Jefe de Area 3000 jefe2@ecn.es
222 JoseSanchez Administrativo 1500 jsanchez@ecn.es
333 Ana Diaz Administrativo 1500 adiaz@ecn.es
333 Ana Diaz Administrativo 1500 ana32@gmail.com

Solución 2: separar el atributo que viola 1FN en una tabla

En general, esta solución pasa por:


Sustituir R por una nueva relación modificada R' que no contiene el atributo M.

Crear una nueva relación N(K, M'), es decir, una relación con una clave ajena K
referenciando R', junto al atributo M', que es la variante mono-valuada del atributo M.

La nueva relación N tiene como clave (K, M').

Siguiendo el ejemplo, tendríamos el siguiente esquema para la nueva tabla


EMPLEADOS'(b)

# $!  %& ' 


111 Juan Perez Jefe de Area 3000
222 JoseSanchez Administrativo 1500
333 Ana Diaz Administrativo 1500

Y además tendríamos una nueva tabla CORREOS con clave primaria (ID, correo):

#  
111 juanp@ecn.es
111 jefe2@ecn.es
222 jsanchez@ecn.es
333 adiaz@ecn.es
333 ana32@gmail.com

' & (    )


*$+

Un esquema está en 2FN si:


Está en 1FN.Todos sus atributos que no son de la clave principal tienen dependencia
funcional completa respecto de todas las claves existentes en el esquema. En otras
palabras, para determinar cada atributo no clave se necesita la clave primaria completa,
no vale con una subclave.
La 2FN se aplica a las relaciones que tienen claves primarias compuestas por dos o
más atributos. Si una relación está en 1FN y su clave primaria es simple (tiene un solo
atributo), entonces también está en 2FN. Por tanto, de las soluciones anteriores, la
tabla EMPLEADOS'(b) está en 1FN (y la tabla CORREOS no tiene atributos no clave),
por lo que el esquema está en 2FN. Sin embargo, tenemos que examinar las
dependencias funcionales de los atributos no clave de EMPLEADOS'(a). Las
dependencias funcionales que tenemos son las siguientes:

ID->nombre, salario, correo

Puesto->salario

Como la clave es (ID, correo), las dependencias de nombre, salario y correo son
incompletas, por lo que la relación no está en 2FN.
En general, tendremos que observar los atributos no clave que dependan de parte de la
clave.
Para solucionar este problema, tenemos que hacer lo siguiente para los grupos de
atributos con dependencia incompleta M:
Eliminar de R el atributo M.
Crear una nueva relación N con el atributo M y la parte de la clave primaria K de la que
depende, que llamaremos K'.
La clave primaria de la nueva relación será K'.
Siguiendo el ejemplo anterior, crearíamos una nueva relación con los atributos que
tienen dependencia incompleta:

# $!  %& ' 


111 Juan Perez Jefe de Area 3000
222 JoseSanchez Administrativo 1500
333 Ana Diaz Administrativo 1500

Y al eliminar de la tabla original estos atributos nos quedaría:

#  
111 juanp@ecn.es
111 jefe2@ecn.es
222 jsanchez@ecn.es
333 adiaz@ecn.es
333 ana32@gmail.com
Como vemos, la solución a la que llegamos es la misma que en la otra opción de
solución para el problema de 1FN.

0  (    )*$+

Una relación está en tercera forma normal si, y sólo si:


Está en 2FN y, además, cada atributo que no está incluido en la clave primaria no
depende transitivamente de la clave primaria. Por lo tanto, a partir de un esquema en
2FN, tenemos que buscar dependencias funcionales entre atributos que no estén en la
clave.
En general, tenemos que buscar dependencias transitivas de la clave, es decir,
secuencias de dependencias como la siguiente: K->A y A->B, donde A y B no
pertenecen a la clave. La solución a este tipo de dependencias está en separar en una
tabla adicional N el/los atributos B, y poner como clave primaria de N el atributo que
define la transitividad A.

Siguiendo el ejemplo anterior, podemos detectar la siguiente transitividad:

ID->puesto
puesto->salario

Por lo tanto la descomposición sería la siguiente:

# $!  %&


111 Juan Perez Jefe de Area
222 JoseSanchez Administrativo
333 Ana Diaz Administrativo

En la nueva tabla PUESTOS, la clave sería el puesto, que también queda como clave
ajena referenciando la tabla EMPLEADOS. El resto de las tablas quedan como estaban.


c     

Una base de datos relacional es una base de datos en donde todos los datos visibles al
usuario están organizados estrictamente como tablas de valores, y en donde todas las
operaciones de la base de datos operan sobre estas tablas.

Estas bases de datos son percibidas por los usuarios como una colección de relaciones
normalizadas de diversos grados que varían con el tiempo.
En términos tradicionales una relación se asemeja a un archivo, una tupla a un registro,
y un atributo a un campo. Pero estas correspondencias son aproximadas, en el mejor
de los casos. Una relación no debe considerarse como ``solo un archivo'', sino más bien
como un archivo disciplinado, siendo el resultado de esta disciplina una simplificación
considerable de las estructuras de datos con las cuales debe interactuar el usuario, lo
cual a su vez simplifica los operadores requeridos para manejar esas estructuras.

Características

 Una base de datos relacional se compone de varias tablas o relaciones.


 No pueden existir dos tablas con el mismo nombre ni registro.
 Cada tabla es a su vez un conjunto de registros (filas y columnas).
 La relación entre una tabla padre y un hijo se lleva a cabo por medio de las
claves primarias y ajenas (o foráneas).
 Las claves primarias son la clave principal de un registro dentro de una tabla y
éstas deben cumplir con la integridad de datos.
 Las claves ajenas se colocan en la tabla hija, contienen el mismo valor que la
clave primaria del registro padre; por medio de éstas se hacen las relaciones.

á 
 
Una restricción es una condición que obliga el cumplimiento de ciertas condiciones en
la base de datos. Algunas no son determinadas por los usuarios, sino que son
inherentemente definidas por el simple hecho de que la base de datos sea relacional.
Algunas otras restricciones las puede definir el usuario, por ejemplo, usar un campo con
valores enteros entre 1 y 10.

Las restricciones proveen un método de implementar reglas en la base de datos. Las


restricciones restringen los datos que pueden ser almacenados en las tablas.
Usualmente se definen usando expresiones que dan como resultado un valor booleano,
indicando si los datos satisfacen la restricción o no.

Las restricciones no son parte formal del modelo relacional, pero son incluidas porque
juegan el rol de organizar mejor los datos. Las restricciones son muy discutidas junto
con los conceptos relacionales.


Un dominio describe un conjunto de posibles valores para cierto atributo. Como un
dominio restringe los valores del atributo, puede ser considerado como una restricción.
Matemáticamente, atribuir un dominio a un atributo significa "todos los valores de este
atributo deben de ser elementos del conjunto especificado".

Distintos tipos de dominios son: enteros, cadenas de texto, fecha,no procedurales etc.
 ,- 
Cada tabla puede tener uno o más campos cuyos valores identifican de forma única
cada registro de dicha tabla, es decir, no pueden existir dos o más registros diferentes
cuyos valores en dichos campos sean idénticos. Este conjunto de campos se llama
clave única.

Pueden existir varias claves únicas en una determinada tabla, y a cada una de éstas
suele llamársele candidata a clave primaria.

 ,   
Una clave primaria es una clave única elegida entre todas las candidatas que define
unívocamente a todos los demás atributos de la tabla, para especificar los datos que
serán relacionados con las demás tablas. La forma de hacer esto es por medio de
claves foráneas.

Sólo puede existir una clave primaria por tabla y ningún campo de dicha clave puede
contener valores NULL.

 ,( . 
Una clave foránea es una referencia a una clave en otra tabla. Las claves foráneas no
necesitan ser claves únicas en la tabla donde están y sí a donde están referenciadas.

Por ejemplo, el código de departamento puede ser una clave foránea en la tabla de
empleados, obviamente se permite que haya varios empleados en un mismo
departamento, pero existirá sólo un departamento.

á && 
La base de datos se organiza en dos marcadas secciones; el esquema y los datos (o
instancia).

El esquema es la definición de la estructura de la base de datos y principalmente


almacena los siguientes datos:
 El nombre de cada tabla
 El nombre de cada columna
 El tipo de dato de cada columna
 La tabla a la que pertenece cada columna

G  /   

Un diagrama o modelo entidad-relación (a veces denominado por sus siglas, ár


"Entityrelationship",es una herramienta para el modelado de datos de un sistema de
información. Estos modelos expresan entidades relevantes para un sistema de
información así como sus interrelaciones y propiedades.
 

Son reglas que deben mantener los datos almacenados en la base de datos. No se
deben quebrantar a menos que tenga otra relación de una tabla de uno a muchos.

Dado un conjunto de relaciones binarias y los conjuntos de entidades A y B, la


correspondencia de cardinalidades puede ser:

 · · Una entidad de A se relaciona únicamente con una entidad en B y


viceversa (ejemplo relación vehículo - matrícula: cada vehículo tiene una única
matrícula, y cada matrícula está asociada a un único vehículo).

 · ,  Una entidad en A se relaciona con cero o muchas entidades en B.


Pero una entidad en B se relaciona con una única entidad en A (ejemplo
vendedor - ventas).

 U  · Una entidad en A se relaciona exclusivamente con una entidad en


B. Pero una entidad en B se puede relacionar con 0 o muchas entidades en A
(ejemplo empleado-centro de trabajo).

 U   U  Una entidad en A se puede relacionar con 0 o muchas


entidades en B y viceversa (ejemplo asociaciones- ciudadanos, donde muchos
ciudadanos pueden pertenecer a una misma asociación, y cada ciudadano
puede pertenecer a muchas asociaciones distintas).


   /   

Formalmente, los diagramas ER son un lenguaje gráfico para describir conceptos.


Informalmente, son simples dibujos o gráficos que describen información que trata un
sistema de información y el software que lo automatiza.

á 
Las entidades son el fundamento del modelo entidad relación. Podemos adoptar como
definición de entidad cualquier cosa o parte del mundo que es distinguible del resto. Por
ejemplo, en un sistema bancario, las personas y las cuentas bancarias se podrían
interpretar como entidades. Las entidades pueden representar entes concretos, como
una persona o un avión, o abstractas, como por ejemplo un préstamo o una reserva. Se
representan por medio de un rectángulo.

 

- !&
Se representan mediante un círculo o elipse etiquetado mediante un nombre en su
interior. Cuando un atributo es identificativo de la entidad se suele subrayar dicha
etiqueta.

 

 
Se representa mediante un rombo etiquetado en su interior con un , !. Este rombo
se debe unir mediante líneas con las entidades (rectángulos) que relaciona.

r 

      

El tipo de cardinalidad se representa mediante una etiqueta en el exterior de la relación,


respectivamente: "1:1", "1:N" y "N:M", aunque la notación depende del lenguaje
utilizado, la que más se usa actualmente es el unificado. Otra forma de expresar la
cardinalidad es situando un símbolo cerca de la línea que conecta una entidad con una
relación:

 >> si cada instancia de la entidad no está obligada a participar en la relación.


 > > si toda instancia de la entidad está obligada a participar en la relación y,
además, solamente participa una vez.
 >$>0>G>0 > > si cada instancia de la entidad no está obligada a participar en la
relación y puede hacerlo cualquier número de veces.

Ejemplos de relaciones que expresan cardinalidad:

 Cada esposo (entidad) está casado (relación) con una única esposa (entidad) y
viceversa. Es una relación 1:1.
 Una factura (entidad) se emite (relación) a una persona (entidad) y sólo una,
pero una persona puede tener varias facturas emitidas a su nombre. Todas las
facturas se emiten a nombre de alguien. Es una relación 1:N.
 Un cliente (entidad) puede comprar (relación) varios artículos (entidad) y un
artículo puede ser comprado por varios clientes distintos. Es una relación N:M.
Ejemplo:

 





   


     






 

'1á$c-'á'á-0'

á-0á0-cá.

La sintaxis SQL para á-0á0-cáes

á-0á0-cá>! 2 ! >


)> &  >>22 2 2 & 2 >0
> & 
>>22 2 2 & 2
>0
333+

Entonces, si debemos crear una tabla para el cliente tal como se especifica
anteriormente, ingresaríamos

á-0á0-cá 
)! 4 )+0
 4 )+0
 4 )+0
& 4 )+0
 4 )
+0
*4 2&  +
 

Puede colocar restricciones para limitar el tipo de dato que puede ingresarse en una
tabla. Dichas restricciones pueden especificarse cuando la tabla se crea por primera
vez a través de la instrucción CREATE TABLE, o luego de crear la tabla a través de la
instrucción ALTER TABLE.

Los tipos comunes de restricciones incluyen las siguientes:

- NOT NULL
- UNIQUE
- CHECK
- Clave primaria
- Clave externa

Cada uno se describe en detalle a continuación.

NOT NULL

En forma predeterminada, una columna puede ser NULL. Si no desea permitir un valor
NULL en una columna, querrá colocar una restricción en esta columna especificando
que NULL no es ahora un valor permitido.

Por ejemplo, en la siguiente instrucción,

$0$·

En forma predeterminada, una columna puede ser NULL. Si no desea permitir un valor
NULL en una columna, querrá colocar una restricción en esta columna especificando
que NULL no es ahora un valor permitido.

Por ejemplo, en la siguiente instrucción,

á-0á0-cá 
)$  $0$·0
! , 4 )+$0$·0
 , 4 )++5

Las columnas ³nit´ y ³apellido´ no incluyen NULL, mientras que ³nombre´ puede incluir
NULL.

·$#1·á

La restricción UNIQUE asegura que todos los valores en una columna sean distintos.

Por ejemplo, en la siguiente instrucción,


á-0á0-cá 
)  ·6&0
! , 4 )+0
 , 4 )++5

La columna ³nit´ no puede incluir valores duplicados, mientras dicha restricción no se


aplica para columnas ³apellido´ y ³nombre´.

Por favor note que una columna que se especifica como clave primaria también puede
ser única. Al mismo tiempo, una columna que es única puede o no ser clave primaria.

7á8

La restricción CHECK asegura que todos los valores en una columna cumplan ciertas
condiciones.

Por ejemplo, en la siguiente instrucción,

á-0á0-cá 
)  7á8)'#9+0
 , 4 )+0
! , 4 )++5

La columna ³SID´ sólo debe incluir enteros mayores a 0.

Por favor note que la restricción 7á8no sea ejecutada por MySQL en este
momento.

%#G-:8á:

Las claves primarias pueden especificarse cuando se crea la tabla (utilizando á-0á
0-cá) o cambiando la estructura existente de la tabla (utilizando -0á0-cá).

A continuación se presenta un ejemplo para la especificación de una clave primaria


cuando se crea una tabla:

G'1:
á-0á0-cá 
)$  0
- , 4 )+0
$! , 4 )+0
%#G-:8á:)++5

A continuación se presenta un ejemplo para la especificación de una clave primaria al


modificar una tabla:
-0á0-cá -%#G-:8á:)+5

*á#$;8á:

Por ejemplo, digamos que tenemos dos tablas, una tabla CLIENTE que incluye todos
los datos del CLIENTE, y la tabla ÓRDENES que incluye los pedidos del CLIENTE. La
restricción aquí es que todos los pedidos deben asociarse con un CLIENTE que ya se
encuentra en la tabla CLIENTE. En este caso, colocaremos una clave externa en la
tabla ORDENES y la relacionaremos con la clave primaria de la tabla CLIENTE. De
esta forma, nos aseguramos que todos los pedidos en la tabla ORDENES estén
relacionadas con un CLIENTE en la tabla CLIENTE. En otras palabras, la tabla
ORDENES no puede contener información de un CLIENTEque no se encuentre en la
tabla CLIENTE.

La estructura de estas dos tablas será la siguiente:

Tabla  

nombre de columna característica


NIT Clave Primaria
Apellido
Nombre

Tabla 

nombre de columna característica


orden_ID Clave Primaria
orden_Date
cliente_nit Clave Externa
Cantidad

En el ejemplo anterior, la columna Cliente_nit en la tabla ORDENES es una clave


externa señalando la columna niten la tabla CLIENTE.

A continuación se muestran un ejemplo de cómo especificar la clave externa a la hora


de crear la tabla ORDENES:

á-0á0-cáá'
) 2#  0
 2  0
 2  0
  &! 0
%  8) 2#+0
*  8) 2+ ( #á$0á)++5

Utilizando ALTER TABLE

-0á0-cáá$á' 
-*á#;$8á:) 2+á*áá$á'#á$0á)+5


%0-cá

Entonces, si deseamos eliminar una tabla denominada cliente que creamos en la


sección á-0á0-cá, simplemente ingresamos

%0-cá .


#$'á0#$0

La sintaxis para insertar datos en una tabla mediante una fila por vez es la siguiente:

#$'á0#$0>! 2 ! >)> & >0> &


>0333+
U-·á')>,  >0>, 
>0333+

·%-0á

Una vez que hay datos en la tabla, podríamos tener la necesidad de modificar los
mismos. Para hacerlo, utilizamos el comando UPDATE

La sintaxis para esto es,

·%-0á>! 2 ! >


'á0> & 2 ><=&,,  >
?7áá@ A










á$;·-ááG-$#%·-#B$á-0')'1.+
 $'·0-'

En SQL92 la manipulación de datos se hace básicamente con las sentencias SELECT
(seleccionar), UPDATE (actualizar), DELETE (borrar) e INSERT (insertar) que
constituyen el lenguaje de manipulación de datos básico.

'áá0
Selecciona filas de una o más tablas.

<sentenciaselect>::=

'áá0 [- | #'0#$0 ]<lista de selección>


*G{ {<nombre de tabla> | <nombre de vista> } [<nombre de sinónimo>]},«
[?7áá<condición de búsqueda> ]
[;·%c: {<nombre de columna> | <número de columna>},«]
[7-U#$;<condición de búsqueda>]
[{#$0á'á0 | G#$·' | ·$#$ [-] }<sentencia select>]
[[ác: {{<nombre de columna | <número de columna>} [-' | á'] },« ] |
[*·%-0á*<nombre de columna>,«]]

<lista de selección>::= { | {<expresión> | <nombre de tabla>3<nombre de columna> | <nombre de columna> |


<nombre de tabla>3 CDnombre de vista>3<nombre de columna> |
<nombre de vista>3 | <nombre de sinonimo>3<nombre de columna> |
<nombre de sinonimo>3 }0«}

La palabra clave #'0#$0 indica que si existen filas idénticas, sólo se mostrará una de
ellas.

á" 
SELECT S#
FROM S
WHERE Ciudad=µPARIS¶
AND Situación > 20;

SELECT S.*,P.* /*Selecciona todos los campos de las dos tablas S y P*/
FROM PROVEEDORES, PIEZAS
WHERE PROVEEDORES.CIUDAD= PIEZAS.CIUDAD;

>mostrar de la tabla de piezas el color y la ciudad de todas

SELECT P_CIUDAD, COLOR (DISTINT) FROM PIEZAS ;


>mostrar las piezas rojas y verdes de una ciudad

SELECT COLOR,P_CIUDAD FROM PIEZAS


WHERE COLOR=¶VERDE¶ OR COLOR=¶ROJO¶;

 .&& ;·%c:) &  +

;·%c: {<nombre de columna> | <número de columna>}0«

Esta cláusula especifica las columnas usadas para formar grupos con las filas devueltas
por la sentencia SELECT. Dentro de cada grupo todas las filas tienen el mismo valor en
la o las columnas de GROUP BY.
Si está precedida de la cláusula WHERE el sistema agrupa las filas después de aplicar
la cláusula WHERE.
Todas las columnas de la <lista de selección> de la sentencia SELECT deben ser
funciones de columna (AVG, COUNT, MAX, MIN, SUM) o formar parte de la cláusula
GROUP BY.

Ejemplo
Obtener la cantidad total suministrada de cada pieza

SELECT P#, SUM(CANT)


FROM SP
GROUP BY P# Tabla SP

Resultado: P# SUM(CANT) ½— 


P1 600 ½— 


P2 1000
P3 400 ½— 


P4 500
P5 500 ½— 


P6 100 «
½— 

Obsérvese que en la tabla de suministros SP a lo mejor hay seis filas de P1 coda una
con una cantidad de 100 pero el resultado consiste en agruparlas por el código de la
pieza.

 .&& 7-U#$;)+
7-U#$;<condición de búsqueda>
Se utiliza para indicar que los grupos de filas agrupados por GROUP BY que se
muestran deben cumplir la <condición de búsqueda>. Por lo tanto si se especifica
HAVING en una sentencia SELECT deberá haberse especificado también GROUP BY
o bien todas las columnas de la <lista de selección> de SELECT deben formarse con
funciones de columna. HAVING es a los grupos lo que WHERE es a las filas.

Ejemplo
Obtener los códigos de las piezas que son suministradas por más de un proveedor.

SELECT P#
FROM SP
GROUP BY P#
HAVING COUNT(*) >1;

 .&& ác:)   +

ác: {{<nombre de columna | número de columna>} [-' | á']0« }

Especifica el orden en que una sentencia SELECT devuelve las filas. Las filas se
pueden ordenar por una columna de forma ascendente ASC o descendente DESC. Si
se especifican más de una columna en primer lugar se ordenan según la primera
columna especidicada y dentro de esta la segunda y dentro de la segunda la tercera y
asi sucesivamente.

á" 
Seleccionar los clientes cuya primera ficha de negocio fue 1988 y mostrarlos en orden
ascendente por el código postal:

SELECT Nombre_Cliente, Dirección


FROM CLIENTES
WHERE Primera_fecha =¶1988¶
ORDER BY Código_postal ASC;

'áá0#$0
Crea una tabla lógica de una fila a lo sumo y asigna los valores de las columnas de la
fila a unas variables host especificadas.

'áá0 [- | #'0#$0 ]<lista de selección>


#$0{<variable host>}0«
*G{ {<nombre de tabla> | <nombre de vista> } [<nombre de sinónimo>]},«
[?7áá<condición de búsqueda> ]
[;·%c: {<nombre de columna> | <número de columna>},«]
[7-U#$;<condición de búsqueda>]
NOTAS:
 Esta sentencia se utiliza sólo dentro de un programa de aplicación. La palabra clave
EXEC SQL debe preceder a esta sentencia.
 Si existe más de una fila como resultado de la sentencia entonces segenera un error
 Los tipos de las variables host deben coincidir con los de los campos de las
columnas especificadas en <lista de selección>.

Ejemplo
En un programa C para almacenar el número de precios diferentes de artículos de un
inventario actual en la variable declarada en el programa como intnúmero_precios
escribiríamos:
«
EXEC SQL
SELECT COUNT (DISTINCT COSTE)
INTO: número_precios
FROM INVENTARIO
WHERE CANT >0;
«

·%-0á
Modifica las columnas seleccionadas de una tabla en todas las filas que satisfacen una
condición de búsqueda.

·%-0á {<nombre de tabla> | <nombre de vista>}


'á0 {<nombre de columna> = {<expresión> | $· }}0«
[?7áá<condición de búsqueda>]


á" :
Modifica sólo las piezas cuyo código es P2 actualizando los campos de color, peso y
ciudad.

UPDATE PIEZAS
SET COLOR=µAMBAR¶,
PESO=PESO+5,
CIUDAD=NULL
WHERE P# = µP2¶;

UPDATE PIEZAS SET P_CIUDAD=¶PARIS¶


WHERE P_CODIGO=¶P4¶ OR P_CODIGO=¶P6¶;
áá0á
Borra una o más filas de una tabla o vista. Si no se especifica la cláusula WHERE, se
borran todas las filas de la tabla señalada en la cláusula FROM. Si se especifica la
cláusula WHERE sólo serán borradas aquellas filas que hagan la condición de
búsqueda verdadera.

áá0á*G{ <nombre de tabla> | <nombre de vista>} [<nombre de alias>]


[?7áá<condición de búsqueda>]

á" :
Borrar todas las filas de tabla SP cuya CANT sea mayor que 30.

DELETE
FROM SP
WHERE CANT> 30;

#$'á0
Inserta una o más filas nuevas dentro de la tabla o vista especificada. Cuando se utilice
la cláusula VALUES sólo se insertará una fila. Si se utiliza una <sentencia select> el
número de filas insertadas será igual al devuelto por la <sentencia select>.

#$'á0#$0{<nombre de tabla> | <nombre de vista>}


[){<nombre de columna>}0«+]
{ U-·á'){<literal> | <variable host> | $· },«+ | <sentencia select>}

Ejemplos
Insertar en la tabla de SUMINISTROS una nueva fila.

INSERT
INTO SUMINISTROS(S#, P#, CANT)
VALUES (µS20¶, µP20¶, 1000);

En este ejemplo se insertan unas filas obtenidas de la tabla de SUMINISTROS en una


tabla temporal TEMP.

INSERT
INTO TEMP (P#, CANTTOTAL)
SELECT P#, SUM(CANT)
FROM SUMINISTROS
GROUP BY P#;
*·$#$á'á-;á;-')á·G$-'+
SQL ofrece una serie de funciones que actúan sobre el total de valores en una columna
de alguna tabla y producen un sólo valor como resultado. Estas funciones son la suma
(SUM), la media (AVG), el máximo de un conjunto de valores (MAX), el mínimo (MIN) y
el número de valores de una columna o cuenta (COUNT).
Estas funciones se utilizan en consultas SELECT o en subconsultas. Una subconsulta
es una consulta SELECT dentro de otra SELECT. Porejemplo:

SELECT JNOMBRE
FROM J
WHERE J# IN
(SELECT J#
FROM SPJ Subconsulta
WHERE S#=¶S1¶);

*& -U;)  E +


La sintaxis es:

-U;){[-] <expresión> | #'0#$0<nombre de columna>}+

En una consulta SELECT o una subconsulta esta función crea una columna cuyo valor
es el promedio numérico de los valores de la <expresión> o del <nombre de columna>.
Se puede usar la cláusula GOUP BY para crear el promedio de cada grupo de filas
seleccionadas en las tablas o vistas subyacentes.

Si se especifica la cláusula DISTINCT entonces los valores duplicados en la columna


no se tiene en cuenta a la hora de calcular el promedio. La cláusula ALL si tiene en
cuenta todos los valores, aunque esta es la opción por defecto.

Ejemplos
Obtener el promedio del coste del inventario de artículos sin contar aquellos que no
están en stock.

SELECT AVG(CANTIDAD*COSTE)
FROM INVENTARIO
WHWRE CANTIDAD >0;

Calcular el promedio de la cantidad debida a cualquier vendedor que envió un acuenta


en octubre.
SELECT AVG(CANTDEBIDA)
FROM CUENTASPAGAR
WHER MESFACTURA = 10
AND CANTDEBIDA >0;

*& ·$0)& +

·$0){ | #'0#$0<nombre de columna>}+

En una consulta SELECT o subconsulta esta función crea una columna cuyo valor es
igual al número de filas de la tabla resultado o al número de valores distintos en
<nombre columna>. Se puede utilizar la cláusula GROUP BY para crear una cuenta
por cada grupo de filas.
Si se especifica la cláusula DISTINCT entonces lo valores duplicados se eliminan de la
cuenta.

Ejemplo
Obtener el número de clientes de cada provincia que hicieron negocio en una fecha
posterior a 1985.

SELECT COUNT(*)
FROM CLIENTES
WHERE PRIMERFECHA > 1985
GROUP BY PROVINCIA;

*& G-

G-){[-] <expresion> | #'0#$0<nombre de columna>}+

En una consulta o subconsulta crea una columna cuyo valor es el valor máximo
de<expresión> o <nombre de columna>. Se puede utilizar la cláusula GROPU BY para
obtener el máximo de cada grupo de filas seleccionadas en las tablas o filas
subyacentes

Ejemplos
Calcular la máxima cantidad debida a cualquier vendedor que envió una factura en
Octubre.

SELECT MAX (CANTDEBIDA)


FROM CUENTASPAGAR
WHERE MESFACTURA =10;
Encontrar el artículo del inventario con el máximo coste

SELECT MAX(CANT * COSTE)


FROM INVENTARIO;

*& G#$

G#$){[-] <expresión> | #'0#$0<nombre de columna>}+

Es igual que MAX pero en este caso se calcula el valor mínimo.

Ejemplos

Obtener la mínima cantidad que se le debe a cualquier vendedor que envió una factura
en Octubre.

SELECT MIN (CANTDEBIDA)


FROM CUENTASPAGAR
WHERE MESFACTURA =10;

Encontrar el mínimo coste de cualquier artículo del inventario

SELECT MIN(CANT * COSTE)


FROM INVENTARIO;

*& '·G

'·G){[-] <expresión> | #'0#$0<nombre de columna>}+

En una tabla lógica devuelta por una consulta o subconsulta crea una columna cuyo
valor es la suma numérica de los valores de <expresión> o <nombre de columna>. Se
puede utilizar la cláusula GROUP BY para obtener la suma de cada grupo de filas.

Ejemplos
Obtener la cantidad total debida a todos los vendedores que enviaron una factura en
Octubre.

SELECT SUM(CANTDEBIDA)
FROM CUENTASPAGAR
WHERE MESFACTURA = 10;
Obtener el total del coste del ineventario de artículos

SELECT SUM(CANT * COSTE)


FROM INVENTARIO;


También podría gustarte