martes, 26 de abril de 2011

Agregación

Las funciones de agrupación operan sobre conjuntos de filas para dar un resultado por grupo. Así tenemos para atributos numéricos
  • AVG: da un amedia
  • SUM: suma los valores
  • MIN: calcula el valor mínimo
  • MAX: calcula el valor máximo
Las funciones de agrupación ignoran los valores NULL en las consultas, aunque se puede utilizar NVL (en Oracle) para forzar a que considere a NULL como un valor determinado.

SELECT AVG(NVL(sueldo,0)) FROM empleado
Calcula el sueldo medio de los empleados, considerando 0 los valores que sean NULL

Mediante la cláusula GROUP BY se dividen las filas que devuelve una consulta en pequeños grupos. Cuando lo utilicemos hay que tener en cuenta que todas las columnas que pongamos en el SELECT que no estén en el GROUP BY, han de estar en una función de agrupación.

Así es correcto
SELECT departamento, AVG(sueldo) FROM empleados GROUP BY departamento

Así no es correcto
SELECT departamento, sueldo FROM empleados GROUP BY departamento

Tiene sentido ya que si agrupamos los empleados por departamente ¿el sueldo de cual nos devolvería?
Eso sí, la columna que pongamos en el GROUP BY no ha de estar en el SELECT y podemos utilizar más de una columna. Con GROUP BY no se utiliza WHERE, sino HAVING, que sirve para seleccionar grupos.

SELECT departamento, MAX(sueldo) FROM empleados GROUP BY departamento HAVING MAX(sueldo) > 2000
En este nos selecciona el sueldo máximo agrupado por departamento, siempre y cuando el sueldo sea mayor que 2000

Aritmética

Este tipo de funciones trabajan únicamente con datos númericos del tipo number, y se pueden dividir en tres grupos principales.

Funciones de valores simples

Estas funciones son las más sencillas y trabajan con un único numero, variable o columna de la tabla.



Función Propósito
ABS(n) Nos devuelve el valor absoluto de n
CEIL(n) Nos devuelve el valor entero igual o inmediatamente superior a n
FLOOR(n) Nos devuelve el valor entero igual o inmediatamente inferior a n
MOD(m,n) Nos devuelve el resto de la división de m entre n
POWER(m, exponente) Calcula la potencia de m elevado a exponente
SIGN(valor) Nos devuelve el signo de valor
NVL(valor, expresión) Función que nos sustituye valor por expresión siempre que valor sea NULL
ROUND(número[, m]) Nos redondea numero a m decimales
SQRT(n) Nos devuelve la raíz cuadrada de n
TRUNC(número[,m ]) Trunca los números para que tengan m decimales.

Pasamos a poner algunos ejemplos para que os quede más claro como se utilizan:

Select ceil(2.3) from tabla; (esta consulta nos devolvería 3)

Select mod (11,4) from tabla; ( nos devolvería 3)

Select round(22.38,1) from tabla; (nos devolvería 22.4)

Funciones de grupos de valores

Este tipo de funciones se utilizan principalmente para realizar estadísticas, por lo que los valores nulos no se toman en cuenta.

Dentro de este grupo se encuentran las siguientes funciones:

Función Propósito
AVG(n) Nos devuelve la media de n
COUNT(*|expresión) Nos devuelve el número de veces que aparece expresión.
MAX(expresión) Nos devuelve el valor máximo de expresión
MIN (expresión) Nos devuelve el valor mínimo de expresión
VARIANCE(expresión) Nos devuelve la varianza de expresión
SUM(expresión) Nos devuelve la suma de valores de expresión.

Pasamos a poner algunos ejemplos:

Select avg(salario) from empleado; (nos devolvería el salario medio de todos los empleados)

Select count(*)from empleado; (nos devuelve el numero de empleados que tenemos)

Select min(salario) from empleado; (nos devuelve el menor salario encontrado en la tabla empleado)

sábado, 2 de abril de 2011

Borrar tabla


A veces podemos decidir que necesitamos eliminar una tabla en la base de datos por alguna razón. SQL nos permite hacerlo, ya que podemos utilizar el comando DROP TABLE:
DROP TABLE "nombre_tabla"
Entonces, si deseamos eliminar una tabla denominada cliente que creamos en la sección CREATE TABLE, simplemente ingresamos
DROP TABLE cliente.

Crear Tablas

Para la creación de una tabla usaremos la sintaxis SQL CREATE TABLE:
CREATE TABLE "nombre_tabla"
("columna 1" "tipo_de_datos_para_columna_1",
"columna 2" "tipo_de_datos_para_columna_2",
... )
Entonces, si queremos crear una tabla para el cliente ingresaríamos:
CREATE TABLE cliente
(Nombre char(50),
Apellido char(50),
Direccion char(50),
Ciudad char(50),
Fecha_nacimiento date);

