Top Banner
CC3201-1 BASES DE DATOS O TOÑO 2018 Clase 6: SQL (II) Aidan Hogan [email protected]
90

CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Oct 18, 2018

Download

Documents

phamkhanh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

CC3201-1BASES DE DATOS

OTOÑO 2018

Clase 6: SQL (II)

Aidan Hogan

[email protected]

Page 2: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Forma básica de una consulta de SQL

Page 3: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Los planetas

Page 4: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

EL TEMA DE HOY…… MÁS SQL!

Capítulo 5.4-5.6 | Ramakrishnan / Gehrke

Page 5: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

El Álgebra Relacional en SQL

¿Hemos visto todo el álgebra en SQL? ¡Sí! (Y un poco más)

Page 6: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

• SELECT, FROM, WHERE

• ORDER BY• JOIN (simple)• UNION, INTERSECT, EXCEPT

• LIKE

• IN, BETWEEN

SQL • Más tipos de JOIN

• Nulos• Consultas anidadas• Agregación

Page 7: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

PRODUCTO CRUZ

Page 8: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Cruz: CROSS JOIN

Page 9: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

JOINS INTERNOS

Page 10: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Cruzar tablas: JOIN

Page 11: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Cruzar tablas: EQUI JOIN

EQUI JOINS usan sólo ‘=‘ en el JOIN

Page 12: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Cruzar tablas: JOIN

¿Esta consulta es un EQUI JOIN?

¡Sí! Sólo la condición del join cuenta.

Page 13: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Cruzar tablas: JOIN USING

Se puede usar JOIN USING cuando todos los atributos del JOIN tengan el mismo nombre

Page 14: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Cruzar tablas: NATURAL JOIN

Un EQUI-JOIN sobre los atributos que las tablas compartan (por pareja con AND).

Page 15: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Cruzar tablas: SELF JOIN

Un JOIN sobre la tabla misma

Page 16: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Cruzar tablas: INNER JOIN

INNER JOIN por defecto …

Page 17: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

JOINS EXTERNOS

Page 18: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Joins Externos

¿Todos los planetas (y sus aterrizajes sí hay datos disponibles)?

Page 19: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Joins Externos: LEFT [OUTER] JOIN

Se mantienen las tuplas de la izquierda si no hay datos desde la derecha

Page 20: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Joins Externos: RIGHT [OUTER] JOIN

Se mantienen las tuplas de la derecha si no hay datos desde la izquierda

Page 21: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Joins Externos: FULL OUTER JOIN

Se mantienen las tuplas de la derecha y la izquierda

Page 22: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Join Interno versus Joins Externos

Page 23: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

VALORES NULOS

https://es.wikipedia.org/wiki/Null_(SQL)

Capítulo 5.6 | Ramakrishnan / Gehrke

Page 24: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Nulos

DESCONOCIDO o INAPLICABLE

(No significa FALSO)

Page 25: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Nulos: IS NULL

Page 26: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Nulos: IS NOT NULL

Page 27: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Comparación con nulos

Page 28: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Comparación con nulos

¡El nulo en la consulta y el nulo en los datos son distintos!

Page 29: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Comparación con nulos

???

Cuando no importa el valor del desconocido, el resultado se mantiene. Cuando importa el valor del desconocido, el resultado es desconocido.

Page 30: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Comparación con nulos

Cuando no importa el valor del desconocido, el resultado se mantiene. Cuando importa el valor del desconocido, el resultado es desconocido.

Page 31: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Nulos: COALESCE

Elegir el primer valor que no sea NULL

Page 32: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

CONSULTAS ANIDADAS

Capítulo 5.4 | Ramakrishnan / Gehrke

Page 33: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: WHERE/IN

Subconsulta

Page 34: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: WHERE/IN

¿Necesitamos una consulta anidada aquí?

Page 35: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: WHERE/NOT IN

Page 36: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas AnidAnidadasadas: WHERE/NOT IN

Page 37: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: WHERE/EXISTS

Correlación:La subconsulta depende de la

consulta exterior

Page 38: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: WHERE/NOT EXISTS

Page 39: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: WHERE/(NOT) UNIQUE

UNIQUE (no suportado por Postgres ):

0 o 1 resultados

Page 40: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: WHERE/ANY (o SOME)

ANY y SOME son sinónimos

Page 41: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: WHERE/ALL

Page 42: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

MÁS CONSULTAS ANIDADAS

Page 43: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: Valor

La subconsulta tiene que devolver un valor y una columna –si no…

Page 44: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: Valor

Page 45: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: Valor

Page 46: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: Fila

Page 47: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: Fila

Page 48: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: Fila

Page 49: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: Fila

