Vous êtes sur la page 1sur 38

SQL

Unidad
4
SQL
Una base de datos relacional consiste en un conjunto de
relaciones, a cada una de las cuales se le asigna un nombre
único.

SQL permite el uso de valores nulos para indicar que el


valor o bien es desconocido, o no existe.
Se fijan criterios que permiten al usuario especificar a qué
atributos no se puede asignar valor nulo, como
estudiaremos más adelante.
SQL
La estructura básica de una expresión SQL consiste
en tres cláusulas:
select, from y where.

La cláusula select corresponde a la operación


proyección del álgebra relacional. Se usa para listar
los atributos deseados del resultado de una
consulta.
SQL
La estructura básica de una expresión SQL consiste
en tres cláusulas:
select, from y where.

La cláusula from corresponde a la operación


producto cartesiano del álgebra relacional. Lista las
relaciones que deben ser analizadas en la
evaluación de la expresión
SQL
La estructura básica de una expresión SQL consiste
en tres cláusulas:
select, from y where.

La cláusula where corresponde al predicado


selección del álgebra relacional. Es un predicado
que engloba a los atributos de las relaciones que
aparecen en la cláusula from
Consulta de Selección
SELECT Nombre, Telefono FROM Clientes;

Esta consulta devuelve un recordset con



el campo nombre y teléfono de la tabla clientes.
Ordenación de Registros
SELECT CodigoPostal, Nombre, TelefonoFROM Clientes
ORDER BY Nombre;

Esta consulta devuelve los campos CodigoPostal,



Nombre, Telefono de la tabla Clientes ordenados por el campo
Nombre.
Consultas con Predicado
Predicado Descripción

Devuelve todos

ALL
los campos de la tabla
Devuelve un determinado número

TOP
de registros de la tabla
Omite los registros cuyos

DISTINCT campos seleccionados coincidan
totalmente
Omite los registros duplicados

basandose en la totalidad del registro
DISTINCROW
y no sólo en los campos

seleccionados.
Consulta con Predicados
SELECT ALL FROM Empleados;

SELECT * FROM Empleados;

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. No se conveniente abusar de este predicado ya

que obligamos al motor de la base de datos a analizar la estructura de la tabla

para averiguar los campos que contiene, es mucho más rápido indicar

el listado de campos deseados.

Consulta con Predicados
SELECT LIMIT 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 del número 25 y la 26 son iguales, la consulta
devolverá 26 registros.
Consulta con Predicados
SELECT TOP 10 PERCENT Nombre, Apellido
FROM Estudiantes
ORDER BY Nota DESC;

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:
Consulta con Predicados
SELECT DISTINCT Apellido
FROM Empleados;

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.
Por ejemplo, varios empleados listados en la tabla Empleados pueden
tener el mismo apellido. Si dos registros contienen López en el campo
Apellido
Consulta con Predicados
SELECT DISTINCTROW Apellido
FROM Empleados;

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
Si la tabla empleados contiene dos registros:

Antonio López y Marta López el ejemplo del predicado DISTINCT devuleve
un único registro con el valor López en el campo Apellido

ya que busca no duplicados en dicho campo. Este último ejemplo devuelve

dos registros con el valor López en el apellido ya que se buscan no duplicados

en el registro completo.
Consulta con Predicados
SELECT DISTINCTROW Apellido AS Empleado
FROM Empleados;

En determinadas circunstancias es necesario asignar un nombre a alguna


columna determinada de un conjunto devuelto, otras veces por simple
capricho o por otras circunstancias. Para resolver todas ellas tenemos la
palabra reservada AS que se encarga de asignar el nombre que deseamos

a la columna deseada. Tomado como referencia el ejemplo anterior
podemos hacer que la columna devuelta por la consulta, en lugar de
llamarse apellido (igual que el campo devuelto) se llame Empleado. En
este caso procederíamos de la forma anterior
Consulta con Predicados
SELECT DISTINCTROW Apellido AS Empleado
FROM Empleados
IN 'c:\databases\gestion.mdb';

Es ocasiones es necesario la recuperación de información



que se encuentra contenida en una tabla que no se encuentra en la base de
datos

que ejecutará la consulta o que en ese momento no se encuentra abierta,

esta situación la podemos salvar con la palabra reservada IN
Consulta con Operadores
Lógicos
SELECT * FROM Empleados
WHERE Edad >25 AND Edad < 50;

SELECT * FROM Empleados WHERE (Edad > 25 AND


Edad < 50) OR Sueldo= 100;
Intervalo de valores
SELECT * FROM Pedidos
WHERE CodPostal Between 63100 And 63199;

(Devuelve los pedidos realizados en la Zona Sur de Tepic)


Función AVG
SELECT AVG(Gastos) AS Promedio
FROM Pedidos
WHERE Gastos > 100;

La media calculada por Avg es la media aritmética (la


suma de los valores dividido por el número de valores).
La función Avg no incluye ningún campo Null en el
cálculo.
Función COUNT
SELECT COUNT(*) AS Total
FROM Pedidos;

Count simplemente cuenta el número de registros sin tener en


cuenta qué valores se almacenan en los registros. La
Función Count no cuenta los registros que tienen campos null a
menos que expr sea el carácter comodín asterisco (*).

Si utiliza un asterisco, Count calcula el número total de
registros, incluyendo aquellos que contienen campos null. 
Count(*) es considerablemente más rápida que Count(Campo).

GROUP BY
SELECT sexo, COUNT(*) FROM empleado
GROUP BY sexo ;

Si queremos contar cuantos pertenecen al sexo


Masculino y cuántos al femenino

Función HAVING
SELECT sexo, COUNT(*) FROM empleado
GROUP BY sexo
HAVING COUNT(*)>3;

