SlideShare una empresa de Scribd logo
Structured Query Language
S.Q.L.
S.Q.L.
John Freddy Duitama Muñoz
John Freddy Duitama Muñoz
Facultad de Ingeniería
Facultad de Ingeniería
U.de.A.
U.de.A.

Esta presentación puede ser usada solo para fines
académicos y mencionando siempre al autor.
John Freddy Duitama M.
Universidad de Antioquia.
Facultad de Ingeniería.
John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

1
Componentes del S.Q.L
• Lenguaje de Manipulación de datos (D.M.L.)
Ej: SELECT, INSERT, UPDATE, DELETE.

• Lenguaje de Definición de Datos.(D.D.L)
Ej: create table , create view, create index, drop table,etc.

• Lenguaje de Control de Datos (D.C.L)
Ej: GRANT select ON empleado TO pedro

Presentaremos SQL-92.
Articulo de base:
D.D. Chamberlin, M. M. Astraham, K. P. Escuaran, et. al.
SEQUEL2: A unified Approach to Data Definition, Manipulation and Control.
IBM. J. R&D. Nov-1976.

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

2
La sentencia básica S.Q.L.
SELECT col1, col2, ... , coln
FROM tabla1, tabla2, ...
WHERE condición para las tuplas
Es equivalente a :

π col1,col2,...coln ( σ

condición-tuplas

Columnas de una de mis tablas ?
DESCRIBE empleado;
Name
Null?
Cedula
NOT NULL
Nombre
NOT NULL
Jefe
Cargo
NOT NULL
Dpto
NOT NULL
John Freddy Duitama M

.

( tabla1 x tabla2 ...) )

Type
NUMBER(8)
VARCHAR2(50)
NUMBER(8)
VARCHAR2(10)
NUMBER(3)
U.de.A. Facultad de Ingeniería

3
Tablas ejemplo
Empleado
Cédula
12345
22334
55887
98987
57689
44554
45597
22774
98765
67954
34760
34908
80451
76854

Nombre
Pepe Cárdenas
Jesus Orozco
Maria Gonzalez
Pedro Soto
Teresa Sapote
Fabio Perez
Concha Misas
Hernán Mejía
Jesus Rico
Diana Botero
Amalia Perez
Juan Ruiz
Jesús Gallego
Camila Hernandez

Jefe
98765
98765
67954
67954
45597
98765
67954
45597
45597
98765
45597
98765
67954

Salario
3500
3400
3700
3800
2500
3400
4800
4600
3400
4900
2400
1500
1500
2500

Comision
20
10

15

10

Cargo
Vendedor
Vendedor
Analista
Analista
Secretaria
Vendedor
Gerente
Analista
Jefe
Jefe
Secretaria
Mensajero
Mensajero
Secretaria

Dpto
20
20
30
30
10
20
10
30
20
30
20
10
20
30

Clave foránea.
Clave foránea.

Departamento
Codigo
10
20
30
40
50

Nombre
Gerencia
Ventas
Sistemas
Logística
Bodegas

John Freddy Duitama M

Ciudad
Medellín
Medellín
Envigado
Bello
Itagui.

.

U.de.A. Facultad de Ingeniería

4
La proyección en S.Q.L.
• Enumero los atributos en el SELECT.
SELECT cedula, nombre, cargo
FROM empleado;

• Para observar TODAS las columnas de la tabla (*)
• Para observar TODAS las tuplas de la tabla. (No uso WHERE)
SELECT *
FROM empleado;

Esta operación no elimina tuplas duplicadas
John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

5
La eliminación de duplicados.
•

Utilizo la cláusula DISTINCT.
SELECT DISTINCT cargo, dpto
FROM empleado;
Elimina las tuplas repetidas que retorna la consulta.

•

Cómo renombrar una columna.
SELECT cedula, nombre AS persona, cargo AS función
FROM empleado;
Retorna tabla con: cedula, persona, función.

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

6
La selección en S.Q.L.
•

Utilizo la cláusula WHERE.
SELECT cedula, nombre, cargo
FROM empleado
WHERE salario > 1200 and dpto = 20;

•

Cuando una condición tiene más de una expresión, estas se
combinan con los operadores lógicos AND y OR.
OPERADOR
=
!=
>
<

