Publicado el 7 de Septiembre del 2017
589 visualizaciones desde el 7 de Septiembre del 2017
423,4 KB
24 paginas
Creado hace 20a (13/06/2003)
1.264 Tema 7
Introducción a SQL
Lenguaje de consulta estructurado (SQL)
• Tema 7:
• Tema 8:
– SELECT, INSERT, DELETE y UPDATE.
– Relaciones.
– Subconsultas.
– Vistas (tablas virtuales).
– Indexados.
– Transacciones.
– Seguridad.
– Rendimiento.
SQL
• El lenguaje de consulta estructurado (SQL) se utiliza para:
– La definición de datos: tablas y vistas (tablas virtuales).
– La recuperación de datos: por parte del usuario (consultas por un
motivo concreto) o de un programa.
– La manipulación de datos: un usuario o programa puede añadir,
borrar o modificar los datos.
– El control de acceso.
– La compartición de datos: por usuarios concurrentes.
– Mantener la integridad de los datos: mediante la definición de
restricciones de integridad.
• No es un lenguaje completo como Java, Visual Basic o C++:
– SQL es un sublenguaje de unos 30 comandos.
– Por lo general, va insertado en otro lenguaje o herramienta para
el acceso a bases de datos.
– SQL presenta varias incoherencias; los valores NULL causan problemas.
– Es transportable entre distintos sistemas operativos y, en cierto modo,
también entre distribuidores.
Aspectos que varían entre las distintas
implementaciones de SQL
• Los códigos de errores.
• Los tipos de datos que soportan (fecha/hora, moneda,
variaciones de cadenas).
• Las tablas del sistema: sobre la estructura de la base
de datos en sí.
• El SQL interactivo.
• La interfaz de programación: ningún distribuidor
sigue el estándar.
• El SQL dinámico: utilizado por las herramientas de
consulta y de redacción de informes.
• Algunas variaciones con respecto al estándar definidas
por el fabricante.
• La inicialización, apertura y conexión de la base de datos.
Comandos básicos de SQL
• Tipos básicos:
– SELECT
– INSERT
– UPDATE
– DELETE
• SELECT es el más importante y complejo.
Se utiliza para:
– Por separado, para recuperar datos (de formularios,
informes, consultas y programas).
– Como parte de INSERT, para crear nuevas filas.
– Como parte de UPDATE, para actualizar filas.
– Como parte de DELETE, para eliminar filas.
La instrucción SELECT de SQL
• La instrucción SELECT está compuesta por
varios comandos. Se utiliza para obtener
columnas y/o filas de una o más tablas o
vistas. Los comandos deben seguir un orden:
– SELECT columnas.
– FROM tabla o vista.
– INTO nueva tabla.
– WHERE se crea una relación o filas específicas.
– GROUP BY condiciones de agrupación (columnas).
– HAVING propiedades del grupo (filas específicas).
– ORDER BY criterios de ordenación.
Pedidos
Clientes
RepVentas
Oficinas
NumOfi
NumPedido Clien Prod
Ejemplo de tablas
Cant
211 Excavadora
7
522 Remachadora 2
1
522 Grúa
1
2
3
Importe
31.000,00$
4.000,00$
500.000,00$
Dto
0,2
0,3
0,4
NumClien Empresa
211 Connor Co
522 AmaratungaEnterprise
890 Feni Fabricators
Rep Clien LimitCredit
89
89
53
50.000,00$
40.000,00$
1.000.000,00$
NumRep Nombre
OfiRep
53 Bill Smith
89 Jen Jones
Cupo
100.000,00$
50.000,00$
1
2
Ventas
0,00$
130.000,00$
Estado Region Objetivo
Ciudad
1 Denver
CO
2 New York NY
57 Dallas
TX
West
East
West
3.000.000,00$ 130.000,00$ 970.586.3341
200.000,00$ 300.000,00$ 212.942.5574
0,00$ 214.781.5342
0,00$
Ventas
Telf
Ejemplo de esquema
Pedidos
NumPedido
Prod
Cant
Importe
NumClien (FK) (IE)
Dto
Clientes
NumClien
Empresa
LimitCredit
NumRep (FK) (IE)
RepVentas
NumRep
Nombre
Cupo
Ventas
NumRep (FK) (IE)
Oficinas
NumRep
Ciudad
Region
Objetivo
Ventas
Estado
Telf
Consultas SQL: SELECT
• Obtener un listado de los representantes de ventas:
– SELECT Nombre, Ventas, Cupo FROM RepVentas;
• Calcular la cantidad en la que cada representante
supera o no llega al cupo:
– SELECT Nombre, Ventas, Cupo, (Ventas-Cupo) FROM
RepVentas;
• Averiguar cuáles son los que menos trabajan:
– SELECT Nombre, Ventas, Cupo, (Ventas-Cupo) FROM
RepVentas WHERE Ventas < Cupo;
NumRep Nombre
OfiRep
53 Bill Smith
89 Jen Jones
Cupo
100.000,00$
50.000,00$
1
2
Ventas
0,00$
130.000,00$
Consultas SQL: calcular, insertar,
eliminar y actualizar
• Calcular el promedio de ventas:
– SELECT AVG(Importe) FROM Pedidos;
• Calcular el promedio de ventas a un cliente:
– SELECT AVG(Importe) FROM Pedidos WHERE Clien = 211;
• Añadir una oficina:
SET LimitCredit = 75000 WHERE Empresa = ‘Amaratunga
Enterprises’;
– INSERT INTO Oficinas (NumOfi, Ciudad, Region, Objetivo,
Ventas) VALUES (‘55’, ‘Dallas’, ‘West’, 200000, 0);
• Eliminar un cliente:
– DELETE FROM Clientes WHERE Empresa = ‘Connor Co’;
• Aumentar un límite de crédito:
– UPDATE Clientes
SELECT: * y duplicados
• Seleccionar todas las columnas (campos):
– SELECT * FROM Oficinas;
• Filas duplicadas: la consulta mostrará dos
entradas con "West":
– SELECT Region FROM Oficinas;
• Eliminar duplicados:
– SELECT DISTINCT Region FROM Oficinas;
– (El asistente de MS Access utiliza el comando
no estándar DISTINCTROW, que es diferente de
DISTINCT cuando hay relaciones).
NULL
• Los valores NULL evalúan a FALSO (NOT TRUE)
en todos los casos:
– Insertar ‘NuevoRep’ con Cupo NULL (en blanco o vacío).
• Las dos consultas siguientes no mostrarán todos
los representantes de ventas:
– SELECT Nombre FROM RepVentas WHERE Ventas > Cupo;
– SELECT Nombre FROM RepVentas WHERE Ventas<= Cupo;
– Un nuevo representante con Cupo NULL no aparecerá
en ninguna de las dos listas.
• Comprobar los NULLS:
– SELECT Nombre FROM RepVentas WHERE Cupo IS NULL;
(Pedidos)
– WHERE Dto*Importe > 50000;
– WHERE Cupo BETWEEN 50000 AND 100000; (RepVentas)
• El rango es inclusivo (>=50000 y <=100000)
– WHERE Estado IN (‘CO’, ‘UT’, ‘TX’);
– WHERE NumRep IS NOT NULL;
– WHERE Telf NOT LIKE ‘21%’;
(Oficinas)
(RepVentas)
(Oficinas)
• El SQL estándar tiene sólo 2 comodines:
• %
• _
cualquier cadena de cero o más caracteres (* en Access).
cualquier caracter individual (? en Access).
• La mayoría de las bases de datos tienen diferentes
comodines adicionales. En MS Access:
Operadores SELECT
• SELECT * FROM <tabla>
• ? (cualquier caracter individual),
• * (cualquier número de caracteres),
• # (cualquier dígito individual),
• [list] cualquier caracter individual de la lista,
• [!list]
SELECT: COUNT y GROUP BY
PiezaID Distribuidor
Piezas
123 A
234 A
345 B
362 A
2345 C
3464 A
4533 C
• Número de piezas del distribuidor A:
– SELECT COUNT(*) FROM Piezas WHERE Distribuidor = ‘A’;
– Resultado: 4.
• Número de piezas de cada distribuidor:
– SELECT Distribuidor, COUNT(*) AS CuentaPiezas FROM Piezas
GROUP BY Distribuidor;
– Resultado:
Distribuidor CuentaPiezas
4
A
B
1
2
C
Ejercicios
• ¿Cuál es el límite medio de crédito de los
clientes con un límite de crédito inferior a
1.000.000$?
• ¿Cuántas oficinas de ventas hay en la región
West?
• Aumentar un 30% el precio de las excavadoras
en todos los pedidos.
• Eliminar cualquier representante de ventas
con cupo NULL.
Soluciones
• ¿Cuál es el límite medio de crédito de los clientes
con un límite de crédito inferior a 1.000.000$?
– SELECT AVG(LimitCredit) FROM Clientes WHERE
LimitCredit < 1000000;
• ¿Cuántas oficinas de ventas hay en la región West?
– SELECT Count(*) FROM Oficinas WHERE Region= 'West‘;
• Aumentar un 30% el precio de las excavadoras en
todos los pedidos:
– UPDATE Pedidos SET Importe= Importe*1.3 WHERE Prod=
'Excavadora';
• Eliminar cualquier representante de ventas con cupo
NULL:
– DELETE FROM RepVentas WHERE Cupo IS NULL;
Relaciones
• El modelo relacional permite obtener datos de diferentes
tablas para formar nuevas e imprevistas interrelaciones.
• Las interrelaciones se vuelven explícitas al manipular
los datos: cuando se consulta la base de datos, no
cuando se crea.
– Esto es muy importante; permite la extensibilidad de las bases
de datos. La FAA nunca pensó que sus datos se utilizarían en
el 1.264 junto con los del DOT, una tabla de códigos postales
y algunas tablas de nuevos pedidos. ¡Es reutilizar!
– Se puede relacionar cualquier columna de una tabla con
cualquiera de otra mientras coincidan los tipos de datos y la
operación tenga sentido. No es necesario que sean campos clave,
aunque suelen serlo.
• Buenas relaciones:
– La columna relacionada suele ser un campo clave: ya sea clave
primaria o secundaria.
– Las columnas relacionadas deben tener tipos de datos
compatibles.
– Las de valor Null nunca se relacionan.
Relaciones
• Obtener un listado de todos los pedidos, en el que figuren el número
de pedido y la cantidad y el nombre y límite de crédito del cliente:
– La tabla pedidos contiene el número de pedido y la cantidad, pero no
los nombres ni los límites de crédito de los clientes.
– La tabla clientes contiene los nombres de los clientes y su límite de
crédito, pero no la información de los pedidos.
• SELECT NumPedido, Importe, Empresa, LimitCredit FROM
Clientes, Pedidos WHERE Clien = NumClien;
(SQL estándar)
• SELECT NumPedido, Importe, Empresa, LimitCredit FROM Clientes
INNER JOIN Pedidos ON Clientes.Númclien = Pedidos.Clien;
(Access)
Dto
NumPedido Clien Prod
Cant
1
2
3
211 Bulldozer 7
522 Riveter
2
1
522 Crane
Importe
31.000,00$
4.000,00$
500.000,00$
0,2
0,3
0,4
LimitCredit
Relación
NumClien Empresa
211 Connor Co
522 Amaratunga Enterprises
890 Feni Fabricators
RepClien
89
89
53
50.000,00$
40.000,00$
1.000.000,00$
Relación entre 3 tablas
• Obtener un listado de los pedidos de más de 25.000
dólares, en el que figure el nombre del vendedor que
atendió el pedido y el del cliente que lo realizó:
– SELECT NumPedido, Importe, Empresa, Nombre FROM Pedidos,
Clientes, RepVentas WHERE Clien = NumClien AND RepClien
(SQL estándar)
= NumRep AND Importe >= 25000;
NumPedido Clien
Dto
Importe
Prod
Cant
211 Excavadora
7
522 Remachadora 2
1
522 Grúa
1
2
3
Empresa
31.000,00$
4.000,00$
500.000,00$
0,2
0,3
0,4
LimitCredit
50.000,00$
40.000,00$
1.000.000,00$
Ventas
0,00$
130.000,00$
Nombre
Jen Jones
Jen Jones
NumCl
Comentarios de: Tema 7 Introducción a SQL (0)
No hay comentarios