You are on page 1of 51

Implementacin y gestin

de base de datos
Prof. Carlos Takano
Semana 5

Lenguaje de manipulacin
de datos (DML) de SQL

Lenguaje de manipulacin de datos

Consultas en SQL
La

sentencia SELECT
Condiciones
JOINS
Expresiones escalares
Funciones de grupo
Subconsultas
Operadores de conjuntos

Sentencias para modificar datos

La sentencia SELECT

La sentencia SELECT

Permite realizar consultas a la base de datos


Puede

operar sobre tablas, vistas y sinnimos

Opera sobre conjuntos de filas


Su salida es un conjunto resultado (result
set)

Consecuencia:

la salida de un SELECT se puede


usar como entrada de otra sentencia SQL

La sentencia SELECT

Clusulas
SELECT

[lista de expresiones]
FROM [tablas y clusulas de JOIN]
WHERE [condiciones para filtrar filas]
GROUP BY [criterios para agrupar]
ORDER BY [criterios para ordenar]

Slo SELECT y FROM son obligatorias

SELECT bsico Ejemplo 1


/*
Consulta simple, lee todas las columnas
de una tabla
Slo usa clusulas obligatorias:
SELECT y FROM
*/
SELECT *
FROM employees

SELECT bsico Ejemplo 2


/*
Obtener la proyeccin (elegir columnas)
de una tabla
*/
SELECT employee_id, first_name, last_name
FROM employees

SELECT bsico Ejemplo 3


/*
Se puede usar expresiones y alias para
columnas
*/
SELECT employee_id,
SUBSTR(first_name, 1, 4) short_name,
last_name,
salary,
salary*0.05 bonus,
salary*comission_pct comission
FROM employees

SELECT bsico Ejemplo 4


/*
DISTINCT elimina filas duplicadas
Devuelve slo los distintos cdigos de
puesto que tienen los empleados
*/
SELECT DISTINCT job_id
FROM employees

Condiciones en SQL

Operadores para condiciones


De comparacin: =, <, >, <=, >=, <>
IS [NOT] NULL

Es

[no es] NULO?

[NOT] LIKE
Cumple

[NOT] BETWEEN
Se

[no cumple] un patrn de texto?

encuentra [no se encuentra] dentro de un rango de valores?

[NOT] IN
Se

encuentra [no se encuentra] dentro de una lista de valores?

Precedencia de evaluacin

Una expresin compuesta se evala segn la siguiente precedencia:


1.
2.
3.
4.
5.
6.
7.

En general, la evaluacin es de izquierda a derecha


Los operadores aritmticos se evalan antes que las condiciones
Operadores de comparacin (<, >, =, etc.)
IS [NOT] NULL, [NOT] LIKE, [NOT] BETWEEN, [NOT] IN
NOT
AND
OR

Los parntesis alteran la precedencia antes indicada


Ejemplos de expresiones compuestas
.
.

a = 1 AND 2*b >= c+5 OR d IS NULL AND NOT e <> -f


(x = 1 OR y = z+5) AND (c <> e OR c = 0.05*f -3*z)

Valores nulos (NULL)

NULL
Es

un valor especial
Aplica a cualquier dominio o tipo de datos

Un valor nulo puede tener varios significados


Desconocido
No

asignado
No tiene o no aplica

Tiene impacto sobre las consultas

Tabla de verdad: NOT


NOT
TRUE
FALSE

FALSE
TRUE

Tabla de verdad: NOT


NOT
TRUE
FALSE
NULL

FALSE
TRUE
NULL

Tabla de verdad: AND


AND
TRUE
FALSE

TRUE
TRUE
FALSE

FALSE
FALSE
FALSE

Tabla de verdad: AND


AND
TRUE
FALSE
NULL

TRUE
TRUE
FALSE
NULL

FALSE
FALSE
FALSE
FALSE

NULL
NULL
FALSE
NULL

Tabla de verdad: OR
OR
TRUE
FALSE

TRUE
TRUE
TRUE

FALSE
TRUE
FALSE

Tabla de verdad: OR
OR
TRUE
FALSE
NULL

TRUE
TRUE
TRUE
TRUE

FALSE
TRUE
FALSE
NULL

NULL
TRUE
NULL
NULL

Condiciones SQL Ejemplo 1


/*
Operadores de comparacin:
<, >, <=, >=, <> (tambin != y ^=)
*/
SELECT employee_id, first_name, last_name
FROM employees
WHERE employee_id = 110

Condiciones SQL Ejemplo 2


/*
Para comparar con valores nulos, usar
IS NULL o IS NOT NULL
*/
SELECT employee_id, first_name, last_name
FROM employees
WHERE comission_pct IS NOT NULL

Condiciones SQL Ejemplo 3


/*
Se puede usar expresiones en general, no
slo nombres de columnas
BETWEEN evala si la expresin est dentro
de un rango (tambin existe NOT BETWEEN)
*/
SELECT employee_id, first_name, last_name
FROM employees
WHERE SUBSTR(last_name, 1, 1)
BETWEEN 'A' AND 'L'

Condiciones SQL Ejemplo 4