EJEMPLO

..................................................salario = 10500
<> ..............................................
dpto <> 10
................................................... comision > 30
.................................................. comision < 20

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

7
Operadores usados en la cláusula WHERE
OPERADOR

EJEMPLO

<=

.....................................................................salario <= 2000000

>=

.....................................................................salario >= 1000000

BETWEEN ... AND ....
IN ( VALORES )

...................................comision between 10 and 30

................................................depto IN ( 10,20,30)

NOT IN ( VALORES )

.......................................depto NOT IN ( 10,20,30)

LIKE ....................................................................nombre LIKE ‘%MA%’
nombre LIKE ‘_MA%’
nombre LIKE ‘M_ _’
IS NULL ...............................................................comision IS NULL
IS NOT NULL ........................................................comision IS NOT NULL
John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

8
Ordenando el resultado de una consulta.
• Utilizo la cláusula ORDER BY.
SELECT nombre, salario
FROM empleado
WHERE dpto = 10
ORDER BY salario;
por defecto ordena ascendentemente.
• Puedo ordenar por una ó varias columnas.
SELECT cedula, nombre, salario, dpto
FROM empleado
ORDER BY dpto ASC, salario DESC

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

9
Operando las columnas del SELECT.
• Puedo realizar las operaciones básicas sobre las columnas.
SELECT nombre, salario * 0.10
FROM empleado;
• Aritmética de nulos?
El resultado de una expresión aritmética es nulo si alguno de
sus valores es nulo.
• Valores de verdad para nulos
Verdadero
AND
desconocido
Falso
AND
desconocido
Verdadero
OR
desconocido
Falso
OR
desconocido
Desconocido AND/OR desconocido
John Freddy Duitama M

.

=
=
=
=
=

desconocido
falso
verdadero
desconocido.
desconocido

U.de.A. Facultad de Ingeniería

10
Operando las columnas del SELECT.
• Puedo realizar las operaciones básicas sobre las columnas.
SELECT nombre, salario * comision /100
FROM empleado;
Una consulta puede retornar valores nulos en un atributo.
• Como operar los valores nulos?
SELECT nombre, salario * nvl(comision,0) / 100
FROM empleado;
La función NVL(valor1,valor2) o ISNULL (valor1,valor2) retorna:
• si valor1 es Nulo asume valor2;
• De otro modo permanece intacto valor1.
John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

11
La Reunión Natural.
• Reunión natural
SELECT cedula, e.nombre, d.nombre AS departamento
FROM empleado e, departamento d
WHERE dpto = codigo;

• retorna:
Join
Cédula
12345
22334
98987
45597

e.nombre,
Pepe Cárdenas
Jesús Orozco
Pedro Soto
Concha Misas

John Freddy Duitama M

.

departamento
Ventas
Ventas
Sistemas
Gerencia

20
20
30
10

U.de.A. Facultad de Ingeniería

12
La Reunión Natural.
• Self-join.
SELECT e.nombre AS Empleado, j.nombre AS Jefe
FROM empleado AS e, empleado AS j
WHERE e.jefe = j.cedula
Retorna.
Empleado
Pepe Cárdenas
Jesús Orozco
Pedro Soto
Diana Botero

John Freddy Duitama M

Jefe
e.jefe = j.cedula
Jesús Rico
98765 = 98765.
Concha Misas
Diana Botero
Concha Misas

.

U.de.A. Facultad de Ingeniería

13
La Reunión Natural.
Reunión de tres tablas.
SELECT e.cedula, e.nombre, j.nombre, d.nombre
FROM empleado e, empleado j , departamento d
WHERE e.jefe = j.cedula and e.dpto = d.codigo
AND e.salario > 2000;

• Si hay n tablas requiero n-1 condiciones de join en la cláusula
WHERE.
• Cada condición involucra un par de tablas diferentes.
John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

14
La Reunión externa.
SELECT e.nombre, salario,d.nombre
FROM empleado e, departamento d
WHERE e.dpto(+) = d.codigo;
Recupera tuplas del join y
aquellas que no lo cumplen.
Retorna:
e.nombre
Pepe Cárdenas
Jesús Orozco
Pedro Soto
Concha Misas

John Freddy Duitama M

.

salario
3500
3400
3800
4800

