Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de base de datos
Prof. Carlos Takano
Semana 5
Lenguaje de manipulacin
de datos (DML) de SQL
Consultas en SQL
La
sentencia SELECT
Condiciones
JOINS
Expresiones escalares
Funciones de grupo
Subconsultas
Operadores de conjuntos
La sentencia SELECT
La sentencia SELECT
Consecuencia:
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]
Condiciones en SQL
Es
[NOT] LIKE
Cumple
[NOT] BETWEEN
Se
[NOT] IN
Se
Precedencia de evaluacin
NULL
Es
un valor especial
Aplica a cualquier dominio o tipo de datos
asignado
No tiene o no aplica
FALSE
TRUE
FALSE
TRUE
NULL
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
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
Joins
Joins
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)
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)
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)
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