bases de datos i cursada 2008 -...

28
Bases de Datos I Cursada 2008 Bases de Datos I Cursada 2008 Cursada 2008 Cursada 2008 Facultad de Ciencias Exactas Universidad Nac. Centro de la Pcia. de Bs. As. Clase 4: Sentencia SELECT SQL básica Clase 4: Sentencia SELECT SQL básica

Upload: others

Post on 20-Oct-2019

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Bases de Datos I

Cursada 2008

Bases de Datos I

Cursada 2008Cursada 2008Cursada 2008

Facultad de Ciencias ExactasUniversidad Nac. Centro de la Pcia. de Bs. As.

Clase 4: Sentencia SELECT SQL básicaClase 4: Sentencia SELECT SQL básica

Page 2: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Lenguaje de consulta

• En una base de datos relacional los datos son almacenados en estructuras de almacenamiento o tablas.

• Las dos operaciones básicas a llevar a cabo sobre una base de datos relacional son la recuperación de los datos almacenados, y el almacenamiento en sí o actualización de datos (inserción, eliminación o modificación de datos).

2

eliminación o modificación de datos).

• En una base de datos relacional, tanto para la recuperación de datos como para la actualización de los mismos, se utiliza el lenguaje SQL (Structured Query Languaje)

• La sentencia del lenguaje utilizada para la recuperación de datos a partir de la base de datos es la sentencia SELECT

Page 3: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Sentencias SELECT Básicas

SELECT *|{[DISTINCT] column|expression [alias],...}FROM table;

• SELECT identifica las columnas – EL QUE -

• FROM identifica la tabla - DE DONDE –

Selección de todas las columnas

3

Selección de todas las columnas

Selección SOLO de algunas columnas

SELECT *FROM voluntario;

SELECT nombre, apellido, horas_aportadas

FROM voluntario ;

Page 4: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Escritura de Sentencias SQL

• Las sentencias SQL no son sensibles a mayúsculas/minúsculas.

• Las sentencias SQL pueden ocupar una o más líneas.

• Las palabras clave no se pueden abreviar ni

4

• Las palabras clave no se pueden abreviar ni dividirentre líneas.

• Las cláusulas suelen estar colocadas en líneas separadas.

• Los sangrados se utilizan para mejorar la legibilidad.

Page 5: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Filas Duplicadas

SELECT max_horas

• La visualización por defecto de las consultas son todas las filas, incluidas las filas duplicadas.

5

SELECT max_horas

FROM tarea;

Page 6: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Eliminar los valores repetidos

• Cuando el resultado de una consulta dará valores repetidos puede ser deseable eliminar los valores repetidos y solamente quedarse con aquellos distintos.

6

• DISTINCT se aplica a todas las columnas de la lista de la cláusula SELECT

SELECT DISTINCT max_horas

FROM tarea;

Page 7: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Uso de Operadores Aritméticos

SELECT nombre_tarea, max_horas – min_horasFROM tarea;

Prioridad de los Operadores

**** //// ++++ ____

7

• La multiplicación y la división tienen prioridad sobre la suma y la resta.

• Los operadores de idéntica prioridad se evalúan de izquierda a derecha.

• Los paréntesis se utilizan para forzar evaluaciones prioritarias y para clarificar sentencias.

**** //// ++++ ____

Page 8: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Prioridad de los Operadores

SELECT nombre_tarea, 10 * max_horas – min_horas

FROM tarea;

Uso de Paréntesis

8

SELECT nombre_tarea, 10*(max_horas – min_horas)

FROM tarea;

Page 9: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Cadenas de Caracteres Literales

• Un literal es un carácter, un número o una fecha incluida en la lista SELECT.

• Los valores literales de caracteres y fecha se deben escribir entre comillas simples.

9

• Cada cadena de caracteres tiene una salida para cada fila devuelta.

Page 10: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Operador de Concatenación

Un operador de concatenación:

• Concatena columnas o cadenas de caracteres a otras columnas.

• Está representado por dos barras verticales (||).

10

• Está representado por dos barras verticales (||).

• Crea una columna resultante que es una expresión de caracteres.

SELECT apellido || ', ' || nombre

FROM voluntario;

Page 11: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Uso de Alias de Columna

SELECT apellido || ', ' || nombre AS

“Apellido y Nombre”

11

“Apellido y Nombre”

FROM voluntario;

Page 12: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Restringir filas recuperadas

• Se pueden restringir las filas recuperadas usando la cláusula WHERE.