Si queremos contar los empleados por sexo (masculino


y femenino) y además filtrar solo los que sean más de 3
empleados de ese sexo
Operación Unión
(SELECT nombre-cliente FROM impositor)
UNION
(SELECT nombre-cliente FROM prestatario)

Para encontrar todos los clientes que poseen un


préstamo,
una cuenta o las dos cosas en un banco de las tablas
impositor y prestatario
Operación Unión
(SELECT nombre-cliente FROM impositor)
UNION
(SELECT nombre-cliente FROM prestatario)

La operación UNION elimina automáticamente los


registros duplicados, mostrando solo el nombre una vez.
Para conservar los duplicados se utilizará UNION ALL
De este modo si Juan tiene 3 cuentas y 2 préstamos, el
resultado de la consulta anterior daría 5 tuplas
Operación Intersección
(SELECT DISTINCT nombre-cliente FROM impositor)
INTERSECT
(SELECT nombre-cliente FROM prestatario)

Para encontrar todos los clientes que poseen un


préstamo,
una cuenta o las dos cosas en un banco de las tablas
impositor y prestatario
Operación Intersección
(SELECT nombre-cliente FROM impositor)
INTERSECT ALL
(SELECT nombre-cliente FROM prestatario)

La operación elimina automáticamente los registros


duplicados, mostrando solo el nombre una vez.
Para conservar los duplicados se utilizará INTERSECT ALL
De este modo si Juan tiene 3 cuentas y 2 préstamos, el
resultado de la consulta anterior daría 2 tuplas
Operación Excepto
(SELECT DISTINCT nombre-cliente FROM impositor)
EXCEPT
(SELECT DISTINCT nombre-cliente FROM prestatario)

Para encontrar todos los clientes que tienen cuenta pero


no tienen ningún préstamo en el banco
Operación Excepto
(SELECT DISTINCT nombre-cliente FROM impositor)
EXCEPT
(SELECT DISTINCT nombre-cliente FROM prestatario)

La operacion except (excepto) elimina duplicados


automáticamente.
Así, en la consulta anterior, una tupla con el nombre de Santos
aparecerá en el resultado (exactamente una vez), sólo si Santos
tiene una cuenta en el banco, pero no tiene ningún préstamo en
el mismo.
Para conservar los duplicados, se utilizará except all
Operación Excepto
(SELECT DISTINCT nombre-cliente FROM impositor)
EXCEPT
(SELECT DISTINCT nombre-cliente FROM prestatario)

El número de copias duplicadas de una tupla en el resultado es igual al


número de copias duplicadas de dicha tupla en i menos el número de
copias duplicadas de la misma tupla en p, siempre que la diferencia sea positiva.
Así, si Santos tuviese tres cuentas y un préstamo en el banco, entonces en
el resultado aparecerían dos tuplas con el nombre de Santos.
Si, por el contrario, dicho cliente tuviese dos cuentas y tres préstamos en
el banco, no habrá ninguna tupla con el nombre de Santos en el
resultado.
Funciones de Agregación
SELECT AVG (saldo) FROM cuenta
WHERE nombre-sucursal = ‘Navacerrada’

Obtener la media de saldos de las cuentas de la sucursal


Navacerrada… Considerando la tabla Cuenta
Funciones de Agregación
SELECT nombre-sucursal, AVG (saldo) FROM cuenta
GROUP BY nombre-sucursal;

«Obtener el saldo medio de las cuentas de cada sucursal »


Funciones de Agregación
SELECT nombre-sucursal, COUNT DISTINCT(nombre-cliente)
FROM cuenta,impositor
WHERE impositor.numero-cuenta=cuenta.numero-cuenta
GROUP BY nombre-sucursal;

«Obtener el número de impositores de cada sucursal»


En este caso un impositor sólo se debe contar una vez, sin tener en cuenta el número de
cuentas que el impositor pueda tener.
Funciones de Agregación
SELECT nombre-sucursal, AVG(saldo)
FROM cuenta
GROUP BY nombre-sucursal
HAVING AVG(saldo)>700;

«Podemos estar interesados sólo en aquellas sucursales donde el saldo medio


de cuentas es superior a 700»
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

El operador Like se puede utilizar en una expresión para comparar un valor de un


campo con una expresión de cadena. Por ejemplo, si introduce Like C* en una
consulta SQL, la consulta devuelve todos los valores de campo que comiencen por
la letra C. En una consulta con parámetros, puede hacer que el usuario escriba el
modelo que se va a utilizar
OPERADOR LIKE
El ejemplo siguiente devuelve los datos que comienzan con la letra P seguido de
cualquier letra entre A y F y de tres dígitos:
Like 'P[A-F]###‘

Este ejemplo devuelve los campos cuyo contenido empiece con una letra de la A a
la D seguidas de cualquier cadena.
Like '[A-D]*‘
OPERADOR LIKE
En la tabla siguiente se muestra cómo utilizar el operador Like para comprobar
expresiones con diferentes modelos.
EJERCICIOS SQL
EJERCICIOS SQL
1. Listar los datos de los autores
2. Listar nombre y edad de los estudiantes
3. Qué estudiantes pertenecen a la carrera de
informática
4. Listar los estudiantes cuyo apellido comiencen con la
letra G
5. Quiénes son los autores del libro “Visual Studio.Net”
Listar solo los nombres
EJERCICIOS SQL
6. Qué autores son de nacionalidad USA ó Francia
7. Qué libros no son del área de Internet
8. Qué libros se presto el lector “Raúl Valdez”
9. Listar el nombre del estudiante de menor edad
10. Listar los nombre de los estudiantes que se prestaron
libros de Bases de Datos

Vous aimerez peut-être aussi