Trabajo Practico Trabajo Practico Nº 1 Trabajo Practico Nº 2 Volver

Trabajo Practico de SQL

En esta sección se muestras ejercicios resueltos y para resolver de diferentes formas para que pueda aprender a manejar las sentencias básicas de SQL.

Como se aprecia a su izquierda se encuentran dos botones que son los accesos a los trabajos prácticos propuestas para  que practique la sintaxis de todo el modulo de SQL desarrollado en este material.

Cualquier consulta o inquietud puede preguntarle al profesor de la cátedra para ser evacuada pero recuerde que en lo posible trate de resolver las consultas utilizando todos los recursos disponibles para que al aprendizaje sea mas significativo para ud.

Le recomiendo que utilice el access para crear la base de datos y sus tablas para luego efectuar las consultas en SQL que Ud. podrá visualizar si son correctas o no.

 

Ejemplos resueltos

Consultas

Consultas de selección

Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta en forma de conjunto de registros. Este conjunto de registros es modificable.

Básicas

La sintaxis básica de una consulta de selección es:

# SELECT Campos FROM Tabla;
# SELECT Nombre, Telefono FROM Clientes;

 

Ordenar los registros

Se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la clausula ORDER BY:

 

# SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BY Nombre;

 

Se pueden ordenar los registros por mas de un campo:

# SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BY CodigoPostal, Nombre;

 

Y se puede especificar el orden de los registros: ascendente mediante la claúsula (ASC -se toma este valor por defecto) ó descendente (DESC):

 

# SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BY CodigoPostal DESC , Nombre ASC;

 

Consultas con predicado

  1. ALL Si no se incluye ninguno de los predicados se asume ALL. El Motor de base de datos selecciona todos los registros que cumplen las condiciones de la instrucción SQL:

    # SELECT ALL FROM Empleados;
    # SELECT * FROM Empleados;

 

  1. TOP Devuelve un cierto número de registros que entran entre al principio o al final de un rango especificado por una cláusula ORDER BY. Supongamos que queremos recuperar los nombres de los 25 primeros estudiantes del curso 1994:

# SELECT TOP 25 Nombre, Apellido
        FROM Estudiantes
        ORDER BY Nota DESC;

Si no se incluye la cláusula ORDER BY, la consulta devolverá un conjunto arbitrario de 25 registros de la tabla Estudiantes .El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si la nota media número 25 y la 26 son iguales, la consulta devolverá 26 registros. Se puede utilizar la palabra reservada PERCENT para devolver un cierto porcentaje de registros que caen al principio o al final de un rango especificado por la cláusula ORDER BY. Supongamos que en lugar de los 25 primeros estudiantes deseamos el 10 por ciento del curso::

        # SELECT TOP 10 PERCENT Nombre, Apellido
           FROM Estudiantes
          ORDER BY Nota DESC;

 

  1. DISTINCT Omite los registros que contienen datos duplicados en los campos seleccionados. Para que los valores de cada campo listado en la instrucción SELECT se incluyan en la consulta deben ser únicos:

# SELECT DISTINCT Apellido FROM Empleados;

 

  1. DISTINCTROW Devuelve los registros diferentes de una tabla; a diferencia del predicado anterior que sólo se fijaba en el contenido de los campos seleccionados, éste lo hace en el contenido del registro completo independientemente de los campo indicados en la cláusula SELECT:

  2. # SELECT DISTINCTROW Apellido FROM Empleados;

Criterio de Selección

 

Operadores Lógicos

Los operadores lógicos soportados por SQL son:

AND, OR, XOR, Eqv, Imp, Is y Not.

A excepción de los dos últimos todos poseen la siguiente sintaxis:

<expresión1> operador <expresión2>

 

En donde expresión1 y expresión2 son las condiciones a evaluar, el resultado de la operación varía en función del operador lógico:

 

# SELECT * FROM Empleados WHERE Edad > 25 AND Edad < 50;
# SELECT * FROM Empleados WHERE (Edad > 25 AND Edad < 50) OR Sueldo = 100;
# SELECT * FROM Empleados WHERE NOT Estado = 'Soltero';
# SELECT * FROM Empleados WHERE (Sueldo > 100 AND Sueldo < 500) OR (Provincia = 'Madrid' AND Estado = 'Casado');

 

