Manipulación de datos en SQL

Manipulación de datos en SQL „ „ „ „ „ Consultas a una sola tabla Consultas a varias tablas Funciones agregadas Agrupación Consultas anidadas 1 Eje

0 downloads 106 Views 322KB Size

Recommend Stories


SQL
Oracle University | Contact Us: +34916267792 Oracle Database: Programación con PL/SQL Duration: 5 Days What you will learn Este curso de formación Or

Base de Datos Oracle 10g: Introducción a SQL
Oracle University | Contacte con nosotros: 902 302 302 Base de Datos Oracle 10g: Introducción a SQL Duración: 5 Días Lo que aprenderá Este curso ofr

SQL
Oracle University | Contacte con nosotros: 902 302 302 Oracle Database 10g: Conceptos Básicos de SQL y PL/SQL Duración: 5 Días Lo que aprenderá Obte

SQL
Oracle University | Contact Us: +34916267792 Oracle Database: Conceptos Básicos de SQL y PL/SQL Duration: 5 Days What you will learn Este curso está

Bases de datos. CONTENIDO Tema 3. Lenguajes QBE y SQL
Bases de datos MTIG CONTENIDO Tema 3. Lenguajes QBE y SQL Tema 3.1. Consultas QBE ..............................................................2 3

Story Transcript

Manipulación de datos en SQL „ „ „ „ „

Consultas a una sola tabla Consultas a varias tablas Funciones agregadas Agrupación Consultas anidadas

1

Ejemplo: esquema relacional EMPLEADO (num_emp, nombre, tarifa_hora, cualificacion, num_sup) EDIFICIO (num_edi, direccion, tipo, nivel, estado) ASIGNACION (num_emp, num_edi, fecha_ini, num_dias)

2

1

Consultas a una sola tabla 1.

Obtener el nombre de todos los fontaneros SELECT NOMBRE FROM EMPLEADO WHERE CUALIFICACION= ‘Fontanero’

SELECT columnas FROM tabla WHERE condición 3

NUM_EMP NOMBRE

TARIFA_HORA CUALIF.

NUM_SUP

1

M. Pérez

12

Electricista

5

2

C. García

16

Fontanero

5

3

R. Gómez

30

Carpintero

4

4

P. Morán

16

Pintor

4

5

H. Rico

18

Fontanero

5

6

C. Barrero 16

Electricista

4

7

A. Cerrato 30

Pintor

4

NOMBRE

resultado consulta

C. García H. Rico 4

2

El símbolo * „

Listar todos los datos sobre edificios de oficinas SELECT * FROM EDIFICIO WHERE TIPO= ‘Oficina’

5

NUM_EDI

DIRECCION

TIPO

NIVEL ESTADO

1

Azcoitia, 12

Oficina

2

2

2

Pelícano, 89 Tienda

1

1

3

Argüeso, 24

Vivienda

3

1

4

Mineros, 2

Oficina

3

1

5

Tavira, 78

Oficina

4

1

6

Alcalá, 59

Almacén

3

3

resultado consulta

NUM_EDI

DIRECCION

TIPO

NIVEL ESTADO

1

Azcoitia, 12

Oficina

2

2

4

Mineros, 2

Oficina

3

1

5

Tavira, 78

Oficina

4

1 6

3

El operador DISTINCT „ „

SQL no elimina tuplas repetidas Listar todos los valores de tarifa por hora distintos SELECT DISTINCT TARIFA_HORA FROM EMPLEADO

7

NUM_EMP NOMBRE

TARIFA_HORA CUALIF.

NUM_SUP

1

M. Pérez

12

Electricista

5

2

C. García

16

Fontanero

5

3

R. Gómez

30

Carpintero

4

4

P. Morán

16

Pintor

4

5

H. Rico

18

Fontanero

5

6

C. Barrero 16

Electricista

4

7

A. Cerrato 30

Pintor

4

TARIFA_HORA 12

resultado consulta

16 30 18

8

4

El operador DISTINCT (II) „ „

Sólo se especifica una vez Ejemplo: hallar todas las combinaciones diferentes de valores de cualificación y tarifa_hora SELECT DISTINCT CUALIFICACION, TARIFA_HORA FROM EMPLEADO

9

La cláusula ORDER BY „

