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.
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
-
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;
-
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;
-
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;
-
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:
-
# SELECT DISTINCTROW Apellido FROM
Empleados;
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:
-
Tabla
clientes
+------+--------+----------+
| cid | nombre | telefono |
+------+--------+----------+
| 1 | jose | 111
|
| 2 | maria | 222
|
| 3 | manuel | 333 |
| 4 | jesus | 4444 |
+------+--------+----------+
-
Tabla Acciones
+-----+-----+--------+----------+
| aid | cid | accion | cantidad |
+-----+-----+--------+----------+
| 1 | 2 | REDHAT |
10 |
| 2 | 4 | NOVELL |
20 |
| 3 | 4 | SUN |
30 |
| 4 | 5 | FORD |
100 |
+-----+-----+--------+----------+
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.
|