Page 50: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas Anidadas: FROM

El alias Multi es

obligatorio

Page 51: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

AGREGACIÓN

Capítulo 5.5| Ramakrishnan / Gehrke

Page 52: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Operadores de agregación

Page 53: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación: COUNT

Page 54: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación: COUNT (DISTINCT afuera)

Page 55: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación: COUNT DISTINCT

Page 56: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación: COUNT(*)

Page 57: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación: AVG

Depende del sistema

Postgres

Page 58: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación: AVG DISTINCT

Depende del sistema

Postgres

Page 59: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación: AVG (con casting)

Page 60: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación: MIN

Page 61: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación: MIN

Page 62: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación: MIN

Page 63: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación por planeta: explícitamente

Page 64: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación por planeta: GROUP BY

Page 65: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación por planeta: GROUP BY/HAVING

Page 66: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación por planeta: HAVING/EVERY

Page 67: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Agregación por planeta: HAVING/ANY

Postgres

Page 68: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

LIMITAR RESULTADOS

Más detalles: https://en.wikipedia.org/wiki/Select_(SQL)#Limiting_result_rows

Page 69: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Sistemas de bases de datos (con SQL)

http://db-engines.com/en/ranking/relational+dbms

¡Varios sistemas pueden tener varias interpretaciones del estándar de SQL!

Pero normalmente el “core” de SQL es compatible en los sistemas más populares.

Page 70: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Ordenar resultados: ORDER BY [DESC|ASC]

Page 71: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Devolver n resultados: FETCH FIRST

Una versión estándar (desde SQL:2008) que se usa en Postgres y DB2.

Page 72: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Devolver n resultados: LIMIT

Una versión no estándar que se usa en Postgres, SQLite y MySQL.

Page 73: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Devolver n resultados: TOP

Una versión no estándar que se usa en SQL Server y MS Access.

Page 74: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Devolver n resultados: ROW_NUMBER()

Una versión estándar (desde SQL:2003) que se usa en Postgres, DB2, MS Access, Oracle

Page 75: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Devolver empates: RANK()

Una versión estándar (desde SQL:2003) que devuelva empates en el orden.

Page 76: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Saltar n resultados: LIMIT + OFFSET

Una versión no estándar que se usa en Postgres, SQLite y MySQL.

Page 77: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

MÁS FUNCIONES

¡Dependen mucho del sistema particular!

Page 78: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Aritmético

Page 79: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Aritmético

Page 80: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Strings

Page 81: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Condicionales

Page 82: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

CONSULTAS DIRECTAS VS. CONSULTAS ANIDADAS

Page 83: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

SQL tiene mucha redundancia

Page 84: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas directas vs. consultas anidadas

Nombres y géneros de los co-actores de Liv Tyler.

¿Son equivalentes pero cuál es más eficiente?

Page 85: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas directas vs. consultas anidadas

Nombres y géneros de los co-actores de Liv Tyler.

¿Son equivalentes pero cuál es más eficiente?¡Hay poca diferencia!

Page 86: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Consultas directas vs. consultas anidadas

Nombres y géneros de co-actores de personas con una apellida “L%”.

¡Hay una diferencia (pero es poco predecible)!

Page 87: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Uno dice lo que quiere, no cómo se debería computar

– Idealmente, el motor puede elegir el mejor plan de ejecución independientemente de su expresión particular• Pero, esto es caro, entonces en la práctica, hay

diferencias

– Regresaremos al tema de rendimiento y optimización más adelante en el curso

– Pero en general, se puede expresar una consulta en la forma “más natural” y dejar la ejecución al motor

SQL es un lenguaje declarativo

Page 88: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

SQL es un lenguaje declarativo

Uno dice lo que quiere, no cómo se debería computar

– Idealmente, el motor puede elegir el mejor plan de ejecución independientemente de su expresión particular• Pero, esto es caro, entonces en la práctica, hay

diferencias

– Regresaremos al tema de rendimiento y optimización más adelante en el curso

– Pero en general, se puede expresar una consulta en la forma “más natural” y dejar la ejecución al motor

Page 89: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

• SELECT, FROM, WHERE

• ORDER BY• JOIN (simple)• UNION, INTERSECT, EXCEPT

• LIKE

• IN, BETWEEN

SQL • Más tipos de JOIN

• Nulos• Consultas anidadas• Agregación

Page 90: CC3201 Bases de Datos - aidanhogan.comaidanhogan.com/teaching/cc3201-1-2018/lectures/BdD2018-06.pdf · •SELECT, FROM, WHERE • ORDER BY • JOIN (simple) • UNION, INTERSECT,

Preguntas?