Obtener el nombre y la tarifa_hora de todos los electricistas ordenándolos por nombre en orden creciente, y por tarifa_hora en orden decreciente SELECT NOMBRE, TARIFA_HORA FROM EMPLEADO ORDER BY CUALIFICACION, TARIFA_HORA DESC

„

Equivalente a ORDER BY 1, 2 DESC 10

5

El operador AS „

Listar todos los números de empleado junto con el número del edificio al que están asignados SELECT NUM_EMP AS EMPLEADO, NUM_EDI AS EDIFICIO FROM ASIGNACION

11

Expresiones „

„ „ „

Secuencia de operaciones que, cuando se ejecuta, devuelve valor único Valores numéricos: +, -, *, / Cadenas: CONCAT (||) SELECT que devuelve un solo valor „ „

„

no se puede especificar ORDER BY si resultado es tabla vacía - valor NULL

Pueden aparecer en vez de valor (en SELECT o en WHERE) 12

6

Expresiones (II) 3+2 ‘A’ CONCAT ‘B’ TARIFA_HORA * 1.5 TARIFA_HORA + 6 (SELECT TARIFA_HORA FROM EMPLEADO WHERE NUM_EMP = 120) + 6

13

Expresiones (III) „

¿Cuál es el salario semanal para cada electricista? SELECT NOMBRE, ‘Salario semanal =’, 40 * TARIFA_HORA FROM EMPLEADO WHERE CUALIFICACION= ‘Electricista’

14

7

NUM_EMP NOMBRE

TARIFA_HORA CUALIF.

NUM_SUP

1235

M. Pérez

12

Electricista

1311

1412

C. García

16

Fontanero

1520

2920

R. Gómez

30

Carpintero

2920

3231

P. Morán

16

Pintor

3231

1520

H. Rico

18

Fontanero

1520

1311

C. Barrero 16

Electricista

1311

3001

A. Cerrato 30

Pintor

3231

NOMBRE

resultado consulta

M. Pérez

Salario Semanal =

480

C. Barrero Salario Semanal =

640 15

Operadores de comparación „

¿Quién tiene una tarifa por hora entre 10 y 20 euros? SELECT * FROM EMPLEADO WHERE TARIFA_HORA >= 10 AND TARIFA_HORA , = Conectivas booleanas: AND, OR, NOT 16

8

El operador BETWEEN „

¿Quién tiene una tarifa por hora entre 10 y 20 euros? SELECT * FROM EMPLEADO WHERE TARIFA_HORA BETWEEN 10 AND 20

17

El operador BETWEEN (II) „

Listar todos las asignaciones de trabajo que empezarán en las próximas dos semanas SELECT * FROM ASIGNACION WHERE FECHA_INI BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL ’14’ DAY 18

9

YEAR, MONTH, DAY „

Listar todos las asignaciones de trabajo que empezarán en diciembre SELECT * FROM ASIGNACION WHERE FECHA_INI.MONTH = 12

19

El operador IN „

Listar todos los datos sobre fontaneros, carpinteros y electricistas SELECT * FROM EMPLEADO WHERE CUALIFICACION IN (‘Fontanero’, ‘Carpintero’, ‘Electricista’)

20

10

El operador LIKE „

Listar todos los datos sobre empleados cuya cualificación empieza por “Elec” SELECT * FROM EMPLEADO WHERE CUALIFICACION LIKE ‘Elec%’ % - cero o más caracteres _ - un carácter 21

El operador LIKE (II) „

Listar todos los datos sobre edificios cuya dirección contiene el carácter “_”

SELECT * FROM EDIFICIO WHERE DIRECCION LIKE ‘%/_%’ ESCAPE ‘/’ „ „

definimos carácter de escape anteponemos carácter de escape a “_” o “%” 22

11

El operador IS NULL „

Obtener todos los datos de aquellos empleados que no tienen supervisor SELECT * FROM EMPLEADO WHERE DNI_SUPER IS NULL

„

IS NOT NULL, NOT IN, NOT BETWEEN, NOT LIKE 23

Consultas a múltiples tablas „

¿Cuáles son las cualificaciones de los empleados asignados al edificio 2?

SELECT CUALIFICACION FROM EMPLEADO, ASIGNACION WHERE EMPLEADO.NUM_EMP = ASIGNACION.NUM_EMP AND NUM_EDI = 2