/*
LIKE evala si una expresin cumple un
patrn de texto (tambin existe NOT LIKE)
Comodines:
% reemplaza cero o ms caracteres
_ reemplaza exactamente un carcter
*/
SELECT employee_id, first_name, last_name
FROM employees
WHERE last_name LIKE 'A%'

Condiciones SQL Ejemplo 5


/*
IN evala si la expresin pertenece a una
lista de valores (tambin existe NOT IN)
*/
SELECT employee_id, first_name, last_name
FROM employees
WHERE department_id IN (100, 110, 120)

Condiciones SQL Ejemplo 6


/*
Con AND y OR se construye condiciones
compuestas
*/
SELECT
FROM
WHERE
AND

employee_id, first_name, last_name


employees
salary <= 6000
hire_date >= '30-ENE-99'

Expresin CASE Ejemplo 1


/*
CASE simple
Compara una expresin contra distintos
valores, se detiene cuando encuentra una
coincidencia
*/
SELECT country_name,
CASE region_id
WHEN 1 THEN 'Europa'
WHEN 2 THEN 'EE. UU.'
ELSE 'Otros'
END AS mercado
FROM countries

Expresin CASE Ejemplo 2


/*
CASE con condiciones
Evala diferentes condiciones, se detiene
cuando encuentra una coincidencia
*/
SELECT last_name, first_name,
CASE WHEN salary >= 10000 THEN 'Alto'
WHEN salary >= 6000 THEN 'Medio
ELSE 'Bajo'
END rango_salarial
FROM employees

Joins

Joins

Los join permiten combinar las filas de dos o ms


tablas
En

base a valores de las columnas usadas para realizar la


combinacin
En forma horizontal (el resultado contiene las columnas de
todas las tablas involucradas)

Tipos
INNER

JOIN
OUTER JOIN (LEFT, RIGHT Y FULL)
CROSS JOIN (producto cartesiano)

Tipos de join

INNER JOIN

INNER JOIN

JOIN Ejemplo 1
/*
La condicin indica qu columnas se van a
comparar para hacer el JOIN
Los alias de tablas se usan para evitar
ambigedad cuando hay varias columnas
con el mismo nombre
JOIN e INNER JOIN son equivalentes
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id=d.department_id)

JOIN Ejemplo 2
/*
La condicin de JOIN tambin se puede
especificar en la clusula WHERE
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e, departments d
WHERE e.department_id=d.department_id

JOIN Ejemplo 3
/*
Los JOIN se realizan por pares de tablas
En el ejemplo, se une EMPLOYEES con
DEPARTMENTS y el resultado se une con
LOCATIONS
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id=d.department_id)
JOIN locations l
ON (d.location_id=l.location_id)
WHERE l.city <> 'Seattle'

JOIN Ejemplo 4
/*
Para hacer join de una tabla consigo
misma, se debe incluir ms de una vez
en la clusula FROM
*/
SELECT e.first_name, e.last_name,
m.last_name manager
FROM employees e JOIN employees m
ON (e.manager_id=m.employee_id)

LEFT OUTER JOIN

LEFT OUTER JOIN

JOIN Ejemplo 5
/*
Si se usa LEFT JOIN, se incluye en el
resultado todas las filas de la tabla
que est a la izquierda de la clusula
JOIN (EMPLOYEES)
LEFT OUTER JOIN es equivalente a LEFT JOIN
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e LEFT JOIN departments d
ON (e.department_id=d.department_id)

RIGHT OUTER JOIN

RIGHT OUTER JOIN

JOIN Ejemplo 6
/*
Si se usa RIGHT JOIN, se incluye en el
resultado todas las filas de la tabla
que est a la derecha de la clusula
JOIN (DEPARTMENTS)
RIGHT OUTER JOIN es equivalente a RIGHT
JOIN
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e RIGHT JOIN departments d
ON (e.department_id=d.department_id)

FULL OUTER JOIN

FULL OUTER JOIN

JOIN Ejemplo 7
/*
Si se usa FULL JOIN, se incluye en el
resultado las filas de ambas tablas
involucradas
FULL OUTER JOIN es equivalente a FULL JOIN
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e FULL JOIN departments d
ON (e.department_id=d.department_id)

La clusula ORDER BY

Clusula ORDER BY
Si no se especifica ORDER BY, no se
puede establecer con seguridad en qu
orden devolver las filas la base de datos
Cada criterio de ordenacin puede ser
una expresin, un alias de columna o la
posicin de una columna en la clusula
SELECT

ORDER BY Ejemplo 1
/*
Ordena por sueldo en forma ascendente
(default)
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id=d.department_id)
JOIN locations l
ON (d.location_id=l.location_id)
WHERE l.city <> 'Sydney'
ORDER BY e.salary

ORDER BY Ejemplo 2
/*
Especificar criterios para ordenar por
posicin de columna en la clusula SELECT
DESC ordena en forma descendente
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id=d.department_id)
ORDER BY 4 DESC, 1

ORDER BY Ejemplo 3
/*
Permite ordenar segn el valor de una
expresin, incluso basada en columnas
que no aparecen en la clusula SELECT
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id=d.department_id)
ORDER BY TO_CHAR(hire_date,'YYYY'),
e.employee_id

You might also like