Operador BETWEEN

Para indicar que deseamos recuperar los registros según el intervalo de valores de un campo emplearemos el operador Between:

 

# SELECT * FROM Pedidos WHERE CodPostal Between 28000 And 28999;
(Devuelve los pedidos realizados en la provincia de Madrid)

# SELECT IIf(CodPostal Between 28000 And 28999, 'Provincial', 'Nacional') FROM Editores;
(Devuelve el valor 'Provincial' si el código postal se encuentra en el intervalo,'Nacional' en caso contrario)

 

Operador LIKE

Se utiliza para comparar una expresión de cadena con un modelo en una expresión SQL. Su sintaxis es:

expresión LIKE modelo

 

Operador IN

 

Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno de los indicados en una lista. Su sintaxis es:

expresión [Not] In(valor1, valor2, . . .)

# SELECT * FROM Pedidos WHERE Provincia In ('Madrid', 'Barcelona', 'Sevilla');

 

Clausula WHERE

La cláusula WHERE puede usarse para determinar qué registros de las tablas enumeradas en la cláusula FROM aparecerán en los resultados de la instrucción SELECT. WHERE es opcional, pero cuando aparece debe ir a continuación de FROM:

# SELECT Apellidos, Salario FROM Empleados
WHERE Salario > 21000;
# SELECT Id_Producto, Existencias FROM Productos
WHERE Existencias <= Nuevo_Pedido;

Agrupamiento de registros (Agregación)

 

AVG

 

Calcula la media aritmética de un conjunto de valores contenidos en un campo especificado de una consulta:

Avg(expr)

 

La función Avg no incluye ningún campo Null en el cálculo. Un ejemplo del funcionamiento de AVG:

# SELECT Avg(Gastos) AS Promedio FROM
Pedidos WHERE Gastos > 100;

 

MAX, MIN

 

Devuelven el mínimo o el máximo de un conjunto de valores contenidos en un campo especifico de una consulta. Su sintaxis es:

Min(expr)
Max(expr
)

 

Un ejemplo de su uso:

# SELECT Min(Gastos) AS ElMin FROM Pedidos
WHERE Pais = 'Costa Rica';
# SELECT Max(Gastos) AS ElMax FROM Pedidos
WHERE Pais = 'Costa Rica';

 

SUM

 

Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Su sintaxis es:

Sum(expr)

 

Por ejemplo:

# SELECT Sum(PrecioUnidad * Cantidad)
AS Total FROM DetallePedido;

 

GROUP BY

 

Combina los registros con valores idénticos, en la lista de campos especificados, en un único registro:

# SELECT campos FROM tabla WHERE criterio
GROUP BY campos del grupo

 

Todos los campos de la lista de campos de SELECT deben o bien incluirse en la cláusula GROUP BY o como argumentos de una función SQL agregada:

# SELECT Id_Familia, Sum(Stock)
FROM Productos GROUP BY Id_Familia;

 

HAVING es similar a WHERE, determina qué registros se seleccionan. Una vez que los registros se han agrupado utilizando GROUP BY, HAVING determina cuales de ellos se van a mostrar.

# SELECT Id_Familia Sum(Stock) FROM Productos GROUP BY Id_Familia HAVING Sum(Stock) > 100 AND NombreProducto Like BOS*;

Manejo de varias tablas

Partiendo de la definición de las siguientes tablas:

  1. Tabla clientes

+------+--------+----------+
| cid  | nombre | telefono |
+------+--------+----------+
|    1 | jose   | 111      |
|    2 | maria  | 222      |
|    3 | manuel | 333      |
|    4 | jesus  | 4444     |
+------+--------+----------+

 

  1. Tabla Acciones

+-----+-----+--------+----------+
| aid | cid | accion | cantidad |
+-----+-----+--------+----------+
|   1 |   2 | REDHAT |      10  |
|   2 |   4 | NOVELL |      20  |
|   3 |   4 | SUN    |      30  |
|   4 |   5 | FORD   |     100  |
+-----+-----+--------+----------+

Consultas mediante JOIN

 

JOIN

 

