Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SQL Venn
SQL Venn
Pens que el post de Ligaya Turmelle sobre SQL joins era una genial introduccin para los desarrolladores primerizos. Dado que los SQL joins estn basados fundamentalmente en conjuntos relacionados, el uso de diagramas de Venn para explicarlo parece lo ms acertado. De todas formas, igual que los comentaristas de su post, opino que sus diagramas de Venn no encajaban con la sintaxis de SQL join en mis pruebas. An as me encanta el concepto, as que veamos si podemos hacerlo funcionar. Supongamos que tenemos las dos siguientes tablas. La tabla A est a la izquierda, y la tabla B est a la derecha. Las rellenaremos con cuatro registros cada una.
Ahora unamos estas dos tablas por el campo nombre de algunas formas distintas, y veamos si podemos obtener unas representaciones conceptuales con los ingeniosos diagramas de Venn.
Inner join
Slo produce los registros que coinciden en las dos tablas A y B. 1. SELECT * FROM TablaA 2. INNER JOIN TablaB 3. ON TablaA.nombre = TablaB.nombre
Para producir el conjunto de registros en la tabla A, pero no en la tabla B, usamos el mismo Left Outer Join, y luego excluimos los registros que no queremos del lado derecho mediante una clusula Where. 1. 2. 3. 4. SELECT * FROM TablaA LEFT OUTER JOIN TablaB ON TablaA.nombre = TablaB.nombre WHERE TablaB.id IS NULL
Para producir el conjunto de registros nicos de la tabla A y la tabla B, usamos el mismo Full Outer Join, y luego excluimos los registros que no queremos de los dos lados mediante una clusula Where. 1. 2. 3. 4. 5. SELECT * FROM TablaA FULL OUTER JOIN TablaB ON TablaA.nombre = TablaB.nombre WHERE TablaA.id IS NULL OR TablaB.id IS NULL
Tambin hay un cross join, el cul no puede ser expresado con un diagrama de Venn: 1. SELECT * FROM TablaA 2. CROSS JOIN TablaB Esto une todo con todo, dando como resultado 4 x 4 = 16 filas, muchas ms de las que tenamos en los conjuntos originales. Si haces unos simples clculos, puedes ver por qu es un Join muy peligroso de ejecutar en tablas grandes.