¿comenzando aquí? Esta lección es parte de un tutorial completo sobre el uso de SQL para el análisis de datos. Mira el principio.
en esta lección cubriremos:
- filtrado en la cláusula ON
- filtrado en la cláusula WHERE
- Problemas de práctica
filtrado en la cláusula ON
normalmente, el filtrado se procesa en la cláusula WHERE
una vez que las dos tablas ya se han unido. Es posible, aunque es posible que desee filtrar una o ambas tablas antes de unirse a ellas., Por ejemplo, solo desea crear coincidencias entre las tablas en determinadas circunstancias.,
Usando datos de Crunchbase, echemos otro vistazo al ejemplo LEFT JOIN
de una lección anterior (esta vez agregaremos una cláusula ORDER BY
):
SELECT companies.permalink AS companies_permalink, companies.name AS companies_name, acquisitions.company_permalink AS acquisitions_permalink, acquisitions.acquired_at AS acquired_date FROM tutorial.crunchbase_companies companies LEFT JOIN tutorial.crunchbase_acquisitions acquisitions ON companies.permalink = acquisitions.company_permalink ORDER BY 1
Compare la siguiente consulta con la anterior y verá que todo en el tutorial.crunchbase_acquisitions
la tabla se unió a excepción de la fila para la cual company_permalink
es '/company/1000memories'
:
SELECT companies.permalink AS companies_permalink, companies.name AS companies_name, acquisitions.company_permalink AS acquisitions_permalink, acquisitions.acquired_at AS acquired_date FROM tutorial.crunchbase_companies companies LEFT JOIN tutorial.crunchbase_acquisitions acquisitions ON companies.permalink = acquisitions.company_permalink AND acquisitions.company_permalink != '/company/1000memories' ORDER BY 1
lo que está sucediendo anteriormente es que la instrucción condicional AND...
se evalúa antes de que se produzca la Unión., Puede considerarlo como una cláusula WHERE
que solo se aplica a una de las tablas. Puede decir que esto solo está sucediendo en una de las tablas porque el enlace permanente de 1000memories todavía se muestra en la columna que extrae de la otra tabla:
filtrado en la cláusula WHERE
si mueve el mismo filtro a la cláusula WHERE
, notará que el filtro ocurre después de que las tablas me uní., El resultado es que la fila 1000memories se une a la tabla original, pero luego se filtra por completo (en ambas tablas) en la cláusula WHERE
antes de mostrar los resultados.
SELECT companies.permalink AS companies_permalink, companies.name AS companies_name, acquisitions.company_permalink AS acquisitions_permalink, acquisitions.acquired_at AS acquired_date FROM tutorial.crunchbase_companies companies LEFT JOIN tutorial.crunchbase_acquisitions acquisitions ON companies.permalink = acquisitions.company_permalink WHERE acquisitions.company_permalink != '/company/1000memories' OR acquisitions.company_permalink IS NULL ORDER BY 1
puede ver que la línea 1000memories no se devuelve (habría estado entre las dos líneas resaltadas a continuación). También tenga en cuenta que el filtrado en la cláusula WHERE
también puede filtrar valores nulos, por lo que agregamos una línea adicional para asegurarnos de incluir los nulos.,
Enfocar su SQL habilidades
Para este conjunto de problemas de práctica, vamos a introducir un nuevo conjunto de datos: tutorial.crunchbase_investments
. Esta tabla también proviene de Crunchbase y contiene gran parte de la misma información que los datos tutorial.crunchbase_companies
. Sin embargo, se estructuró de manera diferente: contiene una fila por inversión. Puede haber varias inversiones por empresa, incluso es posible que un inversor pueda invertir en la misma empresa varias veces. Los nombres de las columnas se explican por sí mismos., Lo importante es que el company_permalink
en el tutorial.crunchbase_investments
tabla de mapas a permalink
en el tutorial.crunchbase_companies
tabla. Tenga en cuenta que algunos datos aleatorios se han eliminado de esta tabla por el bien de esta lección.
es muy probable que necesite hacer un análisis exploratorio en esta tabla para comprender cómo podría resolver los siguientes problemas.,
problema de práctica
escriba una consulta que muestre el nombre de una empresa, el «estado» (que se encuentra en la tabla empresas) y el número de inversores únicos en esa empresa. Ordenar por el número de Inversores de más a menos. Límite a solo las empresas en el estado de Nueva York.
probarlo a Ver la respuesta
la Práctica del Problema
Escribir una consulta que muestra los inversores basados en el número de empresas en las que se invierten. Incluya una fila para las empresas sin inversores, y el orden de la mayoría de las empresas a menos.,
probarlo a Ver la respuesta
Leave a Reply