También puede limitar el tipo de información que una tabla puede mantener. Esto se realiza a través de lapalabra clave CONSTRAINT, en cuyas restricciones comunes se incluyen las que se estan usando en fbd:
- NOT NULL: especifica que la columna no puede contener un valor nulo.
- CHECK: especifica una condición que se debe evaluar a "cierto".
- UNIQUE: no permite duplicados; combinado con NOT NULL es la forma de definir una clave alternativa.
- Clave primaria (Primary Key): identifica de manera única a cada fila de la tabla mediante una o varias columas, estas columnas que forman la clave primaria no pueden tener valores nulos.
- Clave externa (Foreign Key): establece una relación entre una(s) columna(s) de la tabla y otra(s) columna(s) de la tabla referenciada, siendo esta última(s) columna(s) la PRIMARY KEY


Si queremos que por ejemplo el nombre sea un campo obligatorio para rellenar, que no puede estar vacío le asignamos NOT NULL, de tal modo que quedaría así:
CREATE TABLE cliente
(Nombre char(50) NOT NULL,
Apellido char(50),
Direccion char(50),
Ciudad char(50),
Fecha_nacimiento date);

También hay que tener en cuenta que toda tabla debe tener una clave primaria para poder identificar de forma única cada línea en la tabla. Una tabla puede tener varias claves primarias, en este caso se denominaría claves compuestas.

Para verlo aplicado vamos a crear una tabla como la anteriormente vista en otros ejemplos, pero en este caso añadiendo el campo DNI como clave primaria:
CREATE TABLE cliente 
(DNI char (9),
 Nombre char(50) NOT NULL,
 Apellido char(50),
 Direccion char(50),
 Ciudad char(50),
 Fecha_nacimiento date, 

   PRIMARY KEY (DNI));

También podemos trabajar con 2 tablas relacionadas, por ejemplo, una tabla tienda y otra tabla vendedor, y para relacionarlas utilizaremos la clave ajena, de tal modo que ambas tablas queden relacionadas. Esto lo que hace es que una clave externa es un campo (o campos) que señala la clave primaria de otra tabla. El propósito de la clave externa es asegurar la integridad referencial de los datos.

Tabla vendedor:
CREATE TABLE vendedor
(DNI char (9),
 Nombre char(50) NOT NULL,
 Apellido char(50),
 Direccion char(50),
 Ciudad char(50),
 Fecha_nacimiento date, 

   PRIMARY KEY (DNI));
Tabla pedido:
CREATE TABLE pedido
(
ID_pedido integer;
 vendedor integer,
 Fecha_pedido date,
 cantidad integer,
 precio double,
   Primary Key (ID_pedido),
   FOREIGN KEY (vendedor) REFERENCES vendedor(DNI));

jueves, 17 de marzo de 2011

Inner Join

Muestra el resultado de la relación entre 2 tablas.

SELECT * FROM table1 t1 INNER JOIN table2 t2 ON t1.col1=t2.col2;



Outer join

Una combinación que incluye filas incluso si no tienen filas relacionadas en la tabla combinada es una combinación externa. Puede crear tres JOIN diferentes externa para especificar las filas no coincidentes que se incluirán:


Left Outer Join

En combinación externa izquierda, todas las filas de la primera tabla con nombre, es decir, "izquierda" del circulo, que parece más a la izquierda en la cláusula JOIN, están incluidos. Filas coincidentes en la tabla de la derecha no aparecen.

SELECT * FROM table1 t1 LEFT OUTER JOIN table2 t2 ON t1.col1=t2.col2



Right Outer Join

En combinación externa derecha, todas las filas de la segunda tabla con nombre, es decir, "derecho" del circulo, que parece más a la derecha en la cláusula JOIN, están incluidos. Filas coincidentes en la tabla de la izquierda no están incluidos.

SELECT * FROM table1 t1 RIGHT OUTER JOIN table2 t2 ON t1.col1=t2.col2


Full Outer Join

En combinación externa completa, todas las filas en todas las tablas combinadas se incluyen, si se hacen coincidir o no.
SELECT * FROM table1 t1 FULL OUTER JOIN table2 t2 ON t1.col1=t2.col2



Ejercicios Resueltos

 Aquí están los ejercicios resueltos de FBD. Conforme vallan poniendo los ejercicios para hacer los iré colgando resueltos.

T02
T03
T04
T05
T06
T07
T08
T09

Enlaces de interés

En este primer enlace habla sobre los fundamentos del modelo relacional, sin entrar mucho en detalle pero que si lo cumplimentamos con los apuntes dados en FBD son bastante aclaratorios, y explicados con una serie de ejemplos para facilitar su entendimiento.

Fundamentos modelo relacional.

Otra página que habla sobre el modelo relacional, pero este entra un poco mas en detalle que el enlace anterior, tratando temas mas teóricos y a su vez, mas aclaratorios.

Modelo relacional

El segundo enlace habla sobre los modelos de datos (E-R,  MR, Paso a tablas), comentando un poco su desarrollo, contenido y como se trabaja con ello, facilitando dicha información con ejemplos.

Modelos de datos.