La sentencia SQL JOIN se utiliza para relacionar varias tablas. Nos permitirá obtener un listado de los campos que tienen coincidencias en ambas tablas:

# select nombre, telefono, accion, cantidad from clientes join acciones on clientes.cid=acciones.cid;

 

resultando:

+--------+----------+--------+----------+
| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+
| maria  | 222      | REDHAT |       10 |
| jesus  | 4444     | NOVELL |       20 |
| jesus  | 4444     | SUN    |       30 |
+--------+----------+--------+----------+

 

LEFT JOIN

 

La sentencia LEFT JOIN nos dará el resultado anterior mas los campos de la tabla de la izquierda del JOIN que no tienen coincidencias en la tabla de la derecha:

# select nombre, telefono, accion, cantidad from clientes left join acciones on clientes.cid=acciones.cid;

 

con resultado:

+--------+----------+--------+----------+
| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+
| jose   | 111      | NULL   |     NULL |
| maria  | 222      | REDHAT |       10 |
| manuel | 333      | NULL   |     NULL |
| jesus  | 4444     | NOVELL |       20 |
| jesus  | 4444     | SUN    |       30 |
+--------+----------+--------+----------+

 

RIGHT JOIN

Identico funcionamiento que en el caso anterior pero con la tabla que se incluye en la consulta a la derecha del JOIN:

# select nombre, telefono, accion, cantidad from clientes right join acciones on clientes.cid=acciones.cid;

 

cuyo resultado será:

+--------+----------+--------+----------+
| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+
| maria  | 222      | REDHAT |       10 |
| jesus  | 4444     | NOVELL |       20 |
| jesus  | 4444     | SUN    |       30 |
| NULL   | NULL     | FORD   |      100 |
+--------+----------+--------+----------+

 

UNION y UNION ALL

 

Podemos combinar el resultado de varias sentencias con UNION o UNION ALL. UNION no nos muestra los resultados duplicados, pero UNION ALL si los muestra:

# select nombre, telefono, accion, cantidad from clientes left join acciones on clientes.cid=acciones.cid where accion is null union select nombre, telefono, accion, cantidad from clientes right join acciones on clientes.cid=acciones.cid where nombre is null;

 

que mostrará:

+--------+----------+--------+----------+
| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+
| jose   | 111      | NULL   |     NULL |
| manuel | 333      | NULL   |     NULL |
| NULL   | NULL     | FORD   |      100 |
+--------+----------+--------+----------+

 

Vistas

 

Las vistas (“views”) en SQL son un mecanismo que permite generar un resultado a partir de una consulta (query) almacenado, y ejecutar nuevas consultas sobre este resultado como si fuera una tabla normal. Las vistas tienen la misma estructura que una tabla: filas y columnas. La única diferencia es que sólo se almacena de ellas la definición, no los datos.

La cláusula CREATE VIEW permite la creación de vistas. La cláusula asigna un nombre a la vista y permite especificar la consulta que la define. Su sintaxis es:

 

# CREATE VIEW id_vista [(columna,…)]AS especificación_consulta;

 

Opcionalmente se puede asignar un nombre a cada columna de la vista. Si se especifica, la lista de nombres de las columnas debe de tener el mismo número de elementos que elnúmero de columnas producidas por la consulta. Si se omiten, cada columna de la vista1 adopta el nombre de la columna correspondiente en la consulta.

 

INSERCION

INSERT  INTO nombre-tabla [({nombre-columna(s),})] VALUES ({expresión,})

Ej: Ingresar la carrera con código 150


INSERT INTO carrera VALUES (150,'Ingeniería de Sistemas');

 

ACTUALIZACION

UPDATE nombre-tabla  SET {nombre-columna = expresión,} [WHERE condición];

Ej: Modificar el patrimonio del estudiante cuyo código es 98115310
UPDATE estudiante SET pat_est = 15000000 WHERE cod_est = 98115310;

 

BORRADO

DELETE FROM nombre-tabla [WHERE condición];

Ej:

Eliminar el  estudiante cuyo código es 98115310


DELETE FROM estudiante  WHERE cod_est = 98115310;


Si se omite la opcion WHERE eliminara todas las filas de la tabla estudiante.

 

Volver

 

 

*