• Una cláusula WHERE contiene una condición lógica, la cual usa operadores de comparación y/o lógicos.

• Las filas procesadas son aquellas en que los datos que

12

• Las filas procesadas son aquellas en que los datos que contienen satisfacen la/s condición/es lógicas

SELECT [DISTINCT] {*, columna [alias] }

FROM tabla

[WHERE condicion/es];

Page 13: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Restringir filas recuperadas

• Por ejemplo, para recuperar los voluntarios de nombre ‘Alberto’

SELECT *

FROM voluntario

13

FROM voluntario

WHERE nombre = ‘Alberto’;

Page 14: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Condiciones de comparación

• Los operadores de comparación se emplean en lacláusula WHERE para comparar una expresión con otra.

• El resultado de la comparación puede ser

– Verdadero (T)

– Falso (F)

14

– Falso (F)

– Desconocido (U)

• No siempre se conoce el valor a buscar o se deseaconsultar por valores que son iguales o distintos a nulos.– LIKE

– IS [NOT] NULL

Page 15: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Operadores LIKE, IS [NOT] NULL

• No siempre se conoce el valor exacto a buscar.

• % : Representa cualquier secuencia de cero o más caracteres

• _ : Denota un solo caracter

• Cuando se necesita una coincidencia exacta para los comodines “%” y “_”, se usa la opción ESCAPE. Dicha

15

comodines “%” y “_”, se usa la opción ESCAPE. Dicha opción especifica cuál es el caracter ESCAPE.

• Seleccionar los voluntarios con nombres que empiecen con “A” y terminen con “r”.

SELECT apellido || ', ' || nombre

FROM voluntario

WHERE nombre LIKE 'A%r’;

Page 16: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Operadores LIKE, IS [NOT] NULL

• Los operadores IS NULL e IS NOT NULL testean valores que son nulos.

• Si se comparan valores nulos usando los otros operadores (=, >, etc.) el resultado será siempre FALSO porque un valor nulo no puede ser igual, mayor, distinto, etc. a otro valor.

16

etc. a otro valor.

• Seleccionar los voluntarios sin institución asociada.

SELECT apellido || ', ' || nombre

FROM voluntario

WHERE id_institucion is NULL;

Page 17: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Operadores Lógicos• Un operador lógico combina los resultados de dos condiciones para

producir un único resultado basado en ellos, o invertir el resultado de una condición.

• Los operadores AND y OR se pueden usar para componer expresiones lógicas.

• El operador AND retorna VERDADERO si ambas condiciones evaluadas son VERDADERAS, mientras que el operador OR retorna VERDADERO si alguna de las condiciones es VERDADERA.

17

• Listar los voluntarios con más de 5000 horas disponibles, pero que aportó menos del 50%.

SELECT apellido || ', ' || nombre

FROM voluntario

WHERE horas_aportadas > 5000 AND porcentaje < 50;

Page 18: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Valor Nulo• Si una fila carece de un valor para una columna en particular, se dice que contiene un “null”.• NULL es un valor inaccesible, sin valor, desconocido o inaplicable. No representa ni un cero ni

un espacio en blanco. El cero es un número y el espacio en blanco es un carácter.• Listar los voluntarios con más de 5000 horas disponibles, pero que aportó menos del 50%.

• /*Los porcentajes que son NULL devuelven U y con el AND según la tabla es NULL, por lo que no lo selecciona*/

• Listar los voluntarios con menos de 5000 horas disponibles o que aportaron menos del 30%.

• /*Los porcentajes que son NULL devuelven U y con el OR, en este caso según la tabla,

18

• /*Los porcentajes que son NULL devuelven U y con el OR, en este caso según la tabla, recupera el registro si se cumpliese la primera condición */

SELECT apellido || ', ' || nombre

FROM voluntario

WHERE horas_aportadas > 5000 AND porcentaje < 50;

SELECT apellido || ', ' || nombre

FROM voluntario

WHERE horas_aportadas < 5000 OR porcentaje < 30;

Page 19: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Funciones

• De una sola fila– Funciones de caracteres

– Funciones numéricas

– Funciones para trabajar con nulos

19

– Funciones para trabajar con nulos

– Funciones de fechas

– Función CASE

– Función DECODE

Page 20: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

¿Qué son Funciones de Grupo?

Las funciones de grupo operan sobre juegos de filas para proporcionar un resultado por grupo.Voluntario

nombre apellido horas portadasSteven King 24000

Neena Kochhar 17000

Lex De Haan 17000

20