d.nombre
Ventas
Ventas
Sistemas
Gerencia
Logística
Bodega
U.de.A. Facultad de Ingeniería

15
Funciones de agregación.
COUNT(*)
SUM(columna)
AVG(columna)
SELECT COUNT(*)
FROM empleado;

COUNT(columna)
MIN(col)
MAX(col)
Número de empleados en la B.de.D.

Número de empleados con comisión.

SELECT COUNT(COMISION) No incluye empleados con comisión
FROM empleado;
NULA.

SELECT COUNT(DISTINCT CARGO)
FROM empleado;

John Freddy Duitama M

.

Cuantos
cargos
diferentes hay en
la empresa.

U.de.A. Facultad de Ingeniería

16
La cláusula GROUP BY
SELECT col1, col2, ... , coln
FROM tabla1, tabla2, ...
WHERE condición para las tuplas
GROUP BY factor de agrupamiento
HAVING condición para el grupo

SELECT dpto, SUM(salario)
FROM empleado
GROUP BY dpto;

Total de salarios pagados
por departamento.

Nota:
Unicamente los atributos que aparecen en el GROUP BY pueden
aparecer no agregados en la lista del SELECT; todos los demás deben
estar acompañados de alguna función de agregación.
John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

17
La cláusula GROUP BY
SELECT dpto,SUM(salario)
FROM empleado
GROUP BY dpto
ORDER BY 2 DESC ;

SELECT dpto, sum(salario)
FROM empleado
WHERE cargo <> ‘Gerente’
GROUP BY dpto
ORDER BY 2 DESC;

John Freddy Duitama M

.

Total de salarios por
depto; ordenado por
total pagado.

Idem consulta anterior,
pero
excluye
a
empleados con cargo
de “Gerente”

U.de.A. Facultad de Ingeniería

18
La cláusula HAVING
SELECT dpto, sum(salario)
FROM empleado
WHERE cargo <> ‘Gerente’
GROUP BY dpto
HAVING SUM(salario) > 10000;
ORDER BY 2 DESC
• Retorna los deptos que en total pagan salarios superiores a 10.000
sin incluir los salarios de empleados con cargo = “Gerente”
• Retorna iniciando con el dpto que más salarios paga.
•El HAVING es una condición para el grupo, no para cada tupla de la
relación.
John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

19
Subconsultas.

• Subconsultas que producen un valor escalar en la parte más
interna.

SELECT nombre, salario
FROM empleado
WHERE salario > ( select AVG(salario)
FROM empleado
WHERE dpto = 20 );

Empleados que ganan
más que el promedio de
salarios pagados en el
depto 20.

• Puedo utilizar operadores para comparar escalares.
Ejemplo: =, > , < , etc.

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

20
Subconsultas.
• Subconsultas que producen una tupla:
Empleados con igual
cargo y del mismo depto
que el empleado con
cédula 76854.
SELECT nombre,salario
FROM empleado
WHERE (cargo, dpto ) = ( SELECT cargo,dpto
FROM empleado
WHERE cedula = 76854);
• Solo puedo utilizar operadores de tupla.

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

21
Subconsultas.
• Subconsultas que producen una relación:

SELECT nombre,salario
FROM empleado
WHERE salario > ALL ( SELECT salario
FROM EMPLEADO
WHERE dpto = 10 );

Empleados con salario
superior a todos los
salarios del depto 10.

• Use igualmente > ANY , >= ALL , <= ANY , IN, etc.
• Puedo usar SOME o ANY con el mismo significado

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

22
Consultas correlacionadas.
Empleados con salario
mayor que el
salario
promedio del depto al
que pertenecen.

SELECT nombre,salario
FROM empleado AS ext
WHERE salario > ( SELECT AVG(salario)
FROM empleado
WHERE dpto = ext.dpto );

• Por cada tupla de la relación externa se ejecuta una vez la
consulta interna.
• Se identifica porque el predicado interno involucra atributos de
relaciones que aparecen en la consulta externa.

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

23
Otras consultas.
• El resultado de una consulta es a su vez una nueva tabla.
SELECT nombre, salario
FROM
( SELECT cedula, nombre, salario, dpto
FROM empleado
WHERE dpto = 10 )
WHERE salario > 1000;
• En la clausula HAVING puedo escribir sub-consultas.
SELECT dpto, avg(salario)
FROM empleado
GROUP BY dpto
HAVING avg(salario) > ( SELECT avg(salario)
FROM empleado);
John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