EMPLEADO (num_emp, nombre, tarifa_hora, cualificacion, num_sup) ASIGNACION (num_emp, num_edi, fecha_ini, num_dias) 24

12

Procesamiento de la consulta ASIGNACION NUM_EMP

NUM_EDI

FECHA_ INI

NUM_ DIAS

2

1

20/12

5

EMPLEADO NUM_EMP

NOMBRE

TARIFA_ HORA

CUALIF.

NUM_SUP

2

C. García

16

Fontanero 5

3

2

28/10

10

3

R. Gómez

30

Carpintero 4

6

4

17/11

12

6

C. Barrero

16

Electricista 4

2

2

15/10

15

3

1

01/08

22

6

2

08/10

12 25

Procesamiento de la consulta (II) • Producto cartesiano NUM_EMP

NUM_EDI

FECHA_ INI

NUM_ DIAS

Fontanero 5

2

1

20/12

5

16

Fontanero 5

3

2

28/10

10

C. García

16

Fontanero 5

6

4

17/11

12

2

C. García

16

Fontanero 5

2

2

15/10

15

2

C. García

16

Fontanero 5

3

1

01/08

22

2

C. García

16

Fontanero 5

6

2

08/10

12

NUM_EMP

NOMBRE

TARIFA_ HORA

CUALIF.

2

C. García

16

2

C. García

2

...

...

...

...

NUM_SUP

...

...

...

...

...26

13

Procesamiento de la consulta (III) „ WHERE E.NUM_EMP

NOMBRE

TARIFA_ HORA

CUALIF.

NUM_SUP

A.NUM_EMP

NUM_EDI

FECHA_ INI

NUM_ DIAS

2

C. García

16

Fontanero

5

2

2

15/10

15

3

R. Gómez

30

Carpintero

4

3

2

28/10

10

6

C. Barrero

16

Electricista

4

4

2

08/10

12

27

Procesamiento de la consulta (IV) „ SELECT CUALIFICACION Fontanero Carpintero Electricista

28

14

Otro ejemplo „

Listar todos los empleados junto con el nombre de su supervisor SELECT A.NOMBREE AS EMPLEADO, B.NOMBREE AS SUPERVISOR FROM EMPLEADO A, EMPLEADO B WHERE B.DNI = A.DNI_SUPER

29

Más de dos relaciones „

Listar los nombres de los empleados asignados a edificios de oficinas

SELECT NOMBRE FROM EMPLEADO, ASIGNACION, EDIFICIO WHERE EMPLEADO.NUM_EMP = ASIGNACION.NUM_EMP AND ASIGNACION.NUM_EDI = EDIFICIO.NUM_EDI AND TIPO = ‘Oficina’ EMPLEADO (num_emp, nombre, tarifa_hora, cualificacion, num_sup) ASIGNACION (num_emp, num_edi, fecha_ini, num_dias) EDIFICIO (num_edi, direccion, tipo, nivel, estado)

30

15

NATURAL JOIN „

Listar los nombres de los empleados asignados a edificios de oficinas

SELECT NOMBRE FROM EMPLEADO NATURAL JOIN ASIGNACION NATURAL JOIN EDIFICIO WHERE TIPO = ‘Oficina’ EMPLEADO (num_emp, nombre, tarifa_hora, cualificacion, num_sup) ASIGNACION (num_emp, num_edi, fecha_ini, num_dias) EDIFICIO (num_edi, direccion, tipo, nivel, estado) 31

INNER y OUTER JOIN „

„

„ „ „

„

INNER JOIN - sólo incluye tuplas que se corresponden OUTER JOIN - incluye además todas las tuplas de una o ambas tablas LEFT, RIGHT, FULL Si se omite tipo de reunión - INNER Si aparece LEFT, RIGHT O FULL se puede omitir OUTER A cualquier tipo (excepto a UNION) podemos anteponerle NATURAL

32

16

INNER y OUTER JOIN (II) „

Nombre de todos los empleados junto con el nombre del departamento que dirigen (si es el caso) SELECT NOMBREE, NOMBRED FROM EMPLEADO LEFT JOIN DEPARTAMENTO ON EMPLEADO.dni = DEPARTAMENTO.dni_dir

33

17

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.