El voluntario que puede aportar mayor cantidad de horas

John Russell 14000

Karen Partners 13500

Michael Hartstein 13000

Nancy Greenberg 12000

Alberto Errazuriz 12000

Shelley Higgins 12000

SELECT MAX(horas aportadas)

FROM voluntario;

SELECT MAX(horas aportadas)

FROM voluntario;

2400024000

Page 21: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

SELECT [columna,] funcion de grupo(columna), ...

FROM tabla[WHERE condicion]

Sintaxis de las Funciones de Grupo

21

Tipos de Funciones de Grupo

•AVG

•COUNT

•MAX

•MIN

•SUM

Tipos de Funciones de Grupo

•AVG

•COUNT

•MAX

•MIN

•SUM

Page 22: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

SELECT AVG(horas aportadas), MAX(horas aportadas),MIN(horas aportadas), SUM(horas aportadas)

Uso de las Funciones AVG y SUM

Puede utilizar AVG y SUM para datos numéricos.

22

SUM(horas aportadas)FROM voluntarioWHERE nro voluntario > 500;

Puede utilizar MIN y MAX para cualquier tipo de dato.

SELECT MIN(fecha nacimientoFROM voluntario;

Page 23: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

SELECT COUNT(*)FROM voluntarioWHERE id_tarea = SH CLERK;

Uso de la Función COUNT

COUNT(*) devuelve el número de filas de una tabla.

23

• COUNT(expr) devuelve el número de filas con valores no nulos para expr.

• Visualice el número de valores de departamento de la tabla EMPLOYEES, excluyendo los valores nulos.

SELECT COUNT(porcentaje)FROM voluntarioWHERE id_tarea = SH CLERK;

Page 24: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

SELECT AVG(porcentaje)FROM voluntario;

Funciones de Grupo y Valores Nulos

Las funciones de grupo ignoran los valores nulos de la columna.

24

SELECT AVG(NVL(porcentaje, 0))FROM voluntario;

Uso de la Función NVLcon Funciones de Grupo

La función NVL fuerza a las funciones de grupo a que incluyan valores nulos.

Page 25: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

APELLIDO ID_TAREA HORAS_APORTADAS

Gietz AC_ACCOUNT 8300

Higgins AC_MGR 12000

De Haan AD_VP 17000

Kochhar AD_VP 17000

Popp FI_ACCOUNT 6900

Sciarra FI_ACCOUNT 7700

Creación de Grupos de Datos

VOLUNTARIO

La maxima cantidad

de horas

8300

12000

17000

ID_TAREA MAX(HORAS_APORTADAS)

25

Sciarra FI_ACCOUNT 7700

Urman FI_ACCOUNT 7800

Chen FI_ACCOUNT 8200

Faviet FI_ACCOUNT 9000

horas aportadas

por voluntarios que realizan una misma

tarea

9000

ID_TAREA MAX(HORAS_APORTADAS)

AC_ACCOUNT 8300

AC_MGR 12000

AD_VP 17000

FI_ACCOUNT 9000

Page 26: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

SELECT columna, funcion de grupo(columna)FROM tabla[WHERE condicion][GROUP BY expresion de grupo]

Creación de Grupos de Datos: Sintaxis de la Cláusula GROUP BY

26

[GROUP BY expresion de grupo][ORDER BY columna];

Divida las filas de una tabla en grupos más pequeñosutilizando la cláusula GROUP BY.

Page 27: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

SELECT id_tarea, MAX(horas_aportadas)

Uso de la Cláusula GROUP BY

Todas las columnas de la lista SELECT que no estén en las funciones de grupo deben estar en la cláusula GROUP BY.

27

SELECT id_tarea, MAX(horas_aportadas)FROM voluntarioGROUP BY id_tarea;

La columna en la clausula GROUP BY pueden no estar en la lista SELECT.

SELECT AVG(horas_aportadas)FROM voluntarioGROUP BY id_tarea ;

Page 28: Bases de Datos I Cursada 2008 - users.exa.unicen.edu.arusers.exa.unicen.edu.ar/catedras/tec-dbases/clases/c4-2008-1s.pdf · • En una base de datos relacional los datos son almacenados

Exclusión de Resultados de Grupo: La Cláusula HAVING

Utilice la cláusula HAVING para restringir grupos:

1. Las filas se agrupan.

2. Se aplica la función de grupo.

3. Se muestran los grupos que coinciden con la

28

SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];

3. Se muestran los grupos que coinciden con la cláusula HAVING.