24
Operador EXISTS.
• Departamentos con al menos un empleado.

SELECT nombre
FROM departamento AS d
WHERE exists ( select *
FROM empleado
WHERE d.codigo = dpto.

• EXIST devuelve el valor de cierto si la subconsulta argumento
no es vacía.

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

25
Operador NOT EXISTS
• Hallar los cargos comunes a todos los deptos.
SELECT DISTINCT cargo
FROM empleado ext
No existe un empleado
WHERE NOT EXISTS
en cada departamento
(SELECT *
que no tenga tal cargo.
FROM departamento
WHERE NOT EXISTS
(SELECT cargo
FROM empleado
WHERE cargo = ext.cargo and
dpto = codigo ) );

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

26
Operadores adicionales.
SELECT col1a, col2a, col3a ..., colna
FROM tabla1
[ WHERE condición ]
UNION | INTERSECT | EXCEPT
SELECT col1b, col2b, col3b, ..., colnb;
FROM tabla2
[ WHERE condición ]
NOTA : Debe existir compatibilidad respecto a la unión.
Estas operaciones eliminan duplicados de la respuesta.
EXCEPT y MINUS tienen el mismo significado.
NOTA:
Para conservar duplicados use:
UNION ALL | INTERSECT ALL | EXCEPT ALL
John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

27
Agregar registros a una tabla.
INSERT INTO empleado( cedula,nombre, salario,depto)
VALUES( 23433, “Jesus Mosquera”, 10000,30);

INSERT INTO empleado
VALUES (70300300,’Pepe’,1234,1500000,NULL,’Mensajero’,
’M’,20):

INSERT INTO empleado
SELECT cedula, nombre, jefe, salario,cargo,dpto
FROM tabla2
WHERE condición.

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

28
Modificar tuplas de una tabla.

UPDATE empleado
SET salario = salario * 1.1,
comision = nvl(comision, 0) * 1.2
WHERE depto = 30;

UPDATE empleado AS ext
SET
salario = ( SELECT AVG(salario)
FROM empleado AS int
WHERE ext.dpto = int.dpto
)
WHERE codigo = “34908”;

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

29
Eliminar tuplas de una tabla.
DELETE FROM empleado
WHERE salario > 10000;

DELETE FROM departamento
WHERE NOT EXISTS ( SELECT *
FROM empleado
WHERE código = dpto);

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

30
Bibliografía.

• Silberschatz, Korth, Sudarshan. Fundamentos de
Bases de Datos. Cuarta edición. 2002. McGraw-Hill.
• Jeffrey D. Ullman. and Jennifer Widom. A First
Course in Database Systems. Prentice Hall. 2001.
Second edition.
• James R. Groff, Paul N. Weinberg. Aplique SQL.
McGraw-Hill. 1991.

John Freddy Duitama M

.

U.de.A. Facultad de Ingeniería

31

Más contenido relacionado

PPTX
Creando una base de datos Oracle Z052 04
PDF
Ejercicios sql01c
PPTX
SQL Server - Como se Almacenan los Datos
PPTX
Estructura de Almacenamiento en Oracle. TableSpaceZ052 07
PPTX
Estructuras de almacenamiento de Oracle 11g R2
PPTX
sub Consultas Oracle SQL
PPTX
Base de Dato Oracle
Creando una base de datos Oracle Z052 04
Ejercicios sql01c
SQL Server - Como se Almacenan los Datos
Estructura de Almacenamiento en Oracle. TableSpaceZ052 07
Estructuras de almacenamiento de Oracle 11g R2
sub Consultas Oracle SQL
Base de Dato Oracle

Similar a Sql (20)

PDF
Dokumen.site ejercicios resueltos-sqlpdf
PDF
Lenguaje estructurado de consulta
PDF
Oracle sep 01
PDF
Lenguaje estructurado de consulta
PDF
Ejercicios sql access
PDF
Ejercicios sql access
PDF
Ejercicios sql access
PDF
Ejercicios sql access
PDF
Ejercicios sql access.
PDF
Ejercicios sql access
PDF
Ejercicios sql access
PDF
Ejercicios sql access
PDF
Ejercicios sql access
PDF
Ejercicios sql access
PDF
Ejercicios sql access
PDF
Ejercicios sql access
PPTX
14 structure query language
PDF
Manipulación avanzada de datos con sql
Dokumen.site ejercicios resueltos-sqlpdf
Lenguaje estructurado de consulta
Oracle sep 01
Lenguaje estructurado de consulta
Ejercicios sql access
Ejercicios sql access
Ejercicios sql access
Ejercicios sql access
Ejercicios sql access.
Ejercicios sql access
Ejercicios sql access
Ejercicios sql access
Ejercicios sql access
Ejercicios sql access
Ejercicios sql access
Ejercicios sql access
14 structure query language
Manipulación avanzada de datos con sql
Publicidad

Sql

  • 1. Structured Query Language S.Q.L. S.Q.L. John Freddy Duitama Muñoz John Freddy Duitama Muñoz Facultad de Ingeniería Facultad de Ingeniería U.de.A. U.de.A. Esta presentación puede ser usada solo para fines académicos y mencionando siempre al autor. John Freddy Duitama M. Universidad de Antioquia. Facultad de Ingeniería. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 1
  • 2. Componentes del S.Q.L • Lenguaje de Manipulación de datos (D.M.L.) Ej: SELECT, INSERT, UPDATE, DELETE. • Lenguaje de Definición de Datos.(D.D.L) Ej: create table , create view, create index, drop table,etc. • Lenguaje de Control de Datos (D.C.L) Ej: GRANT select ON empleado TO pedro Presentaremos SQL-92. Articulo de base: D.D. Chamberlin, M. M. Astraham, K. P. Escuaran, et. al. SEQUEL2: A unified Approach to Data Definition, Manipulation and Control. IBM. J. R&D. Nov-1976. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 2
  • 3. La sentencia básica S.Q.L. SELECT col1, col2, ... , coln FROM tabla1, tabla2, ... WHERE condición para las tuplas Es equivalente a : π col1,col2,...coln ( σ condición-tuplas Columnas de una de mis tablas ? DESCRIBE empleado; Name Null? Cedula NOT NULL Nombre NOT NULL Jefe Cargo NOT NULL Dpto NOT NULL John Freddy Duitama M . ( tabla1 x tabla2 ...) ) Type NUMBER(8) VARCHAR2(50) NUMBER(8) VARCHAR2(10) NUMBER(3) U.de.A. Facultad de Ingeniería 3
  • 4. Tablas ejemplo Empleado Cédula 12345 22334 55887 98987 57689 44554 45597 22774 98765 67954 34760 34908 80451 76854 Nombre Pepe Cárdenas Jesus Orozco Maria Gonzalez Pedro Soto Teresa Sapote Fabio Perez Concha Misas Hernán Mejía Jesus Rico Diana Botero Amalia Perez Juan Ruiz Jesús Gallego Camila Hernandez Jefe 98765 98765 67954 67954 45597 98765 67954 45597 45597 98765 45597 98765 67954 Salario 3500 3400 3700 3800 2500 3400 4800 4600 3400 4900 2400 1500 1500 2500 Comision 20 10 15 10 Cargo Vendedor Vendedor Analista Analista Secretaria Vendedor Gerente Analista Jefe Jefe Secretaria Mensajero Mensajero Secretaria Dpto 20 20 30 30 10 20 10 30 20 30 20 10 20 30 Clave foránea. Clave foránea. Departamento Codigo 10 20 30 40 50 Nombre Gerencia Ventas Sistemas Logística Bodegas John Freddy Duitama M Ciudad Medellín Medellín Envigado Bello Itagui. . U.de.A. Facultad de Ingeniería 4
  • 5. La proyección en S.Q.L. • Enumero los atributos en el SELECT. SELECT cedula, nombre, cargo FROM empleado; • Para observar TODAS las columnas de la tabla (*) • Para observar TODAS las tuplas de la tabla. (No uso WHERE) SELECT * FROM empleado; Esta operación no elimina tuplas duplicadas John Freddy Duitama M . U.de.A. Facultad de Ingeniería 5
  • 6. La eliminación de duplicados. • Utilizo la cláusula DISTINCT. SELECT DISTINCT cargo, dpto FROM empleado; Elimina las tuplas repetidas que retorna la consulta. • Cómo renombrar una columna. SELECT cedula, nombre AS persona, cargo AS función FROM empleado; Retorna tabla con: cedula, persona, función. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 6
  • 7. La selección en S.Q.L. • Utilizo la cláusula WHERE. SELECT cedula, nombre, cargo FROM empleado WHERE salario > 1200 and dpto = 20; • Cuando una condición tiene más de una expresión, estas se combinan con los operadores lógicos AND y OR. OPERADOR = != > < EJEMPLO ..................................................salario = 10500 <> .............................................. dpto <> 10 ................................................... comision > 30 .................................................. comision < 20 John Freddy Duitama M . U.de.A. Facultad de Ingeniería 7
  • 8. Operadores usados en la cláusula WHERE OPERADOR EJEMPLO <= .....................................................................salario <= 2000000 >= .....................................................................salario >= 1000000 BETWEEN ... AND .... IN ( VALORES ) ...................................comision between 10 and 30 ................................................depto IN ( 10,20,30) NOT IN ( VALORES ) .......................................depto NOT IN ( 10,20,30) LIKE ....................................................................nombre LIKE ‘%MA%’ nombre LIKE ‘_MA%’ nombre LIKE ‘M_ _’ IS NULL ...............................................................comision IS NULL IS NOT NULL ........................................................comision IS NOT NULL John Freddy Duitama M . U.de.A. Facultad de Ingeniería 8
  • 9. Ordenando el resultado de una consulta. • Utilizo la cláusula ORDER BY. SELECT nombre, salario FROM empleado WHERE dpto = 10 ORDER BY salario; por defecto ordena ascendentemente. • Puedo ordenar por una ó varias columnas. SELECT cedula, nombre, salario, dpto FROM empleado ORDER BY dpto ASC, salario DESC John Freddy Duitama M . U.de.A. Facultad de Ingeniería 9
  • 10. Operando las columnas del SELECT. • Puedo realizar las operaciones básicas sobre las columnas. SELECT nombre, salario * 0.10 FROM empleado; • Aritmética de nulos? El resultado de una expresión aritmética es nulo si alguno de sus valores es nulo. • Valores de verdad para nulos Verdadero AND desconocido Falso AND desconocido Verdadero OR desconocido Falso OR desconocido Desconocido AND/OR desconocido John Freddy Duitama M . = = = = = desconocido falso verdadero desconocido. desconocido U.de.A. Facultad de Ingeniería 10
  • 11. Operando las columnas del SELECT. • Puedo realizar las operaciones básicas sobre las columnas. SELECT nombre, salario * comision /100 FROM empleado; Una consulta puede retornar valores nulos en un atributo. • Como operar los valores nulos? SELECT nombre, salario * nvl(comision,0) / 100 FROM empleado; La función NVL(valor1,valor2) o ISNULL (valor1,valor2) retorna: • si valor1 es Nulo asume valor2; • De otro modo permanece intacto valor1. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 11
  • 12. La Reunión Natural. • Reunión natural SELECT cedula, e.nombre, d.nombre AS departamento FROM empleado e, departamento d WHERE dpto = codigo; • retorna: Join Cédula 12345 22334 98987 45597 e.nombre, Pepe Cárdenas Jesús Orozco Pedro Soto Concha Misas John Freddy Duitama M . departamento Ventas Ventas Sistemas Gerencia 20 20 30 10 U.de.A. Facultad de Ingeniería 12
  • 13. La Reunión Natural. • Self-join. SELECT e.nombre AS Empleado, j.nombre AS Jefe FROM empleado AS e, empleado AS j WHERE e.jefe = j.cedula Retorna. Empleado Pepe Cárdenas Jesús Orozco Pedro Soto Diana Botero John Freddy Duitama M Jefe e.jefe = j.cedula Jesús Rico 98765 = 98765. Concha Misas Diana Botero Concha Misas . U.de.A. Facultad de Ingeniería 13
  • 14. La Reunión Natural. Reunión de tres tablas. SELECT e.cedula, e.nombre, j.nombre, d.nombre FROM empleado e, empleado j , departamento d WHERE e.jefe = j.cedula and e.dpto = d.codigo AND e.salario > 2000; • Si hay n tablas requiero n-1 condiciones de join en la cláusula WHERE. • Cada condición involucra un par de tablas diferentes. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 14
  • 15. La Reunión externa. SELECT e.nombre, salario,d.nombre FROM empleado e, departamento d WHERE e.dpto(+) = d.codigo; Recupera tuplas del join y aquellas que no lo cumplen. Retorna: e.nombre Pepe Cárdenas Jesús Orozco Pedro Soto Concha Misas John Freddy Duitama M . salario 3500 3400 3800 4800 d.nombre Ventas Ventas Sistemas Gerencia Logística Bodega U.de.A. Facultad de Ingeniería 15
  • 16. Funciones de agregación. COUNT(*) SUM(columna) AVG(columna) SELECT COUNT(*) FROM empleado; COUNT(columna) MIN(col) MAX(col) Número de empleados en la B.de.D. Número de empleados con comisión. SELECT COUNT(COMISION) No incluye empleados con comisión FROM empleado; NULA. SELECT COUNT(DISTINCT CARGO) FROM empleado; John Freddy Duitama M . Cuantos cargos diferentes hay en la empresa. U.de.A. Facultad de Ingeniería 16
  • 17. La cláusula GROUP BY SELECT col1, col2, ... , coln FROM tabla1, tabla2, ... WHERE condición para las tuplas GROUP BY factor de agrupamiento HAVING condición para el grupo SELECT dpto, SUM(salario) FROM empleado GROUP BY dpto; Total de salarios pagados por departamento. Nota: Unicamente los atributos que aparecen en el GROUP BY pueden aparecer no agregados en la lista del SELECT; todos los demás deben estar acompañados de alguna función de agregación. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 17
  • 18. La cláusula GROUP BY SELECT dpto,SUM(salario) FROM empleado GROUP BY dpto ORDER BY 2 DESC ; SELECT dpto, sum(salario) FROM empleado WHERE cargo <> ‘Gerente’ GROUP BY dpto ORDER BY 2 DESC; John Freddy Duitama M . Total de salarios por depto; ordenado por total pagado. Idem consulta anterior, pero excluye a empleados con cargo de “Gerente” U.de.A. Facultad de Ingeniería 18
  • 19. La cláusula HAVING SELECT dpto, sum(salario) FROM empleado WHERE cargo <> ‘Gerente’ GROUP BY dpto HAVING SUM(salario) > 10000; ORDER BY 2 DESC • Retorna los deptos que en total pagan salarios superiores a 10.000 sin incluir los salarios de empleados con cargo = “Gerente” • Retorna iniciando con el dpto que más salarios paga. •El HAVING es una condición para el grupo, no para cada tupla de la relación. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 19
  • 20. Subconsultas. • Subconsultas que producen un valor escalar en la parte más interna. SELECT nombre, salario FROM empleado WHERE salario > ( select AVG(salario) FROM empleado WHERE dpto = 20 ); Empleados que ganan más que el promedio de salarios pagados en el depto 20. • Puedo utilizar operadores para comparar escalares. Ejemplo: =, > , < , etc. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 20
  • 21. Subconsultas. • Subconsultas que producen una tupla: Empleados con igual cargo y del mismo depto que el empleado con cédula 76854. SELECT nombre,salario FROM empleado WHERE (cargo, dpto ) = ( SELECT cargo,dpto FROM empleado WHERE cedula = 76854); • Solo puedo utilizar operadores de tupla. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 21
  • 22. Subconsultas. • Subconsultas que producen una relación: SELECT nombre,salario FROM empleado WHERE salario > ALL ( SELECT salario FROM EMPLEADO WHERE dpto = 10 ); Empleados con salario superior a todos los salarios del depto 10. • Use igualmente > ANY , >= ALL , <= ANY , IN, etc. • Puedo usar SOME o ANY con el mismo significado John Freddy Duitama M . U.de.A. Facultad de Ingeniería 22
  • 23. Consultas correlacionadas. Empleados con salario mayor que el salario promedio del depto al que pertenecen. SELECT nombre,salario FROM empleado AS ext WHERE salario > ( SELECT AVG(salario) FROM empleado WHERE dpto = ext.dpto ); • Por cada tupla de la relación externa se ejecuta una vez la consulta interna. • Se identifica porque el predicado interno involucra atributos de relaciones que aparecen en la consulta externa. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 23
  • 24. Otras consultas. • El resultado de una consulta es a su vez una nueva tabla. SELECT nombre, salario FROM ( SELECT cedula, nombre, salario, dpto FROM empleado WHERE dpto = 10 ) WHERE salario > 1000; • En la clausula HAVING puedo escribir sub-consultas. SELECT dpto, avg(salario) FROM empleado GROUP BY dpto HAVING avg(salario) > ( SELECT avg(salario) FROM empleado); John Freddy Duitama M . U.de.A. Facultad de Ingeniería 24
  • 25. Operador EXISTS. • Departamentos con al menos un empleado. SELECT nombre FROM departamento AS d WHERE exists ( select * FROM empleado WHERE d.codigo = dpto. • EXIST devuelve el valor de cierto si la subconsulta argumento no es vacía. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 25
  • 26. Operador NOT EXISTS • Hallar los cargos comunes a todos los deptos. SELECT DISTINCT cargo FROM empleado ext No existe un empleado WHERE NOT EXISTS en cada departamento (SELECT * que no tenga tal cargo. FROM departamento WHERE NOT EXISTS (SELECT cargo FROM empleado WHERE cargo = ext.cargo and dpto = codigo ) ); John Freddy Duitama M . U.de.A. Facultad de Ingeniería 26
  • 27. Operadores adicionales. SELECT col1a, col2a, col3a ..., colna FROM tabla1 [ WHERE condición ] UNION | INTERSECT | EXCEPT SELECT col1b, col2b, col3b, ..., colnb; FROM tabla2 [ WHERE condición ] NOTA : Debe existir compatibilidad respecto a la unión. Estas operaciones eliminan duplicados de la respuesta. EXCEPT y MINUS tienen el mismo significado. NOTA: Para conservar duplicados use: UNION ALL | INTERSECT ALL | EXCEPT ALL John Freddy Duitama M . U.de.A. Facultad de Ingeniería 27
  • 28. Agregar registros a una tabla. INSERT INTO empleado( cedula,nombre, salario,depto) VALUES( 23433, “Jesus Mosquera”, 10000,30); INSERT INTO empleado VALUES (70300300,’Pepe’,1234,1500000,NULL,’Mensajero’, ’M’,20): INSERT INTO empleado SELECT cedula, nombre, jefe, salario,cargo,dpto FROM tabla2 WHERE condición. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 28
  • 29. Modificar tuplas de una tabla. UPDATE empleado SET salario = salario * 1.1, comision = nvl(comision, 0) * 1.2 WHERE depto = 30; UPDATE empleado AS ext SET salario = ( SELECT AVG(salario) FROM empleado AS int WHERE ext.dpto = int.dpto ) WHERE codigo = “34908”; John Freddy Duitama M . U.de.A. Facultad de Ingeniería 29
  • 30. Eliminar tuplas de una tabla. DELETE FROM empleado WHERE salario > 10000; DELETE FROM departamento WHERE NOT EXISTS ( SELECT * FROM empleado WHERE código = dpto); John Freddy Duitama M . U.de.A. Facultad de Ingeniería 30
  • 31. Bibliografía. • Silberschatz, Korth, Sudarshan. Fundamentos de Bases de Datos. Cuarta edición. 2002. McGraw-Hill. • Jeffrey D. Ullman. and Jennifer Widom. A First Course in Database Systems. Prentice Hall. 2001. Second edition. • James R. Groff, Paul N. Weinberg. Aplique SQL. McGraw-Hill. 1991. John Freddy Duitama M . U.de.A. Facultad de Ingeniería 31

Notas del editor

  • #2: Uno de los lenguajes que ha emergido a partir del desarrollo del modelo relacional. Se ha convertido en el lenguaje estándar para las bases de datos relacionales.
  • #3: El SQL es un Lenguaje de acceso a bases de datos de alto nivel. Un lenguaje declarativo. O sea, que especifica que es lo que se quiere y no como conseguirlo, por lo que una sentencia no establece explícitamente un orden de ejecución.